From 11df819d0d1fcddbd2af368502da53d774370178 Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Wed, 20 Sep 2023 17:09:02 +0800 Subject: [PATCH 1/3] [feature]: Support rule knowledge page --- craco.config.js | 2 +- package.json | 2 + src/api/common.d.ts | 34 +- src/api/rule_template/index.d.ts | 16 +- src/api/rule_template/index.ts | 34 + src/api/sql_audit_record/index.d.ts | 2 + src/api/sql_audit_record/index.ts | 4 +- .../AuditResultErrorMessage/index.tsx | 34 +- src/locale/zh-CN/index.ts | 2 + src/locale/zh-CN/ruleKnowledge.ts | 11 + .../RuleUnderstand/EditKnowledgeContent.tsx | 26 + .../RuleKnowledge/RuleUnderstand/index.tsx | 128 ++ .../RuleUnderstand/index.type.ts | 13 + src/page/RuleKnowledge/index.tsx | 59 + src/page/SqlAuditRecord/Create/index.tsx | 2 +- src/router/config.tsx | 12 + src/types/router.type.ts | 1 + yarn.lock | 1174 ++++++++++++++++- 18 files changed, 1530 insertions(+), 26 deletions(-) create mode 100644 src/locale/zh-CN/ruleKnowledge.ts create mode 100644 src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx create mode 100644 src/page/RuleKnowledge/RuleUnderstand/index.tsx create mode 100644 src/page/RuleKnowledge/RuleUnderstand/index.type.ts create mode 100644 src/page/RuleKnowledge/index.tsx diff --git a/craco.config.js b/craco.config.js index abf52cc2..6f64f363 100644 --- a/craco.config.js +++ b/craco.config.js @@ -101,7 +101,7 @@ module.exports = { const res = {}; for (let i = 0; i < 10; i++) { res[`/v${i}`] = { - target: 'http://124.70.158.246:8889', + target: 'http://10.186.62.87:10000', secure: false, changeOrigin: true, ws: true, diff --git a/package.json b/package.json index 5521c1bb..14fa6bae 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "@mui/styles": "^5.11.16", "@mui/system": "^5.9.1", "@reduxjs/toolkit": "^1.9.1", + "@uiw/react-md-editor": "^3.23.5", "ahooks": "^3.7.5", "antd": "^4.24.8", "axios": "^0.27.2", @@ -25,6 +26,7 @@ "react-monaco-editor": "^0.43.0", "react-redux": "^8.0.5", "react-router-dom": "^6.3.0", + "rehype-sanitize": "^6.0.0", "sql-formatter": "^12.2.2", "typescript": "^5.0.2", "use-resize-observer": "^9.0.2", diff --git a/src/api/common.d.ts b/src/api/common.d.ts index 74b4264f..35252e32 100644 --- a/src/api/common.d.ts +++ b/src/api/common.d.ts @@ -1316,7 +1316,11 @@ export interface IGetSqlManageListResp { message?: string; - total_nums?: number; + sql_manage_bad_num?: number; + + sql_manage_optimized_num?: number; + + sql_manage_total_num?: number; } export interface IGetSyncInstanceTaskListResV1 { @@ -2031,6 +2035,18 @@ export interface IRoleUserCount { role?: string; } +export interface IRuleInfo { + annotation?: string; + + desc?: string; +} + +export interface IRuleKnowledgeResV1 { + knowledge_content?: string; + + rule?: IRuleInfo; +} + export interface IRuleParamReqV1 { key?: string; @@ -2224,24 +2240,20 @@ export interface ISqlManage { id?: number; - instance?: string; + instance_name?: string; last_appear_time?: string; remark?: string; + schema_name?: string; + source?: string; sql?: string; sql_fingerprint?: string; - sql_manage_bad_num?: number; - - sql_manage_optimized_num?: number; - - sql_manage_total_num?: number; - status?: string; } @@ -2591,6 +2603,10 @@ export interface IUpdateRoleReqV1 { role_desc?: string; } +export interface IUpdateRuleKnowledgeReq { + knowledge_content?: string; +} + export interface IUpdateRuleTemplateReqV1 { desc?: string; @@ -2612,8 +2628,6 @@ export interface IUpdateSMTPConfigurationReqV1 { } export interface IUpdateSQLAuditRecordReqV1 { - sql_audit_record_id?: string; - tags?: string[]; } diff --git a/src/api/rule_template/index.d.ts b/src/api/rule_template/index.d.ts index 6396f2db..df94ebea 100644 --- a/src/api/rule_template/index.d.ts +++ b/src/api/rule_template/index.d.ts @@ -11,13 +11,15 @@ import { IGetProjectRuleTemplateResV1, IUpdateProjectRuleTemplateReqV1, ICloneProjectRuleTemplateReqV1, + IRuleKnowledgeResV1, + IUpdateRuleKnowledgeReq, IGetRuleTemplatesResV1, ICreateRuleTemplateReqV1, IParseProjectRuleTemplateFileResV1, IGetRuleTemplateResV1, IUpdateRuleTemplateReqV1, ICloneRuleTemplateReqV1, - IGetRulesResV1 + IGetRulesResV1, } from '../common.d'; export interface IGetCustomRulesV1Params { @@ -125,6 +127,18 @@ export interface IExportProjectRuleTemplateV1Params { rule_template_name: string; } +export interface IGetRuleKnowledgeV1Params { + rule_name: string; +} + +export interface IGetRuleKnowledgeV1Return extends IRuleKnowledgeResV1 {} + +export interface IUpdateRuleKnowledgeParams extends IUpdateRuleKnowledgeReq { + rule_name: string; +} + +export interface IUpdateRuleKnowledgeReturn extends IBaseRes {} + export interface IGetRuleTemplateTipsV1Params { filter_db_type?: string; } diff --git a/src/api/rule_template/index.ts b/src/api/rule_template/index.ts index 0b0e9b4b..4e74ea38 100644 --- a/src/api/rule_template/index.ts +++ b/src/api/rule_template/index.ts @@ -34,6 +34,10 @@ import { ICloneProjectRuleTemplateV1Params, ICloneProjectRuleTemplateV1Return, IExportProjectRuleTemplateV1Params, + IGetRuleKnowledgeV1Params, + IGetRuleKnowledgeV1Return, + IUpdateRuleKnowledgeParams, + IUpdateRuleKnowledgeReturn, IGetRuleTemplateTipsV1Params, IGetRuleTemplateTipsV1Return, IGetRuleTemplateListV1Params, @@ -275,6 +279,36 @@ class RuleTemplateService extends ServiceBase { ); } + public getRuleKnowledgeV1( + params: IGetRuleKnowledgeV1Params, + options?: AxiosRequestConfig + ) { + const paramsData = this.cloneDeep(params); + const rule_name = paramsData.rule_name; + delete paramsData.rule_name; + + return this.get( + `/v1/rule_knowledge/${rule_name}/`, + paramsData, + options + ); + } + + public updateRuleKnowledge( + params: IUpdateRuleKnowledgeParams, + options?: AxiosRequestConfig + ) { + const paramsData = this.cloneDeep(params); + const rule_name = paramsData.rule_name; + delete paramsData.rule_name; + + return this.patch( + `/v1/rule_knowledge/${rule_name}/`, + paramsData, + options + ); + } + public getRuleTemplateTipsV1( params: IGetRuleTemplateTipsV1Params, options?: AxiosRequestConfig diff --git a/src/api/sql_audit_record/index.d.ts b/src/api/sql_audit_record/index.d.ts index da61d6f2..af288d51 100644 --- a/src/api/sql_audit_record/index.d.ts +++ b/src/api/sql_audit_record/index.d.ts @@ -68,6 +68,8 @@ export interface IGetSQLAuditRecordV1Return extends IGetSQLAuditRecordResV1 {} export interface IUpdateSQLAuditRecordV1Params extends IUpdateSQLAuditRecordReqV1 { project_name: string; + + sql_audit_record_id: string; } export interface IUpdateSQLAuditRecordV1Return extends IBaseRes {} diff --git a/src/api/sql_audit_record/index.ts b/src/api/sql_audit_record/index.ts index e9471394..d5ea0e29 100644 --- a/src/api/sql_audit_record/index.ts +++ b/src/api/sql_audit_record/index.ts @@ -16,7 +16,7 @@ import { IGetSQLAuditRecordV1Params, IGetSQLAuditRecordV1Return, IUpdateSQLAuditRecordV1Params, - IUpdateSQLAuditRecordV1Return, + IUpdateSQLAuditRecordV1Return } from './index.d'; class SqlAuditRecordService extends ServiceBase { @@ -44,7 +44,7 @@ class SqlAuditRecordService extends ServiceBase { config.headers = { ...headers, - 'Content-Type': 'multipart/form-data', + 'Content-Type': 'multipart/form-data' }; const paramsData = new FormData(); diff --git a/src/components/AuditResultErrorMessage/index.tsx b/src/components/AuditResultErrorMessage/index.tsx index 12754bfe..91abcbe8 100644 --- a/src/components/AuditResultErrorMessage/index.tsx +++ b/src/components/AuditResultErrorMessage/index.tsx @@ -5,12 +5,15 @@ import { AuditResultErrorMessageProps } from './index.type'; import EmptyBox from '../EmptyBox'; import { useRequest } from 'ahooks'; import rule_template from '../../api/rule_template'; +import { Link } from '../Link'; import './index.less'; +import { useTranslation } from 'react-i18next'; const AuditResultErrorMessage: React.FC = ( props ) => { + const { t } = useTranslation(); const filterRuleNames = useMemo( () => (props.auditResult?.map((v) => v.rule_name ?? '') ?? []).filter( @@ -43,14 +46,33 @@ const AuditResultErrorMessage: React.FC = ( - rule.rule_name === v.rule_name) - ?.annotation ?? '' + rule.rule_name === v.rule_name) } + defaultNode={v.message} > - {v.message} - + + + {ruleInfo?.find( + (rule) => rule.rule_name === v.rule_name + )?.annotation ?? ''} + + + {/* IFTRUE_isEE */} + {' '} + + {t('common.showMore')} + + {/* FITRUE_isEE */} + + } + > + {v.message} + + ); diff --git a/src/locale/zh-CN/index.ts b/src/locale/zh-CN/index.ts index 61b8a990..ac290533 100644 --- a/src/locale/zh-CN/index.ts +++ b/src/locale/zh-CN/index.ts @@ -25,6 +25,7 @@ import operationRecord from './operationRecord'; import customRule from './customRule'; import ruleManager from './ruleManager'; import sqlAudit from './sqlAudit'; +import ruleKnowledge from './ruleKnowledge'; // eslint-disable-next-line import/no-anonymous-default-export export default { @@ -56,5 +57,6 @@ export default { customRule, ruleManager, sqlAudit, + ruleKnowledge, }, }; diff --git a/src/locale/zh-CN/ruleKnowledge.ts b/src/locale/zh-CN/ruleKnowledge.ts new file mode 100644 index 00000000..977e2096 --- /dev/null +++ b/src/locale/zh-CN/ruleKnowledge.ts @@ -0,0 +1,11 @@ +/* eslint-disable import/no-anonymous-default-export */ +export default { + pageTitle: '知识库', + pageDesc: '您可以在这里了解规则的更多信息, 并进行沉淀', + + ruleUnderstanding: '规则理解', + edit: '编辑', + noData: '暂无数据, 请编辑', + hasDirtyDataTips: '当前内容已经发生更改,是否确认取消修改?', + successTips: '规则理解修改成功', +}; diff --git a/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx b/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx new file mode 100644 index 00000000..21163efb --- /dev/null +++ b/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx @@ -0,0 +1,26 @@ +import MDEditor from '@uiw/react-md-editor'; +import { EditKnowledgeContentProps } from './index.type'; +import rehypeSanitize from 'rehype-sanitize'; + +const EditKnowledgeContent: React.FC = ({ + value, + onChange, + setHasDirtyData, +}) => { + return ( + <> + { + onChange?.(v); + setHasDirtyData(true); + }} + /> + + ); +}; + +export default EditKnowledgeContent; diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.tsx b/src/page/RuleKnowledge/RuleUnderstand/index.tsx new file mode 100644 index 00000000..b20a35cf --- /dev/null +++ b/src/page/RuleKnowledge/RuleUnderstand/index.tsx @@ -0,0 +1,128 @@ +import { Button, Card, Empty, Modal, Space, Typography, message } from 'antd'; +import { RuleUnderstandProps } from './index.type'; +import { useTranslation } from 'react-i18next'; +import EmptyBox from '../../../components/EmptyBox'; +import { useBoolean } from 'ahooks'; +import EditKnowledgeContent from './EditKnowledgeContent'; +import FooterButtonWrapper from '../../../components/FooterButtonWrapper'; +import { useEffect, useState } from 'react'; +import MDEditor from '@uiw/react-md-editor'; +import rehypeSanitize from 'rehype-sanitize'; +import rule_template from '../../../api/rule_template'; +import { ResponseCode } from '../../../data/common'; + +const RuleUnderstand: React.FC = ({ + content, + ruleName, + refresh, +}) => { + const { t } = useTranslation(); + const [modifyFlag, { setTrue: startModify, setFalse: modifyFinish }] = + useBoolean(); + const [hasDirtyData, setHasDirtyData] = useState(false); + + const [editValue, setEditValue] = useState(); + const [submitLoading, { setFalse: submitFinish, setTrue: startSubmit }] = + useBoolean(); + + const cancel = () => { + if (hasDirtyData) { + Modal.warning({ + content: t('ruleKnowledge.hasDirtyDataTips'), + onOk: () => { + modifyFinish(); + setHasDirtyData(false); + setEditValue(content); + }, + okCancel: true, + okText: t('common.ok'), + }); + } else { + modifyFinish(); + } + }; + const submit = () => { + startSubmit(); + rule_template + .updateRuleKnowledge({ + rule_name: ruleName, + knowledge_content: editValue, + }) + .then((res) => { + if (res.data.code === ResponseCode.SUCCESS) { + message.success(t('ruleKnowledge.successTips')); + setHasDirtyData(false); + modifyFinish(); + refresh(); + setEditValue(''); + } + }) + .finally(() => { + submitFinish(); + }); + }; + + useEffect(() => { + if (modifyFlag) { + setEditValue(content); + } + }, [content, modifyFlag]); + + return ( + <> + + + + } + > + {modifyFlag ? ( + + ) : ( + + {t('ruleKnowledge.noData')} + + } + /> + } + > + + + )} + + + + + + + + + + + + ); +}; + +export default RuleUnderstand; diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.type.ts b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts new file mode 100644 index 00000000..e5162c30 --- /dev/null +++ b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts @@ -0,0 +1,13 @@ +import { MDEditorProps } from '@uiw/react-md-editor'; + +export type RuleUnderstandProps = { + ruleName: string; + content?: string; + refresh: () => void; +}; + +export type EditKnowledgeContentProps = { + value: MDEditorProps['value']; + onChange: MDEditorProps['onChange']; + setHasDirtyData: (val: boolean) => void; +}; diff --git a/src/page/RuleKnowledge/index.tsx b/src/page/RuleKnowledge/index.tsx new file mode 100644 index 00000000..ff48c277 --- /dev/null +++ b/src/page/RuleKnowledge/index.tsx @@ -0,0 +1,59 @@ +import { Card, PageHeader, Space, Typography } from 'antd'; +import { useTranslation } from 'react-i18next'; +import { useParams } from 'react-router-dom'; +import { useTheme } from '@mui/styles'; +import { useRequest } from 'ahooks'; +import rule_template from '../../api/rule_template'; +import RuleUnderstand from './RuleUnderstand'; + +const RuleKnowledge: React.FC = () => { + const { t } = useTranslation(); + const theme = useTheme(); + const { ruleName = '' } = useParams<{ ruleName: string }>(); + + const { + data: ruleKnowledgeInfo, + loading, + refresh, + } = useRequest( + () => + rule_template.getRuleKnowledgeV1({ rule_name: ruleName }).then((res) => { + return res.data; + }), + { + ready: !!ruleName, + } + ); + + return ( + <> + + {t('ruleKnowledge.pageDesc')} + + +
+ + + + {ruleKnowledgeInfo?.rule?.desc ?? '-'} + + + {ruleKnowledgeInfo?.rule?.annotation ?? '-'} + + + + + +
+ + ); +}; +export default RuleKnowledge; diff --git a/src/page/SqlAuditRecord/Create/index.tsx b/src/page/SqlAuditRecord/Create/index.tsx index 976f91ba..0a123d6a 100644 --- a/src/page/SqlAuditRecord/Create/index.tsx +++ b/src/page/SqlAuditRecord/Create/index.tsx @@ -58,7 +58,7 @@ const SQLAuditCreate: React.FC = () => { sql_audit_record .updateSQLAuditRecordV1({ tags: values.tags, - sql_audit_record_id: record.sql_audit_record_id, + sql_audit_record_id: record.sql_audit_record_id ?? '', project_name: projectName, }) .then((res) => { diff --git a/src/router/config.tsx b/src/router/config.tsx index 42e22747..a27b3f57 100644 --- a/src/router/config.tsx +++ b/src/router/config.tsx @@ -38,6 +38,10 @@ const Rule = React.lazy( () => import(/* webpackChunkName: "Rule" */ '../page/Rule') ); +const RuleKnowledge = React.lazy( + () => import(/* webpackChunkName: "RuleKnowledge" */ '../page/RuleKnowledge') +); + const DataSource = React.lazy( () => import(/* webpackChunkName: "DataSource" */ '../page/DataSource') ); @@ -597,6 +601,14 @@ export const globalRouterConfig: RouterConfigItem< icon: , key: 'rule', }, + /* IFTRUE_isEE */ + { + path: 'rule/knowledge/:ruleName', + key: 'ruleKnowledge', + element: , + hideInSliderMenu: true, + }, + /* FITRUE_isEE */ { key: 'ruleManager', icon: , diff --git a/src/types/router.type.ts b/src/types/router.type.ts index 2920c560..963e856e 100644 --- a/src/types/router.type.ts +++ b/src/types/router.type.ts @@ -6,6 +6,7 @@ import { I18nKey } from './common.type'; export type GlobalRouterItemKeyLiteral = | 'dashboard' | 'rule' + | 'ruleKnowledge' | 'sqlQuery' | 'reportStatistics' | 'account' diff --git a/yarn.lock b/yarn.lock index e6774d88..e90e3d60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1293,6 +1293,13 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@^7.14.6": + version "7.22.15" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -2526,6 +2533,13 @@ resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-2.0.1.tgz#ffb6620d290624f3726aa362c0c8a4b44c8d7200" integrity sha512-TF8aoF5cHcLO7W7403blM7L1T+6NF3XMyN3fxyUolq2uOcFeicG/khQg/dGxiCJWoAcmYulYN7LYSRKO54IXaA== +"@types/debug@^4.0.0": + version "4.1.8" + resolved "https://registry.npmmirror.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== + dependencies: + "@types/ms" "*" + "@types/enzyme@^3.10.8": version "3.10.12" resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.12.tgz#ac4494801b38188935580642f772ad18f72c132f" @@ -2591,6 +2605,20 @@ dependencies: "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.5" + resolved "https://registry.npmmirror.com/@types/hast/-/hast-2.3.5.tgz#08caac88b44d0fdd04dc17a19142355f43bd8a7a" + integrity sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg== + dependencies: + "@types/unist" "^2" + +"@types/hast@^3.0.0": + version "3.0.0" + resolved "https://registry.npmmirror.com/@types/hast/-/hast-3.0.0.tgz#47ebd2892a623fa7e517ba392834880ff288475e" + integrity sha512-SoytUJRuf68HXYqcXicQIhCrLQjqeYU2anikr4G3p3Iz+OZO5QDQpDj++gv+RenHsnUBwNZ2dumBArF8VLSk2Q== + dependencies: + "@types/unist" "*" + "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -2679,11 +2707,23 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.192.tgz#5790406361a2852d332d41635d927f1600811285" integrity sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A== +"@types/mdast@^3.0.0": + version "3.0.12" + resolved "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.12.tgz#beeb511b977c875a5b0cc92eab6fcac2f0895514" + integrity sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg== + dependencies: + "@types/unist" "^2" + "@types/mime@*": version "3.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.npmmirror.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node@*": version "18.15.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" @@ -2704,12 +2744,22 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/parse5@^6.0.0": + version "6.0.3" + resolved "https://registry.npmmirror.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== + "@types/prettier@^2.1.5": version "2.7.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== -"@types/prop-types@*", "@types/prop-types@^15.7.5": +"@types/prismjs@^1.0.0": + version "1.26.0" + resolved "https://registry.npmmirror.com/@types/prismjs/-/prismjs-1.26.0.tgz#a1c3809b0ad61c62cac6d4e0c56d610c910b7654" + integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== + +"@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== @@ -2841,6 +2891,16 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.0" + resolved "https://registry.npmmirror.com/@types/unist/-/unist-3.0.0.tgz#988ae8af1e5239e89f9fbb1ade4c935f4eeedf9a" + integrity sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w== + +"@types/unist@^2", "@types/unist@^2.0.0": + version "2.0.8" + resolved "https://registry.npmmirror.com/@types/unist/-/unist-2.0.8.tgz#bb197b9639aa1a04cf464a617fe800cccd92ad5c" + integrity sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw== + "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" @@ -2963,6 +3023,44 @@ "@typescript-eslint/types" "5.57.1" eslint-visitor-keys "^3.3.0" +"@uiw/copy-to-clipboard@~1.0.12": + version "1.0.15" + resolved "https://registry.npmmirror.com/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.15.tgz#959cebbae64df353964647bb5b9d705176b2e613" + integrity sha512-1bbGZ3T+SGmA07BoVPK4UCUDcowDN/moctviJGQexfOc9qL8TMLDQPr7mTPvDKhgJkgnlKkAQNFU8PiarIi9sQ== + +"@uiw/react-markdown-preview@^4.1.14": + version "4.1.15" + resolved "https://registry.npmmirror.com/@uiw/react-markdown-preview/-/react-markdown-preview-4.1.15.tgz#82f7ca4d7dc0e9896856fd795b5aa063d1209d2a" + integrity sha512-N9itShGvsK5Bh5NETMK5l1nPK8l3iYuN6ygUdIgEHoN0xXkyiAYHP9jC6o8x6JYNWg8z+e0jSbLGjHlyBFO0SA== + dependencies: + "@babel/runtime" "^7.17.2" + "@uiw/copy-to-clipboard" "~1.0.12" + react-markdown "~8.0.0" + rehype-attr "~2.1.0" + rehype-autolink-headings "~6.1.1" + rehype-ignore "^1.0.1" + rehype-prism-plus "1.6.1" + rehype-raw "^6.1.1" + rehype-rewrite "~3.0.6" + rehype-slug "~5.1.0" + remark-gfm "~3.0.1" + unist-util-visit "^4.1.0" + +"@uiw/react-md-editor@^3.23.5": + version "3.23.5" + resolved "https://registry.npmmirror.com/@uiw/react-md-editor/-/react-md-editor-3.23.5.tgz#ee449c278d2e449894c72b45363f3bd6ec97d63f" + integrity sha512-plghfA4BRKeJgwEBudLg7alLVXI2pVVMCesPeZDg3BfmaFpCwQZ3wTUh8y6Agjh/judMJPwuZdyBu4FISnSG6Q== + dependencies: + "@babel/runtime" "^7.14.6" + "@uiw/react-markdown-preview" "^4.1.14" + rehype "~12.0.1" + rehype-prism-plus "~1.6.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -3676,6 +3774,11 @@ babel-preset-react-app@^10.0.1: babel-plugin-macros "^3.1.0" babel-plugin-transform-react-remove-prop-types "^0.4.24" +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3691,6 +3794,11 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +bcp-47-match@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== + bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -3891,6 +3999,11 @@ case-sensitive-paths-webpack-plugin@^2.4.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -3945,6 +4058,26 @@ char-regex@^2.0.0: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -4145,6 +4278,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4437,6 +4575,11 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" +css-selector-parser@^1.0.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -4632,7 +4775,7 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.0, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.0, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4656,6 +4799,13 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4753,6 +4903,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4806,6 +4961,11 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4813,6 +4973,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +direction@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/direction/-/direction-2.0.1.tgz#71800dd3c4fa102406502905d3866e65bdebb985" + integrity sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA== + discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" @@ -5233,6 +5398,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -5607,6 +5777,11 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -5943,6 +6118,11 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +github-slugger@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" + integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== + gl-matrix@^3.0.0, gl-matrix@^3.1.0, gl-matrix@^3.3.0, gl-matrix@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" @@ -6130,6 +6310,145 @@ has@^1.0.3, has@~1.0.3: dependencies: function-bind "^1.1.1" +hast-util-from-parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" + integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + hastscript "^7.0.0" + property-information "^6.0.0" + vfile "^5.0.0" + vfile-location "^4.0.0" + web-namespaces "^2.0.0" + +hast-util-has-property@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz#8ec99c3e8f02626304ee438cdb9f0528b017e083" + integrity sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg== + +hast-util-heading-rank@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/hast-util-heading-rank/-/hast-util-heading-rank-2.1.1.tgz#063b43b9cfb56a1a8ded84dd68d8af69e8864545" + integrity sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-is-element@^2.0.0: + version "2.1.3" + resolved "https://registry.npmmirror.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz#cd3279cfefb70da6d45496068f020742256fc471" + integrity sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + +hast-util-parse-selector@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" + integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-raw@^7.0.0, hast-util-raw@^7.2.0: + version "7.2.3" + resolved "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" + integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-util-from-parse5 "^7.0.0" + hast-util-to-parse5 "^7.0.0" + html-void-elements "^2.0.0" + parse5 "^6.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-sanitize@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/hast-util-sanitize/-/hast-util-sanitize-5.0.0.tgz#041ef2247fe8f34b5f2bb4398c545e465e5a8c0e" + integrity sha512-L0g/qhOA82zG2hA3O29hnlv4mLU7YVVT1if5JZSr2tKO1ywkQbuMDcN05btgX0HtpqDXQniAM0ar0K+Lv4MDBQ== + dependencies: + "@types/hast" "^3.0.0" + "@ungap/structured-clone" "^1.2.0" + unist-util-position "^5.0.0" + +hast-util-select@^5.0.5, hast-util-select@~5.0.1: + version "5.0.5" + resolved "https://registry.npmmirror.com/hast-util-select/-/hast-util-select-5.0.5.tgz#be9ccb71d2278681ca024727f12abd4f93b3e9bc" + integrity sha512-QQhWMhgTFRhCaQdgTKzZ5g31GLQ9qRb1hZtDPMqQaOhpLBziWcshUS0uCR5IJ0U1jrK/mxg35fmcq+Dp/Cy2Aw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + bcp-47-match "^2.0.0" + comma-separated-tokens "^2.0.0" + css-selector-parser "^1.0.0" + direction "^2.0.0" + hast-util-has-property "^2.0.0" + hast-util-to-string "^2.0.0" + hast-util-whitespace "^2.0.0" + not "^0.1.0" + nth-check "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +hast-util-to-html@^8.0.0: + version "8.0.4" + resolved "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc" + integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-raw "^7.0.0" + hast-util-whitespace "^2.0.0" + html-void-elements "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-to-parse5@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" + integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz#b008b0a4ea472bf34dd390b7eea1018726ae152a" + integrity sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== + +hastscript@^7.0.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" + integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^3.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6212,6 +6531,11 @@ html-parse-stringify@^3.0.1: dependencies: void-elements "3.1.0" +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + html-webpack-plugin@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" @@ -6428,6 +6752,11 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + inquirer@^8.1.0: version "8.2.5" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" @@ -6473,6 +6802,19 @@ ipaddr.js@^2.0.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" @@ -6522,6 +6864,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -6541,6 +6888,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -6568,6 +6920,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" @@ -6620,6 +6977,11 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -7628,6 +7990,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + klona@^2.0.4, klona@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" @@ -7814,6 +8181,11 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -7886,6 +8258,149 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +markdown-table@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" + integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== + +mdast-util-definitions@^5.0.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-find-and-replace@^2.0.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1" + integrity sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw== + dependencies: + "@types/mdast" "^3.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.3.1" + resolved "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-gfm-autolink-literal@^1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06" + integrity sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA== + dependencies: + "@types/mdast" "^3.0.0" + ccount "^2.0.0" + mdast-util-find-and-replace "^2.0.0" + micromark-util-character "^1.0.0" + +mdast-util-gfm-footnote@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz#ce5e49b639c44de68d5bf5399877a14d5020424e" + integrity sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + micromark-util-normalize-identifier "^1.0.0" + +mdast-util-gfm-strikethrough@^1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz#5470eb105b483f7746b8805b9b989342085795b7" + integrity sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-table@^1.0.0: + version "1.0.7" + resolved "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz#3552153a146379f0f9c4c1101b071d70bbed1a46" + integrity sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg== + dependencies: + "@types/mdast" "^3.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-task-list-item@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz#b280fcf3b7be6fd0cc012bbe67a59831eb34097b" + integrity sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz#e92f4d8717d74bdba6de57ed21cc8b9552e2d0b6" + integrity sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg== + dependencies: + mdast-util-from-markdown "^1.0.0" + mdast-util-gfm-autolink-literal "^1.0.0" + mdast-util-gfm-footnote "^1.0.0" + mdast-util-gfm-strikethrough "^1.0.0" + mdast-util-gfm-table "^1.0.0" + mdast-util-gfm-task-list-item "^1.0.0" + mdast-util-to-markdown "^1.0.0" + +mdast-util-phrasing@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" + integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== + dependencies: + "@types/mdast" "^3.0.0" + unist-util-is "^5.0.0" + +mdast-util-to-hast@^12.1.0: + version "12.3.0" + resolved "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-definitions "^5.0.0" + micromark-util-sanitize-uri "^1.1.0" + trim-lines "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" + integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^3.0.0" + mdast-util-to-string "^3.0.0" + micromark-util-decode-string "^1.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -7928,6 +8443,279 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-extension-gfm-autolink-literal@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz#5853f0e579bbd8ef9e39a7c0f0f27c5a063a66e7" + integrity sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-extension-gfm-footnote@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz#05e13034d68f95ca53c99679040bc88a6f92fe2e" + integrity sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q== + dependencies: + micromark-core-commonmark "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-strikethrough@^1.0.0: + version "1.0.7" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz#c8212c9a616fa3bf47cb5c711da77f4fdc2f80af" + integrity sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-table@^1.0.0: + version "1.0.7" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz#dcb46074b0c6254c3fc9cc1f6f5002c162968008" + integrity sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-tagfilter@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz#aa7c4dd92dabbcb80f313ebaaa8eb3dac05f13a7" + integrity sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g== + dependencies: + micromark-util-types "^1.0.0" + +micromark-extension-gfm-task-list-item@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz#b52ce498dc4c69b6a9975abafc18f275b9dde9f4" + integrity sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz#e517e8579949a5024a493e49204e884aa74f5acf" + integrity sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ== + dependencies: + micromark-extension-gfm-autolink-literal "^1.0.0" + micromark-extension-gfm-footnote "^1.0.0" + micromark-extension-gfm-strikethrough "^1.0.0" + micromark-extension-gfm-table "^1.0.0" + micromark-extension-gfm-tagfilter "^1.0.0" + micromark-extension-gfm-task-list-item "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-destination@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-whitespace@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== + +micromark-util-html-tag-name@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== + +micromark-util-normalize-identifier@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.1.0" + resolved "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -8030,6 +8818,11 @@ moo@^0.5.0: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8186,6 +8979,11 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +not@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -8205,7 +9003,7 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -nth-check@^2.0.1: +nth-check@^2.0.0, nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -8447,6 +9245,20 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-entities@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -8462,6 +9274,11 @@ parse-node-version@^1.0.1: resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + parse5-htmlparser2-tree-adapter@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" @@ -8470,7 +9287,7 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@6.0.1: +parse5@6.0.1, parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -9207,7 +10024,7 @@ prompts@^2.0.1, prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@15.x, prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9216,6 +10033,11 @@ prop-types@15.x, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +property-information@^6.0.0: + version "6.3.0" + resolved "https://registry.npmmirror.com/property-information/-/property-information-6.3.0.tgz#ba4a06ec6b4e1e90577df9931286953cdf4282c3" + integrity sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg== + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -9788,6 +10610,27 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-markdown@~8.0.0: + version "8.0.7" + resolved "https://registry.npmmirror.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" + integrity sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.4.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + react-monaco-editor@^0.43.0: version "0.43.0" resolved "https://registry.yarnpkg.com/react-monaco-editor/-/react-monaco-editor-0.43.0.tgz#495578470db7b27ab306af813b31f206a6bf9d1c" @@ -9988,6 +10831,16 @@ redux@^4.2.0: dependencies: "@babel/runtime" "^7.9.2" +refractor@^4.8.0: + version "4.8.1" + resolved "https://registry.npmmirror.com/refractor/-/refractor-4.8.1.tgz#fbdd889333a3d86c9c864479622855c9b38e9d42" + integrity sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg== + dependencies: + "@types/hast" "^2.0.0" + "@types/prismjs" "^1.0.0" + hastscript "^7.0.0" + parse-entities "^4.0.0" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -10005,6 +10858,11 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" @@ -10045,11 +10903,162 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" +rehype-attr@~2.1.0: + version "2.1.4" + resolved "https://registry.npmmirror.com/rehype-attr/-/rehype-attr-2.1.4.tgz#ea3cde2af6e392d3b3c2a3625417823af5e1ed1c" + integrity sha512-iAeaL5JyF4XxkcvWzpi/0SAF7iV7qOTaHS56tJuEsXziQc3+PEmMn65kV8OFgbO9mRVY7J1fRC/aLvot1PsNkg== + dependencies: + unified "~10.1.1" + unist-util-visit "~4.1.0" + +rehype-autolink-headings@~6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz#0cb874a56f3de6ead1c2268d7f0fc5006f244db5" + integrity sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA== + dependencies: + "@types/hast" "^2.0.0" + extend "^3.0.0" + hast-util-has-property "^2.0.0" + hast-util-heading-rank "^2.0.0" + hast-util-is-element "^2.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +rehype-ignore@^1.0.1: + version "1.0.5" + resolved "https://registry.npmmirror.com/rehype-ignore/-/rehype-ignore-1.0.5.tgz#8f74b291d29c3daf1ea3031dd57d9e59ef3da08c" + integrity sha512-JQXS5eDwXaYKwB8JEYFJJA/YvGi0sSNUOYuiURMtuPTg8tuWHFB91JMYLbImH1FyvyGQM4fIBqNMAPB50WR2Bw== + dependencies: + hast-util-select "^5.0.5" + unified "^10.1.2" + unist-util-visit "^4.1.2" + +rehype-parse@^8.0.0, rehype-parse@^8.0.2: + version "8.0.5" + resolved "https://registry.npmmirror.com/rehype-parse/-/rehype-parse-8.0.5.tgz#ccffc21e08e288c7846614f8dc1dc23d603a4a80" + integrity sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^7.0.0" + parse5 "^6.0.0" + unified "^10.0.0" + +rehype-prism-plus@1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/rehype-prism-plus/-/rehype-prism-plus-1.6.1.tgz#84a89c7a7756ddcb112df40b9df5f465c3ea9981" + integrity sha512-HCLGvrbn9J1FSvsHo3/mJstToVJGe8czeUULpgPZhc3X21XJHCjYlZSBL4dH784WPUz/sW4PCATf8J1o7fgblA== + dependencies: + hast-util-to-string "^2.0.0" + parse-numeric-range "^1.3.0" + refractor "^4.8.0" + rehype-parse "^8.0.2" + unist-util-filter "^4.0.0" + unist-util-visit "^4.0.0" + +rehype-prism-plus@~1.6.1: + version "1.6.3" + resolved "https://registry.npmmirror.com/rehype-prism-plus/-/rehype-prism-plus-1.6.3.tgz#8bf23a4cfc3419349770bb9064a91bdab04fae86" + integrity sha512-F6tn376zimnvy+xW0bSnryul+rvVL7NhDIkavc9kAuzDx5zIZW04A6jdXPkcFBhojcqZB8b6pHt6CLqiUx+Tbw== + dependencies: + hast-util-to-string "^2.0.0" + parse-numeric-range "^1.3.0" + refractor "^4.8.0" + rehype-parse "^8.0.2" + unist-util-filter "^4.0.0" + unist-util-visit "^4.0.0" + +rehype-raw@^6.1.1: + version "6.1.1" + resolved "https://registry.npmmirror.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4" + integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-raw "^7.2.0" + unified "^10.0.0" + +rehype-rewrite@~3.0.6: + version "3.0.6" + resolved "https://registry.npmmirror.com/rehype-rewrite/-/rehype-rewrite-3.0.6.tgz#21e86982c7f2c169121bf10dd191f3768c6a6b29" + integrity sha512-REDTNCvsKcAazy8IQWzKp66AhSUDSOIKssSCqNqCcT9sN7JCwAAm3mWGTUdUzq80ABuy8d0D6RBwbnewu1aY1g== + dependencies: + hast-util-select "~5.0.1" + unified "~10.1.1" + unist-util-visit "~4.1.0" + +rehype-sanitize@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz#16e95f4a67a69cbf0f79e113c8e0df48203db73c" + integrity sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg== + dependencies: + "@types/hast" "^3.0.0" + hast-util-sanitize "^5.0.0" + +rehype-slug@~5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/rehype-slug/-/rehype-slug-5.1.0.tgz#1f7e69be7ea1a2067bcc4cfe58e74c881d5c047e" + integrity sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw== + dependencies: + "@types/hast" "^2.0.0" + github-slugger "^2.0.0" + hast-util-has-property "^2.0.0" + hast-util-heading-rank "^2.0.0" + hast-util-to-string "^2.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +rehype-stringify@^9.0.0: + version "9.0.4" + resolved "https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-9.0.4.tgz#31dbb9de6f5034c6964760a1b1083218059c4343" + integrity sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-to-html "^8.0.0" + unified "^10.0.0" + +rehype@~12.0.1: + version "12.0.1" + resolved "https://registry.npmmirror.com/rehype/-/rehype-12.0.1.tgz#68a317662576dcaa2565a3952e149d6900096bf6" + integrity sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw== + dependencies: + "@types/hast" "^2.0.0" + rehype-parse "^8.0.0" + rehype-stringify "^9.0.0" + unified "^10.0.0" + relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +remark-gfm@~3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" + integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-gfm "^2.0.0" + micromark-extension-gfm "^2.0.0" + unified "^10.0.0" + +remark-parse@^10.0.0: + version "10.0.2" + resolved "https://registry.npmmirror.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" + integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -10251,6 +11260,13 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10596,6 +11612,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -10763,6 +11784,14 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" + integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -10830,6 +11859,13 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.2.tgz#eaebca714d9e462c19aa1e3599057bc363924899" integrity sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw== +style-to-object@^0.4.0: + version "0.4.2" + resolved "https://registry.npmmirror.com/style-to-object/-/style-to-object-0.4.2.tgz#a8247057111dea8bd3b8a1a66d2d0c9cf9218a54" + integrity sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA== + dependencies: + inline-style-parser "0.1.1" + stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" @@ -11153,6 +12189,16 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -11325,6 +12371,19 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unified@^10.0.0, unified@^10.1.2, unified@~10.1.1: + version "10.1.2" + resolved "https://registry.npmmirror.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -11332,6 +12391,65 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" +unist-util-filter@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/unist-util-filter/-/unist-util-filter-4.0.1.tgz#fd885dd48adaad345de5f5dc706ec4ff44a8d074" + integrity sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +unist-util-generated@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + +unist-util-is@^5.0.0: + version "5.2.1" + resolved "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" + integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-position@^4.0.0: + version "4.0.4" + resolved "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: + version "5.1.3" + resolved "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@^4.0.0, unist-util-visit@^4.1.0, unist-util-visit@^4.1.2, unist-util-visit@~4.1.0: + version "4.1.2" + resolved "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" + integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -11422,6 +12540,16 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.npmmirror.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -11441,6 +12569,32 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vfile-location@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" + integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== + dependencies: + "@types/unist" "^2.0.0" + vfile "^5.0.0" + +vfile-message@^3.0.0: + version "3.1.4" + resolved "https://registry.npmmirror.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile@^5.0.0: + version "5.3.7" + resolved "https://registry.npmmirror.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + void-elements@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" @@ -11489,6 +12643,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + web-vitals@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-0.2.4.tgz#ec3df43c834a207fd7cdefd732b2987896e08511" @@ -12045,3 +13204,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^2.0.0, zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 1eb834f39be555484fb8b1c53205b031d832f9ec Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Thu, 21 Sep 2023 14:15:12 +0800 Subject: [PATCH 2/3] [chore]: Update API, Add 'dbType' parameter --- src/api/SqlManage/index.d.ts | 14 ++++- src/api/SqlManage/index.enum.ts | 2 +- src/api/SqlManage/index.ts | 22 ++++++- src/api/common.d.ts | 61 +++++++++++++++---- src/api/common.enum.ts | 20 ++++++ src/api/rule_template/index.d.ts | 10 ++- src/api/rule_template/index.ts | 10 ++- src/api/sql_audit_record/index.d.ts | 6 ++ src/api/sql_audit_record/index.ts | 12 ++++ .../__snapshots__/index.test.tsx.snap | 12 +--- .../AuditResultErrorMessage/index.test.tsx | 19 ++++-- .../AuditResultErrorMessage/index.tsx | 25 ++++---- src/components/RuleList/index.tsx | 22 ++++++- .../Report/__snapshots__/index.test.tsx.snap | 40 +++--------- src/page/AuditPlan/PlanForm/index.tsx | 2 +- .../AuditResultCollection.test.tsx.snap | 8 +-- .../AuditResultInfo.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 12 +--- .../Create/__snapshots__/index.test.tsx.snap | 4 +- .../Detail/__snapshots__/index.test.tsx.snap | 4 +- .../RuleUnderstand/EditKnowledgeContent.tsx | 23 ++++--- .../RuleKnowledge/RuleUnderstand/index.tsx | 10 +-- .../RuleUnderstand/index.type.ts | 2 + src/page/RuleKnowledge/index.tsx | 43 +++++++++---- 24 files changed, 257 insertions(+), 130 deletions(-) diff --git a/src/api/SqlManage/index.d.ts b/src/api/SqlManage/index.d.ts index dcb86c06..aa149a7e 100644 --- a/src/api/SqlManage/index.d.ts +++ b/src/api/SqlManage/index.d.ts @@ -4,9 +4,15 @@ import { GetSqlManageListFilterStatusEnum } from './index.enum'; -import { IGetSqlManageListResp } from '../common.d'; +import { + IGetSqlManageListResp, + IBatchUpdateSqlManageReq, + IBaseRes +} from '../common.d'; export interface IGetSqlManageListParams { + project_name: string; + fuzzy_search_sql_fingerprint?: string; filter_assignee?: string; @@ -29,3 +35,9 @@ export interface IGetSqlManageListParams { } export interface IGetSqlManageListReturn extends IGetSqlManageListResp {} + +export interface IBatchUpdateSqlManageParams extends IBatchUpdateSqlManageReq { + project_name: string; +} + +export interface IBatchUpdateSqlManageReturn extends IBaseRes {} diff --git a/src/api/SqlManage/index.enum.ts b/src/api/SqlManage/index.enum.ts index 705a4c2c..ef06a0c3 100644 --- a/src/api/SqlManage/index.enum.ts +++ b/src/api/SqlManage/index.enum.ts @@ -3,7 +3,7 @@ export enum GetSqlManageListFilterSourceEnum { 'audit_plan' = 'audit_plan', - 'api_audit' = 'api_audit' + 'sql_audit_record' = 'sql_audit_record' } export enum GetSqlManageListFilterAuditLevelEnum { diff --git a/src/api/SqlManage/index.ts b/src/api/SqlManage/index.ts index d743ed24..cdc521f1 100644 --- a/src/api/SqlManage/index.ts +++ b/src/api/SqlManage/index.ts @@ -6,7 +6,12 @@ import ServiceBase from '../Service.base'; import { AxiosRequestConfig } from 'axios'; -import { IGetSqlManageListParams, IGetSqlManageListReturn } from './index.d'; +import { + IGetSqlManageListParams, + IGetSqlManageListReturn, + IBatchUpdateSqlManageParams, + IBatchUpdateSqlManageReturn +} from './index.d'; class SqlManageService extends ServiceBase { public GetSqlManageList( @@ -23,6 +28,21 @@ class SqlManageService extends ServiceBase { options ); } + + public BatchUpdateSqlManage( + params: IBatchUpdateSqlManageParams, + options?: AxiosRequestConfig + ) { + const paramsData = this.cloneDeep(params); + const project_name = paramsData.project_name; + delete paramsData.project_name; + + return this.patch( + `/v1/projects/${project_name}/sql_manages/batch`, + paramsData, + options + ); + } } export default new SqlManageService(); diff --git a/src/api/common.d.ts b/src/api/common.d.ts index 35252e32..b274a93d 100644 --- a/src/api/common.d.ts +++ b/src/api/common.d.ts @@ -7,6 +7,7 @@ import { AuditTaskResV1AuditLevelEnum, AuditTaskResV1SqlSourceEnum, AuditTaskResV1StatusEnum, + BatchUpdateSqlManageReqStatusEnum, CreateAuditWhitelistReqV1MatchTypeEnum, CreateCustomRuleReqV1LevelEnum, CustomRuleResV1LevelEnum, @@ -19,6 +20,8 @@ import { RuleResV1LevelEnum, SQLQueryConfigReqV1AllowQueryWhenLessThanAuditLevelEnum, SQLQueryConfigResV1AllowQueryWhenLessThanAuditLevelEnum, + SourceTypeEnum, + SqlManageStatusEnum, TestFeishuConfigurationReqV1AccountTypeEnum, UpdateAuditPlanNotifyConfigReqV1NotifyLevelEnum, UpdateAuditWhitelistReqV1MatchTypeEnum, @@ -137,6 +140,14 @@ export interface IAuditPlanSQLReqV1 { audit_plan_sql_last_receive_timestamp?: string; audit_plan_sql_schema?: string; + + db_user?: string; + + first_query_at?: string; + + query_time_avg?: number; + + query_time_max?: number; } export interface IAuditPlanSQLResV1 { @@ -165,6 +176,14 @@ export interface IAuditResDataV1 { sql_results?: IAuditSQLResV1[]; } +export interface IAuditResult { + level?: string; + + message?: string; + + rule_name?: string; +} + export interface IAuditSQLResV1 { audit_level?: string; @@ -277,6 +296,16 @@ export interface IBatchGetInstanceConnectionsResV1 { message?: string; } +export interface IBatchUpdateSqlManageReq { + assignees?: string[]; + + remark?: string; + + sql_manage_id_list?: number[]; + + status?: BatchUpdateSqlManageReqStatusEnum; +} + export interface IBindOauth2UserReqV1 { oauth2_token?: string; @@ -1181,6 +1210,14 @@ export interface IGetRolesResV1 { total_nums?: number; } +export interface IGetRuleKnowledgeResV1 { + code?: number; + + data?: IRuleKnowledgeResV1; + + message?: string; +} + export interface IGetRuleTemplateResV1 { code?: number; @@ -2207,6 +2244,14 @@ export interface ISQLQueryConfigResV1 { query_timeout_second?: number; } +export interface ISource { + audit_plan_name?: string; + + sql_audit_record_id?: string; + + type?: SourceTypeEnum; +} + export interface ISqlAnalysisResDataV1 { sql_explain?: ISQLExplain; @@ -2232,9 +2277,9 @@ export interface ISqlExecutionFailPercent { export interface ISqlManage { appear_num?: number; - assignee?: string; + assignees?: string[]; - audit_result?: string; + audit_result?: IAuditResult[]; first_appear_time?: string; @@ -2248,13 +2293,13 @@ export interface ISqlManage { schema_name?: string; - source?: string; + source?: ISource; sql?: string; sql_fingerprint?: string; - status?: string; + status?: SqlManageStatusEnum; } export interface IStatisticAuditPlanResV1 { @@ -3047,14 +3092,6 @@ export interface IAuditResDataV2 { sql_results?: IAuditSQLResV2[]; } -export interface IAuditResult { - level?: string; - - message?: string; - - rule_name?: string; -} - export interface IAuditSQLResV2 { audit_level?: string; diff --git a/src/api/common.enum.ts b/src/api/common.enum.ts index cf619b90..d82f67f8 100644 --- a/src/api/common.enum.ts +++ b/src/api/common.enum.ts @@ -82,6 +82,12 @@ export enum AuditTaskResV1StatusEnum { 'manually_executed' = 'manually_executed' } +export enum BatchUpdateSqlManageReqStatusEnum { + 'solved' = 'solved', + + 'ignored' = 'ignored' +} + export enum CreateAuditWhitelistReqV1MatchTypeEnum { 'exact_match' = 'exact_match', @@ -190,6 +196,20 @@ export enum SQLQueryConfigResV1AllowQueryWhenLessThanAuditLevelEnum { 'error' = 'error' } +export enum SourceTypeEnum { + 'audit_plan' = 'audit_plan', + + 'sql_audit_record' = 'sql_audit_record' +} + +export enum SqlManageStatusEnum { + 'unhandled' = 'unhandled', + + 'solved' = 'solved', + + 'ignored' = 'ignored' +} + export enum TestFeishuConfigurationReqV1AccountTypeEnum { 'email' = 'email', diff --git a/src/api/rule_template/index.d.ts b/src/api/rule_template/index.d.ts index df94ebea..54076dcc 100644 --- a/src/api/rule_template/index.d.ts +++ b/src/api/rule_template/index.d.ts @@ -11,7 +11,7 @@ import { IGetProjectRuleTemplateResV1, IUpdateProjectRuleTemplateReqV1, ICloneProjectRuleTemplateReqV1, - IRuleKnowledgeResV1, + IGetRuleKnowledgeResV1, IUpdateRuleKnowledgeReq, IGetRuleTemplatesResV1, ICreateRuleTemplateReqV1, @@ -19,7 +19,7 @@ import { IGetRuleTemplateResV1, IUpdateRuleTemplateReqV1, ICloneRuleTemplateReqV1, - IGetRulesResV1, + IGetRulesResV1 } from '../common.d'; export interface IGetCustomRulesV1Params { @@ -129,12 +129,16 @@ export interface IExportProjectRuleTemplateV1Params { export interface IGetRuleKnowledgeV1Params { rule_name: string; + + db_type: string; } -export interface IGetRuleKnowledgeV1Return extends IRuleKnowledgeResV1 {} +export interface IGetRuleKnowledgeV1Return extends IGetRuleKnowledgeResV1 {} export interface IUpdateRuleKnowledgeParams extends IUpdateRuleKnowledgeReq { rule_name: string; + + db_type: string; } export interface IUpdateRuleKnowledgeReturn extends IBaseRes {} diff --git a/src/api/rule_template/index.ts b/src/api/rule_template/index.ts index 4e74ea38..adb7585e 100644 --- a/src/api/rule_template/index.ts +++ b/src/api/rule_template/index.ts @@ -284,11 +284,14 @@ class RuleTemplateService extends ServiceBase { options?: AxiosRequestConfig ) { const paramsData = this.cloneDeep(params); + const db_type = paramsData.db_type; + delete paramsData.db_type; + const rule_name = paramsData.rule_name; delete paramsData.rule_name; return this.get( - `/v1/rule_knowledge/${rule_name}/`, + `/v1/rule_knowledge/db_types/${db_type}/rules/${rule_name}/`, paramsData, options ); @@ -299,11 +302,14 @@ class RuleTemplateService extends ServiceBase { options?: AxiosRequestConfig ) { const paramsData = this.cloneDeep(params); + const db_type = paramsData.db_type; + delete paramsData.db_type; + const rule_name = paramsData.rule_name; delete paramsData.rule_name; return this.patch( - `/v1/rule_knowledge/${rule_name}/`, + `/v1/rule_knowledge/db_types/${db_type}/rules/${rule_name}/`, paramsData, options ); diff --git a/src/api/sql_audit_record/index.d.ts b/src/api/sql_audit_record/index.d.ts index af288d51..0fe3e698 100644 --- a/src/api/sql_audit_record/index.d.ts +++ b/src/api/sql_audit_record/index.d.ts @@ -45,6 +45,12 @@ export interface ICreateSQLAuditRecordV1Params { input_mybatis_xml_file?: any; input_zip_file?: any; + + git_http_url?: string; + + git_user_name?: string; + + git_user_password?: string; } export interface ICreateSQLAuditRecordV1Return diff --git a/src/api/sql_audit_record/index.ts b/src/api/sql_audit_record/index.ts index d5ea0e29..1cc4c8da 100644 --- a/src/api/sql_audit_record/index.ts +++ b/src/api/sql_audit_record/index.ts @@ -80,6 +80,18 @@ class SqlAuditRecordService extends ServiceBase { paramsData.append('input_zip_file', params.input_zip_file as any); } + if (params.git_http_url != undefined) { + paramsData.append('git_http_url', params.git_http_url as any); + } + + if (params.git_user_name != undefined) { + paramsData.append('git_user_name', params.git_user_name as any); + } + + if (params.git_user_password != undefined) { + paramsData.append('git_user_password', params.git_user_password as any); + } + const project_name = params.project_name; return this.post( diff --git a/src/components/AuditResultErrorMessage/__snapshots__/index.test.tsx.snap b/src/components/AuditResultErrorMessage/__snapshots__/index.test.tsx.snap index 166eb902..4cc8c362 100644 --- a/src/components/AuditResultErrorMessage/__snapshots__/index.test.tsx.snap +++ b/src/components/AuditResultErrorMessage/__snapshots__/index.test.tsx.snap @@ -71,9 +71,7 @@ exports[`AuditResultErrorMessage should call getRuleList when rule name is not e class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - schema 不存在 - + schema 不存在 @@ -197,9 +195,7 @@ exports[`AuditResultErrorMessage should call getRuleList when rule name is not e class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - select 语句必须带limit,且限制数不得超过1000 - + select 语句必须带limit,且限制数不得超过1000 @@ -268,9 +264,7 @@ exports[`AuditResultErrorMessage should render normal level when not match level class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql diff --git a/src/components/AuditResultErrorMessage/index.test.tsx b/src/components/AuditResultErrorMessage/index.test.tsx index 6c105d8d..5715fc76 100644 --- a/src/components/AuditResultErrorMessage/index.test.tsx +++ b/src/components/AuditResultErrorMessage/index.test.tsx @@ -1,7 +1,8 @@ -import { fireEvent, render, screen, act } from '@testing-library/react'; +import { fireEvent, screen, act, cleanup } from '@testing-library/react'; import AuditResultErrorMessage from '.'; import { IAuditResult } from '../../api/common'; import { mockGetAllRules } from '../../page/Rule/__test__/utils'; +import { renderWithRouter } from '../../testUtils/customRender'; describe('AuditResultErrorMessage', () => { const auditResult: IAuditResult[] = [ @@ -33,18 +34,24 @@ describe('AuditResultErrorMessage', () => { }); test('should call getRuleList when rule name is not empty', async () => { - const { rerender, baseElement } = render(); + const { baseElement: baseElement1 } = renderWithRouter( + + ); await act(async () => jest.advanceTimersByTime(3000)); - expect(baseElement).toMatchSnapshot(); + expect(baseElement1).toMatchSnapshot(); expect(getRulesSpy).toBeCalledTimes(0); - rerender(); + cleanup(); + + const { baseElement: baseElement2 } = renderWithRouter( + + ); await act(async () => jest.advanceTimersByTime(3000)); - expect(baseElement).toMatchSnapshot(); + expect(baseElement2).toMatchSnapshot(); expect(getRulesSpy).toBeCalledTimes(1); expect(getRulesSpy).nthCalledWith(1, { filter_rule_names: 'all_check_where_is_invalid,dml_check_select_limit', @@ -66,7 +73,7 @@ describe('AuditResultErrorMessage', () => { }); test('should render normal level when not match level', () => { - const { container } = render( + const { container } = renderWithRouter( = ( props @@ -40,6 +40,7 @@ const AuditResultErrorMessage: React.FC = ( className="audit-result-error-message-wrapper" > {props.auditResult?.map((v) => { + const rule = ruleInfo?.find((rule) => rule.rule_name === v.rule_name); return ( @@ -47,25 +48,25 @@ const AuditResultErrorMessage: React.FC = ( rule.rule_name === v.rule_name) - } + if={!!rule && !!rule.annotation} defaultNode={v.message} > - - {ruleInfo?.find( - (rule) => rule.rule_name === v.rule_name - )?.annotation ?? ''} - + {rule?.annotation} {/* IFTRUE_isEE */} {' '} - - {t('common.showMore')} - + {/* 暂时不支持自定义规则 */} + + + {t('common.showMore')} + + + {/* FITRUE_isEE */} } diff --git a/src/components/RuleList/index.tsx b/src/components/RuleList/index.tsx index 58043242..0b996ad0 100644 --- a/src/components/RuleList/index.tsx +++ b/src/components/RuleList/index.tsx @@ -4,6 +4,8 @@ import { useTranslation } from 'react-i18next'; import { RuleListDefaultTabKey } from '../../data/common'; import { RuleListProps, TabRuleItem } from './index.type'; import RuleLevelIcon from './RuleLevelIcon'; +import { Link } from '../Link'; +import EmptyBox from '../EmptyBox'; const RuleList: React.FC = (props) => { const { t } = useTranslation(); @@ -80,7 +82,25 @@ const RuleList: React.FC = (props) => { avatar={} title={item.desc} description={ - + + {item.annotation} + {/* IFTRUE_isEE */} + {' '} + {/* 暂时不支持自定义规则 */} + + + {t('common.showMore')} + + + + {/* FITRUE_isEE */} + + } + > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -532,9 +530,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -656,9 +652,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -780,9 +774,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -904,9 +896,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -1028,9 +1018,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -1152,9 +1140,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -1276,9 +1262,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -1400,9 +1384,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -1524,9 +1506,7 @@ exports[`AuditPlanReport should match snapshot 2`] = ` class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql diff --git a/src/page/AuditPlan/PlanForm/index.tsx b/src/page/AuditPlan/PlanForm/index.tsx index 39afdc36..16c32f54 100644 --- a/src/page/AuditPlan/PlanForm/index.tsx +++ b/src/page/AuditPlan/PlanForm/index.tsx @@ -113,7 +113,7 @@ const PlanForm: React.FC = ({ form, ...props }) => { { required: true, }, - ...nameRule(119), + ...nameRule(120), ]} > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -3254,9 +3252,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql diff --git a/src/page/Order/AuditResult/__test__/__snapshots__/AuditResultInfo.test.tsx.snap b/src/page/Order/AuditResult/__test__/__snapshots__/AuditResultInfo.test.tsx.snap index cf81741a..efb9397e 100644 --- a/src/page/Order/AuditResult/__test__/__snapshots__/AuditResultInfo.test.tsx.snap +++ b/src/page/Order/AuditResult/__test__/__snapshots__/AuditResultInfo.test.tsx.snap @@ -248,9 +248,7 @@ exports[`Order/AuditResult/AuditResultInfo should render single audit result det class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - schema 不存在 - + schema 不存在 diff --git a/src/page/Order/AuditResult/__test__/__snapshots__/index.test.tsx.snap b/src/page/Order/AuditResult/__test__/__snapshots__/index.test.tsx.snap index d5205b46..0aa39fac 100644 --- a/src/page/Order/AuditResult/__test__/__snapshots__/index.test.tsx.snap +++ b/src/page/Order/AuditResult/__test__/__snapshots__/index.test.tsx.snap @@ -1374,9 +1374,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql @@ -2224,9 +2222,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - schema bbbbe 不存在 - + schema bbbbe 不存在 @@ -2288,9 +2284,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - schema ddgrf 不存在 - + schema ddgrf 不存在 diff --git a/src/page/Order/Create/__snapshots__/index.test.tsx.snap b/src/page/Order/Create/__snapshots__/index.test.tsx.snap index 2dc3f59f..a63c3d52 100644 --- a/src/page/Order/Create/__snapshots__/index.test.tsx.snap +++ b/src/page/Order/Create/__snapshots__/index.test.tsx.snap @@ -1671,9 +1671,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql diff --git a/src/page/Order/Detail/__snapshots__/index.test.tsx.snap b/src/page/Order/Detail/__snapshots__/index.test.tsx.snap index 3894035d..4646ca05 100644 --- a/src/page/Order/Detail/__snapshots__/index.test.tsx.snap +++ b/src/page/Order/Detail/__snapshots__/index.test.tsx.snap @@ -4693,9 +4693,7 @@ use aaab; class="ant-col message" style="flex: 1 1 auto; min-width: 0;" > - - 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql - + 禁止使用没有where条件的sql语句或者使用where 1=1等变相没有条件的sql diff --git a/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx b/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx index 21163efb..efcde1e0 100644 --- a/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx +++ b/src/page/RuleKnowledge/RuleUnderstand/EditKnowledgeContent.tsx @@ -8,18 +8,17 @@ const EditKnowledgeContent: React.FC = ({ setHasDirtyData, }) => { return ( - <> - { - onChange?.(v); - setHasDirtyData(true); - }} - /> - + { + onChange?.(v); + setHasDirtyData(true); + }} + /> ); }; diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.tsx b/src/page/RuleKnowledge/RuleUnderstand/index.tsx index b20a35cf..0431f350 100644 --- a/src/page/RuleKnowledge/RuleUnderstand/index.tsx +++ b/src/page/RuleKnowledge/RuleUnderstand/index.tsx @@ -15,12 +15,13 @@ const RuleUnderstand: React.FC = ({ content, ruleName, refresh, + dbType, + loading, }) => { const { t } = useTranslation(); const [modifyFlag, { setTrue: startModify, setFalse: modifyFinish }] = useBoolean(); const [hasDirtyData, setHasDirtyData] = useState(false); - const [editValue, setEditValue] = useState(); const [submitLoading, { setFalse: submitFinish, setTrue: startSubmit }] = useBoolean(); @@ -47,6 +48,7 @@ const RuleUnderstand: React.FC = ({ .updateRuleKnowledge({ rule_name: ruleName, knowledge_content: editValue, + db_type: dbType, }) .then((res) => { if (res.data.code === ResponseCode.SUCCESS) { @@ -71,10 +73,11 @@ const RuleUnderstand: React.FC = ({ return ( <> - @@ -88,7 +91,7 @@ const RuleUnderstand: React.FC = ({ /> ) : ( = ({ > diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.type.ts b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts index e5162c30..dc7c93d7 100644 --- a/src/page/RuleKnowledge/RuleUnderstand/index.type.ts +++ b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts @@ -4,6 +4,8 @@ export type RuleUnderstandProps = { ruleName: string; content?: string; refresh: () => void; + dbType: string; + loading: boolean; }; export type EditKnowledgeContentProps = { diff --git a/src/page/RuleKnowledge/index.tsx b/src/page/RuleKnowledge/index.tsx index ff48c277..86d2f92a 100644 --- a/src/page/RuleKnowledge/index.tsx +++ b/src/page/RuleKnowledge/index.tsx @@ -1,15 +1,19 @@ import { Card, PageHeader, Space, Typography } from 'antd'; import { useTranslation } from 'react-i18next'; -import { useParams } from 'react-router-dom'; +import { useLocation, useParams } from 'react-router-dom'; import { useTheme } from '@mui/styles'; import { useRequest } from 'ahooks'; import rule_template from '../../api/rule_template'; import RuleUnderstand from './RuleUnderstand'; +import { useEffect, useState } from 'react'; +import EmptyBox from '../../components/EmptyBox'; const RuleKnowledge: React.FC = () => { const { t } = useTranslation(); + const location = useLocation(); const theme = useTheme(); const { ruleName = '' } = useParams<{ ruleName: string }>(); + const [dbType, setDbType] = useState(); const { data: ruleKnowledgeInfo, @@ -17,14 +21,27 @@ const RuleKnowledge: React.FC = () => { refresh, } = useRequest( () => - rule_template.getRuleKnowledgeV1({ rule_name: ruleName }).then((res) => { - return res.data; - }), + rule_template + .getRuleKnowledgeV1({ rule_name: ruleName, db_type: dbType! }) + .then((res) => { + return res.data.data; + }), { - ready: !!ruleName, + ready: !!ruleName && !!dbType, + refreshDeps: [ruleName, dbType], } ); + useEffect(() => { + const searchParams = new URLSearchParams(location.search); + + const dbTypeInUrl = searchParams.get('db_type'); + + if (dbTypeInUrl) { + setDbType(dbTypeInUrl); + } + }, [location.search]); + return ( <> @@ -38,7 +55,7 @@ const RuleKnowledge: React.FC = () => { className="full-width-element" > - + {ruleKnowledgeInfo?.rule?.desc ?? '-'} @@ -46,11 +63,15 @@ const RuleKnowledge: React.FC = () => { - + + + From 53e43065f5ddb436d1eb9499e59d1c84eb91e1d1 Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Thu, 21 Sep 2023 16:46:25 +0800 Subject: [PATCH 3/3] [fix]: add target property for link and add edit permission --- src/components/AuditResultErrorMessage/index.tsx | 1 + src/components/RuleList/index.tsx | 2 +- src/page/RuleKnowledge/RuleUnderstand/index.tsx | 3 ++- src/page/RuleKnowledge/RuleUnderstand/index.type.ts | 1 + src/page/RuleKnowledge/index.tsx | 3 +++ 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/AuditResultErrorMessage/index.tsx b/src/components/AuditResultErrorMessage/index.tsx index 1ee4729b..a44c96b7 100644 --- a/src/components/AuditResultErrorMessage/index.tsx +++ b/src/components/AuditResultErrorMessage/index.tsx @@ -61,6 +61,7 @@ const AuditResultErrorMessage: React.FC = ( {/* 暂时不支持自定义规则 */} {t('common.showMore')} diff --git a/src/components/RuleList/index.tsx b/src/components/RuleList/index.tsx index 0b996ad0..49fc9bde 100644 --- a/src/components/RuleList/index.tsx +++ b/src/components/RuleList/index.tsx @@ -91,12 +91,12 @@ const RuleList: React.FC = (props) => { {/* 暂时不支持自定义规则 */} {t('common.showMore')} - {/* FITRUE_isEE */} } diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.tsx b/src/page/RuleKnowledge/RuleUnderstand/index.tsx index 0431f350..23e064c0 100644 --- a/src/page/RuleKnowledge/RuleUnderstand/index.tsx +++ b/src/page/RuleKnowledge/RuleUnderstand/index.tsx @@ -17,6 +17,7 @@ const RuleUnderstand: React.FC = ({ refresh, dbType, loading, + isAdmin, }) => { const { t } = useTranslation(); const [modifyFlag, { setTrue: startModify, setFalse: modifyFinish }] = @@ -76,7 +77,7 @@ const RuleUnderstand: React.FC = ({ loading={loading} title={t('ruleKnowledge.ruleUnderstanding')} extra={ - + diff --git a/src/page/RuleKnowledge/RuleUnderstand/index.type.ts b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts index dc7c93d7..5883d315 100644 --- a/src/page/RuleKnowledge/RuleUnderstand/index.type.ts +++ b/src/page/RuleKnowledge/RuleUnderstand/index.type.ts @@ -6,6 +6,7 @@ export type RuleUnderstandProps = { refresh: () => void; dbType: string; loading: boolean; + isAdmin: boolean; }; export type EditKnowledgeContentProps = { diff --git a/src/page/RuleKnowledge/index.tsx b/src/page/RuleKnowledge/index.tsx index 86d2f92a..73c005e1 100644 --- a/src/page/RuleKnowledge/index.tsx +++ b/src/page/RuleKnowledge/index.tsx @@ -7,6 +7,7 @@ import rule_template from '../../api/rule_template'; import RuleUnderstand from './RuleUnderstand'; import { useEffect, useState } from 'react'; import EmptyBox from '../../components/EmptyBox'; +import useCurrentUser from '../../hooks/useCurrentUser'; const RuleKnowledge: React.FC = () => { const { t } = useTranslation(); @@ -14,6 +15,7 @@ const RuleKnowledge: React.FC = () => { const theme = useTheme(); const { ruleName = '' } = useParams<{ ruleName: string }>(); const [dbType, setDbType] = useState(); + const { isAdmin } = useCurrentUser(); const { data: ruleKnowledgeInfo, @@ -70,6 +72,7 @@ const RuleKnowledge: React.FC = () => { content={ruleKnowledgeInfo?.knowledge_content} refresh={refresh} dbType={dbType!} + isAdmin={isAdmin} />