Commit cd554f57 by Archer Committed by GitHub

4.8.8 test fix (#2149)

* perf: code comment

* feat: system plugin input guide

* perf: variable avatar

* feat: feishu webhook

* perf: select tool config tip

* perf: rename variable

* fix: per inherit error

* perf: docker-compose oneapi version and i18n

* perf: ui tip bug

* fix: ts

* perf: pg log

* perf: editor color

* perf: update init
parent 2d016b74
...@@ -7,7 +7,7 @@ on: ...@@ -7,7 +7,7 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
build-fastgpt-images: preview-fastgpt-images:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
steps: steps:
- name: Checkout - name: Checkout
......
...@@ -16,19 +16,35 @@ weight: 816 ...@@ -16,19 +16,35 @@ weight: 816
- fastgpt 镜像 tag 修改成 v4.8.8-alpha - fastgpt 镜像 tag 修改成 v4.8.8-alpha
- 商业版镜像 tag 修改成 v4.8.8-alpha - 商业版镜像 tag 修改成 v4.8.8-alpha
### 3. 执行初始化
从任意终端,发起 1 个 HTTP 请求。其中 {{rootkey}} 替换成环境变量里的 `rootkey`;{{host}} 替换成**FastGPT 域名**。
```bash
curl --location --request POST 'https://{{host}}/api/admin/initv48 8' \
--header 'rootkey: {{rootkey}}' \
--header 'Content-Type: application/json'
```
会初始化知识库的继承权限
------- -------
## V4.8.8 更新说明 ## V4.8.8 更新说明
1. 新增 - 重构系统插件的结构。允许向开源社区 PR 系统插件,具体可见: [如何向 FastGPT 社区提交系统插件](https://fael3z0zfze.feishu.cn/wiki/ERZnw9R26iRRG0kXZRec6WL9nwh)。 1. 新增 - 重构系统插件的结构。允许向开源社区 PR 系统插件,具体可见: [如何向 FastGPT 社区提交系统插件](https://fael3z0zfze.feishu.cn/wiki/ERZnw9R26iRRG0kXZRec6WL9nwh)。
2. 新增 - DuckDuckGo 系统插件。 2. 新增 - DuckDuckGo 系统插件。
3. 新增 - 修改变量填写方式。提示词输入框以以及工作流中所有 Textarea 输入框,支持输入 / 唤起变量选择,可直接选择所有上游输出值,无需动态引入。 3. 新增 - 飞书 webhook 系统插件。
4. 优化 - 移动端快速切换应用交互。 4. 新增 - 修改变量填写方式。提示词输入框以以及工作流中所有 Textarea 输入框,支持输入 / 唤起变量选择,可直接选择所有上游输出值,无需动态引入。
5. 优化 - 节点图标。 5. 商业版新增 - 知识库权限继承。
6. 优化 - 对话框引用增加额外复制案件,便于复制。增加引用内容折叠。 6. 优化 - 移动端快速切换应用交互。
7. 优化 - 对话框底部增加复制,简便复制交互,无需滚动到消息开头。 7. 优化 - 节点图标。
8. 优化 - OpenAI sdk 升级,并自定义了 whisper 模型接口(未仔细查看 sdk 实现,但 sdk 中 whisper 接口,似乎无法适配一般 fastapi 接口) 8. 优化 - 对话框引用增加额外复制案件,便于复制。增加引用内容折叠。
9. 修复 - Permission 表声明问题。 9. 优化 - 对话框底部增加复制,简便复制交互,无需滚动到消息开头。
10. 修复 - 并行执行节点,运行时间未正确记录。 10. 优化 - OpenAI sdk 升级,并自定义了 whisper 模型接口(未仔细查看 sdk 实现,但 sdk 中 whisper 接口,似乎无法适配一般 fastapi 接口)
11. 修复 - 简易模式,首次进入,无法正确获取知识库配置。 11. 修复 - Permission 表声明问题。
12. 修复 - Log debug level 配置无效。 12. 修复 - 并行执行节点,运行时间未正确记录。
13. 修复 - 运行详情未正确展示嵌套节点信息。
14. 修复 - 简易模式,首次进入,无法正确获取知识库配置。
15. 修复 - Log debug level 配置无效。
16. 修复 - 插件独立运行时,会将插件输入的值进行变量替换,可能导致后续节点变量异常。
\ No newline at end of file
...@@ -179,7 +179,7 @@ services: ...@@ -179,7 +179,7 @@ services:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
oneapi: oneapi:
container_name: oneapi container_name: oneapi
image: ghcr.io/songquanpeng/one-api:latest image: ghcr.io/songquanpeng/one-api:0.6.7
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云 # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
ports: ports:
- 3001:3000 - 3001:3000
......
...@@ -136,7 +136,7 @@ services: ...@@ -136,7 +136,7 @@ services:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
oneapi: oneapi:
container_name: oneapi container_name: oneapi
image: ghcr.io/songquanpeng/one-api:latest image: ghcr.io/songquanpeng/one-api:0.6.7
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云 # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
ports: ports:
- 3001:3000 - 3001:3000
......
...@@ -117,7 +117,7 @@ services: ...@@ -117,7 +117,7 @@ services:
- ./mysql:/var/lib/mysql - ./mysql:/var/lib/mysql
oneapi: oneapi:
container_name: oneapi container_name: oneapi
image: ghcr.io/songquanpeng/one-api:latest image: ghcr.io/songquanpeng/one-api:0.6.7
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云 # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
ports: ports:
- 3001:3000 - 3001:3000
......
...@@ -6,7 +6,8 @@ import { getAppChatConfig } from '../workflow/utils'; ...@@ -6,7 +6,8 @@ import { getAppChatConfig } from '../workflow/utils';
import { StoreNodeItemType } from '../workflow/type/node'; import { StoreNodeItemType } from '../workflow/type/node';
import { DatasetSearchModeEnum } from '../dataset/constants'; import { DatasetSearchModeEnum } from '../dataset/constants';
export const getDefaultAppForm = (): AppSimpleEditFormType => ({ export const getDefaultAppForm = (): AppSimpleEditFormType => {
return {
aiSettings: { aiSettings: {
model: 'gpt-4o-mini', model: 'gpt-4o-mini',
systemPrompt: '', systemPrompt: '',
...@@ -21,12 +22,13 @@ export const getDefaultAppForm = (): AppSimpleEditFormType => ({ ...@@ -21,12 +22,13 @@ export const getDefaultAppForm = (): AppSimpleEditFormType => ({
limit: 1500, limit: 1500,
searchMode: DatasetSearchModeEnum.embedding, searchMode: DatasetSearchModeEnum.embedding,
usingReRank: false, usingReRank: false,
datasetSearchUsingExtensionQuery: false, datasetSearchUsingExtensionQuery: true,
datasetSearchExtensionBg: '' datasetSearchExtensionBg: ''
}, },
selectedTools: [], selectedTools: [],
chatConfig: {} chatConfig: {}
}); };
};
/* format app nodes to edit form */ /* format app nodes to edit form */
export const appWorkflow2Form = ({ export const appWorkflow2Form = ({
......
...@@ -6,6 +6,7 @@ export enum FlowNodeTemplateTypeEnum { ...@@ -6,6 +6,7 @@ export enum FlowNodeTemplateTypeEnum {
search = 'search', search = 'search',
multimodal = 'multimodal', multimodal = 'multimodal',
communication = 'communication',
other = 'other', other = 'other',
teamApp = 'teamApp' teamApp = 'teamApp'
......
...@@ -35,6 +35,7 @@ export type WorkflowTemplateType = { ...@@ -35,6 +35,7 @@ export type WorkflowTemplateType = {
avatar: string; avatar: string;
intro?: string; intro?: string;
author?: string; author?: string;
inputExplanationUrl?: string;
version: string; version: string;
showStatus?: boolean; showStatus?: boolean;
......
...@@ -31,6 +31,7 @@ export type FlowNodeCommonType = { ...@@ -31,6 +31,7 @@ export type FlowNodeCommonType = {
avatar?: string; avatar?: string;
name: string; name: string;
intro?: string; // template list intro intro?: string; // template list intro
inputExplanationUrl?: string;
showStatus?: boolean; // chatting response step status showStatus?: boolean; // chatting response step status
version: string; version: string;
......
...@@ -229,7 +229,7 @@ export const updatePluginInputByVariables = ( ...@@ -229,7 +229,7 @@ export const updatePluginInputByVariables = (
); );
}; };
export const filterPluginInputVariables = ( export const removePluginInputVariables = (
variables: Record<string, any>, variables: Record<string, any>,
nodes: RuntimeNodeItemType[] nodes: RuntimeNodeItemType[]
) => { ) => {
...@@ -268,6 +268,7 @@ export function replaceVariableLabel({ ...@@ -268,6 +268,7 @@ export function replaceVariableLabel({
}; };
}); });
// Upstream node outputs
const nodeVariables = nodes const nodeVariables = nodes
.map((node) => { .map((node) => {
return node.outputs.map((output) => { return node.outputs.map((output) => {
...@@ -280,6 +281,7 @@ export function replaceVariableLabel({ ...@@ -280,6 +281,7 @@ export function replaceVariableLabel({
}) })
.flat(); .flat();
// Get runningNode inputs(Will be replaced with reference)
const customInputs = runningNode.inputs.flatMap((item) => { const customInputs = runningNode.inputs.flatMap((item) => {
if (Array.isArray(item.value)) { if (Array.isArray(item.value)) {
return [ return [
...@@ -299,6 +301,7 @@ export function replaceVariableLabel({ ...@@ -299,6 +301,7 @@ export function replaceVariableLabel({
const allVariables = [...globalVariables, ...nodeVariables, ...customInputs]; const allVariables = [...globalVariables, ...nodeVariables, ...customInputs];
// Replace {{$xxx.xxx$}} to value
for (const key in allVariables) { for (const key in allVariables) {
const val = allVariables[key]; const val = allVariables[key];
const regex = new RegExp(`\\{\\{\\$(${val.nodeId}\\.${val.id})\\$\\}\\}`, 'g'); const regex = new RegExp(`\\{\\{\\$(${val.nodeId}\\.${val.id})\\$\\}\\}`, 'g');
......
...@@ -7,7 +7,14 @@ import { cloneDeep } from 'lodash'; ...@@ -7,7 +7,14 @@ import { cloneDeep } from 'lodash';
import { WorkerNameEnum, runWorker } from '@fastgpt/service/worker/utils'; import { WorkerNameEnum, runWorker } from '@fastgpt/service/worker/utils';
// Run in main thread // Run in main thread
const staticPluginList = ['getTime', 'fetchUrl', 'Doc2X', 'Doc2X/URLPDF2text', 'Doc2X/URLImg2text']; const staticPluginList = [
'getTime',
'fetchUrl',
'Doc2X',
'Doc2X/URLPDF2text',
'Doc2X/URLImg2text',
'feishu'
];
// Run in worker thread (Have npm packages) // Run in worker thread (Have npm packages)
const packagePluginList = [ const packagePluginList = [
'mathExprVal', 'mathExprVal',
......
{ {
"author": "", "author": "Menghuan1918",
"version": "488", "version": "488",
"name": "Doc2X 图像(URL)识别", "name": "Doc2X 图像(URL)识别",
"avatar": "plugins/doc2x", "avatar": "plugins/doc2x",
"intro": "将传入的图片(URL)发送至Doc2X进行解析,返回带LaTeX公式的markdown格式的文本", "intro": "将传入的图片(URL)发送至Doc2X进行解析,返回带LaTeX公式的markdown格式的文本",
"inputExplanationUrl": "https://fael3z0zfze.feishu.cn/wiki/Rkc5witXWiJoi5kORd2cofh6nDg?fromScene=spaceOverview",
"showStatus": true, "showStatus": true,
"weight": 10, "weight": 10,
......
{ {
"author": "", "author": "Menghuan1918",
"version": "488", "version": "488",
"name": "Doc2X PDF文件(URL)识别", "name": "Doc2X PDF文件(URL)识别",
"avatar": "plugins/doc2x", "avatar": "plugins/doc2x",
"intro": "将传入的PDF文件(URL)发送至Doc2X进行解析,返回带LaTeX公式的markdown格式的文本", "intro": "将传入的PDF文件(URL)发送至Doc2X进行解析,返回带LaTeX公式的markdown格式的文本",
"inputExplanationUrl": "https://fael3z0zfze.feishu.cn/wiki/Rkc5witXWiJoi5kORd2cofh6nDg?fromScene=spaceOverview",
"showStatus": true, "showStatus": true,
"weight": 10, "weight": 10,
......
{ {
"author": "", "author": "Menghuan1918",
"version": "488", "version": "488",
"name": "Doc2X服务", "name": "Doc2X服务",
"avatar": "plugins/doc2x", "avatar": "plugins/doc2x",
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"avatar": "core/workflow/template/duckduckgo", "avatar": "core/workflow/template/duckduckgo",
"intro": "DuckDuckGo 服务,包含网络搜索、图片搜索、新闻搜索等。", "intro": "DuckDuckGo 服务,包含网络搜索、图片搜索、新闻搜索等。",
"showStatus": false, "showStatus": false,
"weight": 10, "weight": 100,
"isTool": true, "isTool": true,
"templateType": "tools", "templateType": "tools",
......
{
"author": "",
"version": "488",
"name": "飞书机器人 webhook",
"avatar": "/imgs/app/templates/feishu.svg",
"intro": "向飞书机器人发起 webhook 请求。",
"inputExplanationUrl": "https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot#f62e72d5",
"showStatus": false,
"weight": 10,
"isTool": true,
"templateType": "communication",
"workflow": {
"nodes": [
{
"nodeId": "pluginInput",
"name": "自定义插件输入",
"intro": "可以配置插件需要哪些输入,利用这些输入来运行插件",
"avatar": "core/workflow/template/workflowStart",
"flowNodeType": "pluginInput",
"showStatus": false,
"position": {
"x": 156.37657136084977,
"y": 90.73380846709256
},
"version": "481",
"inputs": [
{
"renderTypeList": ["reference"],
"selectedTypeIndex": 0,
"valueType": "string",
"canEdit": true,
"key": "content",
"label": "content",
"description": "需要发送的消息",
"required": true,
"toolDescription": "需要发送的消息"
},
{
"renderTypeList": ["input"],
"selectedTypeIndex": 0,
"valueType": "string",
"canEdit": true,
"key": "hook_url",
"label": "hook_url",
"description": "飞书机器人地址",
"required": true,
"defaultValue": ""
}
],
"outputs": [
{
"id": "query",
"valueType": "string",
"key": "content",
"label": "content",
"type": "hidden"
},
{
"id": "hook_url",
"valueType": "string",
"key": "hook_url",
"label": "hook_url",
"type": "hidden"
}
]
},
{
"nodeId": "pluginOutput",
"name": "自定义插件输出",
"intro": "自定义配置外部输出,使用插件时,仅暴露自定义配置的输出",
"avatar": "core/workflow/template/pluginOutput",
"flowNodeType": "pluginOutput",
"showStatus": false,
"position": {
"x": 2110.7223589692912,
"y": 120.17602722162474
},
"version": "481",
"inputs": [
{
"renderTypeList": ["reference"],
"valueType": "object",
"canEdit": true,
"key": "result",
"label": "result",
"description": "",
"value": ["vzreK6vHrPvZ", "httpRawResponse"]
}
],
"outputs": []
},
{
"nodeId": "vzreK6vHrPvZ",
"name": "HTTP 请求",
"intro": "可以发出一个 HTTP 请求,实现更为复杂的操作(联网搜索、数据库查询等)",
"avatar": "core/workflow/template/httpRequest",
"flowNodeType": "httpRequest468",
"showStatus": true,
"position": {
"x": 1363.4233257919495,
"y": -182.3490463845037
},
"version": "481",
"inputs": [
{
"key": "system_addInputParam",
"renderTypeList": ["addInputParam"],
"valueType": "dynamic",
"label": "",
"required": false,
"description": "core.module.input.description.HTTP Dynamic Input",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
}
},
{
"key": "system_httpMethod",
"renderTypeList": ["custom"],
"valueType": "string",
"label": "",
"value": "POST",
"required": true
},
{
"key": "system_httpReqUrl",
"renderTypeList": ["hidden"],
"valueType": "string",
"label": "",
"description": "core.module.input.description.Http Request Url",
"placeholder": "https://api.ai.com/getInventory",
"required": false,
"value": "{{url}}"
},
{
"key": "system_httpHeader",
"renderTypeList": ["custom"],
"valueType": "any",
"value": [],
"label": "",
"description": "core.module.input.description.Http Request Header",
"placeholder": "core.module.input.description.Http Request Header",
"required": false
},
{
"key": "system_httpParams",
"renderTypeList": ["hidden"],
"valueType": "any",
"value": [],
"label": "",
"required": false
},
{
"key": "system_httpJsonBody",
"renderTypeList": ["hidden"],
"valueType": "any",
"value": "{{content}}",
"label": "",
"required": false
},
{
"renderTypeList": ["reference"],
"valueType": "string",
"canEdit": true,
"key": "url",
"label": "url",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"required": true,
"value": ["pluginInput", "hook_url"]
},
{
"renderTypeList": ["reference"],
"valueType": "object",
"canEdit": true,
"key": "content",
"label": "content",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"required": true,
"value": ["qcJpBBVtXsGd", "system_rawResponse"]
}
],
"outputs": [
{
"id": "error",
"key": "error",
"label": "请求错误",
"description": "HTTP请求错误信息,成功时返回空",
"valueType": "object",
"type": "static"
},
{
"id": "httpRawResponse",
"key": "httpRawResponse",
"label": "原始响应",
"required": true,
"description": "HTTP请求的原始响应。只能接受字符串或JSON类型响应数据。",
"valueType": "any",
"type": "static"
},
{
"id": "system_addOutputParam",
"key": "system_addOutputParam",
"type": "dynamic",
"valueType": "dynamic",
"label": "",
"customFieldConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": false
}
}
]
},
{
"nodeId": "qcJpBBVtXsGd",
"name": "代码运行",
"intro": "执行一段简单的脚本代码,通常用于进行复杂的数据处理。",
"avatar": "core/workflow/template/codeRun",
"flowNodeType": "code",
"showStatus": true,
"position": {
"x": 805.8169457909617,
"y": -159.52218926716316
},
"version": "482",
"inputs": [
{
"key": "system_addInputParam",
"renderTypeList": ["addInputParam"],
"valueType": "dynamic",
"label": "",
"required": false,
"description": "这些变量会作为代码的运行的输入参数",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
}
},
{
"key": "codeType",
"renderTypeList": ["hidden"],
"label": "",
"value": "js"
},
{
"key": "code",
"renderTypeList": ["custom"],
"label": "",
"value": "function main({data1}){\n try{\n const parseData = JSON.parse(data1)\n if(typeof parseData === 'object') {\n return parseData\n }\n return {\n \"msg_type\": \"text\",\n content: {\n \"text\": data1\n }\n }\n } catch(err) {\n return {\n \"msg_type\": \"text\",\n content: {\n \"text\": data1\n }\n }\n }\n}"
},
{
"renderTypeList": ["reference"],
"valueType": "string",
"canEdit": true,
"key": "data1",
"label": "data1",
"customInputConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": true
},
"required": true,
"value": ["pluginInput", "query"]
}
],
"outputs": [
{
"id": "system_rawResponse",
"key": "system_rawResponse",
"label": "完整响应数据",
"valueType": "object",
"type": "static"
},
{
"id": "error",
"key": "error",
"label": "运行错误",
"description": "代码运行错误信息,成功时返回空",
"valueType": "object",
"type": "static"
},
{
"id": "system_addOutputParam",
"key": "system_addOutputParam",
"type": "dynamic",
"valueType": "dynamic",
"label": "",
"customFieldConfig": {
"selectValueTypeList": [
"string",
"number",
"boolean",
"object",
"arrayString",
"arrayNumber",
"arrayBoolean",
"arrayObject",
"any",
"chatHistory",
"datasetQuote",
"dynamic",
"selectApp",
"selectDataset"
],
"showDescription": false,
"showDefaultValue": false
},
"description": "将代码中 return 的对象作为输出,传递给后续的节点。变量名需要对应 return 的 key"
},
{
"id": "qLUQfhG0ILRX",
"type": "dynamic",
"key": "content",
"valueType": "object",
"label": "content"
}
]
}
],
"edges": [
{
"source": "vzreK6vHrPvZ",
"target": "pluginOutput",
"sourceHandle": "vzreK6vHrPvZ-source-right",
"targetHandle": "pluginOutput-target-left"
},
{
"source": "pluginInput",
"target": "qcJpBBVtXsGd",
"sourceHandle": "pluginInput-source-right",
"targetHandle": "qcJpBBVtXsGd-target-left"
},
{
"source": "qcJpBBVtXsGd",
"target": "vzreK6vHrPvZ",
"sourceHandle": "qcJpBBVtXsGd-source-right",
"targetHandle": "vzreK6vHrPvZ-target-left"
}
]
}
}
...@@ -47,8 +47,6 @@ const addCommonMiddleware = (schema: mongoose.Schema) => { ...@@ -47,8 +47,6 @@ const addCommonMiddleware = (schema: mongoose.Schema) => {
if (duration > 1000) { if (duration > 1000) {
addLog.warn(`Slow operation ${duration}ms`, warnLogData); addLog.warn(`Slow operation ${duration}ms`, warnLogData);
} else if (duration > 3000) {
addLog.error(`Slow operation ${duration}ms`, warnLogData);
} }
} }
next(); next();
......
import { delay } from '@fastgpt/global/common/system/utils';
import { addLog } from '../system/log'; import { addLog } from '../system/log';
import { connectionMongo } from './index'; import { connectionMongo } from './index';
import type { Mongoose } from 'mongoose'; import type { Mongoose } from 'mongoose';
...@@ -17,9 +18,11 @@ export async function connectMongo(): Promise<Mongoose> { ...@@ -17,9 +18,11 @@ export async function connectMongo(): Promise<Mongoose> {
try { try {
connectionMongo.set('strictQuery', true); connectionMongo.set('strictQuery', true);
connectionMongo.connection.on('error', (error) => { connectionMongo.connection.on('error', async (error) => {
console.log('mongo error', error); console.log('mongo error', error);
connectionMongo.disconnect(); await connectionMongo.disconnect();
await delay(1000);
connectMongo();
}); });
connectionMongo.connection.on('disconnected', () => { connectionMongo.connection.on('disconnected', () => {
console.log('mongo disconnected'); console.log('mongo disconnected');
...@@ -44,8 +47,10 @@ export async function connectMongo(): Promise<Mongoose> { ...@@ -44,8 +47,10 @@ export async function connectMongo(): Promise<Mongoose> {
console.log('mongo connected'); console.log('mongo connected');
} catch (error) { } catch (error) {
connectionMongo.disconnect();
addLog.error('mongo connect error', error); addLog.error('mongo connect error', error);
await connectionMongo.disconnect();
await delay(1000);
connectMongo();
} }
return connectionMongo; return connectionMongo;
......
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
InsertVectorControllerProps InsertVectorControllerProps
} from '../controller.d'; } from '../controller.d';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { addLog } from '../../system/log';
export class PgVectorCtrl { export class PgVectorCtrl {
constructor() {} constructor() {}
...@@ -38,9 +39,9 @@ export class PgVectorCtrl { ...@@ -38,9 +39,9 @@ export class PgVectorCtrl {
`CREATE INDEX CONCURRENTLY IF NOT EXISTS create_time_index ON ${DatasetVectorTableName} USING btree(createtime);` `CREATE INDEX CONCURRENTLY IF NOT EXISTS create_time_index ON ${DatasetVectorTableName} USING btree(createtime);`
); );
console.log('init pg successful'); addLog.info('init pg successful');
} catch (error) { } catch (error) {
console.log('init pg error', error); addLog.error('init pg error', error);
} }
}; };
insert = async (props: InsertVectorControllerProps): Promise<{ insertId: string }> => { insert = async (props: InsertVectorControllerProps): Promise<{ insertId: string }> => {
......
...@@ -82,6 +82,7 @@ export async function getPluginPreviewNode({ id }: { id: string }): Promise<Flow ...@@ -82,6 +82,7 @@ export async function getPluginPreviewNode({ id }: { id: string }): Promise<Flow
avatar: plugin.avatar, avatar: plugin.avatar,
name: plugin.name, name: plugin.name,
intro: plugin.intro, intro: plugin.intro,
inputExplanationUrl: plugin.inputExplanationUrl,
showStatus: plugin.showStatus, showStatus: plugin.showStatus,
isTool: plugin.isTool, isTool: plugin.isTool,
version: plugin.version, version: plugin.version,
......
...@@ -262,13 +262,14 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons ...@@ -262,13 +262,14 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons
/* Inject data into module input */ /* Inject data into module input */
function getNodeRunParams(node: RuntimeNodeItemType) { function getNodeRunParams(node: RuntimeNodeItemType) {
if (node.flowNodeType === FlowNodeTypeEnum.pluginInput) { if (node.flowNodeType === FlowNodeTypeEnum.pluginInput) {
// Format plugin input to object
return node.inputs.reduce<Record<string, any>>((acc, item) => { return node.inputs.reduce<Record<string, any>>((acc, item) => {
acc[item.key] = valueTypeFormat(item.value, item.valueType); acc[item.key] = valueTypeFormat(item.value, item.valueType);
return acc; return acc;
}, {}); }, {});
} }
// common nodes // Dynamic input need to store a key.
const dynamicInput = node.inputs.find( const dynamicInput = node.inputs.find(
(item) => item.renderTypeList[0] === FlowNodeInputTypeEnum.addInputParam (item) => item.renderTypeList[0] === FlowNodeInputTypeEnum.addInputParam
); );
...@@ -281,14 +282,14 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons ...@@ -281,14 +282,14 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons
node.inputs.forEach((input) => { node.inputs.forEach((input) => {
if (input.key === dynamicInput?.key) return; if (input.key === dynamicInput?.key) return;
// replace {{}} variables // replace {{xx}} variables
let value = replaceVariable(input.value, variables); let value = replaceVariable(input.value, variables);
// replace {{$$}} variables // replace {{$xx.xx$}} variables
value = replaceVariableLabel({ value = replaceVariableLabel({
text: value, text: value,
nodes: runtimeNodes, nodes: runtimeNodes,
variables: variables, variables,
runningNode: node runningNode: node
}); });
...@@ -299,12 +300,11 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons ...@@ -299,12 +300,11 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons
variables variables
}); });
// concat dynamic inputs // Dynamic input is stored in the dynamic key
if (input.canEdit && dynamicInput && params[dynamicInput.key]) { if (input.canEdit && dynamicInput && params[dynamicInput.key]) {
params[dynamicInput.key][input.key] = valueTypeFormat(value, input.valueType); params[dynamicInput.key][input.key] = valueTypeFormat(value, input.valueType);
} }
// Not dynamic input
params[input.key] = valueTypeFormat(value, input.valueType); params[input.key] = valueTypeFormat(value, input.valueType);
}); });
......
...@@ -106,6 +106,7 @@ export const dispatchHttp468Request = async (props: HttpRequestProps): Promise<H ...@@ -106,6 +106,7 @@ export const dispatchHttp468Request = async (props: HttpRequestProps): Promise<H
acc[key] = valueTypeFormat(value, WorkflowIOValueTypeEnum.string); acc[key] = valueTypeFormat(value, WorkflowIOValueTypeEnum.string);
return acc; return acc;
}, {}); }, {});
const requestBody = await (() => { const requestBody = await (() => {
if (!httpJsonBody) return {}; if (!httpJsonBody) return {};
try { try {
......
...@@ -89,7 +89,13 @@ export default function Editor({ ...@@ -89,7 +89,13 @@ export default function Editor({
}, [value, variables, variableLabels]); }, [value, variables, variableLabels]);
return ( return (
<Box position={'relative'} width={'full'} h={`${height}px`} cursor={'text'}> <Box
position={'relative'}
width={'full'}
h={`${height}px`}
cursor={'text'}
color={'myGray.700'}
>
<LexicalComposer initialConfig={initialConfig} key={key}> <LexicalComposer initialConfig={initialConfig} key={key}>
<PlainTextPlugin <PlainTextPlugin
contentEditable={ contentEditable={
......
import { FlowNodeTemplateTypeEnum } from '@fastgpt/global/core/workflow/constants'; import { FlowNodeTemplateTypeEnum } from '@fastgpt/global/core/workflow/constants';
import { NodeTemplateListType } from '@fastgpt/global/core/workflow/type/node'; import { i18nT } from '../../i18n/utils';
import { TFunction } from 'next-i18next';
export const workflowNodeTemplateList = (t: TFunction): NodeTemplateListType => [ export const workflowNodeTemplateList = [
{ {
type: FlowNodeTemplateTypeEnum.systemInput, type: FlowNodeTemplateTypeEnum.systemInput,
label: t('common:core.module.template.System input module'), label: i18nT('common:core.module.template.System input module'),
list: [] list: []
}, },
{ {
type: FlowNodeTemplateTypeEnum.ai, type: FlowNodeTemplateTypeEnum.ai,
label: t('common:core.module.template.AI function'), label: i18nT('common:core.module.template.AI function'),
list: [] list: []
}, },
{ {
type: FlowNodeTemplateTypeEnum.tools, type: FlowNodeTemplateTypeEnum.search,
label: t('common:core.module.template.Tool module'), label: i18nT('common:core.workflow.template.Search'),
list: [] list: []
}, },
{ {
type: FlowNodeTemplateTypeEnum.search, type: FlowNodeTemplateTypeEnum.multimodal,
label: t('core.workflow.template.Search'), label: i18nT('common:core.workflow.template.Multimodal'),
list: [] list: []
}, },
{ {
type: FlowNodeTemplateTypeEnum.multimodal, type: FlowNodeTemplateTypeEnum.tools,
label: t('core.workflow.template.Multimodal'), label: i18nT('common:core.module.template.Tool module'),
list: []
},
{
type: FlowNodeTemplateTypeEnum.communication,
label: i18nT('app:workflow.template.communication'),
list: [] list: []
}, },
{ {
type: FlowNodeTemplateTypeEnum.other, type: FlowNodeTemplateTypeEnum.other,
label: t('common:common.Other'), label: i18nT('common:common.Other'),
list: [] list: []
}, },
{ {
......
{ {
"Run": "Run", "Run": "Run",
"ai_settings": "AI Settings", "ai_settings": "AI Settings",
"all_apps": "All Apps",
"app": { "app": {
"modules": { "modules": {
"click to update": "click to update", "click to update": "click to update",
...@@ -52,6 +53,7 @@ ...@@ -52,6 +53,7 @@
"template": { "template": {
"simple_robot": "Simple Robot" "simple_robot": "Simple Robot"
}, },
"tool_input_param_tip": "Configure related information before the plugin runs properly",
"transition_to_workflow": "Transition to workflow", "transition_to_workflow": "Transition to workflow",
"transition_to_workflow_create_new_placeholder": "Create a new application instead of modifying the current one", "transition_to_workflow_create_new_placeholder": "Create a new application instead of modifying the current one",
"transition_to_workflow_create_new_tip": "After converting to workflow, it will not be able to convert back to simple mode, please confirm!", "transition_to_workflow_create_new_tip": "After converting to workflow, it will not be able to convert back to simple mode, please confirm!",
...@@ -71,5 +73,11 @@ ...@@ -71,5 +73,11 @@
}, },
"version": { "version": {
"Revert success": "Revert success" "Revert success": "Revert success"
},
"workflow": {
"Input guide": "Input guide",
"template": {
"communication": "Communication"
}
} }
} }
{ {
"App": "App", "App": "App",
"all_apps": "All Apps",
"click_to_resume": "Resume", "click_to_resume": "Resume",
"code_editor": "Code edit", "code_editor": "Code edit",
"Export": "Export", "Export": "Export",
......
{ {
"Run": "运行", "Run": "运行",
"ai_settings": "AI 配置", "ai_settings": "AI 配置",
"all_apps": "全部应用",
"app": { "app": {
"modules": { "modules": {
"click to update": "点击更新", "click to update": "点击更新",
...@@ -52,6 +53,7 @@ ...@@ -52,6 +53,7 @@
"template": { "template": {
"simple_robot": "简易机器人" "simple_robot": "简易机器人"
}, },
"tool_input_param_tip": "该插件正常运行需要配置相关信息",
"transition_to_workflow": "转成工作流", "transition_to_workflow": "转成工作流",
"transition_to_workflow_create_new_placeholder": "创建一个新的应用,而不是修改当前应用", "transition_to_workflow_create_new_placeholder": "创建一个新的应用,而不是修改当前应用",
"transition_to_workflow_create_new_tip": "转化成工作流后,将无法转化回简易模式,请确认!", "transition_to_workflow_create_new_tip": "转化成工作流后,将无法转化回简易模式,请确认!",
...@@ -71,5 +73,11 @@ ...@@ -71,5 +73,11 @@
}, },
"version": { "version": {
"Revert success": "回滚成功" "Revert success": "回滚成功"
},
"workflow": {
"Input guide": "填写说明",
"template": {
"communication": "通信"
}
} }
} }
{ {
"App": "应用", "App": "应用",
"all_apps": "全部应用",
"click_to_resume": "点击恢复", "click_to_resume": "点击恢复",
"code_editor": "代码编辑", "code_editor": "代码编辑",
"Export": "导出", "Export": "导出",
......
...@@ -22,7 +22,7 @@ importers: ...@@ -22,7 +22,7 @@ importers:
version: 13.3.0 version: 13.3.0
next-i18next: next-i18next:
specifier: 15.3.0 specifier: 15.3.0
version: 15.3.0(i18next@23.11.5)(next@14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
prettier: prettier:
specifier: 3.2.4 specifier: 3.2.4
version: 3.2.4 version: 3.2.4
...@@ -250,7 +250,7 @@ importers: ...@@ -250,7 +250,7 @@ importers:
version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/next-js': '@chakra-ui/next-js':
specifier: 2.1.5 specifier: 2.1.5
version: 2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1) version: 2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)
'@chakra-ui/react': '@chakra-ui/react':
specifier: 2.8.1 specifier: 2.8.1
version: 2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
...@@ -310,7 +310,7 @@ importers: ...@@ -310,7 +310,7 @@ importers:
version: 4.17.21 version: 4.17.21
next-i18next: next-i18next:
specifier: 15.3.0 specifier: 15.3.0
version: 15.3.0(i18next@23.11.5)(next@14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
papaparse: papaparse:
specifier: ^5.4.1 specifier: ^5.4.1
version: 5.4.1 version: 5.4.1
...@@ -487,26 +487,29 @@ importers: ...@@ -487,26 +487,29 @@ importers:
specifier: 14.1.2 specifier: 14.1.2
version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-markdown: react-markdown:
specifier: ^8.0.7 specifier: ^9.0.1
version: 8.0.7(@types/react@18.3.1)(react@18.3.1) version: 9.0.1(@types/react@18.3.1)(react@18.3.1)
react-syntax-highlighter: react-syntax-highlighter:
specifier: ^15.5.0 specifier: ^15.5.0
version: 15.5.0(react@18.3.1) version: 15.5.0(react@18.3.1)
reactflow: reactflow:
specifier: ^11.7.4 specifier: ^11.7.4
version: 11.11.4(@types/react@18.3.1)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 11.11.4(@types/react@18.3.1)(immer@9.0.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
rehype-external-links:
specifier: ^3.0.0
version: 3.0.0
rehype-katex: rehype-katex:
specifier: ^6.0.2 specifier: ^7.0.0
version: 6.0.3 version: 7.0.0
remark-breaks: remark-breaks:
specifier: ^3.0.3 specifier: ^4.0.0
version: 3.0.3 version: 4.0.0
remark-gfm: remark-gfm:
specifier: ^3.0.1 specifier: ^4.0.0
version: 3.0.1 version: 4.0.0
remark-math: remark-math:
specifier: ^5.1.1 specifier: ^6.0.0
version: 5.1.1 version: 6.0.0
request-ip: request-ip:
specifier: ^3.3.0 specifier: ^3.3.0
version: 3.3.0 version: 3.3.0
...@@ -3226,6 +3229,9 @@ packages: ...@@ -3226,6 +3229,9 @@ packages:
'@types/eslint@8.56.10': '@types/eslint@8.56.10':
resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==}
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
'@types/estree@1.0.5': '@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
...@@ -3247,6 +3253,9 @@ packages: ...@@ -3247,6 +3253,9 @@ packages:
'@types/hast@2.3.10': '@types/hast@2.3.10':
resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
'@types/hoist-non-react-statics@3.3.5': '@types/hoist-non-react-statics@3.3.5':
resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==}
...@@ -3280,9 +3289,6 @@ packages: ...@@ -3280,9 +3289,6 @@ packages:
'@types/jsonwebtoken@9.0.6': '@types/jsonwebtoken@9.0.6':
resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==}
'@types/katex@0.14.0':
resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==}
'@types/katex@0.16.7': '@types/katex@0.16.7':
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
...@@ -3295,6 +3301,9 @@ packages: ...@@ -3295,6 +3301,9 @@ packages:
'@types/mdast@3.0.15': '@types/mdast@3.0.15':
resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
'@types/methods@1.1.4': '@types/methods@1.1.4':
resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==}
...@@ -3391,6 +3400,9 @@ packages: ...@@ -3391,6 +3400,9 @@ packages:
'@types/unist@2.0.10': '@types/unist@2.0.10':
resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
'@types/unist@3.0.2':
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
'@types/webidl-conversions@7.0.3': '@types/webidl-conversions@7.0.3':
resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
...@@ -4018,9 +4030,15 @@ packages: ...@@ -4018,9 +4030,15 @@ packages:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'} engines: {node: '>=10'}
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
character-entities-legacy@1.1.4: character-entities-legacy@1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
character-entities@1.2.4: character-entities@1.2.4:
resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
...@@ -4030,6 +4048,9 @@ packages: ...@@ -4030,6 +4048,9 @@ packages:
character-reference-invalid@1.1.4: character-reference-invalid@1.1.4:
resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==}
character-reference-invalid@2.0.1:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
chardet@0.7.0: chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
...@@ -4639,6 +4660,9 @@ packages: ...@@ -4639,6 +4660,9 @@ packages:
detect-node-es@1.1.0: detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
dezalgo@1.0.4: dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
...@@ -4960,6 +4984,9 @@ packages: ...@@ -4960,6 +4984,9 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
estree-util-is-identifier-name@3.0.0:
resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
estree-walker@2.0.2: estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
...@@ -5391,38 +5418,41 @@ packages: ...@@ -5391,38 +5418,41 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
hast-util-from-dom@4.2.0: hast-util-from-dom@5.0.0:
resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==} resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==}
hast-util-from-html-isomorphic@1.0.0: hast-util-from-html-isomorphic@2.0.0:
resolution: {integrity: sha512-Yu480AKeOEN/+l5LA674a+7BmIvtDj24GvOt7MtQWuhzUwlaaRWdEPXAh3Qm5vhuthpAipFb2vTetKXWOjmTvw==} resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
hast-util-from-html@1.0.2: hast-util-from-html@2.0.1:
resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==}
hast-util-from-parse5@7.1.2: hast-util-from-parse5@8.0.1:
resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
hast-util-is-element@2.1.3: hast-util-is-element@3.0.0:
resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
hast-util-parse-selector@2.2.5: hast-util-parse-selector@2.2.5:
resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
hast-util-parse-selector@3.1.1: hast-util-parse-selector@4.0.0:
resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
hast-util-to-text@3.1.2: hast-util-to-jsx-runtime@2.3.0:
resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==} resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==}
hast-util-whitespace@2.0.1: hast-util-to-text@4.0.2:
resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
hastscript@6.0.0: hastscript@6.0.0:
resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==}
hastscript@7.2.0: hastscript@8.0.0:
resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
hexoid@1.0.0: hexoid@1.0.0:
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
...@@ -5443,6 +5473,9 @@ packages: ...@@ -5443,6 +5473,9 @@ packages:
html-parse-stringify@3.0.1: html-parse-stringify@3.0.1:
resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
html-url-attributes@3.0.0:
resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==}
htmlparser2@8.0.2: htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
...@@ -5545,8 +5578,8 @@ packages: ...@@ -5545,8 +5578,8 @@ packages:
ini@1.3.8: ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
inline-style-parser@0.1.1: inline-style-parser@0.2.3:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
inquirer@8.2.6: inquirer@8.2.6:
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
...@@ -5581,12 +5614,22 @@ packages: ...@@ -5581,12 +5614,22 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
is-absolute-url@4.0.1:
resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
is-alphabetical@1.0.4: is-alphabetical@1.0.4:
resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
is-alphanumerical@1.0.4: is-alphanumerical@1.0.4:
resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==}
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
is-arguments@1.1.1: is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
...@@ -5639,6 +5682,9 @@ packages: ...@@ -5639,6 +5682,9 @@ packages:
is-decimal@1.0.4: is-decimal@1.0.4:
resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==}
is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
is-extglob@2.1.1: is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
...@@ -5669,6 +5715,9 @@ packages: ...@@ -5669,6 +5715,9 @@ packages:
is-hexadecimal@1.0.4: is-hexadecimal@1.0.4:
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
is-interactive@1.0.0: is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -6281,51 +6330,63 @@ packages: ...@@ -6281,51 +6330,63 @@ packages:
markdown-table@3.0.3: markdown-table@3.0.3:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
mdast-util-definitions@5.1.2: mdast-util-find-and-replace@3.0.1:
resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
mdast-util-find-and-replace@2.2.2:
resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
mdast-util-from-markdown@1.3.1: mdast-util-from-markdown@1.3.1:
resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
mdast-util-gfm-autolink-literal@1.0.3: mdast-util-from-markdown@2.0.1:
resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==}
mdast-util-gfm-autolink-literal@2.0.0:
resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
mdast-util-gfm-footnote@1.0.2: mdast-util-gfm-footnote@2.0.0:
resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
mdast-util-gfm-strikethrough@1.0.3: mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
mdast-util-gfm-table@1.0.7: mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
mdast-util-gfm-task-list-item@1.0.2: mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
mdast-util-gfm@2.0.2: mdast-util-gfm@3.0.0:
resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
mdast-util-math@2.0.2: mdast-util-math@3.0.0:
resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
mdast-util-newline-to-break@1.0.0: mdast-util-mdx-expression@2.0.0:
resolution: {integrity: sha512-491LcYv3gbGhhCrLoeALncQmega2xPh+m3gbsIhVsOX4sw85+ShLFPvPyibxc1Swx/6GtzxgVodq+cGa/47ULg==} resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==}
mdast-util-phrasing@3.0.1: mdast-util-mdx-jsx@3.1.2:
resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==}
mdast-util-to-hast@12.3.0: mdast-util-mdxjs-esm@2.0.1:
resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
mdast-util-to-markdown@1.5.0: mdast-util-newline-to-break@2.0.0:
resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} resolution: {integrity: sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
mdast-util-to-markdown@2.1.0:
resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
mdast-util-to-string@3.2.0: mdast-util-to-string@3.2.0:
resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
mdn-data@2.0.14: mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
...@@ -6363,90 +6424,153 @@ packages: ...@@ -6363,90 +6424,153 @@ packages:
micromark-core-commonmark@1.1.0: micromark-core-commonmark@1.1.0:
resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
micromark-extension-gfm-autolink-literal@1.0.5: micromark-core-commonmark@2.0.1:
resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
micromark-extension-gfm-footnote@1.1.2: micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
micromark-extension-gfm-strikethrough@1.0.7: micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@1.0.7: micromark-extension-gfm-table@2.1.0:
resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==}
micromark-extension-gfm-tagfilter@1.0.2: micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
micromark-extension-gfm-task-list-item@1.0.5: micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@2.0.3: micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
micromark-extension-math@2.1.2: micromark-extension-math@3.1.0:
resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==} resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
micromark-factory-destination@1.1.0: micromark-factory-destination@1.1.0:
resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
micromark-factory-destination@2.0.0:
resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
micromark-factory-label@1.1.0: micromark-factory-label@1.1.0:
resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
micromark-factory-label@2.0.0:
resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
micromark-factory-space@1.1.0: micromark-factory-space@1.1.0:
resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
micromark-factory-space@2.0.0:
resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
micromark-factory-title@1.1.0: micromark-factory-title@1.1.0:
resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
micromark-factory-title@2.0.0:
resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
micromark-factory-whitespace@1.1.0: micromark-factory-whitespace@1.1.0:
resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
micromark-factory-whitespace@2.0.0:
resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
micromark-util-character@1.2.0: micromark-util-character@1.2.0:
resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
micromark-util-character@2.1.0:
resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
micromark-util-chunked@1.1.0: micromark-util-chunked@1.1.0:
resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
micromark-util-chunked@2.0.0:
resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
micromark-util-classify-character@1.1.0: micromark-util-classify-character@1.1.0:
resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
micromark-util-classify-character@2.0.0:
resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
micromark-util-combine-extensions@1.1.0: micromark-util-combine-extensions@1.1.0:
resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
micromark-util-combine-extensions@2.0.0:
resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
micromark-util-decode-numeric-character-reference@1.1.0: micromark-util-decode-numeric-character-reference@1.1.0:
resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
micromark-util-decode-numeric-character-reference@2.0.1:
resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
micromark-util-decode-string@1.1.0: micromark-util-decode-string@1.1.0:
resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
micromark-util-decode-string@2.0.0:
resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
micromark-util-encode@1.1.0: micromark-util-encode@1.1.0:
resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
micromark-util-encode@2.0.0:
resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
micromark-util-html-tag-name@1.2.0: micromark-util-html-tag-name@1.2.0:
resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
micromark-util-html-tag-name@2.0.0:
resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
micromark-util-normalize-identifier@1.1.0: micromark-util-normalize-identifier@1.1.0:
resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
micromark-util-normalize-identifier@2.0.0:
resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
micromark-util-resolve-all@1.1.0: micromark-util-resolve-all@1.1.0:
resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
micromark-util-resolve-all@2.0.0:
resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
micromark-util-sanitize-uri@1.2.0: micromark-util-sanitize-uri@1.2.0:
resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
micromark-util-sanitize-uri@2.0.0:
resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
micromark-util-subtokenize@1.1.0: micromark-util-subtokenize@1.1.0:
resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
micromark-util-subtokenize@2.0.1:
resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==}
micromark-util-symbol@1.1.0: micromark-util-symbol@1.1.0:
resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
micromark-util-symbol@2.0.0:
resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
micromark-util-types@1.1.0: micromark-util-types@1.1.0:
resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
micromark-util-types@2.0.0:
resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
micromark@3.2.0: micromark@3.2.0:
resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
micromark@4.0.0:
resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
micromatch@4.0.5: micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
...@@ -6909,6 +7033,9 @@ packages: ...@@ -6909,6 +7033,9 @@ packages:
parse-entities@2.0.0: parse-entities@2.0.0:
resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==}
parse-entities@4.0.1:
resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
parse-json@5.2.0: parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -7309,11 +7436,11 @@ packages: ...@@ -7309,11 +7436,11 @@ packages:
react-is@18.3.1: react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
react-markdown@8.0.7: react-markdown@9.0.1:
resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==}
peerDependencies: peerDependencies:
'@types/react': '>=16' '@types/react': '>=18'
react: '>=16' react: '>=18'
react-photo-view@1.2.6: react-photo-view@1.2.6:
resolution: {integrity: sha512-Fq17yxkMIv0oFp7HOJr39HgCZRP6A9K5T5rixJ4flSUYT2OO3V8vNxEExjhIKgIrfmTu+mDnHYEsI9RRWi1JHw==} resolution: {integrity: sha512-Fq17yxkMIv0oFp7HOJr39HgCZRP6A9K5T5rixJ4flSUYT2OO3V8vNxEExjhIKgIrfmTu+mDnHYEsI9RRWi1JHw==}
...@@ -7435,29 +7562,35 @@ packages: ...@@ -7435,29 +7562,35 @@ packages:
resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
hasBin: true hasBin: true
rehype-katex@6.0.3: rehype-external-links@3.0.0:
resolution: {integrity: sha512-ByZlRwRUcWegNbF70CVRm2h/7xy7jQ3R9LaY4VVSvjnoVWwWVhNL60DiZsBpC5tSzYQOCvDbzncIpIjPZWodZA==} resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
remark-breaks@3.0.3: rehype-katex@7.0.0:
resolution: {integrity: sha512-C7VkvcUp1TPUc2eAYzsPdaUh8Xj4FSbQnYA5A9f80diApLZscTDeG7efiWP65W8hV2sEy3JuGVU0i6qr5D8Hug==} resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==}
remark-breaks@4.0.0:
resolution: {integrity: sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==}
remark-frontmatter@1.3.3: remark-frontmatter@1.3.3:
resolution: {integrity: sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==} resolution: {integrity: sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag==}
remark-gfm@3.0.1: remark-gfm@4.0.0:
resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
remark-math@5.1.1: remark-math@6.0.0:
resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
remark-parse@10.0.2: remark-parse@11.0.0:
resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
remark-parse@7.0.2: remark-parse@7.0.2:
resolution: {integrity: sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==} resolution: {integrity: sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==}
remark-rehype@10.1.0: remark-rehype@11.1.0:
resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==}
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
repeat-string@1.6.1: repeat-string@1.6.1:
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
...@@ -7837,6 +7970,9 @@ packages: ...@@ -7837,6 +7970,9 @@ packages:
string_decoder@1.3.0: string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
strip-ansi@6.0.1: strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -7879,8 +8015,8 @@ packages: ...@@ -7879,8 +8015,8 @@ packages:
resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==} resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==}
engines: {node: '>=16'} engines: {node: '>=16'}
style-to-object@0.4.4: style-to-object@1.0.6:
resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==}
styled-jsx@5.1.1: styled-jsx@5.1.1:
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
...@@ -8261,8 +8397,8 @@ packages: ...@@ -8261,8 +8397,8 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'} engines: {node: '>=4'}
unified@10.1.2: unified@11.0.5:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
unified@8.4.2: unified@8.4.2:
resolution: {integrity: sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==} resolution: {integrity: sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==}
...@@ -8275,26 +8411,23 @@ packages: ...@@ -8275,26 +8411,23 @@ packages:
resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
unist-util-find-after@4.0.1: unist-util-find-after@5.0.0:
resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
unist-util-generated@2.0.1:
resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
unist-util-is@3.0.0: unist-util-is@3.0.0:
resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==}
unist-util-is@5.2.1: unist-util-is@6.0.0:
resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
unist-util-position@4.0.4: unist-util-position@5.0.0:
resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
unist-util-remove-position@1.1.4: unist-util-remove-position@1.1.4:
resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==}
unist-util-remove-position@4.0.2: unist-util-remove-position@5.0.0:
resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
unist-util-stringify-position@2.0.3: unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
...@@ -8302,17 +8435,20 @@ packages: ...@@ -8302,17 +8435,20 @@ packages:
unist-util-stringify-position@3.0.3: unist-util-stringify-position@3.0.3:
resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
unist-util-visit-parents@2.1.2: unist-util-visit-parents@2.1.2:
resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==}
unist-util-visit-parents@5.1.3: unist-util-visit-parents@6.0.1:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
unist-util-visit@1.4.1: unist-util-visit@1.4.1:
resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==}
unist-util-visit@4.1.2: unist-util-visit@5.0.0:
resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
universalify@2.0.1: universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
...@@ -8413,20 +8549,20 @@ packages: ...@@ -8413,20 +8549,20 @@ packages:
vfile-location@2.0.6: vfile-location@2.0.6:
resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==}
vfile-location@4.1.0: vfile-location@5.0.3:
resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
vfile-message@2.0.4: vfile-message@2.0.4:
resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==}
vfile-message@3.1.4: vfile-message@4.0.2:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
vfile@4.2.1: vfile@4.2.1:
resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==}
vfile@5.3.7: vfile@6.0.2:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==}
vite-node@1.6.0: vite-node@1.6.0:
resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
...@@ -9895,6 +10031,14 @@ snapshots: ...@@ -9895,6 +10031,14 @@ snapshots:
next: 14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8) next: 14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
react: 18.3.1 react: 18.3.1
'@chakra-ui/next-js@2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)':
dependencies:
'@chakra-ui/react': 2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@emotion/cache': 11.11.0
'@emotion/react': 11.11.1(@types/react@18.3.1)(react@18.3.1)
next: 14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
react: 18.3.1
'@chakra-ui/number-input@2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)': '@chakra-ui/number-input@2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/counter': 2.1.0(react@18.3.1) '@chakra-ui/counter': 2.1.0(react@18.3.1)
...@@ -11811,6 +11955,10 @@ snapshots: ...@@ -11811,6 +11955,10 @@ snapshots:
'@types/estree': 1.0.5 '@types/estree': 1.0.5
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/estree-jsx@1.0.5':
dependencies:
'@types/estree': 1.0.5
'@types/estree@1.0.5': {} '@types/estree@1.0.5': {}
'@types/express-serve-static-core@4.19.5': '@types/express-serve-static-core@4.19.5':
...@@ -11841,6 +11989,10 @@ snapshots: ...@@ -11841,6 +11989,10 @@ snapshots:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 2.0.10
'@types/hast@3.0.4':
dependencies:
'@types/unist': 2.0.10
'@types/hoist-non-react-statics@3.3.5': '@types/hoist-non-react-statics@3.3.5':
dependencies: dependencies:
'@types/react': 18.3.1 '@types/react': 18.3.1
...@@ -11875,8 +12027,6 @@ snapshots: ...@@ -11875,8 +12027,6 @@ snapshots:
dependencies: dependencies:
'@types/node': 20.14.11 '@types/node': 20.14.11
'@types/katex@0.14.0': {}
'@types/katex@0.16.7': {} '@types/katex@0.16.7': {}
'@types/lodash.mergewith@4.6.7': '@types/lodash.mergewith@4.6.7':
...@@ -11889,6 +12039,10 @@ snapshots: ...@@ -11889,6 +12039,10 @@ snapshots:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 2.0.10
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.2
'@types/methods@1.1.4': {} '@types/methods@1.1.4': {}
'@types/mime@1.3.5': {} '@types/mime@1.3.5': {}
...@@ -12002,6 +12156,8 @@ snapshots: ...@@ -12002,6 +12156,8 @@ snapshots:
'@types/unist@2.0.10': {} '@types/unist@2.0.10': {}
'@types/unist@3.0.2': {}
'@types/webidl-conversions@7.0.3': {} '@types/webidl-conversions@7.0.3': {}
'@types/whatwg-url@8.2.2': '@types/whatwg-url@8.2.2':
...@@ -12828,14 +12984,20 @@ snapshots: ...@@ -12828,14 +12984,20 @@ snapshots:
char-regex@1.0.2: {} char-regex@1.0.2: {}
character-entities-html4@2.1.0: {}
character-entities-legacy@1.1.4: {} character-entities-legacy@1.1.4: {}
character-entities-legacy@3.0.0: {}
character-entities@1.2.4: {} character-entities@1.2.4: {}
character-entities@2.0.2: {} character-entities@2.0.2: {}
character-reference-invalid@1.1.4: {} character-reference-invalid@1.1.4: {}
character-reference-invalid@2.0.1: {}
chardet@0.7.0: {} chardet@0.7.0: {}
check-error@1.0.3: check-error@1.0.3:
...@@ -13493,6 +13655,10 @@ snapshots: ...@@ -13493,6 +13655,10 @@ snapshots:
detect-node-es@1.1.0: {} detect-node-es@1.1.0: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
dezalgo@1.0.4: dezalgo@1.0.4:
dependencies: dependencies:
asap: 2.0.6 asap: 2.0.6
...@@ -14001,6 +14167,8 @@ snapshots: ...@@ -14001,6 +14167,8 @@ snapshots:
estraverse@5.3.0: {} estraverse@5.3.0: {}
estree-util-is-identifier-name@3.0.0: {}
estree-walker@2.0.2: {} estree-walker@2.0.2: {}
estree-walker@3.0.3: estree-walker@3.0.3:
...@@ -14537,55 +14705,79 @@ snapshots: ...@@ -14537,55 +14705,79 @@ snapshots:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
hast-util-from-dom@4.2.0: hast-util-from-dom@5.0.0:
dependencies: dependencies:
hastscript: 7.2.0 '@types/hast': 3.0.4
hastscript: 8.0.0
web-namespaces: 2.0.1 web-namespaces: 2.0.1
hast-util-from-html-isomorphic@1.0.0: hast-util-from-html-isomorphic@2.0.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
hast-util-from-dom: 4.2.0 hast-util-from-dom: 5.0.0
hast-util-from-html: 1.0.2 hast-util-from-html: 2.0.1
unist-util-remove-position: 4.0.2 unist-util-remove-position: 5.0.0
hast-util-from-html@1.0.2: hast-util-from-html@2.0.1:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
hast-util-from-parse5: 7.1.2 devlop: 1.1.0
hast-util-from-parse5: 8.0.1
parse5: 7.1.2 parse5: 7.1.2
vfile: 5.3.7 vfile: 6.0.2
vfile-message: 3.1.4 vfile-message: 4.0.2
hast-util-from-parse5@7.1.2: hast-util-from-parse5@8.0.1:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
'@types/unist': 2.0.10 '@types/unist': 3.0.2
hastscript: 7.2.0 devlop: 1.1.0
hastscript: 8.0.0
property-information: 6.5.0 property-information: 6.5.0
vfile: 5.3.7 vfile: 6.0.2
vfile-location: 4.1.0 vfile-location: 5.0.3
web-namespaces: 2.0.1 web-namespaces: 2.0.1
hast-util-is-element@2.1.3: hast-util-is-element@3.0.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
'@types/unist': 2.0.10
hast-util-parse-selector@2.2.5: {} hast-util-parse-selector@2.2.5: {}
hast-util-parse-selector@3.1.1: hast-util-parse-selector@4.0.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
hast-util-to-text@3.1.2: hast-util-to-jsx-runtime@2.3.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/estree': 1.0.5
'@types/unist': 2.0.10 '@types/hast': 3.0.4
hast-util-is-element: 2.1.3 '@types/unist': 3.0.2
unist-util-find-after: 4.0.1 comma-separated-tokens: 2.0.3
devlop: 1.1.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.1.2
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.5.0
space-separated-tokens: 2.0.2
style-to-object: 1.0.6
unist-util-position: 5.0.0
vfile-message: 4.0.2
transitivePeerDependencies:
- supports-color
hast-util-to-text@4.0.2:
dependencies:
'@types/hast': 3.0.4
'@types/unist': 3.0.2
hast-util-is-element: 3.0.0
unist-util-find-after: 5.0.0
hast-util-whitespace@2.0.1: {} hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
hastscript@6.0.0: hastscript@6.0.0:
dependencies: dependencies:
...@@ -14595,11 +14787,11 @@ snapshots: ...@@ -14595,11 +14787,11 @@ snapshots:
property-information: 5.6.0 property-information: 5.6.0
space-separated-tokens: 1.1.5 space-separated-tokens: 1.1.5
hastscript@7.2.0: hastscript@8.0.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
comma-separated-tokens: 2.0.3 comma-separated-tokens: 2.0.3
hast-util-parse-selector: 3.1.1 hast-util-parse-selector: 4.0.0
property-information: 6.5.0 property-information: 6.5.0
space-separated-tokens: 2.0.2 space-separated-tokens: 2.0.2
...@@ -14619,6 +14811,8 @@ snapshots: ...@@ -14619,6 +14811,8 @@ snapshots:
dependencies: dependencies:
void-elements: 3.1.0 void-elements: 3.1.0
html-url-attributes@3.0.0: {}
htmlparser2@8.0.2: htmlparser2@8.0.2:
dependencies: dependencies:
domelementtype: 2.3.0 domelementtype: 2.3.0
...@@ -14719,7 +14913,7 @@ snapshots: ...@@ -14719,7 +14913,7 @@ snapshots:
ini@1.3.8: {} ini@1.3.8: {}
inline-style-parser@0.1.1: {} inline-style-parser@0.2.3: {}
inquirer@8.2.6: inquirer@8.2.6:
dependencies: dependencies:
...@@ -14780,13 +14974,22 @@ snapshots: ...@@ -14780,13 +14974,22 @@ snapshots:
ipaddr.js@1.9.1: {} ipaddr.js@1.9.1: {}
is-absolute-url@4.0.1: {}
is-alphabetical@1.0.4: {} is-alphabetical@1.0.4: {}
is-alphabetical@2.0.1: {}
is-alphanumerical@1.0.4: is-alphanumerical@1.0.4:
dependencies: dependencies:
is-alphabetical: 1.0.4 is-alphabetical: 1.0.4
is-decimal: 1.0.4 is-decimal: 1.0.4
is-alphanumerical@2.0.1:
dependencies:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
is-arguments@1.1.1: is-arguments@1.1.1:
dependencies: dependencies:
call-bind: 1.0.7 call-bind: 1.0.7
...@@ -14836,6 +15039,8 @@ snapshots: ...@@ -14836,6 +15039,8 @@ snapshots:
is-decimal@1.0.4: {} is-decimal@1.0.4: {}
is-decimal@2.0.1: {}
is-extglob@2.1.1: {} is-extglob@2.1.1: {}
is-finalizationregistry@1.0.2: is-finalizationregistry@1.0.2:
...@@ -14858,6 +15063,8 @@ snapshots: ...@@ -14858,6 +15063,8 @@ snapshots:
is-hexadecimal@1.0.4: {} is-hexadecimal@1.0.4: {}
is-hexadecimal@2.0.1: {}
is-interactive@1.0.0: {} is-interactive@1.0.0: {}
is-lambda@1.0.1: {} is-lambda@1.0.1: {}
...@@ -15667,18 +15874,12 @@ snapshots: ...@@ -15667,18 +15874,12 @@ snapshots:
markdown-table@3.0.3: {} markdown-table@3.0.3: {}
mdast-util-definitions@5.1.2: mdast-util-find-and-replace@3.0.1:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
'@types/unist': 2.0.10
unist-util-visit: 4.1.2
mdast-util-find-and-replace@2.2.2:
dependencies:
'@types/mdast': 3.0.15
escape-string-regexp: 5.0.0 escape-string-regexp: 5.0.0
unist-util-is: 5.2.1 unist-util-is: 6.0.0
unist-util-visit-parents: 5.1.3 unist-util-visit-parents: 6.0.1
mdast-util-from-markdown@1.3.1: mdast-util-from-markdown@1.3.1:
dependencies: dependencies:
...@@ -15697,92 +15898,173 @@ snapshots: ...@@ -15697,92 +15898,173 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
mdast-util-gfm-autolink-literal@1.0.3: mdast-util-from-markdown@2.0.1:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
'@types/unist': 3.0.2
decode-named-character-reference: 1.0.2
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.0
micromark-util-decode-numeric-character-reference: 2.0.1
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
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.0:
dependencies:
'@types/mdast': 4.0.4
ccount: 2.0.1 ccount: 2.0.1
mdast-util-find-and-replace: 2.2.2 devlop: 1.1.0
micromark-util-character: 1.2.0 mdast-util-find-and-replace: 3.0.1
micromark-util-character: 2.1.0
mdast-util-gfm-footnote@1.0.2: mdast-util-gfm-footnote@2.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-to-markdown: 1.5.0 devlop: 1.1.0
micromark-util-normalize-identifier: 1.1.0 mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
micromark-util-normalize-identifier: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@1.0.3: mdast-util-gfm-strikethrough@2.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-to-markdown: 1.5.0 mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@1.0.7: mdast-util-gfm-table@2.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.3 markdown-table: 3.0.3
mdast-util-from-markdown: 1.3.1 mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 1.5.0 mdast-util-to-markdown: 2.1.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
mdast-util-gfm-task-list-item@1.0.2: mdast-util-gfm-task-list-item@2.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-to-markdown: 1.5.0 devlop: 1.1.0
mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm@2.0.2: mdast-util-gfm@3.0.0:
dependencies: dependencies:
mdast-util-from-markdown: 1.3.1 mdast-util-from-markdown: 2.0.1
mdast-util-gfm-autolink-literal: 1.0.3 mdast-util-gfm-autolink-literal: 2.0.0
mdast-util-gfm-footnote: 1.0.2 mdast-util-gfm-footnote: 2.0.0
mdast-util-gfm-strikethrough: 1.0.3 mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 1.0.7 mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 1.0.2 mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 1.5.0 mdast-util-to-markdown: 2.1.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
mdast-util-math@2.0.2: mdast-util-math@3.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/hast': 3.0.4
'@types/mdast': 4.0.4
devlop: 1.1.0
longest-streak: 3.1.0 longest-streak: 3.1.0
mdast-util-to-markdown: 1.5.0 mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
unist-util-remove-position: 5.0.0
transitivePeerDependencies:
- supports-color
mdast-util-newline-to-break@1.0.0: mdast-util-mdx-expression@2.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/estree-jsx': 1.0.5
mdast-util-find-and-replace: 2.2.2 '@types/hast': 3.0.4
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@3.0.1: mdast-util-mdx-jsx@3.1.2:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/estree-jsx': 1.0.5
unist-util-is: 5.2.1 '@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@types/unist': 3.0.2
ccount: 2.0.1
devlop: 1.1.0
mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
parse-entities: 4.0.1
stringify-entities: 4.0.4
unist-util-remove-position: 5.0.0
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
transitivePeerDependencies:
- supports-color
mdast-util-to-hast@12.3.0: mdast-util-mdxjs-esm@2.0.1:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/estree-jsx': 1.0.5
'@types/mdast': 3.0.15 '@types/hast': 3.0.4
mdast-util-definitions: 5.1.2 '@types/mdast': 4.0.4
micromark-util-sanitize-uri: 1.2.0 devlop: 1.1.0
mdast-util-from-markdown: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
mdast-util-newline-to-break@2.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-find-and-replace: 3.0.1
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.0
mdast-util-to-hast@13.2.0:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@ungap/structured-clone': 1.2.0
devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.0
trim-lines: 3.0.1 trim-lines: 3.0.1
unist-util-generated: 2.0.1 unist-util-position: 5.0.0
unist-util-position: 4.0.4 unist-util-visit: 5.0.0
unist-util-visit: 4.1.2 vfile: 6.0.2
mdast-util-to-markdown@1.5.0: mdast-util-to-markdown@2.1.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
'@types/unist': 2.0.10 '@types/unist': 3.0.2
longest-streak: 3.1.0 longest-streak: 3.1.0
mdast-util-phrasing: 3.0.1 mdast-util-phrasing: 4.1.0
mdast-util-to-string: 3.2.0 mdast-util-to-string: 4.0.0
micromark-util-decode-string: 1.1.0 micromark-util-decode-string: 2.0.0
unist-util-visit: 4.1.2 unist-util-visit: 5.0.0
zwitch: 2.0.4 zwitch: 2.0.4
mdast-util-to-string@3.2.0: mdast-util-to-string@3.2.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 3.0.15
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
mdn-data@2.0.14: {} mdn-data@2.0.14: {}
media-typer@0.3.0: {} media-typer@0.3.0: {}
...@@ -15848,114 +16130,174 @@ snapshots: ...@@ -15848,114 +16130,174 @@ snapshots:
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6 uvu: 0.5.6
micromark-extension-gfm-autolink-literal@1.0.5: micromark-core-commonmark@2.0.1:
dependencies: dependencies:
micromark-util-character: 1.2.0 decode-named-character-reference: 1.0.2
micromark-util-sanitize-uri: 1.2.0 devlop: 1.1.0
micromark-util-symbol: 1.1.0 micromark-factory-destination: 2.0.0
micromark-util-types: 1.1.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.1.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.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.1.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.1
micromark-factory-space: 2.0.0
micromark-util-character: 2.1.0
micromark-util-normalize-identifier: 2.0.0
micromark-util-sanitize-uri: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-classify-character: 2.0.0
micromark-util-resolve-all: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-table@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.0
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.0
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-math@3.1.0:
dependencies:
'@types/katex': 0.16.7
devlop: 1.1.0
katex: 0.16.11
micromark-factory-space: 2.0.0
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-footnote@1.1.2: micromark-factory-destination@1.1.0:
dependencies: dependencies:
micromark-core-commonmark: 1.1.0
micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-normalize-identifier: 1.1.0
micromark-util-sanitize-uri: 1.2.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6
micromark-extension-gfm-strikethrough@1.0.7: micromark-factory-destination@2.0.0:
dependencies: dependencies:
micromark-util-chunked: 1.1.0 micromark-util-character: 2.1.0
micromark-util-classify-character: 1.1.0 micromark-util-symbol: 2.0.0
micromark-util-resolve-all: 1.1.0 micromark-util-types: 2.0.0
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
uvu: 0.5.6
micromark-extension-gfm-table@1.0.7: micromark-factory-label@1.1.0:
dependencies: dependencies:
micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6 uvu: 0.5.6
micromark-extension-gfm-tagfilter@1.0.2: micromark-factory-label@2.0.0:
dependencies: dependencies:
micromark-util-types: 1.1.0 devlop: 1.1.0
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-extension-gfm-task-list-item@1.0.5: micromark-factory-space@1.1.0:
dependencies: dependencies:
micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6
micromark-extension-gfm@2.0.3: micromark-factory-space@2.0.0:
dependencies: dependencies:
micromark-extension-gfm-autolink-literal: 1.0.5 micromark-util-character: 2.1.0
micromark-extension-gfm-footnote: 1.1.2 micromark-util-types: 2.0.0
micromark-extension-gfm-strikethrough: 1.0.7
micromark-extension-gfm-table: 1.0.7
micromark-extension-gfm-tagfilter: 1.0.2
micromark-extension-gfm-task-list-item: 1.0.5
micromark-util-combine-extensions: 1.1.0
micromark-util-types: 1.1.0
micromark-extension-math@2.1.2: micromark-factory-title@1.1.0:
dependencies: dependencies:
'@types/katex': 0.16.7
katex: 0.16.11
micromark-factory-space: 1.1.0 micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6
micromark-factory-destination@1.1.0: micromark-factory-title@2.0.0:
dependencies: dependencies:
micromark-util-character: 1.2.0 micromark-factory-space: 2.0.0
micromark-util-symbol: 1.1.0 micromark-util-character: 2.1.0
micromark-util-types: 1.1.0 micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-label@1.1.0: micromark-factory-whitespace@1.1.0:
dependencies: dependencies:
micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6
micromark-factory-space@1.1.0: micromark-factory-whitespace@2.0.0:
dependencies: dependencies:
micromark-util-character: 1.2.0 micromark-factory-space: 2.0.0
micromark-util-types: 1.1.0 micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-factory-title@1.1.0: micromark-util-character@1.2.0:
dependencies: dependencies:
micromark-factory-space: 1.1.0
micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
micromark-factory-whitespace@1.1.0: micromark-util-character@2.1.0:
dependencies: dependencies:
micromark-factory-space: 1.1.0 micromark-util-symbol: 2.0.0
micromark-util-character: 1.2.0 micromark-util-types: 2.0.0
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
micromark-util-character@1.2.0: micromark-util-chunked@1.1.0:
dependencies: dependencies:
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
micromark-util-chunked@1.1.0: micromark-util-chunked@2.0.0:
dependencies: dependencies:
micromark-util-symbol: 1.1.0 micromark-util-symbol: 2.0.0
micromark-util-classify-character@1.1.0: micromark-util-classify-character@1.1.0:
dependencies: dependencies:
...@@ -15963,15 +16305,30 @@ snapshots: ...@@ -15963,15 +16305,30 @@ snapshots:
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
micromark-util-classify-character@2.0.0:
dependencies:
micromark-util-character: 2.1.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-combine-extensions@1.1.0: micromark-util-combine-extensions@1.1.0:
dependencies: dependencies:
micromark-util-chunked: 1.1.0 micromark-util-chunked: 1.1.0
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
micromark-util-combine-extensions@2.0.0:
dependencies:
micromark-util-chunked: 2.0.0
micromark-util-types: 2.0.0
micromark-util-decode-numeric-character-reference@1.1.0: micromark-util-decode-numeric-character-reference@1.1.0:
dependencies: dependencies:
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-decode-numeric-character-reference@2.0.1:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-decode-string@1.1.0: micromark-util-decode-string@1.1.0:
dependencies: dependencies:
decode-named-character-reference: 1.0.2 decode-named-character-reference: 1.0.2
...@@ -15979,24 +16336,49 @@ snapshots: ...@@ -15979,24 +16336,49 @@ snapshots:
micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-decode-numeric-character-reference: 1.1.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-decode-string@2.0.0:
dependencies:
decode-named-character-reference: 1.0.2
micromark-util-character: 2.1.0
micromark-util-decode-numeric-character-reference: 2.0.1
micromark-util-symbol: 2.0.0
micromark-util-encode@1.1.0: {} micromark-util-encode@1.1.0: {}
micromark-util-encode@2.0.0: {}
micromark-util-html-tag-name@1.2.0: {} micromark-util-html-tag-name@1.2.0: {}
micromark-util-html-tag-name@2.0.0: {}
micromark-util-normalize-identifier@1.1.0: micromark-util-normalize-identifier@1.1.0:
dependencies: dependencies:
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-normalize-identifier@2.0.0:
dependencies:
micromark-util-symbol: 2.0.0
micromark-util-resolve-all@1.1.0: micromark-util-resolve-all@1.1.0:
dependencies: dependencies:
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
micromark-util-resolve-all@2.0.0:
dependencies:
micromark-util-types: 2.0.0
micromark-util-sanitize-uri@1.2.0: micromark-util-sanitize-uri@1.2.0:
dependencies: dependencies:
micromark-util-character: 1.2.0 micromark-util-character: 1.2.0
micromark-util-encode: 1.1.0 micromark-util-encode: 1.1.0
micromark-util-symbol: 1.1.0 micromark-util-symbol: 1.1.0
micromark-util-sanitize-uri@2.0.0:
dependencies:
micromark-util-character: 2.1.0
micromark-util-encode: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-subtokenize@1.1.0: micromark-util-subtokenize@1.1.0:
dependencies: dependencies:
micromark-util-chunked: 1.1.0 micromark-util-chunked: 1.1.0
...@@ -16004,10 +16386,21 @@ snapshots: ...@@ -16004,10 +16386,21 @@ snapshots:
micromark-util-types: 1.1.0 micromark-util-types: 1.1.0
uvu: 0.5.6 uvu: 0.5.6
micromark-util-subtokenize@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
micromark-util-symbol@1.1.0: {} micromark-util-symbol@1.1.0: {}
micromark-util-symbol@2.0.0: {}
micromark-util-types@1.1.0: {} micromark-util-types@1.1.0: {}
micromark-util-types@2.0.0: {}
micromark@3.2.0: micromark@3.2.0:
dependencies: dependencies:
'@types/debug': 4.1.12 '@types/debug': 4.1.12
...@@ -16030,6 +16423,28 @@ snapshots: ...@@ -16030,6 +16423,28 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
micromark@4.0.0:
dependencies:
'@types/debug': 4.1.12
debug: 4.3.5
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.1
micromark-factory-space: 2.0.0
micromark-util-character: 2.1.0
micromark-util-chunked: 2.0.0
micromark-util-combine-extensions: 2.0.0
micromark-util-decode-numeric-character-reference: 2.0.1
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.1
micromark-util-symbol: 2.0.0
micromark-util-types: 2.0.0
transitivePeerDependencies:
- supports-color
micromatch@4.0.5: micromatch@4.0.5:
dependencies: dependencies:
braces: 3.0.3 braces: 3.0.3
...@@ -16229,6 +16644,18 @@ snapshots: ...@@ -16229,6 +16644,18 @@ snapshots:
react: 18.3.1 react: 18.3.1
react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-i18next@15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1):
dependencies:
'@babel/runtime': 7.24.8
'@types/hoist-non-react-statics': 3.3.5
core-js: 3.37.1
hoist-non-react-statics: 3.3.2
i18next: 23.11.5
i18next-fs-backend: 2.3.1
next: 14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
react: 18.3.1
react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next@14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8): next@14.2.5(@babel/core@7.24.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8):
dependencies: dependencies:
'@next/env': 14.2.5 '@next/env': 14.2.5
...@@ -16508,6 +16935,17 @@ snapshots: ...@@ -16508,6 +16935,17 @@ snapshots:
is-decimal: 1.0.4 is-decimal: 1.0.4
is-hexadecimal: 1.0.4 is-hexadecimal: 1.0.4
parse-entities@4.0.1:
dependencies:
'@types/unist': 2.0.10
character-entities: 2.0.2
character-entities-legacy: 3.0.0
character-reference-invalid: 2.0.1
decode-named-character-reference: 1.0.2
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
parse-json@5.2.0: parse-json@5.2.0:
dependencies: dependencies:
'@babel/code-frame': 7.24.7 '@babel/code-frame': 7.24.7
...@@ -16898,25 +17336,20 @@ snapshots: ...@@ -16898,25 +17336,20 @@ snapshots:
react-is@18.3.1: {} react-is@18.3.1: {}
react-markdown@8.0.7(@types/react@18.3.1)(react@18.3.1): react-markdown@9.0.1(@types/react@18.3.1)(react@18.3.1):
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
'@types/prop-types': 15.7.12
'@types/react': 18.3.1 '@types/react': 18.3.1
'@types/unist': 2.0.10 devlop: 1.1.0
comma-separated-tokens: 2.0.3 hast-util-to-jsx-runtime: 2.3.0
hast-util-whitespace: 2.0.1 html-url-attributes: 3.0.0
prop-types: 15.8.1 mdast-util-to-hast: 13.2.0
property-information: 6.5.0
react: 18.3.1 react: 18.3.1
react-is: 18.3.1 remark-parse: 11.0.0
remark-parse: 10.0.2 remark-rehype: 11.1.0
remark-rehype: 10.1.0 unified: 11.0.5
space-separated-tokens: 2.0.2 unist-util-visit: 5.0.0
style-to-object: 0.4.4 vfile: 6.0.2
unified: 10.1.2
unist-util-visit: 4.1.2
vfile: 5.3.7
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
...@@ -17076,47 +17509,62 @@ snapshots: ...@@ -17076,47 +17509,62 @@ snapshots:
dependencies: dependencies:
jsesc: 0.5.0 jsesc: 0.5.0
rehype-katex@6.0.3: rehype-external-links@3.0.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
'@types/katex': 0.14.0 '@ungap/structured-clone': 1.2.0
hast-util-from-html-isomorphic: 1.0.0 hast-util-is-element: 3.0.0
hast-util-to-text: 3.1.2 is-absolute-url: 4.0.1
space-separated-tokens: 2.0.2
unist-util-visit: 5.0.0
rehype-katex@7.0.0:
dependencies:
'@types/hast': 3.0.4
'@types/katex': 0.16.7
hast-util-from-html-isomorphic: 2.0.0
hast-util-to-text: 4.0.2
katex: 0.16.11 katex: 0.16.11
unist-util-visit: 4.1.2 unist-util-visit-parents: 6.0.1
vfile: 6.0.2
remark-breaks@3.0.3: remark-breaks@4.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-newline-to-break: 1.0.0 mdast-util-newline-to-break: 2.0.0
unified: 10.1.2 unified: 11.0.5
remark-frontmatter@1.3.3: remark-frontmatter@1.3.3:
dependencies: dependencies:
fault: 1.0.4 fault: 1.0.4
xtend: 4.0.2 xtend: 4.0.2
remark-gfm@3.0.1: remark-gfm@4.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-gfm: 2.0.2 mdast-util-gfm: 3.0.0
micromark-extension-gfm: 2.0.3 micromark-extension-gfm: 3.0.0
unified: 10.1.2 remark-parse: 11.0.0
remark-stringify: 11.0.0
unified: 11.0.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
remark-math@5.1.1: remark-math@6.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-math: 2.0.2 mdast-util-math: 3.0.0
micromark-extension-math: 2.1.2 micromark-extension-math: 3.1.0
unified: 10.1.2 unified: 11.0.5
transitivePeerDependencies:
- supports-color
remark-parse@10.0.2: remark-parse@11.0.0:
dependencies: dependencies:
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-from-markdown: 1.3.1 mdast-util-from-markdown: 2.0.1
unified: 10.1.2 micromark-util-types: 2.0.0
unified: 11.0.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
...@@ -17138,12 +17586,19 @@ snapshots: ...@@ -17138,12 +17586,19 @@ snapshots:
vfile-location: 2.0.6 vfile-location: 2.0.6
xtend: 4.0.2 xtend: 4.0.2
remark-rehype@10.1.0: remark-rehype@11.1.0:
dependencies: dependencies:
'@types/hast': 2.3.10 '@types/hast': 3.0.4
'@types/mdast': 3.0.15 '@types/mdast': 4.0.4
mdast-util-to-hast: 12.3.0 mdast-util-to-hast: 13.2.0
unified: 10.1.2 unified: 11.0.5
vfile: 6.0.2
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-to-markdown: 2.1.0
unified: 11.0.5
repeat-string@1.6.1: {} repeat-string@1.6.1: {}
...@@ -17554,6 +18009,11 @@ snapshots: ...@@ -17554,6 +18009,11 @@ snapshots:
dependencies: dependencies:
safe-buffer: 5.2.1 safe-buffer: 5.2.1
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
strip-ansi@6.0.1: strip-ansi@6.0.1:
dependencies: dependencies:
ansi-regex: 5.0.1 ansi-regex: 5.0.1
...@@ -17587,9 +18047,9 @@ snapshots: ...@@ -17587,9 +18047,9 @@ snapshots:
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
peek-readable: 5.1.3 peek-readable: 5.1.3
style-to-object@0.4.4: style-to-object@1.0.6:
dependencies: dependencies:
inline-style-parser: 0.1.1 inline-style-parser: 0.2.3
styled-jsx@5.1.1(@babel/core@7.24.9)(react@18.3.1): styled-jsx@5.1.1(@babel/core@7.24.9)(react@18.3.1):
dependencies: dependencies:
...@@ -17962,15 +18422,15 @@ snapshots: ...@@ -17962,15 +18422,15 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {} unicode-property-aliases-ecmascript@2.1.0: {}
unified@10.1.2: unified@11.0.5:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
bail: 2.0.2 bail: 2.0.2
devlop: 1.1.0
extend: 3.0.2 extend: 3.0.2
is-buffer: 2.0.5
is-plain-obj: 4.1.0 is-plain-obj: 4.1.0
trough: 2.2.0 trough: 2.2.0
vfile: 5.3.7 vfile: 6.0.2
unified@8.4.2: unified@8.4.2:
dependencies: dependencies:
...@@ -17989,31 +18449,29 @@ snapshots: ...@@ -17989,31 +18449,29 @@ snapshots:
dependencies: dependencies:
imurmurhash: 0.1.4 imurmurhash: 0.1.4
unist-util-find-after@4.0.1: unist-util-find-after@5.0.0:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-is: 5.2.1 unist-util-is: 6.0.0
unist-util-generated@2.0.1: {}
unist-util-is@3.0.0: {} unist-util-is@3.0.0: {}
unist-util-is@5.2.1: unist-util-is@6.0.0:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-position@4.0.4: unist-util-position@5.0.0:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-remove-position@1.1.4: unist-util-remove-position@1.1.4:
dependencies: dependencies:
unist-util-visit: 1.4.1 unist-util-visit: 1.4.1
unist-util-remove-position@4.0.2: unist-util-remove-position@5.0.0:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-visit: 4.1.2 unist-util-visit: 5.0.0
unist-util-stringify-position@2.0.3: unist-util-stringify-position@2.0.3:
dependencies: dependencies:
...@@ -18023,24 +18481,28 @@ snapshots: ...@@ -18023,24 +18481,28 @@ snapshots:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 2.0.10
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.2
unist-util-visit-parents@2.1.2: unist-util-visit-parents@2.1.2:
dependencies: dependencies:
unist-util-is: 3.0.0 unist-util-is: 3.0.0
unist-util-visit-parents@5.1.3: unist-util-visit-parents@6.0.1:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-is: 5.2.1 unist-util-is: 6.0.0
unist-util-visit@1.4.1: unist-util-visit@1.4.1:
dependencies: dependencies:
unist-util-visit-parents: 2.1.2 unist-util-visit-parents: 2.1.2
unist-util-visit@4.1.2: unist-util-visit@5.0.0:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-is: 5.2.1 unist-util-is: 6.0.0
unist-util-visit-parents: 5.1.3 unist-util-visit-parents: 6.0.1
universalify@2.0.1: {} universalify@2.0.1: {}
...@@ -18117,20 +18579,20 @@ snapshots: ...@@ -18117,20 +18579,20 @@ snapshots:
vfile-location@2.0.6: {} vfile-location@2.0.6: {}
vfile-location@4.1.0: vfile-location@5.0.3:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
vfile: 5.3.7 vfile: 6.0.2
vfile-message@2.0.4: vfile-message@2.0.4:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 2.0.10
unist-util-stringify-position: 2.0.3 unist-util-stringify-position: 2.0.3
vfile-message@3.1.4: vfile-message@4.0.2:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
unist-util-stringify-position: 3.0.3 unist-util-stringify-position: 4.0.0
vfile@4.2.1: vfile@4.2.1:
dependencies: dependencies:
...@@ -18139,12 +18601,11 @@ snapshots: ...@@ -18139,12 +18601,11 @@ snapshots:
unist-util-stringify-position: 2.0.3 unist-util-stringify-position: 2.0.3
vfile-message: 2.0.4 vfile-message: 2.0.4
vfile@5.3.7: vfile@6.0.2:
dependencies: dependencies:
'@types/unist': 2.0.10 '@types/unist': 3.0.2
is-buffer: 2.0.5 unist-util-stringify-position: 4.0.0
unist-util-stringify-position: 3.0.3 vfile-message: 4.0.2
vfile-message: 3.1.4
vite-node@1.6.0(@types/node@20.14.11)(sass@1.77.8)(terser@5.31.3): vite-node@1.6.0(@types/node@20.14.11)(sass@1.77.8)(terser@5.31.3):
dependencies: dependencies:
......
...@@ -52,13 +52,14 @@ ...@@ -52,13 +52,14 @@
"react-dom": "18.3.1", "react-dom": "18.3.1",
"react-hook-form": "7.43.1", "react-hook-form": "7.43.1",
"react-i18next": "14.1.2", "react-i18next": "14.1.2",
"react-markdown": "^8.0.7", "react-markdown": "^9.0.1",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"reactflow": "^11.7.4", "reactflow": "^11.7.4",
"rehype-katex": "^6.0.2", "rehype-external-links": "^3.0.0",
"remark-breaks": "^3.0.3", "rehype-katex": "^7.0.0",
"remark-gfm": "^3.0.1", "remark-breaks": "^4.0.0",
"remark-math": "^5.1.1", "remark-gfm": "^4.0.0",
"remark-math": "^6.0.0",
"request-ip": "^3.3.0", "request-ip": "^3.3.0",
"sass": "^1.58.3", "sass": "^1.58.3",
"use-context-selector": "^1.4.4", "use-context-selector": "^1.4.4",
......
...@@ -36,4 +36,4 @@ const MdImage = ({ src }: { src?: string }) => { ...@@ -36,4 +36,4 @@ const MdImage = ({ src }: { src?: string }) => {
); );
}; };
export default React.memo(MdImage); export default MdImage;
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import 'katex/dist/katex.min.css'; import 'katex/dist/katex.min.css';
import RemarkMath from 'remark-math'; import RemarkMath from 'remark-math'; // Math syntax
import RemarkBreaks from 'remark-breaks'; import RemarkBreaks from 'remark-breaks'; // Line break
import RehypeKatex from 'rehype-katex'; import RehypeKatex from 'rehype-katex'; // Math render
import RemarkGfm from 'remark-gfm'; import RemarkGfm from 'remark-gfm'; // Special markdown syntax
import RehypeExternalLinks from 'rehype-external-links';
import styles from './index.module.scss'; import styles from './index.module.scss';
import dynamic from 'next/dynamic'; import dynamic from 'next/dynamic';
...@@ -15,6 +16,7 @@ import { useTranslation } from 'next-i18next'; ...@@ -15,6 +16,7 @@ import { useTranslation } from 'next-i18next';
import { EventNameEnum, eventBus } from '@/web/common/utils/eventbus'; import { EventNameEnum, eventBus } from '@/web/common/utils/eventbus';
import MyIcon from '@fastgpt/web/components/common/Icon'; import MyIcon from '@fastgpt/web/components/common/Icon';
import { MARKDOWN_QUOTE_SIGN } from '@fastgpt/global/core/chat/constants'; import { MARKDOWN_QUOTE_SIGN } from '@fastgpt/global/core/chat/constants';
import { CodeClassNameEnum } from './utils';
const CodeLight = dynamic(() => import('./CodeLight'), { ssr: false }); const CodeLight = dynamic(() => import('./CodeLight'), { ssr: false });
const MermaidCodeBlock = dynamic(() => import('./img/MermaidCodeBlock'), { ssr: false }); const MermaidCodeBlock = dynamic(() => import('./img/MermaidCodeBlock'), { ssr: false });
...@@ -24,15 +26,6 @@ const EChartsCodeBlock = dynamic(() => import('./img/EChartsCodeBlock'), { ssr: ...@@ -24,15 +26,6 @@ const EChartsCodeBlock = dynamic(() => import('./img/EChartsCodeBlock'), { ssr:
const ChatGuide = dynamic(() => import('./chat/Guide'), { ssr: false }); const ChatGuide = dynamic(() => import('./chat/Guide'), { ssr: false });
const QuestionGuide = dynamic(() => import('./chat/QuestionGuide'), { ssr: false }); const QuestionGuide = dynamic(() => import('./chat/QuestionGuide'), { ssr: false });
export enum CodeClassName {
guide = 'guide',
questionGuide = 'questionGuide',
mermaid = 'mermaid',
echarts = 'echarts',
quote = 'quote',
files = 'files'
}
const Markdown = ({ const Markdown = ({
source = '', source = '',
showAnimation = false showAnimation = false
...@@ -51,20 +44,22 @@ const Markdown = ({ ...@@ -51,20 +44,22 @@ const Markdown = ({
[] []
); );
const formatSource = useMemo(() => {
const formatSource = source const formatSource = source
// .replace(/\\n/g, '\n') .replace(/(http[s]?:\/\/[^\s,。]+)([。,])/g, '$1 $2') // Follow the link with a space
.replace(/(http[s]?:\/\/[^\s,。]+)([。,])/g, '$1 $2')
.replace(/\n*(\[QUOTE SIGN\]\(.*\))/g, '$1'); .replace(/\n*(\[QUOTE SIGN\]\(.*\))/g, '$1');
return formatSource;
}, [source]);
return ( return (
<ReactMarkdown <ReactMarkdown
className={`markdown ${styles.markdown} className={`markdown ${styles.markdown}
${showAnimation ? `${formatSource ? styles.waitingAnimation : styles.animation}` : ''} ${showAnimation ? `${formatSource ? styles.waitingAnimation : styles.animation}` : ''}
`} `}
remarkPlugins={[RemarkMath, [RemarkGfm, { singleTilde: false }], RemarkBreaks]} remarkPlugins={[RemarkMath, [RemarkGfm, { singleTilde: false }], RemarkBreaks]}
rehypePlugins={[RehypeKatex]} rehypePlugins={[RehypeKatex, [RehypeExternalLinks, { target: '_blank' }]]}
components={components} components={components}
linkTarget={'_blank'}
> >
{formatSource} {formatSource}
</ReactMarkdown> </ReactMarkdown>
...@@ -73,6 +68,7 @@ const Markdown = ({ ...@@ -73,6 +68,7 @@ const Markdown = ({
export default React.memo(Markdown); export default React.memo(Markdown);
/* Custom dom */
const Code = React.memo(function Code(e: any) { const Code = React.memo(function Code(e: any) {
const { inline, className, children } = e; const { inline, className, children } = e;
...@@ -82,17 +78,16 @@ const Code = React.memo(function Code(e: any) { ...@@ -82,17 +78,16 @@ const Code = React.memo(function Code(e: any) {
const strChildren = String(children); const strChildren = String(children);
const Component = useMemo(() => { const Component = useMemo(() => {
if (codeType === CodeClassName.mermaid) { if (codeType === CodeClassNameEnum.mermaid) {
return <MermaidCodeBlock code={strChildren} />; return <MermaidCodeBlock code={strChildren} />;
} }
if (codeType === CodeClassNameEnum.guide) {
if (codeType === CodeClassName.guide) {
return <ChatGuide text={strChildren} />; return <ChatGuide text={strChildren} />;
} }
if (codeType === CodeClassName.questionGuide) { if (codeType === CodeClassNameEnum.questionGuide) {
return <QuestionGuide text={strChildren} />; return <QuestionGuide text={strChildren} />;
} }
if (codeType === CodeClassName.echarts) { if (codeType === CodeClassNameEnum.echarts) {
return <EChartsCodeBlock code={strChildren} />; return <EChartsCodeBlock code={strChildren} />;
} }
...@@ -105,7 +100,6 @@ const Code = React.memo(function Code(e: any) { ...@@ -105,7 +100,6 @@ const Code = React.memo(function Code(e: any) {
return Component; return Component;
}); });
const Image = React.memo(function Image({ src }: { src?: string }) { const Image = React.memo(function Image({ src }: { src?: string }) {
return <MdImage src={src} />; return <MdImage src={src} />;
}); });
......
export enum CodeClassNameEnum {
guide = 'guide',
questionGuide = 'questionGuide',
mermaid = 'mermaid',
echarts = 'echarts',
quote = 'quote',
files = 'files',
latex = 'latex'
}
function htmlTableToLatex(html: string) {
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const table = doc.querySelector('table');
if (!table) return '';
let latex = '\\begin{tabular}{';
// 获取列数
const columns = table.querySelectorAll('tr:first-child th, tr:first-child td').length;
latex += '|' + 'c|'.repeat(columns) + '}\n\\hline\n';
// 创建一个二维数组来跟踪单元格合并情况
const cellTracker = Array.from({ length: table.rows.length }, () => Array(columns).fill(false));
// 遍历行
table.querySelectorAll('tr').forEach((row, rowIndex) => {
const cells = row.querySelectorAll('th, td');
let cellTexts: string[] = [];
let colIndex = 0;
cells.forEach((cell) => {
// 跳过已经被合并的单元格
while (cellTracker[rowIndex][colIndex]) {
colIndex++;
}
// @ts-ignore
const rowspan = parseInt(cell.getAttribute('rowspan') || 1, 10);
// @ts-ignore
const colspan = parseInt(cell.getAttribute('colspan') || 1, 10);
// 添加单元格内容
let cellText = cell.textContent?.trim() || '';
if (colspan > 1) {
cellText = `\\multicolumn{${colspan}}{|c|}{${cellText}}`;
}
if (rowspan > 1) {
cellText = `\\multirow{${rowspan}}{*}{${cellText}}`;
}
cellTexts.push(cellText);
// 标记合并的单元格
for (let i = 0; i < rowspan; i++) {
for (let j = 0; j < colspan; j++) {
cellTracker[rowIndex + i][colIndex + j] = true;
}
}
colIndex += colspan;
});
latex += cellTexts.join(' & ') + ' \\\\\n\\hline\n';
});
latex += '\\end{tabular}';
return `\`\`\`${CodeClassNameEnum.latex}
${latex}
\`\`\``;
}
export function convertHtmlTablesToLatex(input: string) {
const tableRegex = /<table[\s\S]*?<\/table>/gi;
return input.replace(tableRegex, (match) => htmlTableToLatex(match));
}
...@@ -16,6 +16,7 @@ import MyModal from '@fastgpt/web/components/common/MyModal'; ...@@ -16,6 +16,7 @@ import MyModal from '@fastgpt/web/components/common/MyModal';
type Props = TextareaProps & { type Props = TextareaProps & {
title?: string; title?: string;
iconSrc?: string;
// variables: string[]; // variables: string[];
}; };
...@@ -24,7 +25,11 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta ...@@ -24,7 +25,11 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta
const TextareaRef = useRef<HTMLTextAreaElement>(null); const TextareaRef = useRef<HTMLTextAreaElement>(null);
const { t } = useTranslation(); const { t } = useTranslation();
const { title = t('common:core.app.edit.Prompt Editor'), ...childProps } = props; const {
title = t('common:core.app.edit.Prompt Editor'),
iconSrc = 'modal/edit',
...childProps
} = props;
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();
...@@ -32,7 +37,7 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta ...@@ -32,7 +37,7 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta
<> <>
<Editor textareaRef={TextareaRef} {...childProps} onOpenModal={onOpen} /> <Editor textareaRef={TextareaRef} {...childProps} onOpenModal={onOpen} />
{isOpen && ( {isOpen && (
<MyModal iconSrc="/imgs/modal/edit.svg" title={title} isOpen onClose={onClose}> <MyModal iconSrc={iconSrc} title={title} isOpen onClose={onClose}>
<ModalBody> <ModalBody>
<Editor <Editor
textareaRef={ModalTextareaRef} textareaRef={ModalTextareaRef}
......
...@@ -96,9 +96,7 @@ const VariableEdit = ({ ...@@ -96,9 +96,7 @@ const VariableEdit = ({
<Box> <Box>
<Flex alignItems={'center'}> <Flex alignItems={'center'}>
<MyIcon name={'core/app/simpleMode/variable'} w={'20px'} /> <MyIcon name={'core/app/simpleMode/variable'} w={'20px'} />
<FormLabel ml={2} fontWeight={'medium'}> <FormLabel ml={2}>{t('common:core.module.Variable')}</FormLabel>
{t('common:core.module.Variable')}
</FormLabel>
<ChatFunctionTip type={'variable'} /> <ChatFunctionTip type={'variable'} />
<Box flex={1} /> <Box flex={1} />
<Button <Button
......
...@@ -17,6 +17,8 @@ const WelcomeTextConfig = (props: TextareaProps) => { ...@@ -17,6 +17,8 @@ const WelcomeTextConfig = (props: TextareaProps) => {
<ChatFunctionTip type={'welcome'} /> <ChatFunctionTip type={'welcome'} />
</Flex> </Flex>
<MyTextarea <MyTextarea
iconSrc={'core/app/simpleMode/chat'}
title={t('common:core.app.Welcome Text')}
mt={2} mt={2}
rows={6} rows={6}
fontSize={'sm'} fontSize={'sm'}
......
import Markdown, { CodeClassName } from '@/components/Markdown'; import Markdown from '@/components/Markdown';
import { CodeClassNameEnum } from '@/components/Markdown/utils';
import { import {
Accordion, Accordion,
AccordionButton, AccordionButton,
...@@ -41,7 +42,7 @@ const AIResponseBox = ({ value, index, chat, isLastChild, isChatting, questionGu ...@@ -41,7 +42,7 @@ const AIResponseBox = ({ value, index, chat, isLastChild, isChatting, questionGu
index === chat.value.length - 1 index === chat.value.length - 1
) { ) {
source = `${source} source = `${source}
\`\`\`${CodeClassName.questionGuide} \`\`\`${CodeClassNameEnum.questionGuide}
${JSON.stringify(questionGuides)}`; ${JSON.stringify(questionGuides)}`;
} }
......
...@@ -14,6 +14,7 @@ const SearchParamsTip = ({ ...@@ -14,6 +14,7 @@ const SearchParamsTip = ({
limit = 1500, limit = 1500,
responseEmptyText, responseEmptyText,
usingReRank = false, usingReRank = false,
datasetSearchUsingExtensionQuery,
queryExtensionModel queryExtensionModel
}: { }: {
searchMode: `${DatasetSearchModeEnum}`; searchMode: `${DatasetSearchModeEnum}`;
...@@ -21,6 +22,7 @@ const SearchParamsTip = ({ ...@@ -21,6 +22,7 @@ const SearchParamsTip = ({
limit?: number; limit?: number;
responseEmptyText?: string; responseEmptyText?: string;
usingReRank?: boolean; usingReRank?: boolean;
datasetSearchUsingExtensionQuery?: boolean;
queryExtensionModel?: string; queryExtensionModel?: string;
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
...@@ -32,11 +34,11 @@ const SearchParamsTip = ({ ...@@ -32,11 +34,11 @@ const SearchParamsTip = ({
const extensionModelName = useMemo( const extensionModelName = useMemo(
() => () =>
queryExtensionModel datasetSearchUsingExtensionQuery
? llmModelList.find((item) => item.model === queryExtensionModel)?.name ?? ? llmModelList.find((item) => item.model === queryExtensionModel)?.name ??
llmModelList[0]?.name llmModelList[0]?.name
: undefined, : undefined,
[llmModelList, queryExtensionModel] [datasetSearchUsingExtensionQuery, llmModelList, queryExtensionModel]
); );
return ( return (
......
...@@ -52,7 +52,7 @@ const ConfigPerModal = ({ ...@@ -52,7 +52,7 @@ const ConfigPerModal = ({
> >
<ModalBody> <ModalBody>
<HStack> <HStack>
<Avatar src={avatar} w={'1.75rem'} /> <Avatar src={avatar} w={'1.75rem'} borderRadius={'md'} />
<Box>{name}</Box> <Box>{name}</Box>
</HStack> </HStack>
{!isInheritPermission && ( {!isInheritPermission && (
......
import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@fastgpt/service/common/response';
import { connectToDatabase } from '@/service/mongo';
import { authCert } from '@fastgpt/service/support/permission/auth/common';
import { MongoDataset } from '@fastgpt/service/core/dataset/schema';
import { DatasetDefaultPermissionVal } from '@fastgpt/global/support/permission/dataset/constant';
/* pg 中的数据搬到 mongo dataset.datas 中,并做映射 */
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
await connectToDatabase();
await authCert({ req, authRoot: true });
await MongoDataset.updateMany(
{
inheritPermission: { $exists: false }
},
{
$set: {
inheritPermission: true
}
}
);
await MongoDataset.updateMany(
{
defaultPermission: { $exists: false }
},
{
$set: {
defaultPermission: DatasetDefaultPermissionVal
}
}
);
jsonRes(res, {
message: 'success'
});
} catch (error) {
console.log(error);
jsonRes(res, {
code: 500,
error
});
}
}
...@@ -89,7 +89,7 @@ async function handler(req: ApiRequestProps<AppUpdateParams, { appId: string }>) ...@@ -89,7 +89,7 @@ async function handler(req: ApiRequestProps<AppUpdateParams, { appId: string }>)
defaultPermission: updatedDefaultPermission defaultPermission: updatedDefaultPermission
}), }),
// Not root, update default permission // Not root, update default permission
...(isDefaultPermissionChanged && { inheritPermission: false }), ...(app.parentId && isDefaultPermissionChanged && { inheritPermission: false }),
...(teamTags && { teamTags }), ...(teamTags && { teamTags }),
...(formatNodes && { ...(formatNodes && {
modules: formatNodes modules: formatNodes
......
...@@ -15,7 +15,7 @@ import { removeEmptyUserInput } from '@fastgpt/global/core/chat/utils'; ...@@ -15,7 +15,7 @@ import { removeEmptyUserInput } from '@fastgpt/global/core/chat/utils';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant'; import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants'; import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { import {
filterPluginInputVariables, removePluginInputVariables,
updatePluginInputByVariables updatePluginInputByVariables
} from '@fastgpt/global/core/workflow/utils'; } from '@fastgpt/global/core/workflow/utils';
import { NextAPI } from '@/service/middleware/entry'; import { NextAPI } from '@/service/middleware/entry';
...@@ -66,7 +66,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { ...@@ -66,7 +66,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
// Plugin need to replace inputs // Plugin need to replace inputs
if (isPlugin) { if (isPlugin) {
nodes = updatePluginInputByVariables(nodes, variables); nodes = updatePluginInputByVariables(nodes, variables);
variables = filterPluginInputVariables(variables, nodes); variables = removePluginInputVariables(variables, nodes);
} else { } else {
if (!userInput) { if (!userInput) {
throw new Error('Params Error'); throw new Error('Params Error');
......
...@@ -24,7 +24,7 @@ async function handler(req: NextApiRequest) { ...@@ -24,7 +24,7 @@ async function handler(req: NextApiRequest) {
searchMode, searchMode,
usingReRank, usingReRank,
datasetSearchUsingExtensionQuery = false, datasetSearchUsingExtensionQuery = true,
datasetSearchExtensionModel, datasetSearchExtensionModel,
datasetSearchExtensionBg = '' datasetSearchExtensionBg = ''
} = req.body as SearchTestProps; } = req.body as SearchTestProps;
......
...@@ -78,7 +78,7 @@ async function handler( ...@@ -78,7 +78,7 @@ async function handler(
defaultPermission: updatedDefaultPermission defaultPermission: updatedDefaultPermission
}), }),
// update the defaultPermission // update the defaultPermission
...(isDefaultPermissionChanged && { inheritPermission: false }) ...(dataset.parentId && isDefaultPermissionChanged && { inheritPermission: false })
}, },
{ session } { session }
); );
......
...@@ -55,7 +55,7 @@ import { getAppLatestVersion } from '@fastgpt/service/core/app/controller'; ...@@ -55,7 +55,7 @@ import { getAppLatestVersion } from '@fastgpt/service/core/app/controller';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant'; import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants'; import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { import {
filterPluginInputVariables, removePluginInputVariables,
updatePluginInputByVariables updatePluginInputByVariables
} from '@fastgpt/global/core/workflow/utils'; } from '@fastgpt/global/core/workflow/utils';
import { getNanoid } from '@fastgpt/global/common/string/tools'; import { getNanoid } from '@fastgpt/global/common/string/tools';
...@@ -238,7 +238,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { ...@@ -238,7 +238,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
) )
: storeNodes2RuntimeNodes(nodes, getDefaultEntryNodeIds(nodes)); : storeNodes2RuntimeNodes(nodes, getDefaultEntryNodeIds(nodes));
const runtimeVariables = filterPluginInputVariables( const runtimeVariables = removePluginInputVariables(
variables, variables,
storeNodes2RuntimeNodes(nodes, getDefaultEntryNodeIds(nodes)) storeNodes2RuntimeNodes(nodes, getDefaultEntryNodeIds(nodes))
); );
......
...@@ -113,8 +113,8 @@ const EditForm = ({ ...@@ -113,8 +113,8 @@ const EditForm = ({
...item, ...item,
parent: { parent: {
id: 'VARIABLE_NODE_ID', id: 'VARIABLE_NODE_ID',
label: '全局变量', label: t('common:core.module.Variable'),
avatar: '/imgs/workflow/variable.png' avatar: 'core/workflow/template/variable'
} }
})), })),
[appForm.chatConfig.variables, t] [appForm.chatConfig.variables, t]
...@@ -230,6 +230,7 @@ const EditForm = ({ ...@@ -230,6 +230,7 @@ const EditForm = ({
similarity={appForm.dataset.similarity} similarity={appForm.dataset.similarity}
limit={appForm.dataset.limit} limit={appForm.dataset.limit}
usingReRank={appForm.dataset.usingReRank} usingReRank={appForm.dataset.usingReRank}
datasetSearchUsingExtensionQuery={appForm.dataset.datasetSearchUsingExtensionQuery}
queryExtensionModel={appForm.dataset.datasetSearchExtensionModel} queryExtensionModel={appForm.dataset.datasetSearchExtensionModel}
/> />
</Box> </Box>
......
...@@ -92,7 +92,12 @@ const Header = ({ ...@@ -92,7 +92,12 @@ const Header = ({
)} )}
<Flex pt={[2, 3]} alignItems={'flex-start'} position={'relative'}> <Flex pt={[2, 3]} alignItems={'flex-start'} position={'relative'}>
<Box flex={'1'}> <Box flex={'1'}>
<FolderPath paths={paths} hoverStyle={{ color: 'primary.600' }} onClick={onclickRoute} /> <FolderPath
rootName={t('app:all_apps')}
paths={paths}
hoverStyle={{ color: 'primary.600' }}
onClick={onclickRoute}
/>
</Box> </Box>
{isPc && ( {isPc && (
<Box position={'absolute'} left={'50%'} transform={'translateX(-50%)'}> <Box position={'absolute'} left={'50%'} transform={'translateX(-50%)'}>
......
...@@ -6,6 +6,7 @@ import { ...@@ -6,6 +6,7 @@ import {
Box, Box,
Button, Button,
Flex, Flex,
HStack,
Input, Input,
InputGroup, InputGroup,
InputLeftElement, InputLeftElement,
...@@ -287,6 +288,8 @@ const RenderList = React.memo(function RenderList({ ...@@ -287,6 +288,8 @@ const RenderList = React.memo(function RenderList({
</MyTooltip> </MyTooltip>
); );
})} })}
{/* Plugin input config */}
{!!configTool && ( {!!configTool && (
<MyModal <MyModal
isOpen isOpen
...@@ -295,6 +298,19 @@ const RenderList = React.memo(function RenderList({ ...@@ -295,6 +298,19 @@ const RenderList = React.memo(function RenderList({
overflow={'auto'} overflow={'auto'}
> >
<ModalBody> <ModalBody>
<HStack mb={4} spacing={1} fontSize={'sm'}>
<MyIcon name={'common/info'} w={'1.25rem'} />
<Box flex={1}>{t('app:tool_input_param_tip')}</Box>
{configTool.inputExplanationUrl && (
<Box
cursor={'pointer'}
color={'primary.500'}
onClick={() => window.open(configTool.inputExplanationUrl, '_blank')}
>
{t('app:workflow.Input guide')}
</Box>
)}
</HStack>
{configTool.inputs {configTool.inputs
.filter((item) => !item.toolDescription) .filter((item) => !item.toolDescription)
.map((input) => { .map((input) => {
......
...@@ -334,7 +334,7 @@ const RenderList = React.memo(function RenderList({ ...@@ -334,7 +334,7 @@ const RenderList = React.memo(function RenderList({
const { computedNewNodeName } = useWorkflowUtils(); const { computedNewNodeName } = useWorkflowUtils();
const formatTemplates = useMemo<NodeTemplateListType>(() => { const formatTemplates = useMemo<NodeTemplateListType>(() => {
const copy: NodeTemplateListType = cloneDeep(workflowNodeTemplateList(t)); const copy: NodeTemplateListType = cloneDeep(workflowNodeTemplateList);
templates.forEach((item) => { templates.forEach((item) => {
const index = copy.findIndex((template) => template.type === item.templateType); const index = copy.findIndex((template) => template.type === item.templateType);
if (index === -1) return; if (index === -1) return;
......
import React from 'react'; import React from 'react';
import { Box, Flex, FlexProps } from '@chakra-ui/react'; import { Box, StackProps, HStack } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
const IOTitle = ({
text,
inputExplanationUrl,
...props
}: { text?: 'Input' | 'Output' | string; inputExplanationUrl?: string } & StackProps) => {
const { t } = useTranslation();
const IOTitle = ({ text, ...props }: { text?: 'Input' | 'Output' | string } & FlexProps) => {
return ( return (
<Flex fontSize={'md'} alignItems={'center'} fontWeight={'medium'} mb={3} {...props}> <HStack fontSize={'md'} alignItems={'center'} fontWeight={'medium'} mb={3} {...props}>
<Box w={'3px'} h={'14px'} borderRadius={'13px'} bg={'primary.600'} mr={1.5} /> <Box w={'3px'} h={'14px'} borderRadius={'13px'} bg={'primary.600'} />
{text} <Box>{text}</Box>
</Flex> <Box flex={1} />
{inputExplanationUrl && (
<Box
cursor={'pointer'}
color={'primary.500'}
onClick={() => window.open(inputExplanationUrl, '_blank')}
>
{t('app:workflow.Input guide')}
</Box>
)}
</HStack>
); );
}; };
......
...@@ -37,7 +37,10 @@ const NodeSimple = ({ ...@@ -37,7 +37,10 @@ const NodeSimple = ({
{filterHiddenInputs.length > 0 && ( {filterHiddenInputs.length > 0 && (
<> <>
<Container> <Container>
<IOTitle text={t('common:common.Input')} /> <IOTitle
text={t('common:common.Input')}
inputExplanationUrl={data.inputExplanationUrl}
/>
<RenderInput nodeId={nodeId} flowInputList={commonInputs} /> <RenderInput nodeId={nodeId} flowInputList={commonInputs} />
</Container> </Container>
</> </>
......
...@@ -80,27 +80,36 @@ const NodeCard = (props: Props) => { ...@@ -80,27 +80,36 @@ const NodeCard = (props: Props) => {
const node = nodeList.find((node) => node.nodeId === nodeId); const node = nodeList.find((node) => node.nodeId === nodeId);
const { openConfirm: onOpenConfirmSync, ConfirmModal: ConfirmSyncModal } = useConfirm({ const { openConfirm: onOpenConfirmSync, ConfirmModal: ConfirmSyncModal } = useConfirm({
content: appT('module.Confirm Sync') content: t('app:module.Confirm Sync')
}); });
const { data: newNodeVersion, runAsync: getNodeVersion } = useRequest2( const { data: nodeTemplate, runAsync: getNodeLatestTemplate } = useRequest2(
async () => { async () => {
if (node?.flowNodeType === FlowNodeTypeEnum.pluginModule) { if (node?.flowNodeType === FlowNodeTypeEnum.pluginModule) {
if (!node?.pluginId) return; if (!node?.pluginId) return;
const template = await getPreviewPluginNode({ appId: node.pluginId }); const template = await getPreviewPluginNode({ appId: node.pluginId });
return template.version;
// Focus update plugin latest inputExplanationUrl
onChangeNode({
nodeId,
type: 'attr',
key: 'inputExplanationUrl',
value: template.inputExplanationUrl
});
return template;
} else { } else {
const template = moduleTemplatesFlat.find( const template = moduleTemplatesFlat.find(
(item) => item.flowNodeType === node?.flowNodeType (item) => item.flowNodeType === node?.flowNodeType
); );
return template?.version; return template;
} }
}, },
{ {
manual: false manual: false
} }
); );
const hasNewVersion = newNodeVersion && newNodeVersion !== node?.version; const hasNewVersion = nodeTemplate && nodeTemplate.version !== node?.version;
const { runAsync: onClickSyncVersion } = useRequest2( const { runAsync: onClickSyncVersion } = useRequest2(
async () => { async () => {
...@@ -119,10 +128,10 @@ const NodeCard = (props: Props) => { ...@@ -119,10 +128,10 @@ const NodeCard = (props: Props) => {
node: getLatestNodeTemplate(node, template) node: getLatestNodeTemplate(node, template)
}); });
} }
await getNodeVersion(); await getNodeLatestTemplate();
}, },
{ {
refreshDeps: [node, nodeId, onResetNode, getNodeVersion] refreshDeps: [node, nodeId, onResetNode, getNodeLatestTemplate]
} }
); );
......
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import type { RenderInputProps } from '../type'; import type { RenderInputProps } from '../type';
import { Box, Button, Flex, useDisclosure } from '@chakra-ui/react'; import { Flex, useDisclosure } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constants'; import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constants';
import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant'; import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
...@@ -54,7 +54,8 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => { ...@@ -54,7 +54,8 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => {
if (data[input.key] !== undefined) { if (data[input.key] !== undefined) {
setData((state) => ({ setData((state) => ({
...state, ...state,
[input.key]: input.value // @ts-ignore
[input.key]: input.value || state[input.key]
})); }));
} }
}); });
...@@ -82,6 +83,7 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => { ...@@ -82,6 +83,7 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => {
similarity={data.similarity} similarity={data.similarity}
limit={data.limit} limit={data.limit}
usingReRank={data.usingReRank} usingReRank={data.usingReRank}
datasetSearchUsingExtensionQuery={data.datasetSearchUsingExtensionQuery}
queryExtensionModel={data.datasetSearchExtensionModel} queryExtensionModel={data.datasetSearchExtensionModel}
/> />
</> </>
......
...@@ -10,7 +10,7 @@ const TextInput = ({ item, nodeId }: RenderInputProps) => { ...@@ -10,7 +10,7 @@ const TextInput = ({ item, nodeId }: RenderInputProps) => {
const Render = useMemo(() => { const Render = useMemo(() => {
return ( return (
<Input <Input
placeholder={item.placeholder} placeholder={item.placeholder ?? item.description}
defaultValue={item.value} defaultValue={item.value}
bg={'white'} bg={'white'}
px={3} px={3}
......
...@@ -14,7 +14,6 @@ import { AppUpdateParams } from '@/global/core/app/api'; ...@@ -14,7 +14,6 @@ import { AppUpdateParams } from '@/global/core/app/api';
import dynamic from 'next/dynamic'; import dynamic from 'next/dynamic';
import { useI18n } from '@/web/context/I18n'; import { useI18n } from '@/web/context/I18n';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants'; import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { useThrottleEffect } from 'ahooks';
const MoveModal = dynamic(() => import('@/components/common/folder/MoveModal')); const MoveModal = dynamic(() => import('@/components/common/folder/MoveModal'));
type AppListContextType = { type AppListContextType = {
......
...@@ -131,10 +131,10 @@ const MobileDrawer = ({ ...@@ -131,10 +131,10 @@ const MobileDrawer = ({
}} }}
list={[ list={[
...(isTeamChat ...(isTeamChat
? [{ label: t('common:all_apps'), value: TabEnum.recently }] ? [{ label: t('app:all_apps'), value: TabEnum.recently }]
: [ : [
{ label: t('common:core.chat.Recent use'), value: TabEnum.recently }, { label: t('common:core.chat.Recent use'), value: TabEnum.recently },
{ label: t('common:all_apps'), value: TabEnum.app } { label: t('app:all_apps'), value: TabEnum.app }
]) ])
]} ]}
value={currentTab} value={currentTab}
......
...@@ -71,7 +71,7 @@ const Test = ({ datasetId }: { datasetId: string }) => { ...@@ -71,7 +71,7 @@ const Test = ({ datasetId }: { datasetId: string }) => {
usingReRank: false, usingReRank: false,
limit: 5000, limit: 5000,
similarity: 0, similarity: 0,
datasetSearchUsingExtensionQuery: false, datasetSearchUsingExtensionQuery: true,
datasetSearchExtensionModel: llmModelList[0].model, datasetSearchExtensionModel: llmModelList[0].model,
datasetSearchExtensionBg: '' datasetSearchExtensionBg: ''
} }
...@@ -432,6 +432,7 @@ const TestResults = React.memo(function TestResults({ ...@@ -432,6 +432,7 @@ const TestResults = React.memo(function TestResults({
similarity={datasetTestItem.similarity} similarity={datasetTestItem.similarity}
limit={datasetTestItem.limit} limit={datasetTestItem.limit}
usingReRank={datasetTestItem.usingReRank} usingReRank={datasetTestItem.usingReRank}
datasetSearchUsingExtensionQuery={!!datasetTestItem.queryExtensionModel}
queryExtensionModel={datasetTestItem.queryExtensionModel} queryExtensionModel={datasetTestItem.queryExtensionModel}
/> />
</Box> </Box>
......
...@@ -68,7 +68,11 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) { ...@@ -68,7 +68,11 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
const { parentId = null } = router.query as { parentId?: string | null }; const { parentId = null } = router.query as { parentId?: string | null };
const { data: myDatasets = [], runAsync: loadMyDatasets } = useRequest2( const {
data: myDatasets = [],
runAsync: loadMyDatasets,
loading: isFetchingDatasets
} = useRequest2(
() => () =>
getDatasets({ getDatasets({
parentId parentId
...@@ -83,7 +87,7 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) { ...@@ -83,7 +87,7 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
() => (parentId ? getDatasetById(parentId) : Promise.resolve(undefined)), () => (parentId ? getDatasetById(parentId) : Promise.resolve(undefined)),
{ {
manual: false, manual: false,
refreshDeps: [parentId, myDatasets] refreshDeps: [parentId]
} }
); );
...@@ -95,16 +99,8 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) { ...@@ -95,16 +99,8 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
} }
); );
const { runAsync: refetchDatasets, loading: isFetchingDatasets } = useRequest2(
() => loadMyDatasets(),
{
manual: false,
refreshDeps: [parentId]
}
);
const { runAsync: onUpdateDataset } = useRequest2(putDatasetById, { const { runAsync: onUpdateDataset } = useRequest2(putDatasetById, {
onSuccess: () => Promise.all([refetchDatasets(), refetchPaths(), loadMyDatasets()]) onSuccess: () => Promise.all([refetchFolderDetail(), refetchPaths(), loadMyDatasets()])
}); });
const onMoveDataset = useCallback( const onMoveDataset = useCallback(
...@@ -138,7 +134,6 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) { ...@@ -138,7 +134,6 @@ function DatasetContextProvider({ children }: { children: React.ReactNode }) {
}); });
const contextValue = { const contextValue = {
refetchDatasets,
isFetchingDatasets, isFetchingDatasets,
setMoveDatasetId, setMoveDatasetId,
paths, paths,
......
...@@ -40,8 +40,8 @@ export const getGlobalVariableNode = ({ ...@@ -40,8 +40,8 @@ export const getGlobalVariableNode = ({
flowNodeType: FlowNodeTypeEnum.emptyNode, flowNodeType: FlowNodeTypeEnum.emptyNode,
sourceHandle: getHandleConfig(false, false, false, false), sourceHandle: getHandleConfig(false, false, false, false),
targetHandle: getHandleConfig(false, false, false, false), targetHandle: getHandleConfig(false, false, false, false),
avatar: '/imgs/workflow/variable.png', avatar: 'core/workflow/template/variable',
name: '全局变量', name: t('common:core.module.Variable'),
intro: '', intro: '',
unique: true, unique: true,
forbidDelete: true, forbidDelete: true,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment