diff --git a/docs/deploy-manual/config.md b/docs/deploy-manual/config.md index 9b32c0c0..66a0ea4a 100644 --- a/docs/deploy-manual/config.md +++ b/docs/deploy-manual/config.md @@ -3,46 +3,124 @@ title: 配置文件说明 --- # 配置文件说明 :::tip -SQLE的配置文件采用yml的格式,默认情况下位于SQLE安装目录下,路径为`./etc/sqled.yml` +SQLE的配置文件采用yml的格式,默认情况下位于SQLE安装目录下,路径为`./etc/config.yml` ::: ## 默认文件参考 ```yml -server: - sqle_config: - server_port: 10000 - enable_https: false - cert_file_path: './etc/cert.pem' - key_file_path: './etc/key.pem' - auto_migrate_table: true - debug_log: false - log_path: './logs' - log_max_size_mb: 1024 - log_max_backup_number: 2 - secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #从 v1.2203.0 版本引入 - db_config: - mysql_cnf: - mysql_host: '127.0.0.1' - mysql_port: 3306 - mysql_user: 'root' - mysql_password: '123456' - mysql_schema: 'sqle' +dms: + id: 1 + api: + addr: "0.0.0.0" + port: 10000 + enable_https: false + cert_file_path: './etc/cert.pem' + key_file_path: './etc/key.pem' + secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' + service: + database: + host: "127.0.0.1" + port: 3306 + username: "root" + password: "123456" + database: "dms" + debug: true + cloudbeaver: + enable_https: false + host: "127.0.0.1" + port: 8978 + admin_user: "cbadmin" + admin_password: "123456" + +sqle: + id: 1 + dms_server_address: "http://127.0.0.1:10000" + api: + addr: "127.0.0.1" + port: 10001 + enable_https: false + cert_file_path: './etc/cert.pem' + key_file_path: './etc/key.pem' + secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' + service: + auto_migrate_table: true + debug_log: false + log_path: './logs' + log_max_size_mb: 1024 + log_max_backup_number: 2 + plugin_path: './plugins' + database: + mysql_host: '127.0.0.1' + mysql_port: 3306 + mysql_user: 'root' + mysql_password: '123456' + mysql_schema: 'sqle' ``` ## 配置说明 -### sqle_config +### 通用配置 +|参数|说明| +|-|-| +|id|server id,辨识集群节点,集群内不重复即可| +|api|当前服务的web接口参数| +|secret_key|全局AES加密秘钥,影响登录和用户密码等的存储;**生产环境建议配置该值替换掉程序默认值,不然会存在安全风险**;格式是32位随机字符串| + +#### 通用配置.api |参数|说明| |-|-| -|server_port|sqle 服务的 http 端口,默认10000| +|addr|server id,辨识集群节点,集群内不重复即可| +|port|当前服务的web接口参数| |enable_https|是否开启https,默认不开启| |cert_file_path|https 证书路径| |key_file_path|https 私钥路径| + +### DMS 配置 +|参数|说明| +|-|-| +|id|通用配置| +|api|通用配置| +|secret_key|通用配置| +|service|服务| +|cloudbeaver|SQL工作台| + +#### DMS.service.database +|参数|说明| +|-|-| +|host|DMS 后端数据库地址| +|port|DMS 后端数据库地址| +|username|DMS 后端数据库用户| +|password|DMS 后端数据库密码| +|database|DMS 后端数据库 schema| +|debug|| + +#### DMS.cloudbeaver +SQL工作台的配置,配置则代表开启SQL工作台。 + +|参数|说明| +|-|-| +|enable_https|是否是https连接| +|host|cloudbeaver 地址| +|port|cloudbeaver 端口| +|admin_user|cloudbeaver 超级管理员名称| +|admin_password|cloudbeaver 超级管理员密码| + +### SQLE 配置 +|参数|说明| +|-|-| +|id|通用配置| +|api|通用配置| +|secret_key|通用配置| +|service|服务| + +#### SQLE.service +|参数|说明| +|-|-| |auto_migrate_table|自动创建表结构,初始化数据| |debug_log|开启debug模式,打印更多日志,会打印业务SQL,开发环境可开启| |log_path|日志目录| |log_max_size_mb|单个日志文件最大大小,单位MB| |log_max_backup_number|日志文件最大备份数量| -|secret_key|全局AES加密秘钥,影响登录和用户密码等的存储;**生产环境建议配置该值替换掉程序默认值,不然会存在安全风险**;格式是32位随机字符串| +|plugin_path|SQL审核插件的加载地址| -### db_config +#### SQLE.service.database |参数|说明| |-|-| |mysql_host|SQLE存储库的地址| diff --git a/docs/deploy-manual/intro.md b/docs/deploy-manual/intro.md index 55800bd5..0fd90db1 100644 --- a/docs/deploy-manual/intro.md +++ b/docs/deploy-manual/intro.md @@ -4,12 +4,12 @@ titile: 安装说明 # 安装说明 SQLE 提供了多种安装部署的方式,用户可以结合自己的环境和现状选择。初次体验或者测试使用的话建议使用docker-compose 或 docker 快速部署。 ## 安装方式 -1. [源码安装](./source.md) +1. 源码安装(待更新) 2. [RPM 部署](./rpm.md) -3. [Docker 部署](./docker.md) -4. [Docker Compsoe 部署](./docker-compose.md) +3. Docker 部署(待更新) +4. Docker Compsoe 部署(待更新) ## 如何访问 -SQLE 对外提供 web 服务,在程序部署完成后,即可通过 SQLE UI 访问:http://127.0.0.1:10000 +SQLE 对外提供 web 服务,在程序部署完成后,即可通过 SQLE UI 访问:http://127.0.0.1:10000, 地址和端口为配置文件内 dms.api 配置项。 :::tip ps:ip 和端口请根据前面的配置自行替换,默认端口是10000。 ::: diff --git a/docs/deploy-manual/rpm.md b/docs/deploy-manual/rpm.md index 58794bd8..9c302a43 100644 --- a/docs/deploy-manual/rpm.md +++ b/docs/deploy-manual/rpm.md @@ -22,6 +22,7 @@ rpm -ivh /path/to/sqle-ce-${version}.qa.el7.x86_64.rpm --prefix=/opt/sqle 准备一台 MySQL5.7 作为 SQLE 的后端存储数据库。执行下面命令创建 SQLE 需要的 schema: ```sql CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4_unicode_ci +CREATE DATABASE IF NOT EXISTS dms default character set utf8mb4 collate utf8mb4_unicode_ci ``` :::tip 创建好的 Schema 将在下面修改SQLE配置时使用到。 @@ -31,17 +32,18 @@ CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4 安装完 SQLE 后,需要根据实际情况修改SQLE的配置,参考:[配置文件说明](./config.md)。SQLE安装完成后提供一个配置模版可直接修改。 ```sh cd /opt/sqle/etc -mv sqled.yml.template sqled.yml -vim sqled.yml +vim config.yml ``` :::tip -确保 sqled.yml 的文件 owner 为 actiontech-universe:actiontech +确保 config.yml 的文件 owner 为 actiontech-universe:actiontech ::: ## 启动 SQLE SQLE 进程通过 Systemd 管理。在成功安装 RPM 后,执行启动命令: ```sh -systemctl start sqled +cd /opt/sqle +chmod +x scripts/init_start.sh +./scripts/init_start.sh ``` ## 启动失败问题诊断 diff --git a/docusaurus.config.js b/docusaurus.config.js index b6e50a03..8d1944b3 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -36,11 +36,14 @@ const config = { // Please change this to your repo. // Remove this to remove the "edit this page" links. editUrl: 'https://github.com/actiontech/sqle-docs/tree/main/', - // lastVersion: 'v2', + lastVersion: 'current', versions: { current: { + label: 'v3', + }, + v2: { label: 'v2', - path: '/', + path: '/v2', }, }, }, @@ -108,7 +111,7 @@ const config = { position: 'right', dropdownItemsAfter: [ { - label: 'v1 版本', + label: 'v1', href: 'https://actiontech.github.io/sqle-docs-cn/', } ], diff --git a/package-lock.json b/package-lock.json index e6862b15..17395401 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,19 +26,31 @@ } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -46,128 +58,132 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", - "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", "dependencies": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.20.0" } }, "node_modules/@algolia/cache-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.14.3.tgz", - "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", - "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", "dependencies": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.20.0" } }, "node_modules/@algolia/client-account": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.14.3.tgz", - "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-analytics": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", - "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.14.3.tgz", - "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", "dependencies": { - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-personalization": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", - "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/client-search": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.14.3.tgz", - "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/@algolia/events": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/@algolia/events/-/events-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.14.3.tgz", - "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" }, "node_modules/@algolia/logger-console": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.14.3.tgz", - "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", "dependencies": { - "@algolia/logger-common": "4.14.3" + "@algolia/logger-common": "4.20.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", - "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", "dependencies": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.20.0" } }, "node_modules/@algolia/requester-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.14.3.tgz", - "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", - "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", "dependencies": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.20.0" } }, "node_modules/@algolia/transporter": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.14.3.tgz", - "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", "dependencies": { - "@algolia/cache-common": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/requester-common": "4.14.3" + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" } }, "node_modules/@ampproject/remapping": { @@ -1880,11 +1896,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1902,6 +1918,11 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, "node_modules/@babel/template": { "version": "7.18.10", "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz", @@ -1958,24 +1979,25 @@ } }, "node_modules/@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" }, "node_modules/@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", "dependencies": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", - "algoliasearch": "^4.0.0" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { "@types/react": { @@ -1986,12 +2008,15 @@ }, "react-dom": { "optional": true + }, + "search-insights": { + "optional": true } } }, "node_modules/@docusaurus/core": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/core/-/core-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "dependencies": { "@babel/core": "^7.18.6", @@ -2079,7 +2104,7 @@ }, "node_modules/@docusaurus/cssnano-preset": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", @@ -2093,7 +2118,7 @@ }, "node_modules/@docusaurus/logger": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/logger/-/logger-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", "dependencies": { "chalk": "^4.1.2", @@ -2105,7 +2130,7 @@ }, "node_modules/@docusaurus/mdx-loader": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", "dependencies": { "@babel/parser": "^7.18.8", @@ -2155,7 +2180,7 @@ }, "node_modules/@docusaurus/plugin-content-blog": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2185,7 +2210,7 @@ }, "node_modules/@docusaurus/plugin-content-docs": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2215,7 +2240,7 @@ }, "node_modules/@docusaurus/plugin-content-pages": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2237,7 +2262,7 @@ }, "node_modules/@docusaurus/plugin-debug": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2257,7 +2282,7 @@ }, "node_modules/@docusaurus/plugin-google-analytics": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2275,7 +2300,7 @@ }, "node_modules/@docusaurus/plugin-google-gtag": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2293,7 +2318,7 @@ }, "node_modules/@docusaurus/plugin-sitemap": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2316,7 +2341,7 @@ }, "node_modules/@docusaurus/preset-classic": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2354,7 +2379,7 @@ }, "node_modules/@docusaurus/theme-classic": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", "dependencies": { "@docusaurus/core": "2.2.0", @@ -2393,7 +2418,7 @@ }, "node_modules/@docusaurus/theme-common": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", "dependencies": { "@docusaurus/mdx-loader": "2.2.0", @@ -2421,7 +2446,7 @@ }, "node_modules/@docusaurus/theme-search-algolia": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", "dependencies": { "@docsearch/react": "^3.1.1", @@ -2451,7 +2476,7 @@ }, "node_modules/@docusaurus/theme-translations": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", "dependencies": { "fs-extra": "^10.1.0", @@ -2482,7 +2507,7 @@ }, "node_modules/@docusaurus/utils": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils/-/utils-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "dependencies": { "@docusaurus/logger": "2.2.0", @@ -2515,7 +2540,7 @@ }, "node_modules/@docusaurus/utils-common": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "dependencies": { "tslib": "^2.4.0" @@ -2534,7 +2559,7 @@ }, "node_modules/@docusaurus/utils-validation": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "dependencies": { "@docusaurus/logger": "2.2.0", @@ -2658,7 +2683,7 @@ }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "dependencies": { "@babel/core": "7.12.9", @@ -2680,11 +2705,15 @@ "unified": "9.2.0", "unist-builder": "2.0.3", "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/@mdx-js/mdx/node_modules/@babel/core": { "version": "7.12.9", - "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.12.9.tgz", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "@babel/code-frame": "^7.10.4", @@ -2706,11 +2735,15 @@ }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -2720,16 +2753,16 @@ } }, "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/@mdx-js/mdx/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" @@ -2737,7 +2770,7 @@ }, "node_modules/@mdx-js/mdx/node_modules/unified": { "version": "9.2.0", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.0.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { "bail": "^1.0.0", @@ -2746,6 +2779,10 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/@mdx-js/react": { @@ -2758,8 +2795,12 @@ }, "node_modules/@mdx-js/util": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -3133,11 +3174,11 @@ } }, "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.7.tgz", + "integrity": "sha512-EVLigw5zInURhzfXUM65eixfadfsHKomGKUakToXo84t8gGIJuTcD2xooM2See7GyQ7DRtYjhCHnSUQez8JaLw==", "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/history": { @@ -3185,11 +3226,11 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.14.tgz", + "integrity": "sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==", "dependencies": { - "@types/unist": "*" + "@types/unist": "^2" } }, "node_modules/@types/mime": { @@ -3209,7 +3250,7 @@ }, "node_modules/@types/parse5": { "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/@types/parse5/-/parse5-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prop-types": { @@ -3272,9 +3313,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.6.tgz", + "integrity": "sha512-A1mpYCYu1aHFayy8XKN57ebXeAbh9oQIZ1wXcno6b1ESUAfMBDMx7mf/QGlYwcMRaFryh9YBuH03i/3FlPGDkQ==", "dependencies": { "@types/node": "*" } @@ -3310,9 +3351,9 @@ } }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.9.tgz", + "integrity": "sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==" }, "node_modules/@types/ws": { "version": "8.5.3", @@ -3606,30 +3647,30 @@ } }, "node_modules/algoliasearch": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.14.3.tgz", - "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.3", - "@algolia/cache-common": "4.14.3", - "@algolia/cache-in-memory": "4.14.3", - "@algolia/client-account": "4.14.3", - "@algolia/client-analytics": "4.14.3", - "@algolia/client-common": "4.14.3", - "@algolia/client-personalization": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/logger-console": "4.14.3", - "@algolia/requester-browser-xhr": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/requester-node-http": "4.14.3", - "@algolia/transporter": "4.14.3" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmmirror.com/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", + "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -3707,12 +3748,12 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { @@ -3730,7 +3771,7 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/at-least-node": { @@ -3742,13 +3783,27 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -3791,19 +3846,23 @@ }, "node_modules/babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4", "@mdx-js/util": "1.6.22" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, "peerDependencies": { "@babel/core": "^7.11.6" } }, "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-dynamic-import-node": { @@ -3816,15 +3875,19 @@ }, "node_modules/babel-plugin-extract-import-names": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-polyfill-corejs2": { @@ -3873,8 +3936,12 @@ }, "node_modules/bail": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/balanced-match": { "version": "1.0.2", @@ -3883,7 +3950,7 @@ }, "node_modules/base16": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/base16/-/base16-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "node_modules/batch": { @@ -4006,14 +4073,28 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4115,7 +4196,7 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "engines": { "node": ">= 6" @@ -4123,7 +4204,7 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dependencies": { "browserslist": "^4.0.0", @@ -4133,14 +4214,32 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==" + "version": "1.0.30001553", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", + "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, "node_modules/ccount": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/chalk": { "version": "4.1.2", @@ -4156,22 +4255,34 @@ }, "node_modules/character-entities": { "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/character-entities-legacy": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/character-reference-invalid": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/cheerio": { "version": "1.0.0-rc.12", - "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dependencies": { "cheerio-select": "^2.1.0", @@ -4184,11 +4295,14 @@ }, "engines": { "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dependencies": { "boolbase": "^1.0.0", @@ -4197,6 +4311,9 @@ "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/chokidar": { @@ -4325,8 +4442,12 @@ }, "node_modules/collapse-white-space": { "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/color-convert": { "version": "2.0.1", @@ -4364,8 +4485,12 @@ }, "node_modules/comma-separated-tokens": { "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/commander": { "version": "5.1.0", @@ -4503,11 +4628,14 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin": { @@ -4645,11 +4773,11 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -4787,7 +4915,7 @@ }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", @@ -4795,6 +4923,9 @@ "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-tree": { @@ -4845,12 +4976,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmmirror.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "dependencies": { "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -4864,21 +4995,21 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -4893,7 +5024,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -5048,10 +5179,14 @@ }, "node_modules/detab": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/detab/-/detab-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "dependencies": { "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/detect-node": { @@ -5138,12 +5273,15 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { @@ -5153,23 +5291,29 @@ }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-case": { @@ -5221,9 +5365,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.563", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz", + "integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -5240,8 +5384,12 @@ }, "node_modules/emoticon": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/encodeurl": { "version": "1.0.2", @@ -5294,7 +5442,7 @@ }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { "node": ">=6" @@ -5335,7 +5483,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", @@ -5381,11 +5529,14 @@ } }, "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmmirror.com/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.14.2.tgz", + "integrity": "sha512-wZmJAV7EFUG5W8XNXSazIdichnWEhGB1OWg4tnXWPj0CPNUcFdgorGNO6N9p6WBUgoUe4P0OziJYn1+6zxP2aQ==", "engines": { "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, "node_modules/etag": { @@ -5533,12 +5684,12 @@ }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { "is-extendable": "^0.1.0" @@ -5601,16 +5752,16 @@ }, "node_modules/fbemitter": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/fbemitter/-/fbemitter-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "dependencies": { "fbjs": "^3.0.0" } }, "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -5618,17 +5769,17 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "ua-parser-js": "^1.0.35" } }, "node_modules/fbjs-css-vars": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, "node_modules/feed": { "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/feed/-/feed-4.2.2.tgz", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "dependencies": { "xml-js": "^1.6.11" @@ -5740,9 +5891,9 @@ } }, "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", "dependencies": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" @@ -5861,11 +6012,15 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "engines": { "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fresh": { @@ -5937,7 +6092,7 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, "node_modules/get-stream": { @@ -5953,7 +6108,7 @@ }, "node_modules/github-slugger": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/github-slugger/-/github-slugger-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { @@ -6094,7 +6249,7 @@ }, "node_modules/gray-matter": { "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { "js-yaml": "^3.13.1", @@ -6108,7 +6263,7 @@ }, "node_modules/gray-matter/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" @@ -6116,7 +6271,7 @@ }, "node_modules/gray-matter/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { "argparse": "^1.0.7", @@ -6187,7 +6342,7 @@ }, "node_modules/hast-to-hyperscript": { "version": "9.0.1", - "resolved": "https://registry.npmmirror.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "dependencies": { "@types/unist": "^2.0.3", @@ -6197,11 +6352,15 @@ "style-to-object": "^0.3.0", "unist-util-is": "^4.0.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-from-parse5": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "dependencies": { "@types/parse5": "^5.0.0", @@ -6210,16 +6369,24 @@ "vfile": "^4.0.0", "vfile-location": "^3.2.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-parse-selector": { "version": "2.2.5", - "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/hast-util-raw": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dependencies": { "@types/hast": "^2.0.0", @@ -6232,16 +6399,20 @@ "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-raw/node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/hast-util-to-parse5": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dependencies": { "hast-to-hyperscript": "^9.0.0", @@ -6249,11 +6420,15 @@ "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/hastscript": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "dependencies": { "@types/hast": "^2.0.0", @@ -6261,6 +6436,10 @@ "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/he": { @@ -6378,8 +6557,12 @@ }, "node_modules/html-void-elements": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/html-webpack-plugin": { "version": "5.5.0", @@ -6400,14 +6583,21 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "node_modules/http-cache-semantics": { @@ -6524,7 +6714,7 @@ }, "node_modules/image-size": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/image-size/-/image-size-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "dependencies": { "queue": "6.0.2" @@ -6579,7 +6769,7 @@ }, "node_modules/infima": { "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmmirror.com/infima/-/infima-0.2.0-alpha.42.tgz", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", "engines": { "node": ">=12" @@ -6606,7 +6796,7 @@ }, "node_modules/inline-style-parser": { "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "node_modules/interpret": { @@ -6635,16 +6825,24 @@ }, "node_modules/is-alphabetical": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-alphanumerical": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-arrayish": { @@ -6665,8 +6863,22 @@ }, "node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { "node": ">=4" } @@ -6697,8 +6909,12 @@ }, "node_modules/is-decimal": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-docker": { "version": "2.2.1", @@ -6713,7 +6929,7 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "engines": { "node": ">=0.10.0" @@ -6748,8 +6964,12 @@ }, "node_modules/is-hexadecimal": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-installed-globally": { "version": "0.4.0", @@ -6781,7 +7001,7 @@ }, "node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "engines": { "node": ">=0.10.0" @@ -6805,7 +7025,7 @@ }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" @@ -6824,7 +7044,7 @@ }, "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "engines": { "node": ">=0.10.0" @@ -6853,13 +7073,21 @@ }, "node_modules/is-whitespace-character": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-word-character": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-wsl": { "version": "2.2.0", @@ -6955,7 +7183,7 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" @@ -7115,7 +7343,7 @@ }, "node_modules/lodash.curry": { "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/lodash.curry/-/lodash.curry-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, "node_modules/lodash.debounce": { @@ -7125,12 +7353,12 @@ }, "node_modules/lodash.flow": { "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/lodash.flow/-/lodash.flow-3.5.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "node_modules/lodash.uniq": { @@ -7197,28 +7425,40 @@ }, "node_modules/markdown-escapes": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dependencies": { "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-definitions": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-to-hast": { "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "dependencies": { "@types/mdast": "^3.0.0", @@ -7229,12 +7469,20 @@ "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-to-string": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/mdn-data": { "version": "2.0.14", @@ -7243,7 +7491,7 @@ }, "node_modules/mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "node_modules/media-typer": { @@ -7485,16 +7733,16 @@ }, "node_modules/node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7519,9 +7767,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -7533,7 +7781,7 @@ }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" @@ -7560,7 +7808,7 @@ }, "node_modules/nprogress": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "node_modules/nth-check": { @@ -7775,7 +8023,7 @@ }, "node_modules/parse-entities": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dependencies": { "character-entities": "^1.0.0", @@ -7784,6 +8032,10 @@ "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/parse-json": { @@ -7802,24 +8054,30 @@ }, "node_modules/parse-numeric-range": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse5": { "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parseurl": { @@ -7992,11 +8250,11 @@ } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -8069,7 +8327,7 @@ }, "node_modules/postcss-discard-unused": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "dependencies": { "postcss-selector-parser": "^6.0.5" @@ -8100,7 +8358,7 @@ }, "node_modules/postcss-merge-idents": { "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "dependencies": { "cssnano-utils": "^3.1.0", @@ -8129,9 +8387,9 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -8402,7 +8660,7 @@ }, "node_modules/postcss-reduce-idents": { "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8415,9 +8673,9 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" @@ -8456,9 +8714,9 @@ } }, "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "dependencies": { "sort-css-media-queries": "2.1.0" }, @@ -8505,7 +8763,7 @@ }, "node_modules/postcss-zindex": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", "engines": { "node": "^10 || ^12 || >=14.0" @@ -8549,7 +8807,7 @@ }, "node_modules/prismjs": { "version": "1.29.0", - "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "engines": { "node": ">=6" @@ -8562,7 +8820,7 @@ }, "node_modules/promise": { "version": "7.3.1", - "resolved": "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { "asap": "~2.0.3" @@ -8592,10 +8850,14 @@ }, "node_modules/property-information": { "version": "5.6.0", - "resolved": "https://registry.npmmirror.com/property-information/-/property-information-5.6.0.tgz", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dependencies": { "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/proxy-addr": { @@ -8645,7 +8907,7 @@ }, "node_modules/pure-color": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/pure-color/-/pure-color-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "node_modules/qs": { @@ -8661,7 +8923,7 @@ }, "node_modules/queue": { "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/queue/-/queue-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dependencies": { "inherits": "~2.0.3" @@ -8746,7 +9008,7 @@ }, "node_modules/react-base16-styling": { "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "dependencies": { "base16": "^1.0.0", @@ -8888,7 +9150,7 @@ }, "node_modules/react-json-view": { "version": "1.21.3", - "resolved": "https://registry.npmmirror.com/react-json-view/-/react-json-view-1.21.3.tgz", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", "dependencies": { "flux": "^4.0.1", @@ -8903,7 +9165,7 @@ }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "node_modules/react-loadable": { @@ -8983,11 +9245,11 @@ } }, "node_modules/react-textarea-autosize": { - "version": "8.4.0", - "resolved": "https://registry.npmmirror.com/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", - "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", "dependencies": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, @@ -9024,7 +9286,7 @@ }, "node_modules/reading-time": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/reading-time/-/reading-time-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "node_modules/rechoir": { @@ -9150,7 +9412,7 @@ }, "node_modules/remark-emoji": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/remark-emoji/-/remark-emoji-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "dependencies": { "emoticon": "^3.2.0", @@ -9160,12 +9422,16 @@ }, "node_modules/remark-footnotes": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/remark-mdx": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/remark-mdx/-/remark-mdx-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dependencies": { "@babel/core": "7.12.9", @@ -9176,11 +9442,15 @@ "is-alphabetical": "1.0.4", "remark-parse": "8.0.3", "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-mdx/node_modules/@babel/core": { "version": "7.12.9", - "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.12.9.tgz", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "@babel/code-frame": "^7.10.4", @@ -9202,17 +9472,22 @@ }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", @@ -9224,7 +9499,7 @@ }, "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -9234,16 +9509,16 @@ } }, "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/remark-mdx/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" @@ -9251,7 +9526,7 @@ }, "node_modules/remark-mdx/node_modules/unified": { "version": "9.2.0", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.0.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { "bail": "^1.0.0", @@ -9260,11 +9535,15 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-parse": { "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-8.0.3.tgz", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dependencies": { "ccount": "^1.0.0", @@ -9283,14 +9562,22 @@ "unist-util-remove-position": "^2.0.0", "vfile-location": "^3.0.0", "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remark-squeeze-paragraphs": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "dependencies": { "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/renderkid": { @@ -9366,7 +9653,7 @@ }, "node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "engines": { "node": ">=0.10" @@ -9462,7 +9749,7 @@ }, "node_modules/rtlcss": { "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/rtlcss/-/rtlcss-3.5.0.tgz", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "dependencies": { "find-up": "^5.0.0", @@ -9476,7 +9763,7 @@ }, "node_modules/rtlcss/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { "locate-path": "^6.0.0", @@ -9484,39 +9771,51 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rtlcss/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rtlcss/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rtlcss/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-parallel": { @@ -9546,9 +9845,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/scheduler": { "version": "0.20.2", @@ -9572,9 +9871,15 @@ "node": ">= 8.9.0" } }, + "node_modules/search-insights": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.9.0.tgz", + "integrity": "sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==", + "peer": true + }, "node_modules/section-matter": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dependencies": { "extend-shallow": "^2.0.1", @@ -9796,7 +10101,7 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { @@ -9895,7 +10200,7 @@ }, "node_modules/sitemap": { "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "dependencies": { "@types/node": "^17.0.5", @@ -9913,7 +10218,7 @@ }, "node_modules/sitemap/node_modules/@types/node": { "version": "17.0.45", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/slash": { @@ -9936,7 +10241,7 @@ }, "node_modules/sort-css-media-queries": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", "engines": { "node": ">= 6.3.0" @@ -9969,8 +10274,12 @@ }, "node_modules/space-separated-tokens": { "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/spdy": { "version": "4.0.2", @@ -10002,7 +10311,7 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stable": { @@ -10013,8 +10322,12 @@ }, "node_modules/state-toggle": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/statuses": { "version": "2.0.1", @@ -10071,7 +10384,7 @@ }, "node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", @@ -10095,7 +10408,7 @@ }, "node_modules/strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "engines": { "node": ">=0.10.0" @@ -10111,15 +10424,18 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/style-to-object": { "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "dependencies": { "inline-style-parser": "0.1.1" @@ -10401,23 +10717,32 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/trim": { "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", + "deprecated": "Use String.prototype.trim() instead" }, "node_modules/trim-trailing-lines": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/trough": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/tslib": { "version": "2.4.1", @@ -10484,20 +10809,38 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmmirror.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], "engines": { "node": "*" } }, "node_modules/unherit": { "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/unherit/-/unherit-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dependencies": { "inherits": "^2.0.0", "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -10538,7 +10881,7 @@ }, "node_modules/unified": { "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.2.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { "bail": "^1.0.0", @@ -10547,6 +10890,10 @@ "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unique-string": { @@ -10562,65 +10909,101 @@ }, "node_modules/unist-builder": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/unist-util-generated": { "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/unist-util-is": { "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/unist-util-position": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/unist-util-remove": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "dependencies": { "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-remove-position": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dependencies": { "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-visit": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-visit-parents": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/universalify": { @@ -10640,15 +11023,29 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -10837,7 +11234,7 @@ }, "node_modules/use-composed-ref": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -10845,7 +11242,7 @@ }, "node_modules/use-isomorphic-layout-effect": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -10858,7 +11255,7 @@ }, "node_modules/use-latest": { "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/use-latest/-/use-latest-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" @@ -10921,27 +11318,39 @@ }, "node_modules/vfile": { "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/vfile/-/vfile-4.2.1.tgz", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/vfile-location": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, "node_modules/vfile-message": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/wait-on": { @@ -10984,12 +11393,16 @@ }, "node_modules/web-namespaces": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { @@ -11353,7 +11766,7 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", @@ -11476,7 +11889,7 @@ }, "node_modules/xml-js": { "version": "1.6.11", - "resolved": "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "dependencies": { "sax": "^1.2.4" @@ -11487,7 +11900,7 @@ }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { "node": ">=0.4" @@ -11516,150 +11929,164 @@ }, "node_modules/zwitch": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } }, "dependencies": { "@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", "requires": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "requires": { + "@algolia/autocomplete-shared": "1.9.3" } }, "@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "requires": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.9.3" } }, "@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmmirror.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "requires": {} }, "@algolia/cache-browser-local-storage": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", - "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz", + "integrity": "sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==", "requires": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.20.0" } }, "@algolia/cache-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-common/-/cache-common-4.14.3.tgz", - "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.20.0.tgz", + "integrity": "sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==" }, "@algolia/cache-in-memory": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", - "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz", + "integrity": "sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==", "requires": { - "@algolia/cache-common": "4.14.3" + "@algolia/cache-common": "4.20.0" } }, "@algolia/client-account": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-account/-/client-account-4.14.3.tgz", - "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.20.0.tgz", + "integrity": "sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "@algolia/client-analytics": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", - "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.20.0.tgz", + "integrity": "sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "@algolia/client-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-common/-/client-common-4.14.3.tgz", - "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.20.0.tgz", + "integrity": "sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==", "requires": { - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "@algolia/client-personalization": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", - "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.20.0.tgz", + "integrity": "sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "@algolia/client-search": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/client-search/-/client-search-4.14.3.tgz", - "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.20.0.tgz", + "integrity": "sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==", "requires": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" + "@algolia/client-common": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "@algolia/events": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/@algolia/events/-/events-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "@algolia/logger-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/logger-common/-/logger-common-4.14.3.tgz", - "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.20.0.tgz", + "integrity": "sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==" }, "@algolia/logger-console": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/logger-console/-/logger-console-4.14.3.tgz", - "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.20.0.tgz", + "integrity": "sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==", "requires": { - "@algolia/logger-common": "4.14.3" + "@algolia/logger-common": "4.20.0" } }, "@algolia/requester-browser-xhr": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", - "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz", + "integrity": "sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==", "requires": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.20.0" } }, "@algolia/requester-common": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-common/-/requester-common-4.14.3.tgz", - "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.20.0.tgz", + "integrity": "sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==" }, "@algolia/requester-node-http": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", - "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz", + "integrity": "sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==", "requires": { - "@algolia/requester-common": "4.14.3" + "@algolia/requester-common": "4.20.0" } }, "@algolia/transporter": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/@algolia/transporter/-/transporter-4.14.3.tgz", - "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.20.0.tgz", + "integrity": "sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==", "requires": { - "@algolia/cache-common": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/requester-common": "4.14.3" + "@algolia/cache-common": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/requester-common": "4.20.0" } }, "@ampproject/remapping": { @@ -12816,11 +13243,18 @@ } }, "@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + } } }, "@babel/runtime-corejs3": { @@ -12876,24 +13310,24 @@ "optional": true }, "@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==" }, "@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", "requires": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", - "algoliasearch": "^4.0.0" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" } }, "@docusaurus/core": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/core/-/core-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", "requires": { "@babel/core": "^7.18.6", @@ -12971,7 +13405,7 @@ }, "@docusaurus/cssnano-preset": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", "requires": { "cssnano-preset-advanced": "^5.3.8", @@ -12982,7 +13416,7 @@ }, "@docusaurus/logger": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/logger/-/logger-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", "requires": { "chalk": "^4.1.2", @@ -12991,7 +13425,7 @@ }, "@docusaurus/mdx-loader": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", "requires": { "@babel/parser": "^7.18.8", @@ -13030,7 +13464,7 @@ }, "@docusaurus/plugin-content-blog": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", "requires": { "@docusaurus/core": "2.2.0", @@ -13053,7 +13487,7 @@ }, "@docusaurus/plugin-content-docs": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", "requires": { "@docusaurus/core": "2.2.0", @@ -13076,7 +13510,7 @@ }, "@docusaurus/plugin-content-pages": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", "requires": { "@docusaurus/core": "2.2.0", @@ -13091,7 +13525,7 @@ }, "@docusaurus/plugin-debug": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", "requires": { "@docusaurus/core": "2.2.0", @@ -13104,7 +13538,7 @@ }, "@docusaurus/plugin-google-analytics": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", "requires": { "@docusaurus/core": "2.2.0", @@ -13115,7 +13549,7 @@ }, "@docusaurus/plugin-google-gtag": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", "requires": { "@docusaurus/core": "2.2.0", @@ -13126,7 +13560,7 @@ }, "@docusaurus/plugin-sitemap": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", "requires": { "@docusaurus/core": "2.2.0", @@ -13142,7 +13576,7 @@ }, "@docusaurus/preset-classic": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", "requires": { "@docusaurus/core": "2.2.0", @@ -13170,7 +13604,7 @@ }, "@docusaurus/theme-classic": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", "requires": { "@docusaurus/core": "2.2.0", @@ -13202,7 +13636,7 @@ }, "@docusaurus/theme-common": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", "requires": { "@docusaurus/mdx-loader": "2.2.0", @@ -13223,7 +13657,7 @@ }, "@docusaurus/theme-search-algolia": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", "requires": { "@docsearch/react": "^3.1.1", @@ -13246,7 +13680,7 @@ }, "@docusaurus/theme-translations": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", "requires": { "fs-extra": "^10.1.0", @@ -13270,7 +13704,7 @@ }, "@docusaurus/utils": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils/-/utils-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", "requires": { "@docusaurus/logger": "2.2.0", @@ -13292,7 +13726,7 @@ }, "@docusaurus/utils-common": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", "requires": { "tslib": "^2.4.0" @@ -13300,7 +13734,7 @@ }, "@docusaurus/utils-validation": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", "requires": { "@docusaurus/logger": "2.2.0", @@ -13405,7 +13839,7 @@ }, "@mdx-js/mdx": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "requires": { "@babel/core": "7.12.9", @@ -13431,7 +13865,7 @@ "dependencies": { "@babel/core": { "version": "7.12.9", - "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.12.9.tgz", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { "@babel/code-frame": "^7.10.4", @@ -13454,25 +13888,25 @@ }, "@babel/plugin-syntax-jsx": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" }, "unified": { "version": "9.2.0", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.0.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "requires": { "bail": "^1.0.0", @@ -13493,7 +13927,7 @@ }, "@mdx-js/util": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/@mdx-js/util/-/util-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" }, "@nodelib/fs.scandir": { @@ -13780,11 +14214,11 @@ } }, "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.7.tgz", + "integrity": "sha512-EVLigw5zInURhzfXUM65eixfadfsHKomGKUakToXo84t8gGIJuTcD2xooM2See7GyQ7DRtYjhCHnSUQez8JaLw==", "requires": { - "@types/unist": "*" + "@types/unist": "^2" } }, "@types/history": { @@ -13832,11 +14266,11 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.14.tgz", + "integrity": "sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==", "requires": { - "@types/unist": "*" + "@types/unist": "^2" } }, "@types/mime": { @@ -13856,7 +14290,7 @@ }, "@types/parse5": { "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/@types/parse5/-/parse5-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "@types/prop-types": { @@ -13919,9 +14353,9 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.6.tgz", + "integrity": "sha512-A1mpYCYu1aHFayy8XKN57ebXeAbh9oQIZ1wXcno6b1ESUAfMBDMx7mf/QGlYwcMRaFryh9YBuH03i/3FlPGDkQ==", "requires": { "@types/node": "*" } @@ -13957,9 +14391,9 @@ } }, "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.9.tgz", + "integrity": "sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==" }, "@types/ws": { "version": "8.5.3", @@ -14221,30 +14655,30 @@ "requires": {} }, "algoliasearch": { - "version": "4.14.3", - "resolved": "https://registry.npmmirror.com/algoliasearch/-/algoliasearch-4.14.3.tgz", - "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.3", - "@algolia/cache-common": "4.14.3", - "@algolia/cache-in-memory": "4.14.3", - "@algolia/client-account": "4.14.3", - "@algolia/client-analytics": "4.14.3", - "@algolia/client-common": "4.14.3", - "@algolia/client-personalization": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/logger-console": "4.14.3", - "@algolia/requester-browser-xhr": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/requester-node-http": "4.14.3", - "@algolia/transporter": "4.14.3" + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.20.0.tgz", + "integrity": "sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==", + "requires": { + "@algolia/cache-browser-local-storage": "4.20.0", + "@algolia/cache-common": "4.20.0", + "@algolia/cache-in-memory": "4.20.0", + "@algolia/client-account": "4.20.0", + "@algolia/client-analytics": "4.20.0", + "@algolia/client-common": "4.20.0", + "@algolia/client-personalization": "4.20.0", + "@algolia/client-search": "4.20.0", + "@algolia/logger-common": "4.20.0", + "@algolia/logger-console": "4.20.0", + "@algolia/requester-browser-xhr": "4.20.0", + "@algolia/requester-common": "4.20.0", + "@algolia/requester-node-http": "4.20.0", + "@algolia/transporter": "4.20.0" } }, "algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmmirror.com/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.2.tgz", + "integrity": "sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==", "requires": { "@algolia/events": "^4.0.1" } @@ -14303,12 +14737,12 @@ }, "arg": { "version": "5.0.2", - "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { @@ -14323,7 +14757,7 @@ }, "asap": { "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "at-least-node": { @@ -14332,13 +14766,13 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -14365,7 +14799,7 @@ }, "babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4", @@ -14374,7 +14808,7 @@ "dependencies": { "@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } @@ -14389,7 +14823,7 @@ }, "babel-plugin-extract-import-names": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "requires": { "@babel/helper-plugin-utils": "7.10.4" @@ -14397,7 +14831,7 @@ "dependencies": { "@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" } } @@ -14438,7 +14872,7 @@ }, "bail": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/bail/-/bail-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" }, "balanced-match": { @@ -14448,7 +14882,7 @@ }, "base16": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/base16/-/base16-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "batch": { @@ -14554,14 +14988,14 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" } }, "buffer-from": { @@ -14638,12 +15072,12 @@ }, "camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "requires": { "browserslist": "^4.0.0", @@ -14653,13 +15087,13 @@ } }, "caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==" + "version": "1.0.30001553", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", + "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==" }, "ccount": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/ccount/-/ccount-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" }, "chalk": { @@ -14673,22 +15107,22 @@ }, "character-entities": { "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" }, "character-entities-legacy": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" }, "character-reference-invalid": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, "cheerio": { "version": "1.0.0-rc.12", - "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "requires": { "cheerio-select": "^2.1.0", @@ -14702,7 +15136,7 @@ }, "cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "requires": { "boolbase": "^1.0.0", @@ -14807,7 +15241,7 @@ }, "collapse-white-space": { "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" }, "color-convert": { @@ -14840,7 +15274,7 @@ }, "comma-separated-tokens": { "version": "1.0.8", - "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" }, "commander": { @@ -14956,9 +15390,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==" }, "copy-webpack-plugin": { "version": "11.0.0", @@ -15071,11 +15505,11 @@ } }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "cross-spawn": { @@ -15166,7 +15600,7 @@ }, "css-select": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "requires": { "boolbase": "^1.0.0", @@ -15206,12 +15640,12 @@ } }, "cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmmirror.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "requires": { "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -15219,21 +15653,21 @@ } }, "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "requires": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -15248,7 +15682,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -15353,7 +15787,7 @@ }, "detab": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/detab/-/detab-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "requires": { "repeat-string": "^1.5.4" @@ -15428,7 +15862,7 @@ }, "dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "requires": { "domelementtype": "^2.3.0", @@ -15443,20 +15877,20 @@ }, "domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "requires": { "domelementtype": "^2.3.0" } }, "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "requires": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" } }, "dot-case": { @@ -15504,9 +15938,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.563", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz", + "integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==" }, "emoji-regex": { "version": "9.2.2", @@ -15520,7 +15954,7 @@ }, "emoticon": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/emoticon/-/emoticon-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" }, "encodeurl": { @@ -15565,7 +15999,7 @@ }, "escalade": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-goat": { @@ -15594,7 +16028,7 @@ }, "esprima": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esrecurse": { @@ -15623,9 +16057,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eta": { - "version": "1.12.3", - "resolved": "https://registry.npmmirror.com/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.14.2.tgz", + "integrity": "sha512-wZmJAV7EFUG5W8XNXSazIdichnWEhGB1OWg4tnXWPj0CPNUcFdgorGNO6N9p6WBUgoUe4P0OziJYn1+6zxP2aQ==" }, "etag": { "version": "1.8.1", @@ -15752,12 +16186,12 @@ }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "requires": { "is-extendable": "^0.1.0" @@ -15811,16 +16245,16 @@ }, "fbemitter": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/fbemitter/-/fbemitter-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "requires": { "fbjs": "^3.0.0" } }, "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "requires": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -15828,17 +16262,17 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "ua-parser-js": "^1.0.35" } }, "fbjs-css-vars": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, "feed": { "version": "4.2.2", - "resolved": "https://registry.npmmirror.com/feed/-/feed-4.2.2.tgz", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "requires": { "xml-js": "^1.6.11" @@ -15927,9 +16361,9 @@ } }, "flux": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", "requires": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" @@ -16006,9 +16440,9 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" }, "fresh": { "version": "0.5.2", @@ -16063,7 +16497,7 @@ }, "get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, "get-stream": { @@ -16076,7 +16510,7 @@ }, "github-slugger": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/github-slugger/-/github-slugger-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "glob": { @@ -16191,7 +16625,7 @@ }, "gray-matter": { "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/gray-matter/-/gray-matter-4.0.3.tgz", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "requires": { "js-yaml": "^3.13.1", @@ -16202,7 +16636,7 @@ "dependencies": { "argparse": { "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { "sprintf-js": "~1.0.2" @@ -16210,7 +16644,7 @@ }, "js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", @@ -16265,7 +16699,7 @@ }, "hast-to-hyperscript": { "version": "9.0.1", - "resolved": "https://registry.npmmirror.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "requires": { "@types/unist": "^2.0.3", @@ -16279,7 +16713,7 @@ }, "hast-util-from-parse5": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "requires": { "@types/parse5": "^5.0.0", @@ -16292,12 +16726,12 @@ }, "hast-util-parse-selector": { "version": "2.2.5", - "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" }, "hast-util-raw": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "requires": { "@types/hast": "^2.0.0", @@ -16314,14 +16748,14 @@ "dependencies": { "parse5": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" } } }, "hast-util-to-parse5": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "requires": { "hast-to-hyperscript": "^9.0.0", @@ -16333,7 +16767,7 @@ }, "hastscript": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "requires": { "@types/hast": "^2.0.0", @@ -16447,7 +16881,7 @@ }, "html-void-elements": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" }, "html-webpack-plugin": { @@ -16463,14 +16897,14 @@ } }, "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "requires": { "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", + "domhandler": "^5.0.3", "domutils": "^3.0.1", - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "http-cache-semantics": { @@ -16555,7 +16989,7 @@ }, "image-size": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/image-size/-/image-size-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "requires": { "queue": "6.0.2" @@ -16592,7 +17026,7 @@ }, "infima": { "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmmirror.com/infima/-/infima-0.2.0-alpha.42.tgz", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" }, "inflight": { @@ -16616,7 +17050,7 @@ }, "inline-style-parser": { "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "interpret": { @@ -16639,12 +17073,12 @@ }, "is-alphabetical": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" }, "is-alphanumerical": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "requires": { "is-alphabetical": "^1.0.0", @@ -16666,7 +17100,7 @@ }, "is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-ci": { @@ -16694,7 +17128,7 @@ }, "is-decimal": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, "is-docker": { @@ -16704,7 +17138,7 @@ }, "is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { @@ -16727,7 +17161,7 @@ }, "is-hexadecimal": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, "is-installed-globally": { @@ -16751,7 +17185,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, "is-path-cwd": { @@ -16766,7 +17200,7 @@ }, "is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" }, "is-plain-object": { @@ -16779,7 +17213,7 @@ }, "is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" }, "is-root": { @@ -16799,12 +17233,12 @@ }, "is-whitespace-character": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" }, "is-word-character": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/is-word-character/-/is-word-character-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" }, "is-wsl": { @@ -16888,7 +17322,7 @@ }, "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" @@ -17004,7 +17438,7 @@ }, "lodash.curry": { "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/lodash.curry/-/lodash.curry-4.1.1.tgz", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, "lodash.debounce": { @@ -17014,12 +17448,12 @@ }, "lodash.flow": { "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/lodash.flow/-/lodash.flow-3.5.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, "lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "lodash.uniq": { @@ -17073,12 +17507,12 @@ }, "markdown-escapes": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" }, "mdast-squeeze-paragraphs": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "requires": { "unist-util-remove": "^2.0.0" @@ -17086,7 +17520,7 @@ }, "mdast-util-definitions": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "requires": { "unist-util-visit": "^2.0.0" @@ -17094,7 +17528,7 @@ }, "mdast-util-to-hast": { "version": "10.0.1", - "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "requires": { "@types/mdast": "^3.0.0", @@ -17109,7 +17543,7 @@ }, "mdast-util-to-string": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, "mdn-data": { @@ -17119,7 +17553,7 @@ }, "mdurl": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "media-typer": { @@ -17300,16 +17734,16 @@ }, "node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "requires": { "lodash": "^4.17.21" } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } @@ -17320,9 +17754,9 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "normalize-path": { "version": "3.0.0", @@ -17331,7 +17765,7 @@ }, "normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, "normalize-url": { @@ -17349,7 +17783,7 @@ }, "nprogress": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "nth-check": { @@ -17515,7 +17949,7 @@ }, "parse-entities": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "requires": { "character-entities": "^1.0.0", @@ -17539,12 +17973,12 @@ }, "parse-numeric-range": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "parse5": { "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "requires": { "entities": "^4.4.0" @@ -17552,7 +17986,7 @@ }, "parse5-htmlparser2-tree-adapter": { "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "requires": { "domhandler": "^5.0.2", @@ -17689,11 +18123,11 @@ } }, "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -17734,7 +18168,7 @@ }, "postcss-discard-unused": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "requires": { "postcss-selector-parser": "^6.0.5" @@ -17752,7 +18186,7 @@ }, "postcss-merge-idents": { "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "requires": { "cssnano-utils": "^3.1.0", @@ -17769,9 +18203,9 @@ } }, "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "requires": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -17930,16 +18364,16 @@ }, "postcss-reduce-idents": { "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "requires": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" @@ -17963,9 +18397,9 @@ } }, "postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "requires": { "sort-css-media-queries": "2.1.0" } @@ -17994,7 +18428,7 @@ }, "postcss-zindex": { "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", "requires": {} }, @@ -18025,7 +18459,7 @@ }, "prismjs": { "version": "1.29.0", - "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "process-nextick-args": { @@ -18035,7 +18469,7 @@ }, "promise": { "version": "7.3.1", - "resolved": "https://registry.npmmirror.com/promise/-/promise-7.3.1.tgz", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { "asap": "~2.0.3" @@ -18062,7 +18496,7 @@ }, "property-information": { "version": "5.6.0", - "resolved": "https://registry.npmmirror.com/property-information/-/property-information-5.6.0.tgz", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "requires": { "xtend": "^4.0.0" @@ -18108,7 +18542,7 @@ }, "pure-color": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/pure-color/-/pure-color-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "qs": { @@ -18121,7 +18555,7 @@ }, "queue": { "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/queue/-/queue-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "requires": { "inherits": "~2.0.3" @@ -18192,7 +18626,7 @@ }, "react-base16-styling": { "version": "0.6.0", - "resolved": "https://registry.npmmirror.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "requires": { "base16": "^1.0.0", @@ -18311,7 +18745,7 @@ }, "react-json-view": { "version": "1.21.3", - "resolved": "https://registry.npmmirror.com/react-json-view/-/react-json-view-1.21.3.tgz", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", "requires": { "flux": "^4.0.1", @@ -18322,7 +18756,7 @@ }, "react-lifecycles-compat": { "version": "3.0.4", - "resolved": "https://registry.npmmirror.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "react-loadable": { @@ -18381,11 +18815,11 @@ } }, "react-textarea-autosize": { - "version": "8.4.0", - "resolved": "https://registry.npmmirror.com/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", - "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", "requires": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" } @@ -18410,7 +18844,7 @@ }, "reading-time": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/reading-time/-/reading-time-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "rechoir": { @@ -18511,7 +18945,7 @@ }, "remark-emoji": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/remark-emoji/-/remark-emoji-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "requires": { "emoticon": "^3.2.0", @@ -18521,12 +18955,12 @@ }, "remark-footnotes": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" }, "remark-mdx": { "version": "1.6.22", - "resolved": "https://registry.npmmirror.com/remark-mdx/-/remark-mdx-1.6.22.tgz", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "requires": { "@babel/core": "7.12.9", @@ -18541,7 +18975,7 @@ "dependencies": { "@babel/core": { "version": "7.12.9", - "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.12.9.tgz", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "requires": { "@babel/code-frame": "^7.10.4", @@ -18564,12 +18998,12 @@ }, "@babel/helper-plugin-utils": { "version": "7.10.4", - "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -18579,25 +19013,25 @@ }, "@babel/plugin-syntax-jsx": { "version": "7.12.1", - "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" }, "unified": { "version": "9.2.0", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.0.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "requires": { "bail": "^1.0.0", @@ -18612,7 +19046,7 @@ }, "remark-parse": { "version": "8.0.3", - "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-8.0.3.tgz", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "requires": { "ccount": "^1.0.0", @@ -18635,7 +19069,7 @@ }, "remark-squeeze-paragraphs": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "requires": { "mdast-squeeze-paragraphs": "^4.0.0" @@ -18713,7 +19147,7 @@ }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "require-from-string": { @@ -18784,7 +19218,7 @@ }, "rtlcss": { "version": "3.5.0", - "resolved": "https://registry.npmmirror.com/rtlcss/-/rtlcss-3.5.0.tgz", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "requires": { "find-up": "^5.0.0", @@ -18795,7 +19229,7 @@ "dependencies": { "find-up": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { "locate-path": "^6.0.0", @@ -18804,7 +19238,7 @@ }, "locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { "p-locate": "^5.0.0" @@ -18812,7 +19246,7 @@ }, "p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { "yocto-queue": "^0.1.0" @@ -18820,7 +19254,7 @@ }, "p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { "p-limit": "^3.0.2" @@ -18855,9 +19289,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "scheduler": { "version": "0.20.2", @@ -18878,9 +19312,15 @@ "ajv-keywords": "^3.5.2" } }, + "search-insights": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.9.0.tgz", + "integrity": "sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==", + "peer": true + }, "section-matter": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/section-matter/-/section-matter-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "requires": { "extend-shallow": "^2.0.1", @@ -19073,7 +19513,7 @@ }, "setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { @@ -19154,7 +19594,7 @@ }, "sitemap": { "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-7.1.1.tgz", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "requires": { "@types/node": "^17.0.5", @@ -19165,7 +19605,7 @@ "dependencies": { "@types/node": { "version": "17.0.45", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" } } @@ -19187,7 +19627,7 @@ }, "sort-css-media-queries": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" }, "source-map": { @@ -19211,7 +19651,7 @@ }, "space-separated-tokens": { "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" }, "spdy": { @@ -19241,7 +19681,7 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stable": { @@ -19251,7 +19691,7 @@ }, "state-toggle": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/state-toggle/-/state-toggle-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" }, "statuses": { @@ -19299,7 +19739,7 @@ }, "stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "requires": { "get-own-enumerable-property-symbols": "^3.0.0", @@ -19317,7 +19757,7 @@ }, "strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" }, "strip-final-newline": { @@ -19327,12 +19767,12 @@ }, "strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "style-to-object": { "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", "requires": { "inline-style-parser": "0.1.1" @@ -19546,22 +19986,22 @@ }, "tr46": { "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "trim": { "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/trim/-/trim-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, "trim-trailing-lines": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" }, "trough": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/trough/-/trough-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" }, "tslib": { @@ -19612,13 +20052,13 @@ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" }, "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmmirror.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", + "integrity": "sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==" }, "unherit": { "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/unherit/-/unherit-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "requires": { "inherits": "^2.0.0", @@ -19651,7 +20091,7 @@ }, "unified": { "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/unified/-/unified-9.2.2.tgz", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "requires": { "bail": "^1.0.0", @@ -19672,27 +20112,27 @@ }, "unist-builder": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-builder/-/unist-builder-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" }, "unist-util-generated": { "version": "1.1.6", - "resolved": "https://registry.npmmirror.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" }, "unist-util-is": { "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-4.1.0.tgz", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" }, "unist-util-position": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" }, "unist-util-remove": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "requires": { "unist-util-is": "^4.0.0" @@ -19700,7 +20140,7 @@ }, "unist-util-remove-position": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "requires": { "unist-util-visit": "^2.0.0" @@ -19708,7 +20148,7 @@ }, "unist-util-stringify-position": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "requires": { "@types/unist": "^2.0.2" @@ -19716,7 +20156,7 @@ }, "unist-util-visit": { "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "requires": { "@types/unist": "^2.0.0", @@ -19726,7 +20166,7 @@ }, "unist-util-visit-parents": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "requires": { "@types/unist": "^2.0.0", @@ -19744,9 +20184,9 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -19893,19 +20333,19 @@ }, "use-composed-ref": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", "requires": {} }, "use-isomorphic-layout-effect": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", "requires": {} }, "use-latest": { "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/use-latest/-/use-latest-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "requires": { "use-isomorphic-layout-effect": "^1.1.1" @@ -19948,7 +20388,7 @@ }, "vfile": { "version": "4.2.1", - "resolved": "https://registry.npmmirror.com/vfile/-/vfile-4.2.1.tgz", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "requires": { "@types/unist": "^2.0.0", @@ -19959,12 +20399,12 @@ }, "vfile-location": { "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/vfile-location/-/vfile-location-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" }, "vfile-message": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "requires": { "@types/unist": "^2.0.0", @@ -20002,12 +20442,12 @@ }, "web-namespaces": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-1.1.4.tgz", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, "webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "webpack": { @@ -20277,7 +20717,7 @@ }, "whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", @@ -20364,7 +20804,7 @@ }, "xml-js": { "version": "1.6.11", - "resolved": "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "requires": { "sax": "^1.2.4" @@ -20372,7 +20812,7 @@ }, "xtend": { "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "yallist": { @@ -20392,7 +20832,7 @@ }, "zwitch": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" } } diff --git a/sidebars.js b/sidebars.js index e5f5f5be..d6f87071 100644 --- a/sidebars.js +++ b/sidebars.js @@ -32,11 +32,7 @@ const sidebars = { items: [ "deploy-manual/intro", "deploy-manual/config", - "deploy-manual/source", "deploy-manual/rpm", - "deploy-manual/docker", - "deploy-manual/docker-compose", - "deploy-manual/cluster", ], }, { diff --git a/versioned_docs/version-v2/FAQ/intro.md b/versioned_docs/version-v2/FAQ/intro.md new file mode 100644 index 00000000..36773d9b --- /dev/null +++ b/versioned_docs/version-v2/FAQ/intro.md @@ -0,0 +1,4 @@ +--- +title: FAQ +--- +本章将针对使用过程中的常见问题进行解答。 \ No newline at end of file diff --git a/versioned_docs/version-v2/FAQ/whichdatabase.md b/versioned_docs/version-v2/FAQ/whichdatabase.md new file mode 100644 index 00000000..3075cb5f --- /dev/null +++ b/versioned_docs/version-v2/FAQ/whichdatabase.md @@ -0,0 +1,19 @@ +--- +title: 支持哪些数据库 +--- +# 支持的数据库及版本 + +|数据库类型|验证可用的版本| +|--|--| +|MySQL|5.7.25 、8.0.33| +|PostgreSQL|9.3 – 13| +|Oracle|11.2、12.1、12.2| +|SQL server|2008、2012、2016| +|DB2|11.5| +|TiDB|4.0.8| +|OceanBase For MySQL|3.5| +|达梦|V8| + +:::tip +当前版本为SQLE验证确认可用的版本,若需要使用其他版本,需自行验证 +::: \ No newline at end of file diff --git a/versioned_docs/version-v2/SUMMARY.md b/versioned_docs/version-v2/SUMMARY.md new file mode 100644 index 00000000..8679667b --- /dev/null +++ b/versioned_docs/version-v2/SUMMARY.md @@ -0,0 +1,55 @@ +# Summary + +* [产品介绍](intro.md) +* [在线体验](online-demo.md) +* [产品支持](intro.md) + * [企业版社区版功能对比](support/compare.md) + * [社区支持](support/community-support.md) + * [商业支持](support/commercial-support.md) +* [快速开始](quick-usage.md) +* [安装部署](deploy-manual/intro.md) + * [配置文件说明](deploy-manual/config.md) + * [源码安装](deploy-manual/source.md) + * [RPM 安装](deploy-manual/rpm.md) + * [Docker 部署](deploy-manual/docker.md) + * [Docker Compose 部署](deploy-manual/docker-compose.md) + * [集群部署](deploy-manual/cluster.md) +* [用户手册](user-manual/intro.md) + * [项目](user-manual/project/intro.md) + * [创建项目【企业版】](user-manual/project/project_create.md) + * [数据源管理](user-manual/project/instance-manager.md) + * [成员/成员组管理](user-manual/project/group_member.md) + * [审核规则模板](user-manual/project/rule-template-manager.md) + * [审核流程模板](user-manual/project/workflow-template-manager.md) + * [白名单管理【企业版】](user-manual/project/whitelist-manager.md) + * [工单](user-manual/project/workflow/intro.md) + * [创建工单](user-manual/project/workflow/create-workflow.md) + * [审核工单](user-manual/project/workflow/audit-workflow.md) + * [上线工单](user-manual/project/workflow/exec-workflow.md) + * [扫描任务](user-manual/project/audit_task/intro.md) + * [库表元数据](user-manual/project/audit_task/metadata_audit.md) + * [慢日志](user-manual/project/audit_task/slowlog_audit.md) + * [会话SQL扫描任务](user-manual/project/audit_task/processlist_audit.md) + * [百度云RDS慢日志](/docs/user-manual/project/audit_task/baiduyunrds.md) + * [应用程序SQL抓取·企业版](/docs/user-manual/project/audit_task/java_application_audit.md) + * [Java探针版应用程序SQL抓取·企业版](/docs/user-manual/project/audit_task/java_agent_audit.md) + * [SQL文件扫描](/docs/user-manual/project/audit_task/SQLfile_audit.md) + * [MyBatis扫描](/docs/user-manual/project/audit_task/mybatis.md) + * [系统设置](user-manual/sys-configuration/intro.md) + * [登录对接](user-manual/sys-configuration/login_syn.md) + * [消息推送](user-manual/sys-configuration/message_syn.md) + * [流程对接](user-manual/sys-configuration/process_syn.md) + * [webhook配置](user-manual/sys-configuration/webhook.md) + * [外部数据源同步【企业版】](user-manual/sys-configuration/instance_syn.md) + * [个性化配置](user-manual/sys-configuration/customize.md) + * [全局配置](/docs/user-manual/sys-configuration/configuration.md) + * [工作台](user-manual/sql-workbench/introduction.md) + * [配置方法](user-manual/sql-workbench/how-to-configure.md) + * [使用定制包快速搭建环境](user-manual/sql-workbench/how-to-use.md) + * [用户管理](user-manual/user-manager/intro.md) + * [用户管理](user-manual/user-manager/user.md) + * [用户组管理](user-manual/user-manager/user-group.md) + * [角色管理](user-manual/user-manager/role.md) + * [自定义审核规则](user-manual/customrule.md) +* [FAQ](/docs/FAQ/intro.md) + * [支持的数据库及版本](/docs/FAQ/whichdatabase.md) \ No newline at end of file diff --git a/versioned_docs/version-v2/book.json b/versioned_docs/version-v2/book.json new file mode 100644 index 00000000..c7186a6d --- /dev/null +++ b/versioned_docs/version-v2/book.json @@ -0,0 +1,18 @@ +{ + "plugins": ["expandable-chapters"], + "pluginsConfig": { + "fontsettings": { + "theme": "sepia", + "family": "sans", + "size": 2 + } + }, + "structure" : { + "readme" : "intro.md" + }, + "styles": { + "website": "website.css" + }, + "author": "ActionTech", + "title": "SQLE manual" +} \ No newline at end of file diff --git a/docs/deploy-manual/cluster.md b/versioned_docs/version-v2/deploy-manual/cluster.md similarity index 100% rename from docs/deploy-manual/cluster.md rename to versioned_docs/version-v2/deploy-manual/cluster.md diff --git a/versioned_docs/version-v2/deploy-manual/config.md b/versioned_docs/version-v2/deploy-manual/config.md new file mode 100644 index 00000000..9b32c0c0 --- /dev/null +++ b/versioned_docs/version-v2/deploy-manual/config.md @@ -0,0 +1,52 @@ +--- +title: 配置文件说明 +--- +# 配置文件说明 +:::tip +SQLE的配置文件采用yml的格式,默认情况下位于SQLE安装目录下,路径为`./etc/sqled.yml` +::: +## 默认文件参考 +```yml +server: + sqle_config: + server_port: 10000 + enable_https: false + cert_file_path: './etc/cert.pem' + key_file_path: './etc/key.pem' + auto_migrate_table: true + debug_log: false + log_path: './logs' + log_max_size_mb: 1024 + log_max_backup_number: 2 + secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #从 v1.2203.0 版本引入 + db_config: + mysql_cnf: + mysql_host: '127.0.0.1' + mysql_port: 3306 + mysql_user: 'root' + mysql_password: '123456' + mysql_schema: 'sqle' +``` +## 配置说明 +### sqle_config +|参数|说明| +|-|-| +|server_port|sqle 服务的 http 端口,默认10000| +|enable_https|是否开启https,默认不开启| +|cert_file_path|https 证书路径| +|key_file_path|https 私钥路径| +|auto_migrate_table|自动创建表结构,初始化数据| +|debug_log|开启debug模式,打印更多日志,会打印业务SQL,开发环境可开启| +|log_path|日志目录| +|log_max_size_mb|单个日志文件最大大小,单位MB| +|log_max_backup_number|日志文件最大备份数量| +|secret_key|全局AES加密秘钥,影响登录和用户密码等的存储;**生产环境建议配置该值替换掉程序默认值,不然会存在安全风险**;格式是32位随机字符串| + +### db_config +|参数|说明| +|-|-| +|mysql_host|SQLE存储库的地址| +|mysql_port|SQLE存储库的端口| +|mysql_user|SQLE存储库的数据库用户| +|mysql_password|SQLE存储库的数据库密码| +|mysql_schema|SQLE存储库的数据库 schema| \ No newline at end of file diff --git a/docs/deploy-manual/docker-compose.md b/versioned_docs/version-v2/deploy-manual/docker-compose.md similarity index 100% rename from docs/deploy-manual/docker-compose.md rename to versioned_docs/version-v2/deploy-manual/docker-compose.md diff --git a/docs/deploy-manual/docker.md b/versioned_docs/version-v2/deploy-manual/docker.md similarity index 100% rename from docs/deploy-manual/docker.md rename to versioned_docs/version-v2/deploy-manual/docker.md diff --git a/docs/deploy-manual/img/cluster.png b/versioned_docs/version-v2/deploy-manual/img/cluster.png similarity index 100% rename from docs/deploy-manual/img/cluster.png rename to versioned_docs/version-v2/deploy-manual/img/cluster.png diff --git a/versioned_docs/version-v2/deploy-manual/intro.md b/versioned_docs/version-v2/deploy-manual/intro.md new file mode 100644 index 00000000..55800bd5 --- /dev/null +++ b/versioned_docs/version-v2/deploy-manual/intro.md @@ -0,0 +1,18 @@ +--- +titile: 安装说明 +--- +# 安装说明 +SQLE 提供了多种安装部署的方式,用户可以结合自己的环境和现状选择。初次体验或者测试使用的话建议使用docker-compose 或 docker 快速部署。 +## 安装方式 +1. [源码安装](./source.md) +2. [RPM 部署](./rpm.md) +3. [Docker 部署](./docker.md) +4. [Docker Compsoe 部署](./docker-compose.md) +## 如何访问 +SQLE 对外提供 web 服务,在程序部署完成后,即可通过 SQLE UI 访问:http://127.0.0.1:10000 +:::tip +ps:ip 和端口请根据前面的配置自行替换,默认端口是10000。 +::: +## 初始用户 +* 用户名:admin +* 密码:admin \ No newline at end of file diff --git a/versioned_docs/version-v2/deploy-manual/rpm.md b/versioned_docs/version-v2/deploy-manual/rpm.md new file mode 100644 index 00000000..58794bd8 --- /dev/null +++ b/versioned_docs/version-v2/deploy-manual/rpm.md @@ -0,0 +1,48 @@ +--- +title: RPM 安装 +--- +# RPM安装 + +## 环境准备 +* CentOS 7 +* MySQL 5.7 + +## 下载安装包 + +下载 SQLE 的 RPM 安装包,下载连接点击[这里](https://github.com/actiontech/sqle/releases)。 + +## 安装 SQLE + +执行 RPM 的安装命令: +```sh +rpm -ivh /path/to/sqle-ce-${version}.qa.el7.x86_64.rpm --prefix=/opt/sqle +``` + +## 创建数据库 +准备一台 MySQL5.7 作为 SQLE 的后端存储数据库。执行下面命令创建 SQLE 需要的 schema: +```sql +CREATE DATABASE IF NOT EXISTS sqle default character set utf8mb4 collate utf8mb4_unicode_ci +``` +:::tip +创建好的 Schema 将在下面修改SQLE配置时使用到。 +::: + +## 修改 SQLE 配置文件 +安装完 SQLE 后,需要根据实际情况修改SQLE的配置,参考:[配置文件说明](./config.md)。SQLE安装完成后提供一个配置模版可直接修改。 +```sh +cd /opt/sqle/etc +mv sqled.yml.template sqled.yml +vim sqled.yml +``` +:::tip +确保 sqled.yml 的文件 owner 为 actiontech-universe:actiontech +::: + +## 启动 SQLE +SQLE 进程通过 Systemd 管理。在成功安装 RPM 后,执行启动命令: +```sh +systemctl start sqled +``` + +## 启动失败问题诊断 +参考:https://github.com/actiontech/sqle/discussions/1239 diff --git a/versioned_docs/version-v2/deploy-manual/source.md b/versioned_docs/version-v2/deploy-manual/source.md new file mode 100644 index 00000000..9bb2fb34 --- /dev/null +++ b/versioned_docs/version-v2/deploy-manual/source.md @@ -0,0 +1,44 @@ +--- +title: 源码安装 +--- +# 源码安装 +## 环境准备 +* CentOS 7 +* MySQL 5.7 +* Docker +* Docker Compose(可选) + +## 获取源码 +SQLE 前端与后端代码分两个仓库维护,所以想要通过源码安装,需要构建前后端代码。 + +首先选择一个源码安装的工作目录,例如 ~/sqle-build/。 + +获取后端源码: + +```sh +cd ~/sqle-build/ +git clone https://github.com/actiontech/sqle.git +``` + +获取前端源码: + +```sh +cd ~/sqle-build/ +git clone https://github.com/actiontech/sqle-ui.git +``` + +## 编译源码 +编译前端代码,并将前端代码拷贝至后端代码目录: +```sh +cd ~/sqle-build/sqle-ui +docker container run --rm -v $PWD:/app -w /app node:15.3.0 sh -c "yarn install && yarn build" +rm -rf ~/sqle-build/sqle/ui && cp -r ~/sqle-build/sqle-ui/build/ ~/sqle-build/sqle/ui/ +``` + +编译后端代码并打包: +```sh +cd ~/sqle-build/sqle +make docker_rpm +``` + +打包完成后会在当前目录下生成一个 SQLE 的 RPM 包,后续的步骤参考:[RPM 部署](./rpm)。 diff --git a/versioned_docs/version-v2/dev-manual/introduction.md b/versioned_docs/version-v2/dev-manual/introduction.md new file mode 100644 index 00000000..ba799a42 --- /dev/null +++ b/versioned_docs/version-v2/dev-manual/introduction.md @@ -0,0 +1,6 @@ +--- +id: intro +title: 产品架构 +--- + +# 产品架构 diff --git a/versioned_docs/version-v2/dev-manual/plugins/howtodev.md b/versioned_docs/version-v2/dev-manual/plugins/howtodev.md new file mode 100644 index 00000000..b00b5299 --- /dev/null +++ b/versioned_docs/version-v2/dev-manual/plugins/howtodev.md @@ -0,0 +1,257 @@ +--- +title: 数据库审核插件开发 +--- +在本篇文档中,会介绍如何开发一个数据库审核插件,分为快速开始部分和详细部分。 +* 如果你是一个对 Go 语言不太了解的人,可以先通过[快速开始](#快速开始)部分的文档,实现一个简单的数据库审核插件。 +* 当你对插件开发有了一定的了解之后,可以通过[详细](#二详细部分)部分的文档,通过更多自定义的方式,实现更加复杂的数据库审核插件。 + +## 快速开始 +### 前置 +#### 1. 语法 +由于 SQLE 是一个用 Go 语言开发的开源项目,如果你对 Go 语言完全不了解,需要先了解 Go 语言的基础语法,建议使用官方的 Go 语言快速开始文档(Go Tour 或者 Go 语言之旅),如果你已经了解了 Go 语言的基础语法,可以直接跳过本部分。 +#### 2. 包管理 +SQLE 插件是一个独立于 SQLE 的进程,所以编写插件的方式与开发一个新的 Go 语言项目并没有什么差异。Go 语言项目使用 Go Modules 来管理包,所以在开始之前你需要先了解一下 Go Modules 的使用方法。建议参考这篇文档,文档中大致介绍了如果开始一个新的 Go 语言项目,并通过 Go Modules 的方式来调用其他项目的包,如果你已经了解了 Go Modules 的使用方法,可以直接跳过本部分。 +#### 3. Go语言项目构建 + +### 编写插件 +这一小节会假设你已经创建了一个由 Go Modules 管理的审核插件项目。下面开始介绍插件核心代码的开发。 +#### 1. 数据库插件介绍 +SQLE 为了方便插件的开发,在自身的插件层之上做了一层封装(Adaptor),插件开发者可以使用这个封装库来快速的开发一个数据库审核插件。 + +在开发之前,你需要先引入 SQLE: +``` +go get github.com/actiontech/sqle@v2.2305.0-pre2 # 此版本为该文档编辑时的最新版本 +``` +选择 SQLE 中两个库插件相关的库: + +* github.com/actiontech/sqle/sqle/driver +* github.com/actiontech/sqle/sqle/pkg/driver + +:::tip +* 第一个库定义了插件规则的结构体,在你编写插件规则时需要用到这个库。 +* 第二个库中实现了一些默认的插件,在引入这个库后,只需要实现相应的规则与规则处理函数即可。其中三个默认的插件为: + * PostgreSQL + * Oracle + * SQL Server +* 如果这三个默认的插件不能满足需求,可以自己实现一个插件,参考本篇文档[自定义插件](#2自定义插件)小节。 +::: + + + + + +#### 2. 选择插件 +下面假设你想要实现一个 SQL Server 的审核插件。在 main 函数中创建一个空的 SQL Server 审核插件,这时你的 main 文件应该是这样的: +``` +package main + +import ( + "github.com/actiontech/sqle/sqle/driver" + adaptor "github.com/actiontech/sqle/sqle/pkg/driver" +) + +func main() { + plugin := adaptor.NewAdaptor(&adaptor.MssqlDialector{}) +} +``` + +#### 3. 编写插件规则与规则处理函数 +假设你需要实现一个规则,该规则检查 SQL 是否使用了 select *。定义规则如下: +``` +Rule{ + Name: "aviod_select_all_column", # 规则ID,该值会与插件类型一起作为这条规则在 SQLE 的唯一标识 + Desc: "避免查询所有的列", # 规则描述 + Category: "DQL规范", # 规则分类,用于分组,相同类型的规则会在 SQLE 的页面上展示在一起 + Level: driver.RuleLevelError, # 规则等级,表示该规则的严重程度。在插件注册阶段,会使用所有 RuleLevelError 级别的规则创建一个默认的规则模板。 +} +``` +规则的处理函数如下: +``` +func(ctx context.Context, rule *driver.Rule, sql string) (string, error) { + if strings.Contains(sql, "select *") { + return rule.Desc, nil + } + return "", nil +} +``` +这里为了演示,这个处理函数只是简单的使用了字符串匹配的方式,你也可以使用正则或者 AST 语法树的方式来检查 SQL 语句(AST 的方式会在[自定义SQL解析器](#1自定义sql解析器)一小节中介绍)。 + +最后将插件规则与规则处理函数通过 `plugin.AddRule()`函数注册到 SQLE 中,注册完成后,你的 main 文件应该是这样的: +``` +package main + +import ( + "github.com/actiontech/sqle/sqle/driver" + adaptor "github.com/actiontech/sqle/sqle/pkg/driver" +) + +func main() { + plugin := adaptor.NewAdaptor(&adaptor.MssqlDialector{}) + aviodSelectAllColumn := &driver.Rule{ + Name: "aviod_select_all_column", + Desc: "避免查询所有的列", + Category: "DQL规范", + Level: driver.RuleLevelError, + } + aviodSelectAllColumnHandler := func(ctx context.Context, rule *driver.Rule, sql string) (string, error) { + if strings.Contains(sql, "select *") { + return rule.Desc, nil + } + return "", nil + } + plugin.AddRule(aviodSelectAllColumn, aviodSelectAllColumnHandler) + + //////////////////////////////////////////// + // ... 编写更多规则并通过 AddRule 注册到 SQLE 中 + //////////////////////////////////////////// + + // 最后关键一步,调用 `plugin.Serve()` 启动插件: + plugin.Serve() +} +``` + +#### 4. 构建并使用插件 +和通常的程序编写流程一样,编写完插件代码后,需要将其构建成二进制文件,然后才能将其注册到 SQLE 中。执行 `go build -o ${二进制名} main.go` 将插件代码构建成二进制文件。最后参考数据库审核插件使用 来使用你的自定义插件。 + + +### 自定义部分 +#### 1.自定义SQL解析器 +前面介绍的审核规则都是通过字符串匹配的方式来解析 SQL 的内容。这种方式适合规则较少且 SQL 简单的情况下使用。 + +如果需要对 SQL 进行更复杂的解析匹配,恰好你选择的数据库插件又有相应的 SQL 解析器,这时可以使用自定义 SQL 解析器的方式来编写插件。 + +首先通过调用 `WithSQLParser()` 注册自己的 SQL 解析器。在添加规则时则使用 `plugin.AddRuleWithSQLParser()` 添加带有解析器的处理函数。在处理函数中,将 interface{} 断言成具体的 AST 语法树,通过语法树级别的操作来更加精细的处理 SQL。PostgreSQL 提供了基于 cgo 调用的解析器(见:PostgreSQL SQL 解析器),下面的代码展示了如何写一个 SQL 解析器的插件: +``` +func main() { + plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{}) + + // 依然是定义规则 + aviodSelectAllColumn := &driver.Rule{ + Name: "aviod_select_all_column", + Desc: "避免查询所有的列", + Category: "DQL规范", + Level: driver.RuleLevelError, + } + + // 依然是定义处理函数,这时处理函数的参数是 interface{} 类型,需要将其断言成 AST 语法树。 + aviodSelectAllColumnHandler := func(ctx context.Context, rule *driver.Rule, ast interface{}) (string, error) { + node, ok := ast.(*parser.RawStmt) + if !ok { + return "", errors.New("ast is not *parser.RawStmt") + } + + switch stmt := node.GetStmt().GetNode().(type) { + case *parser.Node_SelectStmt: + for _, target := range stmt.SelectStmt.GetTargetList() { + column, ok := target.GetResTarget().GetVal().GetNode().(*parser.Node_ColumnRef) + if !ok { + continue + } + for _, filed := range column.ColumnRef.GetFields() { + _, ok = filed.GetNode().(*parser.Node_AStar) + if ok { + return rule.Desc, nil + } + } + } + } + return "", nil + } + + // 依然是注册规则,与前面的例子不同的是,这时使用的是 `plugin.AddRuleWithSQLParser()` 。 + plugin.AddRuleWithSQLParser(aviodSelectAllColumn, aviodSelectAllColumnHandler) + + // 依然是启动插件,与前面的例子不同的是,需要将 SQL 解析的方法注册到插件中。 + plugin.Serve(adaptor.WithSQLParser(func(sql string) (ast interface{}, err error) { + // parser.Parse 使用 PostgreSQL 的解析器,将 sql 解析成 AST 语法树。 + result, err := parser.Parse(sql) + if err != nil { + return nil, errors.Wrap(err, "parse sql error") + } + if len(result.Stmts) != 1 { + return nil, fmt.Errorf("unexpected statement count: %d", len(result.Stmts)) + } + + // 将 SQL 的语法树返回。 + return result.Stmts[0], nil + })) +} +``` + +#### 2.自定义插件 +如果 driver 包中默认的 PostgreSQL、Oracle 与 SQL Server 插件不能满足你的需求的话,你也可以自定义一个数据库插件。方法就是实现一个接口: +``` +type Dialector interface { + Dialect(dsn *driver.DSN) (driverName string, dsnDetail string) + ShowDatabaseSQL() string + String() string +} +``` + +在实现这个接口前,你需要先了解一下 Go 语言原生 Driver 的概念(以 MySQL Driver 为例)。 + +下面介绍 Dialector 接口的含义: + +* `Dialect`:实现该方法,通过 DSN 提供的 Host Port User Password Database 信息和你选择的数据库 driver,构造出 driverName 与 dsnDetail。driverName 是你引入的数据库 driver 名称;dsnDetail 是连接数据库驱动的必要信息。这两个参数最终会通过 `sql.Open()` 来创建一个数据库连接。 +* `ShowDatabaseSQL`:实现该方法,可以自定义你数据源中默认展示的数据库列表,该数据库列表最终会展示在工单审核列表的数据库下拉框中,如下图: + ![pluginworkflow](img/pluginworkflow.png) +* `String`:实现该方法,该方法的返回值会作为你实现的数据库审核插件名展示在 SQLE 的相关下拉框中,如下图: + ![plugintype](img/plugintype.png) + +将你的实现作为 NewAdaptor 的参数传入即可,后续的步骤与前面规则相关的介绍一致。 + +## 详细 +### SQLE与插件的交互图 +![sqleplugin](img/sqleplugins.png) +### 插件接口说明 +#### 1.注册接口说明 +该接口定义了该插件的名称和实现的规则,SQLE启动的时候会调用该接口获取插件名称和该插件支持的规则列表。 +``` +type Registerer interface { + Name() string + Rules() []*model.Rule +} +``` +* `Name`: 插件名,最终会展示在 SQLE 页面的数据源类型的下拉框中; +* `Rules`: 插件支持的规则,在启动 SQLE 时,会调用插件获取这些规则,你将在规则模板内看到它们。 + +#### 2.审核接口说明 +该接口定义了SQLE进行审核时,由插件完成的和具体数据库底层交互的操作 +``` +type Driver interface { + Close(ctx context.Context) + Ping(ctx context.Context) error + Exec(ctx context.Context, query string) (driver.Result, error) + Tx(ctx context.Context, queries ...string) ([]driver.Result, error) + Schemas(ctx context.Context) ([]string, error) + Parse(ctx context.Context, sqlText string) ([]Node, error) + Audit(ctx context.Context, sql string) (*AuditResult, error) + GenRollbackSQL(ctx context.Context, sql string) (string, string, error) +} +``` +* `Close`: 关闭审核插件使用的相关资源,通常是完成一次审核后,关闭数据库连接等资源; +* `Ping`: 检测数据库的连接性,通常在添加数据源时,为了检测填写的数据是否正确,会调用此方法; +* `Exec`: 执行 SQL 上线时执行此方法; +* `Tx`: 执行 SQL 上线时执行此方法,一般当SQL是DML时且需要事务执行时会批量执行SQL; +* `Schemas`: 返回审核插件展示给用户的 Schema 列表; +* `Parse`: 解析审核插件支持的 SQL 格式; +* `Audit`: 根据指定的SQL语句生成审核建议; +* `GenRollbackSQL`: 生成 SQL 的回滚语句。 + +#### 3.插件的配置信息说明 +``` +type Config struct { + DSN *DSN + Rules []*Rule +} +``` +* `DSN`: 数据源信息, 待审核的数据库; +* `Rules`: 本次审核制定的规则列表。 + +#### 4.初始化函数说明 +插件的主进程入口,由插件的 main 函数调用即可实现插件 +``` +func ServePlugin(r Registerer, newDriver func(cfg *Config) Driver) +``` +* `r`: 传入 Registerer 的接口实现, 由插件侧实现; +* `newDriver`: 传入 Driver 的初始化函数,该函数的入参是 Config 是由 SQLE 向插件传递的配置信息,函数的出参是 Driver 的接口实现,由插件侧实现。 \ No newline at end of file diff --git a/versioned_docs/version-v2/dev-manual/plugins/howtouse.md b/versioned_docs/version-v2/dev-manual/plugins/howtouse.md new file mode 100644 index 00000000..7aba390d --- /dev/null +++ b/versioned_docs/version-v2/dev-manual/plugins/howtouse.md @@ -0,0 +1,92 @@ +--- +title: 数据库审核插件使用 +--- + +## 配置插件 +### 创建插件二进制目录 + +通常创建在 SQLE 的工作目录 + +```jsx title="插件目录" +bash-4.2$ ls -l +total 24 +drwxr-x--- 2 actiontech-universe actiontech 4096 Oct 8 09:30 bin +drwxrwx--- 1 actiontech-universe actiontech 4096 Oct 12 13:40 etc +drwxr-x--- 1 actiontech-universe actiontech 4096 Oct 12 13:40 logs +drwxr-xr-x 1 actiontech-universe actiontech 4096 Oct 8 09:30 plugins # 创建插件目录 +drwxr-x--- 2 actiontech-universe actiontech 4096 Oct 8 09:30 scripts +drwxr-x--- 3 actiontech-universe actiontech 4096 Oct 8 09:30 ui +``` +### 修改配置文件sqled.yml +:::tip +根据数据源类型的不同,目前有两种不同的配置文件书写方式。用户应根据实际情况选择相应的配置方式进行填写。 +::: +```jsx title="sqled.yml # 针对PostgreSQL、SQL server、TiDB、OceanBase For MySQL类型的数据源" +server: + sqle_config: + server_port: 10000 + auto_migrate_table: true + debug_log: false + log_path: './logs' + plugin_path: './plugins' # 此处填写插件目录,也可以填写绝对路径 + db_config: + mysql_cnf: + mysql_host: '127.0.0.1' + mysql_port: '3306' + mysql_user: 'root' + mysql_password: 'mysqlpass' + mysql_schema: 'sqle' +``` +```jsx title="sqled.yml # 针对Oracle和DB2类型的数据源,须先在SQLE环境中安装JDK,yum install java-1.8.0-openjdk* -y" +server: + sqle_config: + server_port: 10000 + auto_migrate_table: true + debug_log: false + log_path: './logs' + db_config: + mysql_cnf: + mysql_host: '127.0.0.1' + mysql_port: '3306' + mysql_user: 'root' + mysql_password: 'mysqlpass' + mysql_schema: 'sqle' + plugin_config: + - plugin_name: 'sqle-db2-plugin-main.jar' # 填写插件名称 + cmd: 'java -jar /opt/sqle/plugins/sqle-db2-plugin-main.jar' # 填写插件启动指令及插件绝对路径 +``` + +## 集成插件 +将插件的二进制文件放在[配置插件](#配置插件)中创建的 plugins/目录内,其中插件可以由第三方提供或者自行编译,参考:[sqle-pg-plugin](https://github.com/actiontech/sqle-pg-plugin) + +ps:在重启 SQLE 前,需要确保 SQLE 的运行用户拥有对二进制文件的执行权限,如果没有,可以通过以下命令来设置: +``` +chmod +x /opt/sqle/plugins/sqle-pg-plugin +``` + +## 重启SQLE Server +```jsx title="rpm方式安装" +systemctl restart sqled +``` +```jsx title="docker方式安装" +docker restart sqle-server +``` + +## 确认插件生效 + +### 方式一:通过日志 +重启后,若成功加载插件,日志中会打印当前加载的审核插件: +``` +time="2021-10-12T14:06:42+08:00" level=info msg="starting sqled server" +time="2021-10-12T14:06:42+08:00" level=info msg="plugin inited" plugin_name=PostgreSQL +... +time="2021-10-12T14:06:43+08:00" level=info msg="starting http server on :10000" +``` + +### 方式二:通过页面 +验证是否已加载插件规则:查看 SQLE 规则页面,PostgreSQL 插件支持的审核规则已经加载到 SQLE Server: +![pluginrules](img/pluginrules.png) +验证能否添加插件类型的数据源:添加数据源,显示已经可以添加 PostgreSQL 类型的数据源。 +![plugintype](img/plugintype.png) + + diff --git a/versioned_docs/version-v2/dev-manual/plugins/img/pluginrules.png b/versioned_docs/version-v2/dev-manual/plugins/img/pluginrules.png new file mode 100644 index 00000000..c3d4bd9a Binary files /dev/null and b/versioned_docs/version-v2/dev-manual/plugins/img/pluginrules.png differ diff --git a/versioned_docs/version-v2/dev-manual/plugins/img/plugintype.png b/versioned_docs/version-v2/dev-manual/plugins/img/plugintype.png new file mode 100644 index 00000000..99fb96a8 Binary files /dev/null and b/versioned_docs/version-v2/dev-manual/plugins/img/plugintype.png differ diff --git a/versioned_docs/version-v2/dev-manual/plugins/img/pluginworkflow.png b/versioned_docs/version-v2/dev-manual/plugins/img/pluginworkflow.png new file mode 100644 index 00000000..49871a5f Binary files /dev/null and b/versioned_docs/version-v2/dev-manual/plugins/img/pluginworkflow.png differ diff --git a/versioned_docs/version-v2/dev-manual/plugins/img/sqleplugins.png b/versioned_docs/version-v2/dev-manual/plugins/img/sqleplugins.png new file mode 100644 index 00000000..01ce51d7 Binary files /dev/null and b/versioned_docs/version-v2/dev-manual/plugins/img/sqleplugins.png differ diff --git a/versioned_docs/version-v2/dev-manual/plugins/intro.md b/versioned_docs/version-v2/dev-manual/plugins/intro.md new file mode 100644 index 00000000..f35b39c3 --- /dev/null +++ b/versioned_docs/version-v2/dev-manual/plugins/intro.md @@ -0,0 +1,15 @@ +--- +title: 功能说明 +--- + +SQLE 使用 go-plugin 来实现审核插件化。插件只需实现两个接口,即可实现与 SQLE 主进程通信(详情见审核插件开发)。 + +将 SQLE 的数据库审核插件化主要有以下目的: +* 将审核流程(业务)的代码和具体审核实现的代码进行分离,支持多数据源类型的审核 +* 审核插件在满足基本规范情况下,与 SQLE 独立开发 + +### 部分插件项目地址 +* [PostgreSQL](https://github.com/actiontech/sqle-pg-plugin) +* [Oracle](https://github.com/actiontech/sqle-oracle-plugin) +* [SQL Server](https://github.com/actiontech/sqle-ms-plugin) +* [DB2](https://github.com/actiontech/sqle-db2-plugin) diff --git a/versioned_docs/version-v2/guide.md b/versioned_docs/version-v2/guide.md new file mode 100644 index 00000000..c634ad04 --- /dev/null +++ b/versioned_docs/version-v2/guide.md @@ -0,0 +1,7 @@ +--- +title: 用户指南 +--- + +# 用户指南 +## 产品概述 +SQLE 是由上海爱可生信息技术股份有限公司 开发并开源,支持SQL审核、索引优化、事前审核、事后审核、支持标准化上线流程、原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具 diff --git a/versioned_docs/version-v2/img/operation-list.png b/versioned_docs/version-v2/img/operation-list.png new file mode 100644 index 00000000..28ce34c1 Binary files /dev/null and b/versioned_docs/version-v2/img/operation-list.png differ diff --git a/versioned_docs/version-v2/img/operation.png b/versioned_docs/version-v2/img/operation.png new file mode 100644 index 00000000..97441ccf Binary files /dev/null and b/versioned_docs/version-v2/img/operation.png differ diff --git a/versioned_docs/version-v2/img/project-index.png b/versioned_docs/version-v2/img/project-index.png new file mode 100644 index 00000000..0bc3a20c Binary files /dev/null and b/versioned_docs/version-v2/img/project-index.png differ diff --git a/versioned_docs/version-v2/img/project-instance.png b/versioned_docs/version-v2/img/project-instance.png new file mode 100644 index 00000000..ebc3a7d7 Binary files /dev/null and b/versioned_docs/version-v2/img/project-instance.png differ diff --git a/versioned_docs/version-v2/img/project-member-1.png b/versioned_docs/version-v2/img/project-member-1.png new file mode 100644 index 00000000..436a1489 Binary files /dev/null and b/versioned_docs/version-v2/img/project-member-1.png differ diff --git a/versioned_docs/version-v2/img/project-member-2.png b/versioned_docs/version-v2/img/project-member-2.png new file mode 100644 index 00000000..0eedef84 Binary files /dev/null and b/versioned_docs/version-v2/img/project-member-2.png differ diff --git a/versioned_docs/version-v2/img/project-rule-template.png b/versioned_docs/version-v2/img/project-rule-template.png new file mode 100644 index 00000000..8b9aef82 Binary files /dev/null and b/versioned_docs/version-v2/img/project-rule-template.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-1.png b/versioned_docs/version-v2/img/project-workflow-1.png new file mode 100644 index 00000000..978111d5 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-1.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-2.png b/versioned_docs/version-v2/img/project-workflow-2.png new file mode 100644 index 00000000..bbfdc2e0 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-2.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-3.png b/versioned_docs/version-v2/img/project-workflow-3.png new file mode 100644 index 00000000..f28ffdf2 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-3.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-4.png b/versioned_docs/version-v2/img/project-workflow-4.png new file mode 100644 index 00000000..baf3804f Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-4.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-5.png b/versioned_docs/version-v2/img/project-workflow-5.png new file mode 100644 index 00000000..0e7965fd Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-5.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-6.png b/versioned_docs/version-v2/img/project-workflow-6.png new file mode 100644 index 00000000..450234f9 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-6.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-7.png b/versioned_docs/version-v2/img/project-workflow-7.png new file mode 100644 index 00000000..f9356b49 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-7.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-8.png b/versioned_docs/version-v2/img/project-workflow-8.png new file mode 100644 index 00000000..55d62356 Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-8.png differ diff --git a/versioned_docs/version-v2/img/project-workflow-9.png b/versioned_docs/version-v2/img/project-workflow-9.png new file mode 100644 index 00000000..8287dafa Binary files /dev/null and b/versioned_docs/version-v2/img/project-workflow-9.png differ diff --git a/versioned_docs/version-v2/img/role-manager.png b/versioned_docs/version-v2/img/role-manager.png new file mode 100644 index 00000000..f52503ee Binary files /dev/null and b/versioned_docs/version-v2/img/role-manager.png differ diff --git a/versioned_docs/version-v2/img/user-manager.png b/versioned_docs/version-v2/img/user-manager.png new file mode 100644 index 00000000..52f43bfa Binary files /dev/null and b/versioned_docs/version-v2/img/user-manager.png differ diff --git a/versioned_docs/version-v2/intro.md b/versioned_docs/version-v2/intro.md new file mode 100644 index 00000000..991deab2 --- /dev/null +++ b/versioned_docs/version-v2/intro.md @@ -0,0 +1,43 @@ +--- +title: 产品介绍 +--- +# 产品介绍 +SQLE 是由上海爱可生信息技术股份有限公司 开发并开源,支持SQL审核、索引优化、事前审核、事后审核、支持标准化上线流程、原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具 + +## 产品特性 +#### SQL审核规范 +1. 审核规则自定义(700+条) +2. 支持审核结果分级展示,支持生成下载审核报告 +2. 支持规则模版,灵活组合规则 +3. 审核白名单,跳过特例SQL +4. 支持集成 IDE 自助审核 + +#### 多场景审核 +支持事前事后审核,覆盖开发、测试、上线、生产等环节 + +#### 标准化上线流程 +1. SQL审核流程按需自定义,满足企业内部不同流程管理要求 +2. 支持定时上线 +3. 支持设置运维时间 +4. 支持Online DDL + +#### 多数据库类型支持 +1. 统一接口,可通过插件进行多数据库审核扩展 +2. 内置MySQL审核插件,官方支持常用数据库类型,包括PostgreSQL、Db2、SQL Server、Oracle、TiDB、OceanBase + +#### 统一的SQL客户端入口 +提供审核管控的SQL客户端,杜绝执行不合规SQL + +#### 丰富的集成能力 +1. 标准HTTP API接口可与客户内部流程系统对接 +2. 支持LDAP,Oauth2用户对接 +3. 支持邮件、微信企业号、webhook 告警对接 + +## 应用场景 +#### 上线前控制 +1. SQLE赋能开发,在代码开发阶段检查SQL质量 +2. SQLE集成专家经验,形成可复用的SQL规范标准规则,用户在平台提交工单后,平台将基于审核规则模板对提交的SQL语句进行初审,用以解决事前审核规范不标准难题 + +#### 上线后监督 +1. SQLE提供智能扫描审核功能,实现生产环境下的SQL审核优化 +2. SQLE支持多种类型的扫描任务,基于任务需求执行周期性的扫描任务,并生成扫描结果报告,及时告警 \ No newline at end of file diff --git a/versioned_docs/version-v2/online-demo.md b/versioned_docs/version-v2/online-demo.md new file mode 100644 index 00000000..a157690d --- /dev/null +++ b/versioned_docs/version-v2/online-demo.md @@ -0,0 +1,24 @@ +--- +title: 在线体验 +--- +# 在线体验 +## 地址 +* [SQLE 社区版](http://demo.sqle.actionsky.com/) +* [SQLE 企业版](http://demo.sqle.actionsky.com:8889/) + +## 登录用户 +|user|password| +|---|---| +|admin|admin| + +## 测试 MySQL +|variable|value| +|---|---| +|host|20.20.20.3| +|port|3306| +|user|root| +|pass|test| + +## 注意事项 +1. 该服务仅用于在线功能体验,请勿在生产环境使用; +2. 该测试服务数据会定期清理。 \ No newline at end of file diff --git a/versioned_docs/version-v2/quick-usage.md b/versioned_docs/version-v2/quick-usage.md new file mode 100644 index 00000000..c3ad24f9 --- /dev/null +++ b/versioned_docs/version-v2/quick-usage.md @@ -0,0 +1,56 @@ +--- +title: 快速开始 +--- +# 快速开始 +本文的目的是让大家能快速体验SQLE的基础功能,帮助大家快速上手SQLE。下面将模拟一个简单的日常SQL上线场景,开发人员提交SQL,DBA进行SQL审核并上线,大概的步骤如下: +1. 管理员 admin 添加全局用户 A 和 B; +2. 管理员 admin 添加全局角色 dev 和 dba; +3. 管理员 admin 配置项目资源: + * 给项目配置SQL审核规则; + * 给项目添加数据源; + * 给项目配置人员 A 和 B; +4. A 作为开发人员提交SQL审核并创建工单; +5. B 作为 DBA 进行审核并上线。 +## 搭建环境 +首先参考[部署文档](./deploy-manual/intro.md)快速搭建一个SQLE服务。 +## 配置资源 +### 创建全局用户 +使用 admin 用户进入用户中心界面添加全局用户 A 和 B;点击SQLE顶部菜单右侧`三个点`下拉菜单即可进入。 +![user-manager](./img/user-manager.png) +### 创建全局角色 +使用 admin 用户进入用户中心界面添加全局角色 dev 和 dba,使得 dev 至少具备权限`创建/编辑工单`, dba 至少具备权限`审核/驳回工单`,`上线工单`;点击SQLE顶部菜单右侧`三个点`下拉菜单即可进入。 +![role-manager](./img/role-manager.png) +### 给项目配置SQL审核规则 +使用 admin 用户进入项目界面,根据自身公司的审核标准配置审核规则,本次试用不再新建规则模版,将使用提供的全局默认规则模版进行测试。如何设置规则模版,参考:[规则模版](./user-manual/project/rule-template-manager.md)。 +![project-rule-template](./img/project-rule-template.png) +### 给项目创建数据源 +使用 admin 用户进入项目界面,录入一个MySQL类型的数据源 `test`,并可以绑定上一步骤中创建的规则模版,这里绑定系统内置的全局默认规则模版。如何管理数据源,可参考:[数据源](./user-manual/project/instance-manager.md)。 +![project-instance](./img/project-instance.png) +### 给项目添加成员 +使用 admin 用户进入项目界面,给项目添加成员,本次的重点是要将上述创建的全局用户添加到项目内,给用户 A 授予数据源 `test` 上的 `dev` 角色,给用户 B 授予数据源 `test` 上的 `dba` 角色。 +![project-member-1](./img/project-member-1.png) +![project-member-2](./img/project-member-2.png) +## SQL 上线 +### 开发用户 A 提交工单 +使用 A 用户进入项目界面,点击创建工单即可对项目内授权过的数据源进行SQL审核上线。 +![project-workflow-1](./img/project-workflow-1.png) +:::caution +当我们提交下图所示的SQL时,自动审核触发了审核建议,则此时工单无法提交需要修改SQL符合规范后再次提交。 +::: +![project-workflow-1](./img/project-workflow-2.png) +![project-workflow-1](./img/project-workflow-3.png) +:::tip +按要求优化SQL后,再次提交,自动审核通过 +::: +![project-workflow-1](./img/project-workflow-4.png) +![project-workflow-1](./img/project-workflow-5.png) +提交工单后,工单流转到用户B进行后续处理。 +![project-workflow-1](./img/project-workflow-6.png) +### DBA用户 B 上线 +使用 B 用户进入SQLE后,即可看到由A提交的上线工单,点击详情后可进行审批操作。 +:::tip +SQLE 支持通过邮件,微信企业号等途径推送工单通知。也可以配置工单对接来在钉钉上进行工单审批 +::: +![project-workflow-1](./img/project-workflow-7.png) +![project-workflow-1](./img/project-workflow-8.png) +![project-workflow-1](./img/project-workflow-9.png) \ No newline at end of file diff --git a/versioned_docs/version-v2/support/commercial-support.md b/versioned_docs/version-v2/support/commercial-support.md new file mode 100644 index 00000000..1d972b53 --- /dev/null +++ b/versioned_docs/version-v2/support/commercial-support.md @@ -0,0 +1,12 @@ +--- +title: 商业支持 +--- +# 商业支持 + +如果想获得 SQLE 的商业支持, 您可以联系我们: + +* 全国支持: 400-820-6580 +* 华北地区: 86-13910506562, 汪先生 +* 华南地区: 86-18503063188, 曹先生 +* 华东地区: 86-18930110869, 梁先生 +* 西南地区: 86-13540040119, 洪先生 \ No newline at end of file diff --git a/versioned_docs/version-v2/support/community-support.md b/versioned_docs/version-v2/support/community-support.md new file mode 100644 index 00000000..cacb590e --- /dev/null +++ b/versioned_docs/version-v2/support/community-support.md @@ -0,0 +1,12 @@ +--- +title: 社区支持 +--- +# 社区支持 +## 微信技术交流群 +欢迎加入微信群进行交流,反馈使用中遇到的问题或者使用建议。 + +进群方式:添加管理员微信 ActionOpenSource +## 爱可生社区公众号 +关注爱可生社区公众号,获取最新SQLE动态包括新功能清单与产品规划。 + +![项目列表](img/QR_code.png) \ No newline at end of file diff --git a/versioned_docs/version-v2/support/compare.md b/versioned_docs/version-v2/support/compare.md new file mode 100644 index 00000000..1a8927d3 --- /dev/null +++ b/versioned_docs/version-v2/support/compare.md @@ -0,0 +1,692 @@ +--- +title: 功能对比 +--- + + +## 社区版及企业版功能对比 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
模块功能企业版社区版
平台基础能力资源管理
权限管理
用户对接:LDAP
用户对接:Oauth2.0单点登录
对接钉钉在线审批
支持爱可生云树DMP数据源同步
量化管理项目管理
报表统计
Dashboard
支持的数据源类型MySQL
Mycat
TDSQL for InnoDB
OceanBase For MySQL
DB2
TiDB
PostgreSQL
Oracle
OceanBase For Oracle
SQL Server
达梦
SQL审核同一工单多数据源
多种SQL上传方式
IDE审核插件
自助审核
SQL美化
动态配置审核规则模板
审核白名单
基于规则的审核建议
审核建议去重展示
SQL下钻分析
大表进行 Online DDL
SQL上下文关联
生成回滚语句
审核评分
审核报告下载
SQL语句下载
工单上线自定义审核流程
多数据源批量上线
立即上线
定时上线
线下执行,线上标记
中止上线
智能扫描MySQL|MyBatis 扫描
MySQL|库表元数据
MySQL|阿里云 RDS慢日志
MySQL|阿里云 RDS审计日志
MySQL|慢日志审核
MySQL|会话SQL扫描
MySQL|百度云RDS慢日志
SQL文件扫描
应用程序SQL抓取
支持JAVA探针采集JAVA应用SQL
Oracle TopSQL
TiDB审计日志
OceanBase for MySQL|MyBatis 扫描
OceanBase for MySQL|Top SQL
自定义(通过调用接口推送bash脚本、python程序中的SQL)
告警通知邮件告警
微信企业号告警
飞书告警
webhook告警
SQL工作台集成CloudBeaver-提供在线SQL客户端
安全管控
OpenAPI提供完整的标准接口方案
专家服务提供数据对接、SQL规范制定、SQL优化建议等7x24小时服务
+ +## 各数据源支持程度对比 +:::tip +目前支持的数据源类型中,除MySQL为社区版,其他均为企业版。 +::: +### MySQL系 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MySQLMycatTDSQL for InnoDBOceanBase For MySQLTiDB
功能SQL分析
SQL上下文
元数据检查
SQL回滚
上线中止
扫描任务库表元数据
慢日志
Processlist
TopSQL
TiDB审计日志
MyBatis
阿里RDS MySQL慢日志
阿里RDS MySQL审计日志
百度云RDS MySQL慢日志扫描
SQL文件扫描
应用程序抓取
自定义
其他规则数量133122129117119
+ +### 非MySQL系 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OracleOceanBase For OracleDB2PostgreSQLSQL server达梦
功能SQL分析
SQL上下文
元数据检查
SQL回滚
上线中止
扫描任务库表元数据
慢日志
Processlist
TopSQL
TiDB审计日志
MyBatis
阿里RDS MySQL慢日志
阿里RDS MySQL审计日志
百度云RDS MySQL慢日志扫描
SQL文件扫描
应用程序抓取
自定义
其他规则数量8583602123
\ No newline at end of file diff --git a/versioned_docs/version-v2/support/img/QR_code.png b/versioned_docs/version-v2/support/img/QR_code.png new file mode 100644 index 00000000..ce7f7ae1 Binary files /dev/null and b/versioned_docs/version-v2/support/img/QR_code.png differ diff --git a/versioned_docs/version-v2/user-manual/customrule.md b/versioned_docs/version-v2/user-manual/customrule.md new file mode 100644 index 00000000..8a8e65cb --- /dev/null +++ b/versioned_docs/version-v2/user-manual/customrule.md @@ -0,0 +1,32 @@ +--- +title: 自定义审核规则 +--- + +## 使用场景 +当用户根据业务需求需要创建新的审核规则时,可以使用平台的自定义规则功能。目前,用户可以在平台上通过正则表达式自定义SQL审核的规范,且新建的审核规则将作为全局资源使用。 + +## 使用步骤 + +### 新建自定义规则 + +1.以平台管理员身份登入,点击右上角更多按钮,选择`规则管理`,进入自定义规则页面; +![customrule-route](img/customrule-route.png) + +2.点击`新建`,填写规则基本信息,并输入正则表达式,确认无误后,点击提交,即可完成自定义规则创建; +![customrule-info](img/customrule-info.png) +![customrule-regex](img/customrule-regex.png) + +:::tip +当前支持golang正则语法。 +::: + +### 应用自定义规则 +1.编辑数据源应用的规则模板,启用新建的自定义规则; +![customrule-usetemplate](img/customrule-usetemplate.png) +2.创建工单,新建表`users123`,从工单审核结果中可以看到自定义规则已生效; +![customrule-result](img/customrule-result.png) + + +:::tip +目前仅支持在SQLE平台新建自定义规则,暂不支持导入导出规则模板时携带自定义规则。 +::: diff --git a/versioned_docs/version-v2/user-manual/img/customrule-info.png b/versioned_docs/version-v2/user-manual/img/customrule-info.png new file mode 100644 index 00000000..744ec141 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/customrule-info.png differ diff --git a/versioned_docs/version-v2/user-manual/img/customrule-regex.png b/versioned_docs/version-v2/user-manual/img/customrule-regex.png new file mode 100644 index 00000000..92a05395 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/customrule-regex.png differ diff --git a/versioned_docs/version-v2/user-manual/img/customrule-result.png b/versioned_docs/version-v2/user-manual/img/customrule-result.png new file mode 100644 index 00000000..532b6282 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/customrule-result.png differ diff --git a/versioned_docs/version-v2/user-manual/img/customrule-route.png b/versioned_docs/version-v2/user-manual/img/customrule-route.png new file mode 100644 index 00000000..a8f4d260 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/customrule-route.png differ diff --git a/versioned_docs/version-v2/user-manual/img/customrule-usetemplate.png b/versioned_docs/version-v2/user-manual/img/customrule-usetemplate.png new file mode 100644 index 00000000..2c872b3d Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/customrule-usetemplate.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-edit.png b/versioned_docs/version-v2/user-manual/img/ide-install-edit.png new file mode 100644 index 00000000..144fd64f Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-edit.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-result.png b/versioned_docs/version-v2/user-manual/img/ide-install-result.png new file mode 100644 index 00000000..78641292 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-result.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-setting2.png b/versioned_docs/version-v2/user-manual/img/ide-install-setting2.png new file mode 100644 index 00000000..039a4ca0 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-setting2.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-setting3.png b/versioned_docs/version-v2/user-manual/img/ide-install-setting3.png new file mode 100644 index 00000000..64e8e69d Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-setting3.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-use.png b/versioned_docs/version-v2/user-manual/img/ide-install-use.png new file mode 100644 index 00000000..bc961bee Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-use.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install-use2.png b/versioned_docs/version-v2/user-manual/img/ide-install-use2.png new file mode 100644 index 00000000..cfe3f273 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install-use2.png differ diff --git a/versioned_docs/version-v2/user-manual/img/ide-install.png b/versioned_docs/version-v2/user-manual/img/ide-install.png new file mode 100644 index 00000000..92f35e49 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/img/ide-install.png differ diff --git a/versioned_docs/version-v2/user-manual/intro.md b/versioned_docs/version-v2/user-manual/intro.md new file mode 100644 index 00000000..3dafea81 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/intro.md @@ -0,0 +1,5 @@ +--- +title: 用户手册 +--- + +在程序部署完成后,用户即可通过 SQLE UI (http://127.0.0.1:10000)访问,使用SQLE平台提供的SQL审核功能。 diff --git a/versioned_docs/version-v2/user-manual/jetbrains.md b/versioned_docs/version-v2/user-manual/jetbrains.md new file mode 100644 index 00000000..52d19b98 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/jetbrains.md @@ -0,0 +1,79 @@ +--- +title: IDEA审核插件 +--- + +该项目是SQLE 的 [IDEA审核插件](https://github.com/actiontech/sqle-jetbrains-plugin) , 该插件满足开发人员在开发阶段进行实时自助式的静态SQL审核,实现开发阶段审核上线等各个SQL开发阶段的SQL开发规范。 + +:::tip +为保证SQLE审核插件正常运行,IDEA版本需大于等于 2021.1.3 +::: + +## 下载地址 +[插件下载地址](https://github.com/actiontech/sqle-jetbrains-plugin/releases) + +## 安装说明 +* 将插件拖放到 IDEA 或 其他类似软件中(如Goland), 插件即可完成自动安装 +* 也可以在 `File` - `settings` - `Plugins` 中手动安装 + +![ide-install](img/ide-install.png) + +### 升级说明 +* 在 `File` - `settings` - `Plugins` 中卸载旧版插件 +* 安装新版插件 + +## 使用说明 +### 配置插件 +1.点击 `File` - `settings` 进入设置界面 + +![ide-install-edit](img/ide-install-edit.png) + +2.点击在左侧菜单最下方 `SQLE` +![ide-install-setting2](img/ide-install-setting2.png) + +3.填写SQLE环境信息, 点击 `OK` 保存 +![ide-install-setting3](img/ide-install-setting3.png) + +#### 配置参数说明 + +|配置项|配置项说明| +|---|---| +|SQLE Addr|SQLE 服务地址, 格式为 IP:Port| +|http/https按钮|指定连接SQLE的方式| +|UserName|登录SQLE使用的用户名| +|Password|登录SQLE使用的密码| +|Test Connection|测试连接是否成功, 将会尝试登录| +|DB Type|当其他配置正确时,该下拉框会自动获取支持审核的实例类型。选择实例类型后,平台将使用该实例类型应用的审核规则进行审核。| + +### 使用方式 + +1.用户可以选中需要审核的SQL,点击右键, 选中 [SQLE] - [Audit]后,进行SQL审核,支持同时选中多条SQL; +![ide-install-use](img/ide-install-use.png) + +2.用户也可以选中文件后,点击右键, 选中 [SQLE] - [Audit],将获得对文件中SQL的审核结果,支持一次性审核整个文件夹下的MyBatis文件; +![ide-install-use2](img/ide-install-use2.png) + +### 审核结果 +插件会以弹窗的形式将审核结果进行展示 +![ide-install-result](img/ide-install-result.png) + +## 常见问题解答 +#### 为什么插件配置项中的 [DB Type] 点击时偶尔会卡一下 +这是因为点击下拉框时下拉框会连接SQLE获取支持的实例类型, 这个过程可能会出现网络延迟 + +#### SQLE在审核时使用的规则模板是什么 +SQLE会根据设置中指定的数据库类型, 选择对应类型的默认模板进行审核, 且只会使用默认模板中的静态审核规则 + +#### 我没有SQLE环境可以使用这个插件吗 +SQLE有演示环境, 如果只是想尝试一下这个插件可以连接[演示环境](/docs/online-demo.md) + +#### 插件支持哪些IDE +Jetbrains家的所有软件和 [Android Studio] 都是支持的 + +#### SQLE插件的配置存在什么地方 +``` + {用户根目录}\AppData\Roaming\JetBrains\{idea版本号对应目录}\options\SQLESettings.xml +``` +|变量|说明| +|---|---| +|用户根目录|一般为 C:\Users 目录下和用户名同名的目录, 内部一般包含 '桌面', '下载' 等文件夹| +|idea版本号对应目录|一般为 软件名版本号 的格式, 如社区版idea 2022.1版本对应目录名为 IdealC2022.1| \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/operation_records.md b/versioned_docs/version-v2/user-manual/operation_records.md new file mode 100644 index 00000000..bb4fac4b --- /dev/null +++ b/versioned_docs/version-v2/user-manual/operation_records.md @@ -0,0 +1,16 @@ +--- +title: 操作记录 +--- + +### 使用场景 +SQLE平台提供操作记录,当审核/上线产生问题时,用户需要从操作行为判定问题责任方。此时,用户可以使用平台的操作记录功能,查看平台行为的操作人、操作时间。 + + +### 入口 +用户点击平台右上方操作记录icon后,跳转至操作记录页面,查看权限范围内可见的操作记录。 +* 用户可对操作记录进行筛选,查看符合条件的操作记录; +* 用户也可在当前筛选条件下,导出平台操作记录,用以线下审计; +![operation](../img/operation.png) + +### 更多操作 +SQLE会定时回收已产生的操作记录,目前该过期时间默认为90天。如果用户需要自定义过期时间,可以在[全局配置](../user-manual/sys-configuration/configuration.md)中修改。 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/analysis.md b/versioned_docs/version-v2/user-manual/project/analysis.md new file mode 100644 index 00000000..d3b5b1f7 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/analysis.md @@ -0,0 +1,13 @@ +--- +title: SQL分析 +--- + +SQL分析是什么 + +当用户需要了解执行SQL的对象情况时,可以点击SQL后的分析操作,进入SQL分析页面 + +使用场景 + +操作步骤 + +使用限制 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/SQLfile_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/SQLfile_audit.md new file mode 100644 index 00000000..d7ab8ffb --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/SQLfile_audit.md @@ -0,0 +1,50 @@ +--- +title: SQL文件扫描 +--- +本节介绍SQL文件扫描的应用场景及配置方法。 + +:::note +平台已支持的所有数据源类型均支持SQL文件扫描 +::: + +## 使用场景 +当用户需要在批量执行SQL前扫描SQL,发现潜在的安全漏洞、提高数据库性能及数据库开发质量时,可以使用SQL文件进行批量扫描。 + + +## 使用方式 + +### 前置条件 +在后端环境中准备SQL文件 + +### 新建智能扫描任务 +进入智能扫描任务列表,点击新建,选择SQL文件扫描任务类型。 + +### 执行Scannerd文件 +:::tip +注意:使用rpm或docker部署的情况下,scannerd通常在SQLE的bin目录下。 +::: + +示例如下: + +``` +./scannerd sqlfile -H127.0.0.1 -N"SQLfile" -P"10000" -J"default" -D/root/sqle/sqle/cmd/scannerd/scanners/mybatis/testdata/ -A"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJ0ZXN0MDcyNCIsImV4cCI6MTcyMTcyODU0NywibmFtZSI6ImFkbWluIn0.CojdTvBkr-iN_26tWI-Kr6mMnJt1NIDr-Y3v7m9ySuM" +``` + +参数解释如下: + +* -J, --project:说明扫描任务所在项目,例如“default”; +* -H, --host string:指定SQLE主机所在地址; +* -P, --port string:指定SQLE所在端口; +* -N, --name string:指定扫描任务名称,scannerd会将获得的SQL传至指定的任务池中审核; +* -D, --dir string:指定要扫描的SQL文件路径; +* -A, --token string:输入扫描任务凭证token; +* -K, --skip-sql-file-audit:只上传sql,不审核sql; +* -S, --skip-error-sql-file; 跳过无法解析的sql文件; + +获得执行结果: +![sqlfile_audit](img/sqlfile_audit.png) + +### 平台查看执行结果 +* 用户进入扫描任务详情,可以查看SQLw文件中已采集到的SQL信息; +* 用户点击`立即审核`,可以在扫描任务报告中获取当前SQL的审核结果; +![sqlfile_result](img/sqlfile_result.png) \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/baiduyunrds.md b/versioned_docs/version-v2/user-manual/project/audit_task/baiduyunrds.md new file mode 100644 index 00000000..2edfdbaa --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/baiduyunrds.md @@ -0,0 +1,40 @@ +--- +title: 百度云RDS慢日志扫描 +--- +本节介绍如何在SQLE平台监管百度云RDS实例上产生的慢SQL。 + +### 支持的数据源类型 +* MySQL + +### 使用场景 +如果用户使用百度云RDS实例,并且想要监管实例上产生的慢SQL,可以通过创建一个百度云RDS慢日志扫描任务来实现。该任务将会定期扫描百度云RDS实例上的慢日志,并将扫描结果发送到SQLE中进行分析。 + +### 前置操作 +* 用户需创建双机高可用版本的百度云RDS实例; +* 对该实例开通慢日志; + +![baiduyunrds](img/baiduyunrds.png) + +### 操作步骤 +新建智能扫描任务 + +* 任务名称:输入审核任务名称,必须以字母开头; +* 数据源名称:指定扫描任务实施的数据源; +* 数据库:填写需要审核的目标库,若不填则仅进行静态分析不会连库; +* 数据库类型:根据选取的数据源呈现; +* 任务类型:选择需要执行的审核任务类型,选择`百度云RDS MySQL慢日志`; +* 实例ID:填写百度云RDS实例的ID。 +* Access Key:为账号安全认证中的Access Key,用于登录百度云RDS,需要与Secret Key一同使用。 +* Access Secret Key:账号安全认证中Access Key对应的Secret Key。 +* 启动任务时拉取慢日志时间范围(单位:小时,最大7天):扫描任务读取慢日志的时间范围,单位为小时,最大范围为7天。 +* 审核过去时间段内抓取的SQL(分钟): 审核该时间段内抓取到的慢SQL。 +* RDS Open API地址:RDS的地址前缀,用以调用RDS服务,需根据实例所在区域进行填写。如当前实例在华东-上海范围,则应填写rds.fsh.baidubce.com +![baiduyunrdsurl](img/baiduyunrdsurl.png) + +点击`提交`,完成扫描任务创建。 + +### 执行结果 +* 用户进入扫描任务详情,可以查看扫描任务抓取到的慢SQL。 +* 点击`立即审核`,可查看对慢SQL的审核结果。 + +![baiduyunrdsaudit](img/baiduyunrdsaudit.png) \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrds.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrds.png new file mode 100644 index 00000000..a58d8960 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrds.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsaudit.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsaudit.png new file mode 100644 index 00000000..2509c361 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsaudit.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsurl.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsurl.png new file mode 100644 index 00000000..f2a77af7 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/baiduyunrdsurl.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosedatabase.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosedatabase.png new file mode 100644 index 00000000..1506ddcd Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosedatabase.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-chooseplugin.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-chooseplugin.png new file mode 100644 index 00000000..c00805bb Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-chooseplugin.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosestructure.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosestructure.png new file mode 100644 index 00000000..ec6e245c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-choosestructure.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-codebaseexample.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-codebaseexample.png new file mode 100644 index 00000000..94910395 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-codebaseexample.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createcodebase.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createcodebase.png new file mode 100644 index 00000000..25fd0990 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createcodebase.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createproject.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createproject.png new file mode 100644 index 00000000..cb0f44bf Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createproject.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createstructure.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createstructure.png new file mode 100644 index 00000000..70dc8c01 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-createstructure.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-do.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-do.png new file mode 100644 index 00000000..81238102 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-do.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-editinfo.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-editinfo.png new file mode 100644 index 00000000..dd5b2e47 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-editinfo.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginroute.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginroute.png new file mode 100644 index 00000000..f4eb98a5 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginroute.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginupload.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginupload.png new file mode 100644 index 00000000..30598b82 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginupload.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginwithproject.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginwithproject.png new file mode 100644 index 00000000..f266ed79 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-pluginwithproject.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-result.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-result.png new file mode 100644 index 00000000..244d3b91 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/coding-result.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-list.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-list.png new file mode 100644 index 00000000..3029b4f9 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-list.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-result.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-result.png new file mode 100644 index 00000000..9e550eaf Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/metadata-result.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/mybatisresult.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/mybatisresult.png new file mode 100644 index 00000000..fe56d899 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/mybatisresult.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/processlist-audit.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/processlist-audit.png new file mode 100644 index 00000000..958ab4d2 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/processlist-audit.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result.png new file mode 100644 index 00000000..8f96a8e2 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result2.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result2.png new file mode 100644 index 00000000..2f316fc7 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/slowlog-result2.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_audit.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_audit.png new file mode 100644 index 00000000..add6dc5c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_audit.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_result.png b/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_result.png new file mode 100644 index 00000000..7f462536 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/audit_task/img/sqlfile_result.png differ diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/intro.md b/versioned_docs/version-v2/user-manual/project/audit_task/intro.md new file mode 100644 index 00000000..ed1aa3ce --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/intro.md @@ -0,0 +1,36 @@ +--- +title: 功能说明 +--- + +# 功能介绍 +### 背景 +在审核工单中我们介绍了如何通过 SQLE 进行 SQL 审核并上线的流程。审核工单管理,主要解决 SQL 上线的规范化流程化的问题,它能够帮助 DBA 自动化处理整个 SQL 上线过程中一些重复繁琐的工作。 + +不过审核工单管理也有它的局限性。 + +* 第一,通常工单中的审核是一次性操作。上线后,通常还会有业务 SQL访问数据库。这时可能会遇到一些执行效率较低的业务 SQL 造成数据库的性能问题,因而这类业务型SQL同样需要审核。 +* 第二,临近发版,如果这时审核出 SQL 存在一些问题,是否修复这些问题,可能会受到很多因素的影响(如 SQL 问题的影响面大小,项目发版的紧急程度等),因而需要对即将上线的SQL做全量扫描。 + +因而,需要引入扫描任务,进行周期性的SQL审核,用以补充工单审核覆盖不到的场景。 + +### SQLE扫描任务支持的采集模式 +#### 1.SQLE 自动抓取 +* 功能说明 + * 使用SQLE自动抓取,将由SQLE获取指定的SQL文件,传输至指定审核池后,由SQLE进行审核并展示审核结果。 +* 支持的任务类型 + * 库表元数据 + * TopSQL + * processlist列表 +#### 2.Scanner 抓取 +* 功能说明 + * 使用Scanner抓取,可利用scanner插件获取指定的SQL文件,传输至指定审核池后,由SQLE进行审核并展示审核结果。 +* 支持的任务类型 + * 慢日志 + * Mybatis扫描 +#### 3.OpenAPI 推送 +* 功能说明 + * 使用应用程序SQL抓取,可利用api接口动态获取指定应用程序中的SQL,传输至指定审核池后,由SQLE进行审核并展示审核结果。 +* 支持的任务类型 + * openapi推送 + * 自定义 + diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/java_agent_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/java_agent_audit.md new file mode 100644 index 00000000..1e2abe27 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/java_agent_audit.md @@ -0,0 +1,97 @@ +--- +title: Java探针版应用程序SQL抓取【企业版】 +--- +本节介绍如何利用SQLE平台抓取java应用中的SQL,选取的例子是一个[开源的问卷调查java应用](https://gitee.com/surveyking/surveyking),架构简单,上手相对容易。 + +## 支持的数据源类型 +* MySQL +* Oracle +* DB2 +* OceanBase for MySQL +* PostgreSQL +* TiDB +* SQL Server + +## 前置准备 + +### 环境准备 + +准备一台 linux 服务器,ubuntu即可,架构版本暂无要求 + +1. 安装JAVA +``` +sudo apt install default-jdk +``` +2. 部署并启动MySQL服务 + +### 部署java应用 + +* 准备Java应用 +* 准备Java应用SQL初始化文件 +* 准备SQLE定制的JAVA agent JAR包 +:::tip +JAVA agent JAR包为企业版功能,如有使用需求,请联系[SQLE商业支持](../../../support/community-support.md)。 +::: + +### Java应用前置步骤 +1、初始化Java应用 +``` +mysql -h127.0.0.1 -P3306 -uroot -p -e "CREATE DATABASE IF NOT EXISTS jw default character set utf8mb4 collate utf8mb4_unicode_ci" +mysql -h127.0.0.1 -P3306 -uroot -D jw -p < init-mysql.sql +``` +2、将Java应用Jar包,定制jdbc上传服务器指定目录下,可以放在 /opt/surveyking 目录下,示例: +``` +root@ubuntu:/opt/surveyking# pwd +/opt/surveyking +root@ubuntu:/opt/surveyking# ls -l +total 55652 +-rw-r--r-- 1 root root 2932784 Feb 24 08:38 sql-agent-1.0-SNAPSHOT.jar +-rw-r--r-- 1 root root 54508748 Feb 24 08:37 surveyking-v0.3.0-beta.4.jar +``` + +## 使用方式 +### 创建扫描任务 +进入智能扫描任务列表,点击新建,扫描任务类型选择应用程序SQL抓取。 + +### 启动Java应用 +:::tip +以下命令需要在本地编辑替换完参数后,一次性拷贝到环境内执行 +::: +``` +SQLE_COLLECT_ENABLE=true \ +SQLE_BASE_URL=http://10.186.62.16:10000 \ +SQLE_TASK_NAME=jw_app \ +SQLE_TASK_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJqd19hcHAiLCJleHAiOjE2NzcyMjYxNzcsIm5hbWUiOiJhZG1pbiJ9.3d0pA1hiVnFEWJokSFBwCT8d1pKOYV6SViENj4GFqgI \ +SQLE_EXCLUDE_JAVA_FILE=UserServiceImpl.java \ +SQLE_LOG_FILE=/tmp/collect.log \ +java -javaagent:sql-agent-1.0-SNAPSHOT.jar \ +-jar surveyking-v0.3.0-beta.4.sqle.jar \ +--server.port=1991 \ +--spring.datasource.url=jdbc:mysql://10.186.62.18:3306/jw \ +--spring.datasource.username=root \ +--spring.datasource.password=mysqlpass \ +& >>/opt/surveyking/std.log +``` + +#### 参数说明(环境变量) +* SQLE_COLLECT_ENABLE=true :是否开启SQL采集,默认不推送到SQLE只输出本地日志 +* SQLE_BASE_URL:SQLE 服务地址,格式“http://ip:port” +* SQLE_TASK_NAME:SQLE 审核任务的名称 +* SQLE_TASK_TOKEN:审核任务的token,从SQLE页面复制 +* SQLE_PROJECT_NAME:SQLE JDBC配置:项目名 +* SQLE_LOG_FILE:指定SQLE 采集日志文件,不指定则代表输出到标准输出 +* SQLE_EXCLUDE_JAVA_FILE:忽略部分JAVA文件不插桩,主要是兼容性问题,当修改字节码失败时为了保障能运行抓取。文件按逗号分隔 +#### 参数说明(java 参数) +* server.port:web服务启用端口 +* spring.datasource.url:jdbc url +* spring.datasource.username:jdbc user name +* spring.datasource.password:jdbc password + +### 访问Java应用 +* 访问地址:如果配置的网页端口是1991则通过网页访问http://xx.xx.xx.xx:1991 +* 用户名:admin +* 密码:123456 + + + + diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/java_application_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/java_application_audit.md new file mode 100644 index 00000000..4267b284 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/java_application_audit.md @@ -0,0 +1,99 @@ +--- +title: 应用程序SQL抓取【企业版】 +--- +本节介绍如何利用SQLE平台抓取JAVA应用中的SQL,选取的例子是一个[开源的问卷调查java应用](https://gitee.com/surveyking/surveyking),架构简单,上手相对容易。 + +## 支持的数据源类型 +* MySQL +* Oracle +* DB2 +* OceanBase for MySQL +* PostgreSQL +* TiDB +* SQL Server + +## 前置准备 + +### 环境准备 + +准备一台 linux 服务器,ubuntu即可,架构版本暂无要求 + +1. 安装JAVA +``` +sudo apt install default-jdk +``` +2. 部署并启动MySQL服务 + +### 部署java应用 + +* 准备Java应用 +* 准备Java应用SQL初始化文件 +* 准备SQLE定制的JDBC jar 包 +:::tip +JDBC jar包为企业版功能,如有使用需求,请联系[SQLE商业支持](../../../support/community-support.md)。 +::: + +### Java应用前置步骤 +1、初始化Java应用 +``` +mysql -h127.0.0.1 -P3306 -uroot -p -e "CREATE DATABASE IF NOT EXISTS jw default character set utf8mb4 collate utf8mb4_unicode_ci" +mysql -h127.0.0.1 -P3306 -uroot -D jw -p < init-mysql.sql +``` +2、将Java应用Jar包,定制jdbc上传服务器指定目录下,可以放在 /opt/surveyking 目录下,示例: +``` +root@ubuntu:/opt/surveyking# pwd +/opt/surveyking +root@ubuntu:/opt/surveyking# ls -l +total 55652 +-rw-r--r-- 1 root root 2477925 Feb 24 08:38 mysql-connector-java-8.0.28-SQLE.jar +-rw-r--r-- 1 root root 54508748 Feb 24 08:37 surveyking-v0.3.0-beta.4.jar +``` +3、替换Java应用Jar包的MySQL jdbc jar 包 +``` +cd /opt/surveyking/ +mkdir jar +cp surveyking-v0.3.0-beta.4.jar jar/ +cd jar/ +jar xvf surveyking-v0.3.0-beta.4.jar # 解压jar包,如果执行失败也可使用 unzip surveyking-v0.3.0-beta.4.jar 代替 +cp ../mysql-connector-java-8.0.28-SQLE.jar BOOT-INF/lib/mysql-connector-java-8.0.26.jar # 替换jdbc +rm -rf surveyking-v0.3.0-beta.4.jar +jar cvfM0 surveyking-v0.3.0-beta.4.sqle.jar * # 打包 +mv surveyking-v0.3.0-beta.4.sqle.jar ../ +cd .. +rm -rf jar/ +``` + +## 使用方式 +### 创建扫描任务 +进入智能扫描任务列表,点击新建,扫描任务类型选择应用程序SQL抓取。 + +### 启动Java应用 +:::tip +以下命令需要在本地编辑替换完参数后,一次性拷贝到环境内执行 +::: +``` +cd /opt/surveyking/ +SQLE_COLLECT_ENABLE=true SQLE_HOST=10.186.62.18:10000 SQLE_TASK_NAME=jw_app SQLE_TASK_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJqd19hcHAiLCJleHAiOjE2NzcyMjYxNzcsIm5hbWUiOiJhZG1pbiJ9.3d0pA1hiVnFEWJokSFBwCT8d1pKOYV6SViENj4GFqgI \ +java -jar surveyking-v0.3.0-beta.4.sqle.jar \ +--server.port=1991 \ +--spring.datasource.url=jdbc:mysql://10.186.62.18:3306/jw \ +--spring.datasource.username=root \ +--spring.datasource.password=mysqlpass \ +& >>/opt/surveyking/std.log +``` + +#### 参数说明(环境变量): +* SQLE_COLLECT_ENABLE:是否开启SQL采集 +* SQLE_HOST=10.186.62.18:10000:SQLE 服务地址 ip:port +* SQLE_TASK_NAME=jw_app :审核任务的名称 +* SQLE_TASK_TOKEN:审核任务的token,从SQLE页面复制 +* SQLE_PROJECT_NAME:SQLE JDBC配置:项目名 +#### 参数说明(java 参数) +* server.port:web服务启用端口 +* spring.datasource.url:jdbc url +* spring.datasource.username:jdbc user name +* spring.datasource.password:jdbc password +### 访问Java应用 +* 访问地址:如果配置的网页端口是1991则通过网页访问http://xx.xx.xx.xx:1991 +* 用户名:admin +* 密码:123456 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/metadata_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/metadata_audit.md new file mode 100644 index 00000000..946a7743 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/metadata_audit.md @@ -0,0 +1,42 @@ +--- +title: 库表元数据 +--- + +# 库表元数据 +本节介绍库表元数据扫描的应用场景、以及如何创建库表元数据的扫描任务。 + +### 支持的数据源类型 +* MySQL +* DB2 + +### 使用场景: + +1. 需要检查已上线业务对应数据源的建库建表语句是否符合 统一的SQL质量规范。 +2. 需要定期检查上线业务的库表变更是否符合 统一的SQL质量规范。 + +### 前置条件 +已添加对应数据源。 + +### 操作步骤 +新建智能扫描任务 + +* 任务名称:输入审核任务名称,必须以字母开头; +* 数据源名称:指定扫描任务实施的数据源; +* 数据库:填写需要审核的目标库,若不填则仅进行静态分析不会连库; +* 数据库类型:根据选取的数据源呈现; +* 任务类型:选择需要执行的审核任务类型,选择库表元数据; +* 采集周期(分钟):将采集设定时间内产生的SQL; +* 是否采集视图信息:默认不采集视图信息,若开启,则将一并扫描数据源上的视图SQL; +* 审核规则模板:如果未指定此项会优先使用数据源绑定的模板; +* 任务审核周期:配置的是SQLE对审核任务进行自动审核的执行时间; + +### 执行结果 +可在扫描任务列表页面查看新建的库表元数据扫描任务。 +![list](img/metadata-list.png) + +点击扫描任务,可查看该扫描任务采集的SQL,及生成的扫描任务报告。 +![result](img/metadata-result.png) + +### 后续步骤 +* 查看审核记录,查看不同时间点的审核结果,包括审核的SQL语句、审核结果。 +* 分析语句,用户可对SQL语句进行分析操作,获取优化建议。 diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/mybatis.md b/versioned_docs/version-v2/user-manual/project/audit_task/mybatis.md new file mode 100644 index 00000000..0f588431 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/mybatis.md @@ -0,0 +1,99 @@ +--- +title: MyBatis扫描 +--- +本节介绍MyBatis扫描的应用场景及配置方法。 + +## 支持的数据源类型 +* MySQL +* OceanBase For MySQL + +## 使用场景 +应用开发阶段可以通过MyBatis扫描任务对应用代码中SQL做实时审核,MyBatis扫描任务需要通过SQLE提供的Scannerd进行SQL采集并推送到SQLE进行SQL审核。 + +当前支持用户直接执行Scannerd进行扫描,也支持用户利用CI/CD平台进行持续集成,例如 Jenkins ,GoCD ,git平台的 CI/CD 等,以此实现标准化开发流程,及时发现SQL问题。 + + +## 基础使用方式 + +### 新建智能扫描任务 +进入智能扫描任务列表,点击新建,选择MyBatis扫描任务类型。 + +### 直接执行scannerd文件 + +#### 1.在后端环境中准备MyBatis的XML文件 + +#### 2.执行Scannerd文件 +:::tip +注意:使用rpm或docker部署的情况下,scannerd通常在SQLE的bin目录下。 +::: + +示例如下: + +``` +./scannerd mybatis -H10.186.64.175 -N"mybatis1" -P"10000" -J"default" -D/tmp/xml -A"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJteWJhdGlzMSIsImV4cCI6MTcyMTE4Mzc3OSwibmFtZSI6ImFkbWluIn0.Mx8G0Vttxt4hdLxn-odW_WopcMH4ANadNvX6fmp-Yqs" +``` + +参数解释如下: + +* -J, --project:说明扫描任务所在项目,例如“default”; +* -H, --host string:指定SQLE主机所在地址; +* -P, --port string:指定SQLE所在端口; +* -N, --name string:指定扫描任务名称,scannerd会将获得的SQL传至指定的任务池中审核; +* -D, --dir string:指定要扫描的XML文件路径 +* -A, --token string:输入扫描任务凭证token; + +### 平台查看执行结果 +* 用户进入扫描任务详情,可以查看已采集到的XML文件中的SQL信息; +* 用户点击`立即审核`,可以在扫描任务报告中获取当前SQL的审核结果; +![mybatisresult](img/mybatisresult.png) + +## 在腾讯云CODING上集成SQL审核 + +### 新建智能扫描任务 +进入智能扫描任务列表,点击新建,选择MyBatis扫描任务类型。 + +### 部署CODING平台 +#### 1.创建项目 +![coding-createproject](img/coding-createproject.png) +#### 2.创建代码仓库,此处放置XML文件 +![coding-createcodebase](img/coding-createcodebase.png) +![coding-codebaseexample](img/coding-codebaseexample.png) +#### 3.上传SQLE插件,插件将用于扫描MyBatis文件 + +左边栏进入"团队设置中心"->"功能设置" ; +![coding-pluginroute](img/coding-pluginroute.png) + +点击"新建构建插件",选择sqle-scannerd.zip,发布插件; +![coding-pluginupload](img/coding-pluginupload.png) + +配置关联项目; +![coding-pluginwithproject](img/coding-pluginwithproject.png) + +完成插件上传。 + +#### 4.创建构建计划 +进入项目 -> 持续集成 -> 构建计划,点击创建构建计划; +![coding-createstructure](img/coding-createstructure.png) + +选择一个合适的构建模板,这里使用"自定义构建过程"; +![coding-choosestructure](img/coding-choosestructure.png) + +选择要做SQL审核的代码仓库; +![coding-choosedatabase](img/coding-choosedatabase.png) + +添加一个SQL审核节点,点击加号,选择 其他 -> 团队插件 -> SQL扫描插件; +![coding-chooseplugin](img/coding-chooseplugin.png) + +填写SQLE相关参数,点击参数名右边的问号可以查看参数说明,此处以SQLE社区演示环境的信息为例; +![coding-editinfo](img/coding-editinfo.png) + +编辑后点击保存,完成构建计划。 + +### 触发构建,获得审核结果 + +在构建计划中点击立即构建按钮; +![coding-do](img/coding-do.png) + +可以在在构建过程中查看构建结果,也可以在SQLE平台的扫描任务中查看审核结果。 +![coding-result](img/coding-result.png) + diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/processlist_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/processlist_audit.md new file mode 100644 index 00000000..b84a09ec --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/processlist_audit.md @@ -0,0 +1,29 @@ +--- +title: 会话SQL扫描 +--- +本节介绍如何对MySQL进行中的会话SQL进行监督及审核。 + +### 支持的数据源类型 +* MySQL + +### 使用场景 +除了上线前和上线后的审核,在SQL语句执行过程中,用户往往也需要对其进行监控和审核,用以及时识别出潜在的问题SQL。然而,当前的审核场景往往无法覆盖事中这一环节的审核。为此,SQLE新增了processlist列表审核扫描任务,实现了事前、事中、事后的全覆盖,使得用户可以在SQL语句的整个生命周期内进行审核和管理,从而减少审核时间和工作量。 + +### 操作步骤 +新建智能扫描任务 + +* 任务名称:输入审核任务名称,必须以字母开头; +* 数据源名称:指定扫描任务实施的数据源; +* 数据库:填写需要审核的目标库,若不填则仅进行静态分析不会连库; +* 数据库类型:根据选取的数据源呈现; +* 任务类型:选择需要执行的审核任务类型,选择processlist列表扫描任务; +* 采集周期(秒):表示SQLE对 MySQL processlist表的采集频率,SQLE将按照该时间间隔进行SQL采集。如果该值过低,会影响实例性能; +* SQL最小执行时间(秒):表示SQLE对 MySQL processlist 的采集过滤条件,只有大于等于该时间的SQL才会被采集记录。如果为0,则表示不进行过滤; +* 审核过去时间段内抓取的SQL(分钟):processlist列表扫描任务是增量审核,不在该时间段内执行的SQL将不会被再次采集; +* 审核规则模板:如果未指定此项会优先使用数据源绑定的模板; +* 任务审核周期:配置的是SQLE对审核任务进行自动审核的执行时间; + +### 执行结果 +* 用户进入扫描任务详情,可以查看已采集到的processlist列表中的SQL信息; +* 用户点击`立即审核`,可以在扫描任务报告中获取processlist列表中当前采集周期内产生的SQL及审核结果; +![processlist-audit](img/processlist-audit.png) diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/slowlog_audit.md b/versioned_docs/version-v2/user-manual/project/audit_task/slowlog_audit.md new file mode 100644 index 00000000..046e5ac9 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/slowlog_audit.md @@ -0,0 +1,111 @@ +--- +title: 慢日志 +--- + +# 慢日志 +本节介绍慢日志扫描的应用场景、以及如何创建慢日志扫描任务。 + +当前SQLE支持两种慢日志采集方式,一种由scanner采集慢日志文件中的慢查询,一种由SQLE直接采集慢查表中的慢查询,用户可在编辑页面选取需要的采集方式,您可选择需要的方式采集产生的慢查询。 + +## 支持的数据源类型 +* MySQL + +## 使用场景 +需要检查已上线业务是否有超过指定时长的慢SQL产生。 + +## 采集方式 +### 方式一:采集慢日志文件 + +#### 前置条件 +* 已添加对应数据源; +* 修改配置文件my.cnf,在文件中设置以下内容: +```jsx title="my.cnf" +slow_query_log = ON //开启慢日志 +slow_query_log_file = /var/lib/mysql/tmp_slow.log //设置慢日志文件路径 +long_query_time = 1 //设置慢查询时间阈值,当前示例时间为1s,可根据实际业务变更 +``` + +#### 步骤一:新建智能扫描任务 + +新建智能扫描任务,填写以下字段信息: + +* 任务名称:指定扫描任务的名称,当前仅支持英文名称; +* 数据源名称:选择扫描任务对应的数据源; +* 数据库:选择扫描任务使用的数据库; +* 数据库类型:根据选取的数据源呈现; +* 任务类型:选择慢日志; +* 审核过去时间段内抓取的SQL(分钟):扫描的时间覆盖范围; +* 采集来源:填写0,代表采集mysql-slow.log 文件; +* 审核规则模板:选择对应的审核规则模板; +* 审核任务周期:配置的是SQLE对审核任务进行自动审核的执行时间; + +点击`提交`,完成慢日志扫描任务创建。 + +#### 步骤二:执行scannerd文件 +:::tip +注意:scannerd文件通常在SQLE的bin目录下,需将scannerd文件放在数据源环境下执行。 +::: + +示例如下: + +``` +./scannerd slowquery -H "127.0.0.1" -P "10000" -N "slowlog_of_GRADE1" -J "default" -A eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJzbG93bG9nX29mX0dSQURFMSIsImV4cCI6MTcwODA3MjMzNSwibmFtZSI6ImFkbWluIn0.ArU5HpU7aSSVrRutxSAwRFYahSx0_4RNzD4KB6LTfpM --log-file /var/lib/mysql/mysql-for-test-slow.log +``` + +参数解释如下: + +* -J, --project:说明扫描任务所在项目,例“default”; +* -H, --host string:指定SQLE主机所在地址; +* -N, --name string:指定扫描任务名称,scannerd会将获得的慢SQL传至指定的任务池中审核; +* -P, --port string:指定SQLE所在端口; +* -A, --token string:输入扫描任务凭证token; +* --log-file:指定慢日志文件,scannerd从该文件中获取慢SQL; + + +### 方式二:采集慢日志表 +#### 前置条件 +* 已添加数据源 +* 在MySQL中设置以下内容: +``` +set global long_query_time=1; // 需根据实际业务调整慢查询时间阈值,此处仅供参考 +set global slow_query_log=1; // 开启慢日志查询 +SET GLOBAL log_output='FILE,TABLE';// 开启 MySQL 的慢日志收集功能,并且确认将慢日志内容写入文件 mysql-slow.log 和表 mysql.slow_log +``` +:::tip +为了优化查询性能,使用这一采集方式时,需要用户手动运行下面的SQL,将mysql.slow_log表的引擎改为MyISAM,并添加索引。 +``` +ALTER TABLE mysql.slow_log ENGINE = MyISAM; +ALTER TABLE mysql.slow_log ADD INDEX idx_start_time (start_time); +``` +::: +#### 新建智能扫描任务 + +新建智能扫描任务,填写以下字段信息: + +* 任务名称:指定扫描任务的名称,当前仅支持英文名称; +* 数据源名称:选择扫描任务对应的数据源核; +* 数据库:选择扫描任务使用的数据库; +* 数据库类型:根据选取的数据源呈现; +* 任务类型:选择慢日志扫描任务; +* 采集周期(分钟):SQLE进行采集的周期,若设置为10分钟,则SQLE将每隔10分钟去采集慢日志表中生成的慢查询; +* 审核过去时间段内抓取的SQL(分钟):扫描的时间覆盖范围; +* 采集来源:填写1,代表采集mysql.slow_log 表; +* 审核规则模板:选择对应的审核规则模板; +* 审核任务周期:配置的是SQLE对审核任务进行自动审核的执行时间; + +点击`提交`,完成慢日志扫描任务创建。 + + +## 执行结果 +在扫描任务详情查看扫描的SQL语句及审核报告。 +![result](img/slowlog-result.png) +![result2](img/slowlog-result2.png) + + +## 后续步骤 +分析扫描任务报告中出现的慢SQL。 + + + + + diff --git a/versioned_docs/version-v2/user-manual/project/audit_task/topsql.md b/versioned_docs/version-v2/user-manual/project/audit_task/topsql.md new file mode 100644 index 00000000..26a341ab --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/audit_task/topsql.md @@ -0,0 +1,9 @@ +--- +title: TopSQL +--- +本节介绍如何 + +### 支持的数据源类型 +* DB2 +* Oracle +* OceanBase for MySQL \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/group_member.md b/versioned_docs/version-v2/user-manual/project/group_member.md new file mode 100644 index 00000000..13a93f08 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/group_member.md @@ -0,0 +1,69 @@ +--- +title: 成员/成员组管理 +--- +# 成员/成员组管理 +本文介绍项目内添加成员、成员组的步骤,以及其他管理操作。 + +成员/成员组由项目管理员添加,只有被添加为成员后,才可查看、操作项目内资源。 + +### 使用场景 +* 一个业务以项目的形式管理SQL工单、扫描任务等资源,若用户需要在指定项目中执行SQL工单、扫描任务等相关操作,则需要成为该项目的成员,并具有相应角色操作权限。 +* 如果用户具备相同的操作权限或者访问相同的资源,可以通过将他们加入同一个成员组来配置他们对项目资源的操作权限。 + +### 前置条件 +* 项目管理员进入指定的项目; +* 平台管理员已完成用户/用户组的添加; +* 平台管理员已完成角色的添加; + +### 添加成员 + +#### 步骤 +项目管理员点击左侧导航栏`成员`标签,在成员列表点击`添加成员`按钮; + +#### 字段说明 +* 用户名:选择平台已添加的用户; +* 选择是否为项目管理员:项目管理员将负责项目管理行为,例如添加数据源和成员等; + * 若将当前成员设为项目管理员,则该成员将对项目内所有数据源拥有所有操作权限,无需额外配置权限; + * 若未设置,则当前成员在项目内的操作权限将根据下一步`添加角色与数据源的绑定`获得; +* 添加角色与数据源的绑定; + * 添加数据源:指定当前成员能操作的数据源; + * 添加角色:指定当前成员在该数据源上的角色权限,平台默认提供DEV、DBA两种角色,负责SQL语句的提交、审核及上线操作;更多角色设置请参见[角色管理](../user-manager/role.md); +* 删除角色与数据源的绑定; + +#### 执行结果 +项目管理员可查看当前项目中添加的成员列表。 +![成员列表](img/group-member.png) + +#### 后续步骤 +配置项目审核流程模板:一个项目有且仅有一个审核流程,应用于该项目下的所有工单。需要配置审核流程在审核、上线环节的操作人,请参见[审核流程模板](rule-template-manager.md)。 + +#### 更多操作 +* 编辑成员:添加成员后,项目管理员可修改成员可用的数据源及对应角色权限; + * 限制:编辑之前产生的工单不受影响,编辑之后工单创建时将应用最新的数据源及权限对应关系; +* 删除成员:项目管理员可删除项目中的成员; + * 限制:若成员已不在项目内,则无权操作工单; + + +### 添加成员组 +#### 步骤 +项目管理员点击左侧菜单栏`成员`标签,在成员组列表点击`添加成员组`按钮; + +#### 字段说明 +* 用户组名:选择平台已添加的用户组; +* 添加角色与数据源的绑定: + * 添加数据源:指定当前成员组能操作的数据源; + * 添加角色:指定当前成员组在该数据源上的角色权限,平台默认提供DEV、DBA两种角色,负责SQL语句的提交、审核及上线操作;更多角色设置请参见[角色管理](../user-manager/role.md); +* 删除角色与数据源的绑定:删除为当前成员组设定的数据源及角色信息; + +#### 执行结果 +项目管理员可查看当前项目中添加的成员组列表。 +![成员组列表](img/group-member2.png) + +#### 后续步骤 +* 配置项目审核流程模板:一个项目有且仅有一个审核流程,应用于该项目下的所有工单。需要配置审核流程在审核、上线环节的操作人,请参见[审核流程模板](rule-template-manager.md)。 + +#### 更多操作 +* 编辑成员组:添加成员组后,项目管理员可修改成员组可用的数据源及对应角色权限; + * 限制:编辑之前创建的工单不受影响,之后创建的工单将依据新的数据源及权限; +* 删除成员组:项目管理员可删除项目中的成员组; + * 限制:若成员组内成员已不在项目内,则无权操作工单; \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/img/group-member.png b/versioned_docs/version-v2/user-manual/project/img/group-member.png new file mode 100644 index 00000000..9b5a87f2 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/group-member.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/group-member2.png b/versioned_docs/version-v2/user-manual/project/img/group-member2.png new file mode 100644 index 00000000..8e5e6533 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/group-member2.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/instance-manage.png b/versioned_docs/version-v2/user-manual/project/img/instance-manage.png new file mode 100644 index 00000000..b072c361 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/instance-manage.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/intro1.png b/versioned_docs/version-v2/user-manual/project/img/intro1.png new file mode 100644 index 00000000..3452aaf3 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/intro1.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/intro2.png b/versioned_docs/version-v2/user-manual/project/img/intro2.png new file mode 100644 index 00000000..7cd02694 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/intro2.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/project-list.png b/versioned_docs/version-v2/user-manual/project/img/project-list.png new file mode 100644 index 00000000..30743676 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/project-list.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/templatelist.png b/versioned_docs/version-v2/user-manual/project/img/templatelist.png new file mode 100644 index 00000000..7264ca73 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/templatelist.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/whitelist.png b/versioned_docs/version-v2/user-manual/project/img/whitelist.png new file mode 100644 index 00000000..43482a97 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/whitelist.png differ diff --git a/versioned_docs/version-v2/user-manual/project/img/workflowtemplate.png b/versioned_docs/version-v2/user-manual/project/img/workflowtemplate.png new file mode 100644 index 00000000..0859de81 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/img/workflowtemplate.png differ diff --git a/versioned_docs/version-v2/user-manual/project/instance-manager.md b/versioned_docs/version-v2/user-manual/project/instance-manager.md new file mode 100644 index 00000000..bd3988df --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/instance-manager.md @@ -0,0 +1,53 @@ +--- +title: 数据源管理 +--- + +# 数据源管理 +本文介绍如何在项目中进行数据源管理,包括数据源的增加、删除、编辑操作。 +数据源是工单和扫描任务的实施对象,用户在平台创建的工单和扫描任务都将针对指定的数据源执行。因而项目创建后需要首先配置项目内可用的数据源。 + +:::tip +数据源是SQLE连库审核的对象,任何审核的场景下若可以不选数据源则代表将进行脱库审核。 +::: + +### 使用场景 +实际生产中,如果需要针对某个数据源下发SQL或创建扫描任务,需要首先将数据源添加至SQLE平台,测试连通成功后才可创建工单、创建扫描任务。 + +### 添加数据源 +#### 前置操作 +项目管理员进入指定的项目 + +#### 操作步骤 +点击左侧导航栏的「数据源」菜单,进入数据源管理页面后,点击「添加数据源」,填写数据源相关信息 + +* 数据源名称:命名当前新建的数据源,如:actionsky-test; +* 数据源描述:用户可对数据源补充更多描述,便于用户通过名称+描述快速更精准地区分数据源; +* 数据库类型:选择数据库实例对应的数据库类型,当前支持的数据库类型可参考[支持的数据库及版本](/docs/FAQ/whichdatabase.md); +* 数据库地址:输入数据库实例的连接地址,支持IP地址、域名两种方式; +* 数据库端口:添加数据源时根据数据源类型自动切换默认端口; +* 连接用户:输入数据库实例的连接用户,SQLE在执行SQL审核以及SQL上线时,会通过该连接用户访问数据库实例及下发SQL; +* 密码:输入数据库实例的连接用户密码; +* 审核规则模板:审核规则模板将用于创建工单时的审核、扫描任务的审核、SQL查询的审核; +* 运维时间:如果配置了运维时间, 工单将只能在运维时间内上线(立即上线和定时上线都受此影响), 支持配置多个运维时间, 默认无运维时间,即不限制上线时间; +* SQL查询是否需要审核:默认不审核;如用户选择开启该功能,则用户在SQL工作台中提交的SQL语句,将匹配审核规则模板进行SQL审核操作; +* 运行查询的最高审核等级:只有开启 SQL查询的审核功能才生效;支持四种审核等级:normal、notice、warn、error,如设置运行查询的最高审核等级为warn,则触发了warn等级规则以上的SQL语句将报错,并不予执行;未触发warn等级规则以上的SQL语句将被执行; + +#### 执行结果 +数据源添加成功后,可在数据源列表查看新增的数据源信息。 + +可根据数据源名称、数据库地址、数据库类型、使用的审核规则模板筛选项进行筛选。 + +![数据源列表](./img/instance-manage.png) + +### 后续步骤 +* 创建审核规则:添加数据源后,可针对指定数据源创建适用的审核规则,请参见[审核规则模板管理](rule-template-manager.md)。 +* 添加成员/成员组:添加数据源后,需要引入成员/成员组对数据源进行操作,请参见[成员/成员组管理](group_member.md)。 + +### 更多管理功能 +* 编辑数据源:点击数据源列表页面对应数据源条目后的【编辑】按钮,可以修改指定数据源。 + * 限制:数据源名称及数据库类型不支持修改,其他信息均可修改 +* 删除数据源:点击数据源列表页面对应数据源条目后的【删除】按钮,可以删除指定数据源。 + * 限制:若数据源上还有相应工单未完成,则该数据源暂时不可删除 +* 连通性测试:点击【更多】按钮,选择连通性测试,测试是否可以用当前的数据源地址及用户密码成功连入数据源。 + + diff --git a/versioned_docs/version-v2/user-manual/project/intro.md b/versioned_docs/version-v2/user-manual/project/intro.md new file mode 100644 index 00000000..edc6ce06 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/intro.md @@ -0,0 +1,60 @@ +--- +title: 功能介绍 +--- + + +# 功能介绍 +自2.22.11.0版本起,平台引入项目管理概念,与SQL审核相关的资源均以项目的形式进行资源隔离。创建工单前,需要由项目管理员设置好项目内部必要的资源环境,包括项目使用的数据源、用户、流程模板、规则模板、白名单信息等,随后,项目成员才可在项目内提交工单并审核上线,或设置智能扫描任务。 +本文介绍项目管理的使用场景以及如何以项目形式管理SQL工单、扫描任务等项目资源。在进行项目管理之前,需要由管理员进行创建项目,具体操作请参见[创建项目](project_create.md)。 + +## 说明 +:::tip +社区版仅支持一个默认项目,项目管理员是admin,企业版可创建多个项目,有创建项目权限的用户可以创建项目,创建项目后,可指定其他项目成员为项目管理员。 +::: + +### 使用场景 +企业内容存在多个业务,且各个业务之间的数据源、工单、扫描任务可能由不同团队在负责,希望不同团队之间的数据相互隔离。此时,可在平台内以不同项目的行为去管理多个业务资源(数据源、工单、扫描任务等)。 + +### 项目内资源调度 +![资源调度](img/intro1.png) +项目内的主要业务为工单审核及智能扫描任务审核。围绕工单及智能扫描任务,涉及到数据源管理、审核规则模板管理、白名单管理、审核流程管理、成员管理。 + +#### 以工单审核为例 +工单是为了满足下发SQL时审核、上线环节的流程化需求。 + +工单的完整生命周期包括创建、审核、上线,其中涉及数据源、审核流程、审核规则模板、白名单的操作。 + +:::note +* 审核流程:一个项目可绑定一个审核流程,该审核流程将应用于该项目下的所有工单审核。 +* 数据源:工单作用于具体的数据源,创建工单时,需要指定一个或多个数据源。 +* 审核规则模板:创建工单时,平台会基于该数据源应用的审核规则模板,对成员提交的SQL语句进行审核,满足应用的审核规则后,才可创建工单。 +* 白名单:创建工单时,若存在不需要审核的SQL语句,可将该SQL语句添加至白名单,提交该SQL时平台将不做审核。 +::: + + +#### 以智能扫描任务为例 +智能扫描任务是为了满足长期的SQL审核,平台支持的扫描任务类型包括库表元数据、TopSQL、慢日志、Mybatis扫描、应用程序SQL抓取及其他自定义扫描任务。 + +智能扫描任务的完整生命周期包括创建、查看扫描任务报告,其中涉及数据源、审核规则模板、白名单的操作。 + +:::note +* 数据源:智能扫描任务作用于具体的数据源,创建智能扫描任务时,需要指定一个数据源。 +* 审核规则模板:创建的智能扫描任务,将基于该任务下数据源应用的审核规则模板,审核任务中的SQL语句,并生成报告。 +* 白名单:创建扫描任务时,若存在不需要审核的SQL语句,可将该SQL语句添加至白名单,执行扫描任务时,将略过该语句。 +::: + + +### 项目内资源权限 +![资源权限](img/intro2.png) + + +项目内由成员执行工单及扫描任务。 + +#### 前置条件 +* 需要将平台创建的用户/用户组引入项目,成为项目成员/项目成员组后,才可在项目内进行操作。平台用户/用户组的创建,请参见[平台用户管理](../user-manager/intro.md)。 +* 引入项目成员/成员组时,需要指定成员/成员组在对应数据源上的操作角色,成员/成员组将继承角色对应的操作权限。角色的配置,请参见[平台角色管理](../user-manager/role.md)。 + +#### 资源权限说明 +* 一个项目内可引入多个成员/成员组 +* 成员/成员组将依据自身绑定的数据源及对应角色权限,对指定数据源进行指定的操作。 +* 如当前项目引入了成员user1,并在user1上绑定了数据源local,并指定角色为DEV(创建工单),那么user1在当前项目中可执行的操作为:针对数据源local创建工单/管理自己创建的工单。 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/project/project_create.md b/versioned_docs/version-v2/user-manual/project/project_create.md new file mode 100644 index 00000000..1814fc19 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/project_create.md @@ -0,0 +1,53 @@ +--- +title: 创建项目【企业版】 +--- +# 创建项目【企业版】 + +本文介绍如何在SQLE平台创建项目。 +SQLE平台通过引入项目实现业务、资源的隔离,项目内创建的工单及扫描任务都将带有项目属性,仅项目成员可查看、操作。 + +### 使用场景 +企业内容存在多个业务,且各个业务之间的数据源、工单、扫描任务可能由不同团队在负责,希望不同团队之间的数据相互隔离。此时,可在平台内以不同项目的行为去管理多个业务资源(数据源、工单、扫描任务等)。 + +### 前置条件 +创建新项目时,需要用户拥有创建项目的权限,这部分内容可通过管理员账号配置,请参见[平台用户管理](../../user-manual/user-manager/user.md),或由平台管理员直接创建项目。 + +### 操作步骤 +拥有项目创建权限的用户/平台管理员点击页面顶部菜单栏`项目`,选择`查看所有项目`,点击列表右上角`创建项目`按钮 + +* 输入项目名称。如:actionsky; +* 输入项目描述。如:处理爱可生项目的数据源、工单及扫描任务; +* 点击提交; + +### 执行结果 +* 项目创建完成后,可在项目列表中查看当前用户创建的项目。 +* 选中指定项目,可进入项目详情页面,查看并管理项目内的数据源、成员、审核规则模板、审核流程模板等内容。 + +![项目列表](./img/project-list.png) + +:::tip +项目创建人在创建项目后会成为项目成员,承担项目管理员的身份,支持指定其他成员成为项目管理员,一个项目可对应多个项目管理员。 +::: + +### 后续步骤 +项目创建后,用户在进行创建工单、创建扫描任务的核心业务之前,还需要做如下操作: +* 初始化工单、扫描任务的实施对象即数据源,具体操作请参见[数据源管理](instance-manager.md)。 +* 初始化工单、扫描任务的使用人员以及使用人员的操作权限即项目成员,具体操作请参见[成员管理](group_member.md)。 +* 初始化工单、扫描任务的审核规则模板,一个项目内可为不同数据源定义不同的规则模板,具体操作请参见[规则模板管理](rule-template-manager.md)。 +* 若存在无需审核的SQL,可在白名单管理中初始化白名单,请参见[白名单管理](whitelist-manager.md); +初始化工单的项目审核流程模板,一个项目内所有工单共用一个审核流程,具体操作请参见[流程模板管理](workflow-template-manager.md)。 + +### 更多管理功能 +项目管理包含编辑及删除操作。 +* 项目编辑:项目创建人/平台管理员可在项目列表编辑项目条目信息,可编辑项为项目描述。 +* 项目删除:项目创建人/平台管理员可在项目列表删除项目条目。 + * 限制:删除项目前,需要确保项目下没有进行中的工单,才可成功删除。 + * 影响:删除项目后,该项目下的数据源、工单及扫描任务信息都将被删除。 +* 冻结项目:若有项目需要临时停用,项目创建人/平台管理员可在项目列表点击冻结项目。 + * 限制:冻结项目前,需要确保项目内没有未完成的工单。 + * 影响:冻结项目后,项目内所有操作均不可执行。 + * 后续:用户可点击`启用`操作,重新启用该项目。 + + + + diff --git a/versioned_docs/version-v2/user-manual/project/rule-template-manager.md b/versioned_docs/version-v2/user-manual/project/rule-template-manager.md new file mode 100644 index 00000000..016da400 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/rule-template-manager.md @@ -0,0 +1,57 @@ +--- +title: 审核规则模板 +--- + +# 规则模版 +本文将介绍如何管理项目中的审核规则模板。 +SQLE平台提供对应数据库类型的默认审核规则模板,是在长期实践中依据数据库特性总结出的一些规范的集合。审核规则模板在平台上的使用场景包括:创建工单时的审核、扫描任务的审核、SQL查询的审核。 +同时也支持项目管理员基于实际业务需求定制审核规则模板,匹配具体的数据源审核需求。 +:::tip +规则模版分为全局模版和项目模版,**全局模版**为超级管理员配置,所有项目都可见和使用;**项目模版**由超级管理员或者项目拥有者配置,仅在项目内使用 +::: +:::tip +每个规则模版内可独立配置规则的级别和参数 +::: + + +### 使用场景 +在实际生产中,不同业务/不同数据源对上线的SQL存在不同审核要求,在SQLE平台中,项目管理员可通过审核规则模板为不同的数据源配置不同的审核规则。 + +### 前置条件 +项目管理员进入指定的项目 + +### 创建规则模板 +#### 入口 +项目管理员点击左侧导航栏【规则模板】菜单,点击项目规则模板列表中的【创建规则模板】按钮。 + +#### 步骤一:输入基本信息 + +* 模板名称:命名当前规则模板,须以字母开头,只能包含字母、数字、中划线和下划线。如:test +* 模板描述:补充描述模板的其他信息。如:用于测试规则模板触发的告警等级 +* 数据库类型:选择该规则模板应用的数据库类型,当前支持的数据库类型包括MySQL、TiDB、DB2、SQL Server、OceanBase For MySQL、Oracle、PostgreSQL、达梦。 + +#### 步骤二:选择要启用/禁用的规则 + +* 编辑规则告警等级:当前可设置项为普通、提示、警告、告警 +* 编辑规则参数默认值 + +#### 步骤三:提交规则模板 + +### 执行结果 +成功创建自定义审核规则模板后,项目管理员可查看已创建的自定义规则模板及其对应的数据库类型。 + +![审核规则模板](img/templatelist.png) + + +### 后续步骤 +* 设置数据源的审核规则模板:用户可为不同数据源设置相同或者不同的审核规则模板,具体操作请参见[数据源管理](instance-manager.md) +* 创建工单:工单中SQL的审核将依据该数据源配置的审核规则模板,请参见[工单说明](../project/workflow/intro.md)。 +* 创建智能扫描任务:智能扫描任务中SQL的审核将依据该数据源配置的审核规则模板,请参见[扫描任务说明](../project/audit_task/intro.md)。 + +### 更多操作 +* 导入规则模板:可以导入其他项目中形成的规则模板文件 +* 编辑规则模板:编辑规则模板的基本信息及应用的规则 +* 删除规则模板:删除自行创建的规则模板 + * 限制:当已有数据源绑定了该规则模板,该规则模板不可被删除 +* 克隆规则模板:克隆当前的模板,克隆的规则模版只会继承源模版所有启用的规则、以及变更过的规则等级和阈值。克隆出的新规则模版的模版名称等基本信息需要手动填写。 +* 导出规则模板:导出当前选中的规则模板,以json格式下载规则模板内容。 diff --git a/versioned_docs/version-v2/user-manual/project/whitelist-manager.md b/versioned_docs/version-v2/user-manual/project/whitelist-manager.md new file mode 100644 index 00000000..fe36f62d --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/whitelist-manager.md @@ -0,0 +1,45 @@ +--- +title: 白名单管理【企业版】 +--- + +# 白名单【企业版】 +本文介绍如何增加、编辑、删除项目中的白名单。 +SQLE在企业版中提供白名单功能,便于用户在特定场景下规避具体规则的审核。 +添加在SQL审核白名单中的语句,在提交工单申请时,不受审核规则的约束。。 +:::tip +白名单目前支持两种方式匹配SQL,字符串匹配和SQL指纹匹配,前者需要SQL内容一致,后置匹配同类型的SQL +::: + + +### 使用场景 +当已知一些 SQL 存在不规范之处,但又想忽略时,可以将SQL语句添加至白名单。 + +### 前置条件 +项目管理员进入指定的项目 + +### 添加白名单 +项目管理员点击左侧导航栏【白名单】菜单,点击白名单列表右上角的【添加白名单】按钮。 +* 选择匹配模式:提供以下两种方式 + * 字符串匹配:若选择通过字符串匹配,则将应用于指定SQL语句。 + * SQL指纹匹配:若选择通过SQL指纹匹配,则应用于语句结构一致的SQL。 +* 输入白名单描述:用以提示该条白名单SQL的应用场景 +* 输入SQL语句 + +### 执行结果 +成功添加白名单后,可以看到当前项目内所有的项目白名单及匹配模式 + +![whitelist](img/whitelist.png) + + +### 后续步骤 +* 创建工单:添加白名单后,可继续创建工单,白名单中的语句将不会触发审核,请参见[工单说明](../project/workflow/intro.md)。 +* 创建智能扫描任务:添加白名单后,审核将跳过白名单中的语句,请参见[扫描任务说明](../project/audit_task/intro.md)。 +* +### 更多操作 +* 编辑白名单:项目管理员/成员可修改已创建的白名单语句 +* 删除白名单:项目管理员/成员可删除已创建的白名单语句 + + + + + diff --git a/versioned_docs/version-v2/user-manual/project/workflow-template-manager.md b/versioned_docs/version-v2/user-manual/project/workflow-template-manager.md new file mode 100644 index 00000000..a1b17a4e --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/workflow-template-manager.md @@ -0,0 +1,93 @@ +--- +title: 审核流程模板 +--- + +# 流程模版 +本文介绍项目中的审核流程模板管理。 +SQLE平台应用审核流程模板来规范项目内工单审核、上线的流程,项目管理员可配置审核涉及的节点、操作用户,及上线节点的操作用户。 +一个项目有且仅有一个审核流程模板。 +:::tip +每个项目对应使用一个流程模版,项目创建后会初始化一个默认模版,用户可根据实际情况调整 +::: + +:::tip +工单审核步骤若选择`匹配所有拥有审核权限的用户`时对应的数据源没有对应的人员则默认指定管理员进行审批操作 +::: +:::caution +修改流程模版仅对之后的工单有效,之前的工单流程步骤不变 +::: + + + +## 使用场景 +一个业务团队中,开发需要在指定数据源上执行SQL,上线的SQL需要符合DBA约定了的安全以及性能规范。因此,SQLE为工单场景提供了不同人员之间的协作工作流,即审核流程。 + +## 前置条件 +项目管理员进入指定的项目 +项目管理员已添加项目成员/成员组 + + +## 配置审核流程 +项目管理员点击左侧导航栏`流程模板`菜单, 点击`修改当前审批流程模板`按钮 + +### 设定模板的基本信息 +设置允许创建工单的最高审核等级 + +当前提供四种审核等级,包括: +* 普通 +* 提示 +* 告警 +* 错误 + +若设置“运行查询的最高审核等级”为warn,则审核结果小于等于warn的SQL都可以执行. + +### 设置流程节点 +审核流程自工单发起开始,通过设置的审核步骤后,最后以执行上线结束 + +#### 第一步 工单发起 + +这一步骤通常指代项目成员创建工单 + +#### 第二步 工单审核 + +配置审核节点后,对应审核操作人在该步骤可以执行审核通过或驳回操作 + +* 选择审核人类型,可以选择指定审核人或匹配拥有数据源审核权限的成员 +* 添加步骤描述:用以补充说明步骤信息 +* 添加审核步骤:审核流程模板最多可设置4个审核节点,也可不设置审核步骤 + +:::tip +* 若选择指定审核人 + * 需要项目管理员指定项目成员 + * 最少需要添加一个指定人,最多只能添加三个指定人 + * 指定的审核人可以没有工单审核权限 +* 若选择匹配拥有数据源审核权限的成员 + * 将按实例匹配数据源上拥有审核权限的成员 + * 如果创建工单时没有任何用户拥有此数据源工单审核权限, 则工单审核人将会被指定为项目管理员 +::: + +#### 第三步 工单上线:执行人在该步骤可以执行上线或驳回操作。 +* 选择审核人类型,当前提供两种方式:指定上线人或匹配拥有数据源上线权限的成员 +* 添加步骤描述 + +:::tip +* 若选择指定审核人 + * 需要项目管理员指定项目成员 + * 最少需要添加一个指定人,最多只能添加三个指定人 + * 指定的上线人可以没有工单上线权限 +* 若选择匹配拥有数据源上线权限的成员 + * 将按实例匹配数据源上拥有上线权限的成员 + * 如果创建工单时没有任何用户拥有此数据源工单上线权限, 则工单上线人将会被指定为项目管理员 +::: + +#### 第四步 提交审核流程模板 +提交审核流程后,流程修改之前创建的工单仍以提交工单时的审核流程执行,流程修改后的创建的工单将以当前的审核流程执行流转。 + +## 执行结果 +提交审核流程模板后,可查看当前设置的审批流程模板涉及的步骤节点,及各步骤的审核人。 +![审核流程模板](img/workflowtemplate.png) + + + +## 后续步骤 +创建工单:创建审核流程模板后,成员可进入项目中创建工单,请参见:[创建工单](../project/workflow/create-workflow.md) diff --git a/versioned_docs/version-v2/user-manual/project/workflow/audit-workflow.md b/versioned_docs/version-v2/user-manual/project/workflow/audit-workflow.md new file mode 100644 index 00000000..37f5a3ee --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/workflow/audit-workflow.md @@ -0,0 +1,50 @@ +--- +title: 审核工单 +--- +# 审核工单 +审核工单包含两部分 +* 规则审核:实际生产中,DBA对上线的SQL已有统一的安全、性能规范,则可启用SQLE规则模板进行自动审核 +* 人工审核:实际生产变化比较大,已有的安全、性能规范很难覆盖所有场景 +自动审核通常在创建工单时执行,本节主要介绍人工审核部分。 + +### 使用场景 +实际生产中会存在业务变更、业务上线,比如初始化构建业务库、跑批等,当工单创建后,通常需要审核人员执行审批操作,审批过程中,审批用户可选择审核通过或全部驳回。 + +### 前置条件 +工单已被创建 + +### 操作步骤 +#### 步骤一 查看待审核的工单 +:::tip +* 入口一:可在dashboard中查看待自己审核的工单 +* 入口二:进入项目的工单列表,筛选工单状态为待审核,查看项目内待审核的工单 +::: + +### 步骤二 点击待审核的工单名称,进入查看工单详情 +工单详情页信息包含以下几个方面 + +* 工单基础信息:包括工单名称、工单创建人、工单创建时间及工单描述 +* 工单进度:查看当前工单的执行进度,及工单整体流经的流程节点,流程节点与审核流程模板中设置的节点保持一致 +* 工单审核结果查看: + * 概览:查看工单的整体概况信息,显示工单整体应用的数据源及审核情况 + * 按数据源查看:按数据源查看数据源上的SQL及其审核结果,并查看分析结果,也可下载审核报告、下载SQL语句、去重SQL + +#### 步骤三 审核通过或驳回工单 +* 审核通过:成员查看工单详情后,若审核通过,可点击【审核通过】按钮,完成审核; +* 全部驳回:若审核不通过,可点击【全部驳回】按钮,并填写驳回原因,工单将返回至工单创建人处 + +### 执行结果 +* 审核通过:若点击【审核通过】,工单将按照审核流程模板流转至下一操作节点,状态变更为待审核或待上线 +![approve](img/audit-approve.png) +* 全部驳回:若点击【全部驳回】,工单状态将变更为已驳回,工单进度栏将提示提交的驳回原因,工单将返回至创建人重新修改,并重新提交工单审核,或直接关闭工单 +![deny](img/audit-deny.png) + +### 后续步骤 +* 审核工单:若工单涉及其他审核流程节点,工单将继续流转至下一审核节点审核 +* 上线工单:若工单不涉及其他审核流程节点,工单将流转至上线人处执行上线,可参考[上线工单](exec-workflow.md) + + + + + + diff --git a/versioned_docs/version-v2/user-manual/project/workflow/create-workflow.md b/versioned_docs/version-v2/user-manual/project/workflow/create-workflow.md new file mode 100644 index 00000000..41378fb6 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/workflow/create-workflow.md @@ -0,0 +1,103 @@ +--- +title: 创建工单 +--- + +# 创建工单 +工单是SQLE提供的在线化SQL上线方式。研发人员可通过创建工单,提请需要审批的SQL语句。 + +## 使用场景 +实际生产中会存在业务变更、业务上线,比如初始化构建业务库、跑批。此时,需要针对某个数据库执行一批SQL。用户可通过SQLE创建工单,输入SQL语句或者上传SQL脚本。 + +## 前置条件 +* 项目管理员已添加数据源; + +## 操作步骤 +### 步骤一:填写工单基本信息 +创建工单前,需要为工单指定唯一的工单名称,并填写工单说明。 + +* 填写工单名称: + * 工单名称支持中英文,须以英文开头; + * 工单名称可自行填写;若未填写,平台将根据使用的数据源及添加时间组合填充工单名称; +* 填写工单描述:输入工单描述信息,限3000个字符; + +### 步骤二:上传SQL语句并审核 +需要填写工单中涉及的SQL语句,执行`审核`操作,SQLE会根据数据源配置的审核规则模板,自动进行SQL语句的规则审核,并在线反馈审核结果。 +* 选择数据源:表示当前SQL最终会应用到哪个数据源; + * 社区版:一个工单内仅支持选择一个数据源; + * 企业版:一个工单内支持添加多个数据源; +* 是否选择相同SQL:当添加多个数据源时,可设置是否选择相同SQL; + * 使用相同SQL模式, + * 限制:数据源的数据库类型相同; + * 效果:对不同数据源下发相同SQL; + * 若不使用相同SQL模式 + * 效果:对不同数据源下发不同SQL; +* 选择数据库:选择要执行的数据库,相当于执行 use 语句; + * 若未选择数据库,工单上线后,将脱库执行下发的SQL; +* 选择审核SQL语句上传方式:平台提供三种上传方式,包括在线输入SQL语句、上传SQL文件、上传MyBatis的XML文件; + * 在线输入SQL语句:项目成员可在平台编辑器中直接输入SQL; + * 上传SQL文件:项目成员可选择本地的SQL文件上传; + * 上传Mybatis的XML文件:项目成员可选择本地的XML文件上传; + * 限制:平台仅支持审核XML文件中上传的SQL语句,尚不支持对其创建工单; +* 点击`审核`,显示平台审核结果; + +:::tip +在线输入SQL的场景下,平台支持对输入框中的SQL进行美化,以此提高SQL可读性。 + +注:当前支持SQL美化的数据源类型包括: +* MySQL +* DB2 +* SQL Server +* Oceanbase For MySQL +* Oracle +* PostgreSQL +::: + + +### 步骤三:查看审核结果 + +将根据数据源不同,展示不同数据源下的SQL审核结果。 +审核结果由以下几部分组成: + +* 数据源标签:显示当前SQL操作的数据源,当有多个数据源时,可切换数据源标签,查看不同数据源上的审核情况; +* 数据源上SQL的整体审核通过率、审核结果评分及操作的数据库; +* 数据源上每条SQL的审核结果、SQL语句及执行状态,可分析SQL; +* 功能区: + * 下载审核报告:查看当前数据源下审核的sql语句及其审核结果; + * 下载SQL语句:下载文件,可查看当前数据源下审核的SQL语句及其审核结果; + * 设置是否去重:若SQL语句结构一致,去重后将仅显示去重后的SQL; + +```jsx title="审核通过率计算方式" +审核通过率=正常sql/sql总数 +审核结果等级为notice,warn,err的sql均为非正常sql +``` + +```jsx title="审核结果评分计算方式" +1.Error以上级别SQL出现率 = Error级别SQL数 / 总SQL数 +2.Warn以上级别SQL出现率 = (Error级别SQL数 + Warn级别SQL数) / 总SQL数 +3.Warn以上级别SQL出现率 = (Error级别SQL数 + Warn级别SQL数 + Notice级别SQL数) / 总SQL数 +4.总分 = 审核通过率 x 30 + +(1 - Error以上级别SQL出现率) x 15 + +(1 - Warn以上级别SQL出现率) x 10 + +(1 - Notice以上级别SQL出现率) x 5 + +(Error以上级别SQL出现概率 == 0 ? 15 : 0) + +(Warn以上级别SQL出现概率 == 0 ? 10 : 0) + +(Notice以上级别SQL出现概率 == 0 ? 5 : 0) + +(Error以上级别SQL出现概率 <0.1 ? 5 : 0) + +(Warn以上级别SQL出现概率 <0.1? 3 : 0) + +(Notice以上级别SQL出现概率 <0.1 ? 2 : 0) + +备注: 三元表达式 ==> ( 条件 ? 如果条件为真则为此值 : 如果条件为假则为此值 ) +``` + +### 步骤四:点击创建工单 +完成创建后,进入工单列表,即可看到该工单显示为待审核。 + +## 执行结果 +创建工单后,可在工单列表查看已创建的所有工单。 +![list](img/list.png) + +## 后续步骤 +* 审核工单:工单创建完成后,将依据审核流程模板的设定,流转至指定的审核成员处,审核成员需登录后进行审核操作,详情可参见[审核工单](audit-workflow.md)。 +* 导出工单:当用户需要审计当前已创建的工单时,可选择筛选条件后,点击工单列表的`导出工单`按钮,以csv格式导出满足条件的工单信息。 + + diff --git a/versioned_docs/version-v2/user-manual/project/workflow/exec-workflow.md b/versioned_docs/version-v2/user-manual/project/workflow/exec-workflow.md new file mode 100644 index 00000000..b82a3339 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/workflow/exec-workflow.md @@ -0,0 +1,57 @@ +--- +title: 上线工单 +--- + +# 上线工单 +本章详细介绍用户如何进行上线。 +* 从数据源角度,支持多数据源同时上线、单数据源分别上线; +* 从上线时间角度,支持立即上线、定时上线; +* 从上线方式角度,支持平台直接上线,也支持后台执行后,线上标记为人工上线; + +### 使用场景 +实际生产中上线环节也会存在业务变更等诸多情况,除了对工单做整体上线操作外,还存在以下需求: +* 需要根据数据源分别上线; +* 需要避开业务高峰期,在指定时间上线; +* 已在后台执行SQL,需要线上标记为人工上线; + +为此,SQLE平台也提供了多种上线方式,满足用户的上线需求。 + +### 前置条件 +工单状态为待上线; + +### 操作步骤 + +#### 步骤一 进入待上线的工单 + +* 方式一:上线操作人可在dashboard中点击“需上线”标签,查看当前需要上线的工单; +* 方式二:上线操作人也可在项目的工单列表中,筛选工单状态为“待上线”的工单,查看当前需要上线的工单; + +#### 步骤二 设置工单上线 +根据使用场景,区分为以下四种工单上线方式; + +##### 1.批量立即上线 +针对一个工单内涉及多个数据源,且多个数据源需要同时立即上线的,点击批量上线,平台将对工单内涉及的所有数据源执行上线操作; + +##### 2.单个数据源立即上线 +点击立即上线后,平台将立即连入指定数据源,并执行SQL变更; + + +##### 3.单个数据源定时上线 +点击定时上线,并设置上线时间,平台将于指定时间上线SQL; +用户也可取消定时上线,重新设置上线方式。 + +##### 4.标记为人工上线 +针对已经线下执行过的工单SQL,用户可点击`标记为人工上线`按钮,切换工单状态; + +:::tip +上线人仍可选择全部驳回:用户判定工单中存在不合规、性能问题等SQL语句时,则可点击全部驳回,让工单创建人修正后再次进入审核流程。 +::: + +:::note +针对上线中的工单,用户可点击“中止上线”按钮,中断上线流程,以避免当前的上线操作影响正常业务。 +::: + +### 执行结果 +![result](img/audit-result.png) + + diff --git a/versioned_docs/version-v2/user-manual/project/workflow/img/audit-approve.png b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-approve.png new file mode 100644 index 00000000..01adcaa5 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-approve.png differ diff --git a/versioned_docs/version-v2/user-manual/project/workflow/img/audit-deny.png b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-deny.png new file mode 100644 index 00000000..cd2ab5da Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-deny.png differ diff --git a/versioned_docs/version-v2/user-manual/project/workflow/img/audit-result.png b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-result.png new file mode 100644 index 00000000..409ea581 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/workflow/img/audit-result.png differ diff --git a/versioned_docs/version-v2/user-manual/project/workflow/img/list.png b/versioned_docs/version-v2/user-manual/project/workflow/img/list.png new file mode 100644 index 00000000..53fc28ec Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/workflow/img/list.png differ diff --git a/versioned_docs/version-v2/user-manual/project/workflow/img/process.png b/versioned_docs/version-v2/user-manual/project/workflow/img/process.png new file mode 100644 index 00000000..82460a0a Binary files /dev/null and b/versioned_docs/version-v2/user-manual/project/workflow/img/process.png differ diff --git a/versioned_docs/version-v2/user-manual/project/workflow/intro.md b/versioned_docs/version-v2/user-manual/project/workflow/intro.md new file mode 100644 index 00000000..87249c1f --- /dev/null +++ b/versioned_docs/version-v2/user-manual/project/workflow/intro.md @@ -0,0 +1,34 @@ +--- +title: 功能说明 +--- + +# 功能说明 +很多公司通常设有 DBA(Database administrator) 这个职位,他们负责在系统上运行数据库,执行备份,执行安全策略等日常数据库运维的工作。其中,DBA一项重要的工作是规范研发人员在应用程序中使用的 SQL 语句。 + +### 场景举例: +产品在迭代过程中,某个表需要新增一个字段,这会涉及到改表操作。 +当前处理方法:DBA 依据数据库规范评估SQL语句的合理性。如果评估没有问题,则将修改操作应用到线上数据库。如果公司对于这类操作比较严格,在上线前,可能还需要经过层层审批。所有上线流程中的人都同意后,再将修改操作应用到数据库。 + +由此引出的问题: + +* SQL上线牵涉范围较广,缺乏规范化流程支撑 +* 工单运转节点不透明,需要DBA去手动通知 + +### 定位 +SQLE审核工单的出现主要是为了解决上述整个过程中的规范化、流程化的问题。 + +* 通过引入审核规则模板,在人工审核前,首先利用规范化的DBA审核经验进行平台预审,提高整体审核效率 +* 通过引入审核流程模板,将SQL语句的流程节点透明化,并明确操作权限归属,提供规范化流程支持 + +### 流程 +![process](img/process.png) + +| 状态 | 说明 | +| - | -------- | +|待审核 | 创建完的工单自动进入「待审核」状态;该状态的工单将由项目流程设置的审核人进行审核。| +|待上线 | 工单的每一道审核流程均执行通过后,工单状态将由「待审核」状态变更为「待上线」状态;上线人此时可选择立即上线或批量驳回,或针对具体数据源进行立即上线或定时上线。设置定时上线后,工单状态仍为「待上线」,到达预设的上线时间后,变更为「正在上线」状态;设置定时上线但还未到达上线时间的工单,可以由上线人取消定时上线,可以再次对工单进关闭、定时上线/立即上线等操作。| +|正在上线| 当上线人进行立即上线,工单会短暂的进入「正在上线」阶段,该阶段的时间取决于SQL是否上线完毕;当上线人选择定时上线,定时上线的工单到预设时间会自动执行SQL上线,此时工单也会由「待上线」状态变更为「正在上线」状态;SQL上线遇到阻塞的工单会一直处于「正在上线」状态。| +|上线成功| SQL上线成功的工单会进入「上线成功」状态;上线成功标志工单流转结束,无法再对工单进行操作。| +|上线失败| SQL上线失败的工单会进入「上线失败」状态;上线失败同样标志工单流转结束,无法再对工单进行操作| +|已驳回|「待审核」的工单可以由每级的审批人进行审核,若审核不通过,被驳回,工单将进入「已驳回」状态;此状态的工单可以由创建人或者超管用户进行修改并重新提交工单,流程将被重置。 +|已关闭|状态为「待审核」、「待上线」或「已驳回」的工单可以由创建人或者超管用户在任何时刻关闭工单,「已关闭」状态标志工单流转结束,无法再对工单进行操作;已经进入上线流程的工单无法关闭。 diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/how-to-configure.md b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-configure.md new file mode 100644 index 00000000..fd03be32 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-configure.md @@ -0,0 +1,76 @@ +--- +title: 配置方法 +--- + +# 配置方法 +### 安装CloudBeaver +:::tip +SQLE目前支持的CloudBeaver版本包括22.2.0、22.2.1、22.2.3、22.3.1版本 +::: + +docker 部署:https://github.com/dbeaver/cloudbeaver/wiki/Run-Docker-Container + +源码安装:https://github.com/dbeaver/cloudbeaver/wiki/Build-and-deploy + +### 配置CloudBeaver +#### 步骤一 修改CloudBeaver配置文件cloudbeaver.conf +cloudbeaver.conf配置文件通常在conf路径下 + +|配置文件名 | 是否必须修改 | 修改内容 | 修改原因| +|--|--|--|--| +|cloudbeaver.conf|是|将server.rootURI的值改为'/sql_query';将server.serviceURI 的值改为 '/api/'(server.serviceURI默认就是/api/)|SQLE目前只支持代理这个路由| +![config](img/config.png) + +#### 步骤二 重启CloudBeaver +配置cloudbeaver后,需要重启cloudbeaver以使配置项生效 + +#### 步骤三 初始化CloudBeaver +* 使用 http://{IP}:8978/sql_query#/ 可以进入CloudBeaver即代表配置正确 +* 设置管理员用户名及密码:该用户名及密码将用于后续SQLE配置文件中 +* 确认security服务开启 +* 完成设置,登录管理员账号成功,则初始化成功 + +#### 步骤四 配置完成后检查 +* 确认角色正确:[访问管理] - [角色] 处应当只有admin和user两个角色 + +* 确认没有冲突用户:[访问管理] - [用户] 处不应当有名称格式为 sqle-xxx的用户存在, 这会与SQLE自动创建的用户冲突 + +:::tip +用admin 跳转Cloudbeaver的时候,SQLE会在Cloudbeaver创建一个新的用户叫sqle-admin ,同时把这个用户缓存到数据库里,每次跳转先去数据库里找这个用户,如果已经存在,就会拿这个用户直接去登陆cb +::: + +### 配置SQLE +#### 步骤一 修改SQLE配置文件, 增加SQL工作台参数 +打开SQLE配置文件,配置文件一般位于SQLE工作目录的etc目录下, 文件名一般为sqled.yml +配置文件新增参数sql_query_config + +|参数字段 | 参数说明 | +|--|-----| +|sql_query_config|sql工作台参数, 此参数与 sqle_config在同一级| + +在sql_query_config参数下增加子参数,子参数在 sql_query_config 的下一级, 需要注意缩进 + +|参数字段 | 参数说明| +|--|-----| +|cloud_beaver_host|cloudbeaver IP地址| +|cloud_beaver_port | cloudbeaver访问端口| +|cloud_beaver_admin_user | cloudbeaver管理员账户 | +|cloud_beaver_admin_password|cloudbeaver管理员密码| + +配置文件内容参考: + +![sqleconfig](img/sqleconfig.png) + +#### 步骤二 重启SQLE +需要重启以使配置项生效。 + +#### 步骤三 检查SQLE是否已成功集成CloudBeaver +SQLE重启后进入平台,点击打开SQL工作台,若成功跳转,则说明当前SQLE平台已成功集成CloudBeaver。 + +:::tip +* 平台管理员账户需要有 [添加/修改/删除] [用户/实例/权限] 的权限 +* SQLE集成CloudBeaver后请勿使用CloudBeaver的管理员账户直接操作CloudBeaver的用户/实例/权限 +::: + +### 常见问题 +如果在配置CloudBeaver时,出现跳转不正确等问题,可参考[如何解决CloudBeaver跳转不正确的问题](https://github.com/actiontech/sqle/discussions/1521)。 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/how-to-quick-deploy.md b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-quick-deploy.md new file mode 100644 index 00000000..b265b4e7 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-quick-deploy.md @@ -0,0 +1,43 @@ +--- +title: 使用定制包快速搭建环境 +--- + +SQLE在原有CloudBeaver release_22_2_0 分支的基础上, 增加了对OceanBase 和 TiDB 的支持, 用户无需再手动配置环境,可直接使用SQL工作台功能。 + +![cb](img/appear.png) + +定制分支与原分支区别详情 +* 支持并默认启用 OceanBase 驱动 +* 支持并默认启用 TiDB 驱动 +* 默认访问路由调整为 /sql_query, 便于与SQLE集成 +* 默认会话超时时间调整为12小时(之前是30分钟) +* 移除了默认创建的 PG 演示实例和 SQLite 演示实例 +* docker镜像名调整为 actiontech/sqle-cloudbeaver:22_2_0 +* 优化打包方式, 大幅提高打包效率 +* 默认主题改为暗色 + +### 项目地址 +* 定制CloudBeaver分支: https://github.com/actiontech/cloudbeaver/tree/sqle_22_2_0 + +* 定制DBeaver分支: https://github.com/actiontech/dbeaver/tree/sqle_22_2_0 + +### 定制包下载地址 +https://github.com/actiontech/cloudbeaver/releases/tag/sqle.22.2.0 + +### 使用说明 +#### 编译和运行项目 +与原项目编译运行方式保持一致 + +#### 编译docker镜像 +进入项目的 deploy/docker 目录, 然后执行 ./make-docker-container.sh + +#### 运行docker镜像 +* 方式一: 进入项目的 deploy/docker 目录, 然后执行 ./run-docker-container.sh +* 方式二: 手动启动镜像, 镜像参数和 原项目镜像参数 保持一致 + +#### 已有CloudBeaver环境升级为定制环境 +CloudBeaver程序目录下应当有以下几个文件 + +![cb](img/cb.png) + +将CloudBeaver程序目录下的conf目录和workspace目录移动到定制CloudBeaver程序目录下(覆盖原目录), 随后停止旧CloudBeaver, 运行新CloudBeaver即可 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/how-to-use.md b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-use.md new file mode 100644 index 00000000..8e8da4cf --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sql-workbench/how-to-use.md @@ -0,0 +1,43 @@ +--- +title: 使用定制包快速搭建环境 +--- + +SQLE在原有CloudBeaver release_22_2_0 分支的基础上, 增加了对OceanBase 和 TiDB 的支持, 用户无需再手动配置环境,可直接使用SQL工作台功能。 + +![cb](img/appear.png) + +定制分支与原分支区别详情 +* 支持并默认启用 OceanBase 驱动 +* 支持并默认启用 TiDB 驱动 +* 默认访问路由调整为 /sql_query, 便于与SQLE集成 +* 默认会话超时时间调整为12小时(之前是30分钟) +* 移除了默认创建的 PG 演示实例和 SQLite 演示实例 +* docker镜像名调整为 actiontech/sqle-cloudbeaver:22_2_0 +* 优化打包方式, 大幅提高打包效率 +* 默认主题改为暗色 + +### 项目地址 +* 定制CloudBeaver分支: https://github.com/actiontech/cloudbeaver/tree/sqle_22_2_0 + +* 定制DBeaver分支: https://github.com/actiontech/dbeaver/tree/sqle_22_2_0 + +### 定制包下载地址 +https://github.com/actiontech/cloudbeaver/releases/tag/sqle.22.2.0 + +### 使用说明 +#### 编译和运行项目 +与 原项目编译运行方式 保持一致 + +#### 编译docker镜像 +进入项目的 deploy/docker 目录, 然后执行 ./make-docker-container.sh + +#### 运行docker镜像 +* 方式一: 进入项目的 deploy/docker 目录, 然后执行 ./run-docker-container.sh +* 方式二: 手动启动镜像, 镜像参数和 原项目镜像参数 保持一致 + +#### 已有CloudBeaver环境升级为定制环境 +CloudBeaver程序目录下应当有以下几个文件 + +![cb](img/cb.png) + +将CloudBeaver程序目录下的conf目录和workspace目录移动到定制CloudBeaver程序目录下(覆盖原目录), 随后停止旧CloudBeaver, 运行新CloudBeaver即可 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/appear.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/appear.png new file mode 100644 index 00000000..c1d37419 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/appear.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/cb.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/cb.png new file mode 100644 index 00000000..e7d7f16f Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/cb.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/config.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/config.png new file mode 100644 index 00000000..e539737c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/config.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/error.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/error.png new file mode 100644 index 00000000..42835bfd Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/error.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/sqleconfig.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/sqleconfig.png new file mode 100644 index 00000000..706f4d5f Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/sqleconfig.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/img/success.png b/versioned_docs/version-v2/user-manual/sql-workbench/img/success.png new file mode 100644 index 00000000..121e4433 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sql-workbench/img/success.png differ diff --git a/versioned_docs/version-v2/user-manual/sql-workbench/introduction.md b/versioned_docs/version-v2/user-manual/sql-workbench/introduction.md new file mode 100644 index 00000000..c2864af5 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sql-workbench/introduction.md @@ -0,0 +1,49 @@ +--- +title: 功能说明 +--- + + +# 功能说明 +CloudBeaver Community 是一个开源的 Web 数据库可视化管理工具,支持 PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, DB2, Firebird, H2, Trino 等数据库。 + +SQLE通过集成CloudBeaver,使得SQLE具备数据库操作的能力,方便开发或DBA在SQLE中方便地操作数据库 +* SQL工作台会自动同步SQLE的用户信息和实例信息, 避免无权限的人进行操作 +* 可通过参数配置及SQL查询审核对SQL做限制和审核,有效避免不合规的查询 + +### 使用场景 +当业务人员需要对数据库进行数据检索时,一些查询SQL可能会造成数据库性能问题甚至夯死。但在传统的使用场景中,DBA很难对业务人员的行为进行追踪和管控,无法限制有问题的SQL在生产环境执行。 + +因而SQLE平台集成CloudBeaver数据库可视化管理工具,满足在线SQL查询需求的同时,进行业务人员的操作权限控制,并对业务人员的SQL进行审计,拒绝不合规的SQL运行。 + +### 前置条件 +安装CloudBeaver并完成配置,参考[SQL工作台配置方法](how-to-configure.md)。 + +### 操作步骤 +#### 步骤一 SQLE平台配置用户 +* 创建一个有SQL查询权限的角色 +* 将成员关联至该角色 + +#### 步骤二 SQLE平台配置数据库实例审核等级 +创建/修改一个实例, 开启SQL查询,并设置运行查询的最高审核等级,并提交修改 + +|参数名 | 参数含义| +| -- | -- | +|SQL查询是否需要审核 | 只有开启此项,才会在执行SQL查询时进行审核| +|运行查询的最高审核等级| 如果审核等级低于或等于这个等级将会放行, 高于这个等级将无法执行| + +#### 步骤三 登录CloudBeaver +自动登录说明:在登陆SQLE时会检测CloudBeaver是否处于登陆状态, SQLE将会自动使用当前SQLE用户登录CloudBeaver。 +:::caution +若当前用户无SQL查询权限,则无权登录。 +::: + +#### 步骤四 下发SQL +选择需要操作的数据源,并输入SQL语句点击运行,可查看SQL查询结果 + +### 操作结果 +审核失败的SQL将会被拦截, 并报出错误, 可以点击详情查看错误详情 +![error](img/error.png) + +按要求修改SQL, 再次执行, 如果审核通过将会执行当前SQL +![success](img/success.png) + diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/configuration.md b/versioned_docs/version-v2/user-manual/sys-configuration/configuration.md new file mode 100644 index 00000000..867acea9 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/configuration.md @@ -0,0 +1,46 @@ +--- +title: 全局配置 +--- +SQLE支持管理员对平台基础配置进行统一管理,目前支持修改的配置项包括: +* 已完成的工单自动过期时间; +* 操作记录过期时间; +* URL地址前缀; + + +### 已完成的工单自动过期时间 + +#### 使用场景 +SQLE会定时回收已完成的工单,目前该过期时间默认为30天。如果用户需要自定义过期时间,可在全局配置中修改。 + +#### 填写范例 +* 进入全局配置页面,点击`修改`; +* 点击`已完成的工单过期时间`输入框; +* 输入预期的过期时间,例如:360小时; +* 点击`提交`,保存配置; +* 此时查看项目工单列表,已完成15天以上的工单将被删除; + +### 操作记录过期时间 + +#### 使用场景 +SQLE会定时回收已产生的操作记录,目前该过期时间默认为90天。如果用户需要自定义过期时间,可在全局配置中修改。 + +#### 填写范例 +* 进入全局配置页面,点击`修改`; +* 点击`操作记录过期时间`输入框; +* 输入预期的过期时间,例如:2小时; +* 点击`提交`,保存配置; +* 此时查看平台操作记录,仅显示2个小时内产生的操作行为; + + +### URL地址前缀 + +#### 使用场景 +配置消息推送或流程对接后,用户可以从外部应用程序中直接查看待操作提示。此时,如果用户需要跳转到SQLE,进一步查看工单详细信息,则可以在全局配置中更改URL地址前缀,以满足访问需求。 + +#### 填写范例 +* 进入全局配置页面,点击`修改`; +* 点击`URL地址前缀`输入框; +* 输入URL前缀,格式为http://ip:port,例如:http://localhost:10000 ; +* 点击`提交`,保存配置; +* 创建一条工单,待审批人在第三方应用中可查看工单链接,点击链接可快速跳转至SQLE平台; +![configuration-url](img/configuration-url.png) diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/customize.md b/versioned_docs/version-v2/user-manual/sys-configuration/customize.md new file mode 100644 index 00000000..06f5a867 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/customize.md @@ -0,0 +1,21 @@ +--- +title: 个性化设置【企业版】 +--- + +SQLE支持对网站logo及标题进行自定义设置,满足企业用户的个性化需求。 + + +### 使用场景 +若用户对企业一致性有需求,需要变更所使用的网站logo及标题,以增加企业辨识度时,可以使用平台的个性化设置进行变更。 + + +### 操作步骤 + +* 用户点击系统设置,选择`个性化设置`; +* 编辑标题:用户点击个性化标题后的编辑icon,输入新名称`test`,回车键保存后,页面标题将变更为`test`; +* 编辑个性化logo:用户点击上传及更新icon,选择需要的图片,点击打开后,页面logo将变更为所选图片; + * 限制:图片大小不可超过102,400 Bytes; + +![customize](img/customize.png) + + diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/configuration-url.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/configuration-url.png new file mode 100644 index 00000000..ecc48e80 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/configuration-url.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/customize.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/customize.png new file mode 100644 index 00000000..fa7df33a Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/customize.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-createproject.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-createproject.png new file mode 100644 index 00000000..8d8a0c8d Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-createproject.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-flow.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-flow.png new file mode 100644 index 00000000..40c8b157 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-flow.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-info.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-info.png new file mode 100644 index 00000000..d386ec42 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-info.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-oaprivilege.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-oaprivilege.png new file mode 100644 index 00000000..248e1257 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-oaprivilege.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-privilege.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-privilege.png new file mode 100644 index 00000000..43fe6741 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-privilege.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-sqleinfo.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-sqleinfo.png new file mode 100644 index 00000000..f7552b8b Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-sqleinfo.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-telconfig.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-telconfig.png new file mode 100644 index 00000000..40d5bedd Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/dingding-telconfig.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example.png new file mode 100644 index 00000000..04ba6c83 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example2.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example2.png new file mode 100644 index 00000000..365e10c6 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example2.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example3.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example3.png new file mode 100644 index 00000000..41b55f44 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example3.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example4.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example4.png new file mode 100644 index 00000000..a9ddfa4c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example4.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example5.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example5.png new file mode 100644 index 00000000..ae9c0cb1 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example5.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example6.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example6.png new file mode 100644 index 00000000..f43a7f21 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-example6.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-syn.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-syn.png new file mode 100644 index 00000000..ed7f334d Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-syn.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-test.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-test.png new file mode 100644 index 00000000..9c6ba1d0 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/feishu-test.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/globalurl.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/globalurl.png new file mode 100644 index 00000000..0bb48ae1 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/globalurl.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/message-result.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/message-result.png new file mode 100644 index 00000000..9003da9e Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/message-result.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-instance.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-instance.png new file mode 100644 index 00000000..e84558aa Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-instance.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-result.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-result.png new file mode 100644 index 00000000..66eae966 Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-result.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-sip.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-sip.png new file mode 100644 index 00000000..8638627c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-sip.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-tag.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-tag.png new file mode 100644 index 00000000..c8305f7b Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-tag.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-user.png b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-user.png new file mode 100644 index 00000000..394df52c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/sys-configuration/img/syn-user.png differ diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/instance_syn.md b/versioned_docs/version-v2/user-manual/sys-configuration/instance_syn.md new file mode 100644 index 00000000..7a0282a0 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/instance_syn.md @@ -0,0 +1,47 @@ +--- +title: 外部数据源同步【企业版】 +--- + +# 外部数据源同步 +SQLE支持从其他平台导入数据源的功能,方便用户接入外部平台的数据源,目前已实现对接爱可生商业产品“云树·DMP:数据库集群管理平台”。 + +:::tip +版本限制:目前仅支持DMP5.23.04.0及以上版本 +::: + +### 使用场景 +如果用户需要使用SQLE对其他既有平台上的数据源进行SQL管理,只需要在SQLE上创建同步任务,将外部平台的数据源同步至SQLE平台,无需在两个平台上重复添加。 + +### 前置条件 + +需要在外部数据源配置同步用户、对需要同步的实例绑定SIP,并配置实例同步的项目标签。 + +#### 1.添加同步用户 +添加用户sqle,并绑定管理员权限 +![user](img/syn-user.png) +#### 2.针对需要同步的实例组添加SIP流量入口 +DMP平台创建/接管数据源后,给DMP的实例组添加SIP(目前SQLE只会同步配置了SIP的数据源组) +![sip](img/syn-sip.png) +#### 3.针对需要同步的实例组添加项目标签 +SQLE同步时,将依据项目标签值,将实例同步至指定项目中 +![tag](img/syn-tag.png) + + +### 操作步骤 +* 进入SQLE平台,点击右上角菜单的“外部数据源同步”,进入同步任务页面 +* 添加同步任务,填写以下相关信息 + * 来源:目前仅支持DMP平台; + * 地址:默认格式为http://ip:port; + * 数据源类型:选择同步的数据源类型,如mysql; + * 审核规则模板:选择数据源使用的规则模板; + * 设置同步间隔:SQLE平台将按照指定的同步时间执行同步任务; +* 点击“提交”按钮,SQLE会立即进行一次数据源同步。 + +### 操作结果 +同步成功后进入对应项目,查看数据源列表页面,可以看到DMP上配置了SIP的数据源组已经被添加到SQLE平台,可以对这个数据源进行创建工单或创建扫描任务等操作。 + +![syn-result](img/syn-result.png) +![instance-syn](img/syn-instance.png) + +### 后续操作 +管理员可编辑或删除同步任务,也可在同步周期之外,手动执行同步任务。 \ No newline at end of file diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/intro.md b/versioned_docs/version-v2/user-manual/sys-configuration/intro.md new file mode 100644 index 00000000..eca144a0 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/intro.md @@ -0,0 +1,15 @@ +--- +title: 功能说明 +--- + +# 功能说明 +系统设置中可配置的内容包括全局配置、登录对接、流程对接、消息推送。 + +* 全局配置:当前可配置工单过期时间及url + * 工单失效时间:平台会定期清理已完成的工单,管理员可自定义工单过期的时间 + * URL地址前缀:当使用流程对接时,通常由外部平台访问SQLE工单详情,需要配置url地址前缀,配置能访问SQLE的url地址信息 +* 登录对接:用户除使用SQLE账号登录平台,也可使用LDAP及oAuth2.0的方式实现对接登录,可参考[登录对接](login_syn.md)。 +* 流程对接:使用流程对接,可在外部工作平台审批工单,目前支持钉钉审批,可参考[流程对接](process_syn.md)。 +* 消息推送:使用消息推送,可将工单状态变更推送到外部工作平台,目前支持对接邮箱、企业微信、飞书的方式,可参考[消息推送](message_syn.md)。 + + diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/login_syn.md b/versioned_docs/version-v2/user-manual/sys-configuration/login_syn.md new file mode 100644 index 00000000..1ecbcd7d --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/login_syn.md @@ -0,0 +1,67 @@ +--- +title: 登录对接 +--- +# 登录对接 +当前登录对接已实现LDAP方式及Oauth2.0方式 +## 入口 +管理员账号,点击更多按钮,点击系统设置,跳转系统设置页面后,点击“对接登录”标签 + + +## 推送方式 +### LDAP +#### 功能说明 +SQLE中支持通过配置的方式接入LDAP系统, 如同其他系统一样接受统一的用户管理, 以便于管理员管理SQLE中的用户, 也使得员工无需在使用一套公司内通用账号密码的同时单独记录SQLE的账号密码。 +在SQLE中, 如果正确配置并启用了LDAP功能, 用户就可以在登录界面使用LDAP中记录的账号密码进行登录, SQLE会在员工第一次登录时同步此员工的账号和邮箱, 并在以后的登录中均通过LDAP校验此账户 + +#### 使用场景 +当组织配置了LDAP对接登录系统时,平台管理员可进行相关配置。 + +#### 前置操作 +已配置LDAP + +#### 操作步骤 +点击修改,选择启用LDAP + +* LDAP服务器地址:用于LDAP登陆时SQLE找到LDAP服务器的位置 +* LDAP服务器端口:用于LDAP登陆时SQLE找到LDAP服务的工作端口 +* 连接用户DN:当用户登录时需要先使用管理用户登录到LDAP中查找出登录用户在LDAP中的DN, 再使用查找出的DN和登录用户填写的密码进行LDAP登录校验 +* 连接用户密码:连接用户DN登录时的密码 +* 查询根DN:用于限定SQLE中LDAP登录的作用范围 +* 用户属性名:用于LDAP用户登录时查询登录用户的DN, LDAP中此属性对应的值也将用作此用户第一次登录SQLE自动注册时的用户名 +* 用户邮箱属性名:SQLE将根据此属性名从LDAP中获取到用户的邮箱, 并将此邮箱用于此用户第一次登录SQLE自动注册时的用户邮箱 + +#### 后续操作 +修改后用户即可通过LDAP账号登录SQLE平台 + +### OAuth 2.0【企业版】 +#### 功能说明 +SQLE中支持通过配置的方式接入OAuth 2.0系统, 如同其他系统一样接受统一的用户管理, 以便于管理员管理SQLE中的用户, 也使得员工无需在使用一套公司内通用账号密码的同时单独记录SQLE的账号密码 + +在SQLE中, 如果正确配置并启用了OAuth 2.0功能, 用户就可以在登录界面使用第三方登录, SQLE会在员工第一次登录时要求用户绑定或自动创建一个SQLE用户, 并在以后的登录中可以使用OAuth 2.0用户登录, 也可以用绑定的SQLE用户账号密码登录 + +#### 使用场景 +当组织配置了OAuth 2.0对接登录系统时,平台管理员可进行相关配置。 + +#### 前置操作 +已配置OAuth 2.0 + +#### 操作步骤 +点击修改,选择启用OAuth 2.0 + +* 应用ID:应用的唯一标识, 从要对接的平台申请 , 在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值 +* 应用密钥:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值 +* 外部访问SQLE的地址:格式为 http(s)://ip:port +* oauth2登录授权页面地址:格式类似于 http(s)://ip:port/xxx +* oauth2 access_token 获取地址:格式类似于 http(s)://ip:port/xxx +* oauth2 user id 获取地址:格式类似于 http(s)://ip:port/xxx +* 请求资源范围:此范围由验证服务器定义 +* access_token放置位置:SQLE会在获取用户ID时将access_token放在这个key对应的value中, 此参数会作为get请求的参数发送给用户ID获取地址 +* 用户ID保存位置:SQLE会尝试使用此key从第三方平台的响应中解析出用户ID,用户ID应当为唯一ID +* 登录按钮文字 + +:::tip +当仅允许内网访问SQLE服务时,请确保回调地址的后缀为"/v1/oauth2/callback"。 +::: + +#### 后续操作 +启用后SQLE登录界面出现其他方式跳转登录入口,点击,可跳转至对应登录页面 diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/message_syn.md b/versioned_docs/version-v2/user-manual/sys-configuration/message_syn.md new file mode 100644 index 00000000..90a56e05 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/message_syn.md @@ -0,0 +1,147 @@ +--- +title: 消息推送 +--- + +# 消息推送 +当前支持将工单状态变更同步至邮箱、企业微信、飞书。 + +## 使用场景 +在工单流转过程中,当需要将工单状态变更通知到对应操作人时,可以开启对应的消息推送服务,便于相关人员通过第三方应用程序及时看到SQLE工单状态变更的通知,避免因未能及时登录平台确认工单状态造成的进度滞后。 + +## 入口 +管理员账号,进入击系统设置页面后,点击“消息推送”标签。 + +## 推送方式 +### SMTP邮箱推送 + +#### 前置操作 +配置SMTP信息时,需要对开通邮件传输的邮箱进行相关设置,在账户管理中开启SMTP。 + +#### 操作步骤 +点击修改,选择是否启用邮件推送 +* 若选择不启用,无需填写 +* 若选择启用,工单状态变更后会发送邮件通知, 邮件通知启停不会影响其他通知方式,须填写以下信息 + * SMTP 地址:SMTP 服务器地址,如 smtp.163.com + * SMTP 端口:SMTP 服务器端口,如 25 + * SMTP 用户名:完整的邮箱用户名 + * SMTP 密码:该用户名的授权码(非邮箱用户密码) + * 确认SMTP密码 + +#### 后续操作 +* 点击测试,输入邮箱地址并确认后,将在邮箱中收到测试邮件; +* 开启邮箱推送方式后,一旦工单状态发生变更,工单相关人员可在账号关联的邮箱中收取工单推送信息。 + + +### 企业微信推送 + +#### 前置操作 +* 用户需要创建一个企业微信应用 +* 需要在该应用中配置企业可信IP + +:::tip +仅白名单内的IP地址可调用企业微信接口,具体配置方法可参考[官方文档](https://developer.work.weixin.qq.com/document/path/95672)。 +::: + +#### 操作步骤 +点击修改,选择是否启用企业微信通知 +* 若选择不启用,无需填写 +* 若选择启用,工单状态变更后会发送企业微信通知, 企业微信通知启停不会影响其他通知方式,须填写以下信息 + * CorpID(微信企业号ID):必填,为企业id + * CorpSecret(CorpID对应密码):必填,为当前应用的密码 + * 企业微信应用ID:必填,为当前应用的agentid + * 是否开启加密传输:若打开加密传输,则推送形式为通知,需要点击查看推送通知详情;若关闭加密传输,则推送形式类似于对话弹窗,无需点击查看详情; + * 代理服务器IP:企业微信代理服务器IP + +#### 后续操作 +* 点击测试, 输入测试用企业微信用户ID, 点击测试; +* 开启企业微信推送方式后,一旦工单状态发生变更,工单相关人员可在账号关联的企业微信账号中收取工单推送信息。 + + +### 飞书推送 + +#### 前置步骤 +* 用户需要创建企业应用, 开通机器人功能,可参考[飞书官方文档](https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot) +* 需要为该应用开启如下权限 +![feishu](img/feishu-syn.png) + +#### 操作步骤 +点击修改,选择是否启用飞书推送通知 +* 若选择不启用,无需填写 +* 若选择启用,工单状态变更后会发送飞书推送通知, 飞书推送通知启停不会影响其他通知方式,须填写以下信息 + * App ID + * App Secret + +:::tip +AppID及Secret来自于[飞书应用凭证](https://open.feishu.cn/document/server-docs/api-call-guide/calling-process/get-access-token) +::: + +#### 后续操作 +* 点击测试, 输入测试用手机号/邮箱,若配置正确,该测试账号将收到一则验证通知; +* 开启飞书推送方式后,一旦工单状态发生变更,工单相关人员可在账号关联的飞书账号中收取工单推送信息。 + + +## 推送结果 + +开启推送后,一旦工单状态发生变更,工单相关人员可在账号关联的第三方应用账号中收取工单推送信息。 + +![result](img/message-result.png) + +:::tip +* 如用户需要在推送消息中查看工单链接,快速跳转至工单详情,则需要在全局配置中设置全局URL地址前缀。 +::: + + +## 实践案例 +以飞书推送为例 + +1. 用户需创建一个飞书应用,参考[前置操作](#前置步骤) + +2. 用户以管理员身份进入SQLE平台,点击系统设置,配置飞书推送信息 + +* 选择启用 +* 填写飞书应用信息 + * App ID:abc_a379a6d3cc78d013 #仅为示例 + * App Secret:feishu9Ygfj4U45nvsSGhb28LiYuVtwb #仅为示例 +* 点击保存 + +3. 用户以管理员身份点击测试 + +:::tip +由于飞书绑定方式支持邮箱及手机,所以SQLE平台在推送消息时,也支持邮箱和手机两种推送方式,用户可根据自身飞书账号的注册方式,选择填入邮箱号或手机号进行测试验证。 +::: + +* 选择手机号,填入信息如:18991911234 #仅为示例 +* 点击`确认`,将向该手机号绑定的飞书账号推送通知 +* 若配置成功,用户可在飞书应用端获得测试通知 +![test](img/feishu-test.png) + +4. 确认审核流程模板中关联的成员:用户点击审核流程模板,查看审核及上线步骤中对应的成员 + +* 如当前流程模板中,审核操作人为t1,上线操作人为admin +![example](img/feishu-example.png) + + +5. 配置关联成员信息 + +* 方式一:用户以管理员身份,点击系统设置中的用户管理,选择对应用户,点击编辑,根据用户实际的飞书绑定信息,修改该用户的手机号/邮箱号; +* 方式二:项目成员登录平台,点击右上角个人信息,根据实际的飞书绑定信息,修改手机号/邮箱号; +![example](img/feishu-example2.png) + +6. 确认推送情况 +* 用户创建一则工单,审核人为t1 +![example](img/feishu-example3.png) +* 此时,成员t1作为待审核人,t1手机号绑定的飞书账号下,收到一则待审核的工单通知; +![example](img/feishu-example4.png) +* 当t1审核通过后,成员admin作为待上线人, admin手机号绑定的飞书账号下,收到一则待上线的工单通知; +![example](img/feishu-example5.png) +* 当admin上线成功后,工单创建人将收到一则工单上线成功的消息; +![example](img/feishu-example6.png) + +根据以上示例,用户可了解飞书消息推送的部分场景。 + + + + + + + diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/process_syn.md b/versioned_docs/version-v2/user-manual/sys-configuration/process_syn.md new file mode 100644 index 00000000..8089d368 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/process_syn.md @@ -0,0 +1,45 @@ +--- +title: 流程对接 +--- + +# 流程对接 +使用流程对接,可将SQLE平台的工单审批操作对接到指定平台,用户在该平台上即可完成工单审核、上线操作,避免在多平台之间切换,当前支持钉钉审批。 + + +## 使用场景 +当用户日常使用钉钉作为办公协作软件时,可配置钉钉审批。配置成功后,即可通过钉钉进行移动端的工单审批操作。 + + +## 操作步骤 + +### 1.创建钉钉应用 +打开[钉钉开发者后台](https://open-dev.dingtalk.com/fe/app#/corp/app),点击右上角的`创建应用`按钮; +![dingding-createproject](img/dingding-createproject.png) + +创建成功后,页面会跳转到应用信息页面,可以获取该应用的AppKey和AppSecret; +![dingding-info](img/dingding-info.png) + +### 2.配置应用权限 +点击该应用的`权限管理`标签,点击`通讯管理`,开通 `企业员工手机号信息`,`成员信息权限`,`根据手机号姓名获取成员信息`的接口访问权限; +![dingding-privilege](img/dingding-privilege.png) + +点击 `OA审批`,开通 `工作流实例写权限`,`工作流模版写权限`,`工作流实例读权限`; +![dingding-oaprivilege](img/dingding-oaprivilege.png) + +### 3.配置SQLE +管理员账号,进入`系统设置`页面,点击`流程对接`,点击`编辑`按钮,选择启用,并填写应用的AppKey和AppSecret信息; +![dingding-sqleinfo](img/dingding-sqleinfo.png) + +配置项目成员的手机号,手机号必须与钉钉账户的手机号相同; +![dingding-telconfig](img/dingding-telconfig.png) + +打开全局配置,配置SQLE的URL地址,配置URL地址后,用户可从钉钉跳转访问SQLE工单详情页面; +![globalurl](img/globalurl.png) + +### 4.利用钉钉进行审批 +当发生工单变化时,工单关联成员可在对应钉钉账号中收到通知,并进行相应的审批操作; +![dingding-flow](img/dingding-flow.png) + + + + diff --git a/versioned_docs/version-v2/user-manual/sys-configuration/webhook.md b/versioned_docs/version-v2/user-manual/sys-configuration/webhook.md new file mode 100644 index 00000000..daf5d7b1 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/sys-configuration/webhook.md @@ -0,0 +1,69 @@ +--- +title: webhook配置 +--- +# webhook配置 +Webhook是用户定义的自定义HTTP回调。它们通常由事件触发,例如SQLE中存在工单状态的变化,则会自动向用户配置的webhook URL发送HTTP请求。 + +### 使用场景 +当用户配置了自定义API服务,想要在API服务中实时获取工单执行状态时,可在系统设置中配置webhook服务。在SQLE中配置回调地址后,工单状态一旦发生变更,即可在API服务中获取状态通知信息,无需定时登录SQLE平台以查询结果。 + +:::tip +当前会触发通知的事件有: + +* 有新工单被创建 +* 工单审核被通过 +* 工单审核被驳回 +* 工单被成功上线 +* 工单上线失败 +::: + +### 前置操作 +用户需在使用的API服务中生成用于接收回调通知的webhook url。 + +:::note +当前webhook url仅支持http格式。 +::: + +### 操作步骤 +1. 以平台管理员账号登录, 进入系统设置-消息推送,选择webhook配置,并点击修改; +2. 选择启用webhook; +3. 填写webhook url:用于工单消息推送的 API 地址; +4. 填写最大重试次数:默认3次,取值范围0-5。如果推送存在失败,每一个事件请求将最多连续3次执行推送,如3次都失败,则不再推送本次事件; +5. 填写重试间隔:默认1秒,取值范围1-5。如果推送存在失败,重试时将以1s的时间间隔进行重试; +6. 填写Token:云服务在发送通知时使用的访问令牌,参考规范:https://datatracker.ietf.org/doc/html/rfc6750; +7. 提交保存配置; + +### 后续步骤 +用户点击“测试”,如配置正确,能在API服务端收到正确的调用测试信息: +"This is a SQLE test notification\nIf you receive this message, it only means that the message can be pushed". + +### 接口文档 +```jsx title="SQLE POST 请求格式" +POST / HTTP/1.1 +Host: 192.168.21.34:8000 +Accept-Encoding: gzip +Authorization: Bearer test123 +Content-Length: 239 +User-Agent: Go-http-client/1.1 + +{"event":"workflow","action":"create","timestamp":"2023-05-18T15:45:25+08:00","payload":{"workflow":{"project_name":"test_project","workflow_id":"1658637666259832832","workflow_subject":"test_workflow","workflow_status":"wait_for_audit"}}} +``` +* "event":当前取值恒为 "workflow"(目前SQLE只支持工单通知); +* "action":可能的取值有 ["create", "approve", "reject", "exec_success", "exec_failed"]。分别对应「工单创建」、「审核通过」、「审核驳回」、「上线成功」、「上线失败」; +* "timestamp":表示请求发出的时间,RFC3339 格式; +* "payload":表示该请求的主要业务内容,目前仅支持工单; +* "workflow":表示该工单的当前信息,与 sqle 后端数据库中记录保持一致; + +### 注意事项 +* 用户配置的 token 会被放置在请求 Header 中的 Authorization 字段。参考规范:https://datatracker.ietf.org/doc/html/rfc6750 。SQLE对token字段没有任何限制。需要接受端根据自身情况决定是否使用 token; +* 接收请求的服务端在收到请求后,需要返回 200 响应。否则 sqle 会打印返回 body 中的文本信息。 +* 在发送测试请求时,请确保接收请求的服务端运行正常。否则可能出现如下问题: +``` +{ + "code": 0, + "message": "ok", + "data": { + "send_error_message": "Post \"http://192.168.21.34:8000\": dial tcp 192.168.21.34:8000: connect: connection refused" + } +} +``` diff --git a/versioned_docs/version-v2/user-manual/user-manager/img/rolelist.png b/versioned_docs/version-v2/user-manual/user-manager/img/rolelist.png new file mode 100644 index 00000000..36968e0c Binary files /dev/null and b/versioned_docs/version-v2/user-manual/user-manager/img/rolelist.png differ diff --git a/versioned_docs/version-v2/user-manual/user-manager/img/usergrouplist.png b/versioned_docs/version-v2/user-manual/user-manager/img/usergrouplist.png new file mode 100644 index 00000000..e2c2a2db Binary files /dev/null and b/versioned_docs/version-v2/user-manual/user-manager/img/usergrouplist.png differ diff --git a/versioned_docs/version-v2/user-manual/user-manager/img/userlist.png b/versioned_docs/version-v2/user-manual/user-manager/img/userlist.png new file mode 100644 index 00000000..84cf0d7e Binary files /dev/null and b/versioned_docs/version-v2/user-manual/user-manager/img/userlist.png differ diff --git a/versioned_docs/version-v2/user-manual/user-manager/intro.md b/versioned_docs/version-v2/user-manual/user-manager/intro.md new file mode 100644 index 00000000..e6f7fd75 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/user-manager/intro.md @@ -0,0 +1,14 @@ +--- +title: 功能说明 +--- + +# 功能说明 +用户中心包含用户管理、用户组管理及角色管理三个方面,由平台管理员操作,涉及用户、用户组的管理及角色权限的配置。 + +* 用户管理:指平台用户的管理,由管理员创建用户或编辑用户基本信息,可参考[用户管理](user.md)。 +* 用户组管理:当需要对一批用户赋予同样权限时,可由管理员创建用户组,将这批用户统一绑定至该用户组下,即可进行统一授权,可参考[用户组管理](user-group.md)。 +* 角色管理:SQLE平台使用角色管理来实现操作权限组合,由管理员创建,可参考[角色管理](role.md)。 + +### 使用场景 +* 在添加项目成员、成员组之前,需要由管理员首先创建平台用户、用户组,项目管理员才可将该用户、用户组添加为项目成员、成员组 +* 为项目成员绑定数据源与角色操作权限前,需要由管理员创建相应权限的角色模板,项目管理员可为成员绑定配置的角色模板 diff --git a/versioned_docs/version-v2/user-manual/user-manager/role.md b/versioned_docs/version-v2/user-manual/user-manager/role.md new file mode 100644 index 00000000..b19e9dcd --- /dev/null +++ b/versioned_docs/version-v2/user-manual/user-manager/role.md @@ -0,0 +1,36 @@ +--- +title: 角色管理 +--- + +# 角色管理 +当需要为用户设置动作权限时,可使用角色管理配置动作组合。 +如用户需要有创建工单、审核工单、SQL查询的动作权限,管理员可以在角色管理创建一个角色,并绑定创建工单、审核工单、SQL查询这三个动作,随后只需将此角色关联至指定成员,即可完成用户的动作权限设置。 + +### 操作步骤 +* 点击顶部导航栏【更多】按钮,点击平台管理栏目下的【用户中心】选项,查看角色管理标签。 +* 点击列表右上角【创建角色】按钮,填写相关信息 + * 角色名 + * 角色描述 + * 选择动作权限:配置该角色所拥有的操作权限,SQLE平台支持的动作权限如下: + + +|权限名|权限码|权限说明| +|--|--|------| +|查看他人工单|20100|当角色拥有该动作权限时,角色可以查看绑定的数据源上其他用户创建的工单| +|创建/编辑工单|20200|当角色拥有该动作权限时,角色可以在绑定的数据源上创建工单| +|工单审批|20300|当审核流程模版中的某个审核步骤指定为允许所有有权限的用户审批时, 拥有此权限的用户将可以审批对应工单| +|审核任务查看|30100|拥有此权限的用户可以查看所有审核任务, 无此权限的用户只能查看自己创建审核任务| +|审核任务创建|30200|拥有此权限的用户可以创建审核任务| +|sql查询|40100|拥有此权限的用户可以上线工单| + +### 执行结果 +可在角色列表查看创建的角色信息 + +![role](img/rolelist.png) + +### 后续步骤 +* 添加成员/成员组:项目管理员在项目中添加成员/成员组时,需要绑定成员/成员组在对应数据源上的角色权限,可参考[成员/成员组管理](../project/group_member.md)。 + +### 更多操作 +* 编辑角色:点击角色列表的「编辑」按钮,编辑角色信息。角色名不可更改,可设置角色禁用,则对应权限不会生效。 +* 删除角色:点击角色列表的「删除」按钮,删除角色信息 diff --git a/versioned_docs/version-v2/user-manual/user-manager/user-group.md b/versioned_docs/version-v2/user-manual/user-manager/user-group.md new file mode 100644 index 00000000..84959b89 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/user-manager/user-group.md @@ -0,0 +1,33 @@ +--- +title: 用户组管理 +--- + +# 用户组管理 +当管理员需要批量管理用户时,可以使用用户组来管理多个相同属性的用户。 比如依照「运维工程师」、「研发工程师」、「项目管理员」进行分别授权与管理。 + +### 操作步骤 +* 点击顶部导航栏【更多】按钮,点击平台管理栏目下的【用户中心】选项,查看用户组管理标签。 +* 点击列表右上角【创建用户组】按钮,填写用户组相关信息 + * 用户组名:必填 + * 用户组描述 + * 绑定用户 + +### 执行结果 +可在用户组列表中查看已创建的用户组列表 +![usergroup](img/usergrouplist.png) + +### 后续步骤 +* 添加项目成员组:项目管理员可进入指定项目,将创建的用户组添加为项目成员组,可参考[成员/成员组管理](../project/group_member.md)。 + +### 更多操作 +* 编辑用户组:用户组名不可修改,其他均可修改。 + * 可设置禁用该用户组,当一个用户组被禁用,用户不会被禁用,但会失去该用户组所关联的数据源及对应角色权限。 +* 删除用户组:点击用户组列表的「删除」按钮,删除用户组信息 + + + + + + + + diff --git a/versioned_docs/version-v2/user-manual/user-manager/user.md b/versioned_docs/version-v2/user-manual/user-manager/user.md new file mode 100644 index 00000000..ab94b843 --- /dev/null +++ b/versioned_docs/version-v2/user-manual/user-manager/user.md @@ -0,0 +1,38 @@ +--- +title: 用户管理 +--- + +# 用户管理 +当需要创建新的用户,或需要由管理员修改用户基本信息时,可以进行用户管理的相关操作。 + +### 操作步骤 +* 点击顶部导航栏【更多】按钮,点击平台管理栏目下的【用户中心】选项,查看用户管理标签。 +* 点击列表右上角【创建用户】按钮,填写用户相关信息 + * 用户名 + * 密码 + * 确认密码 + * 邮箱:若开启邮件推送或飞书推送服务,则将会以邮件形式通知对应用户工单的流转状态 + * 微信id:若开启企业微信推送服务,则将通过企业微信通知对应用户工单的流转状态 + * 平台管理权限:当前可选项为创建项目,若选择该权限,则该用户将具有创建项目的权限 + * 所属用户组:可将用户关联至已创建的用户组中, 如当前还未创建用户组,可以在创建用户组后,通过编辑用户信息修改所属的用户组。 +* 点击提交,完成用户创建 + +### 执行结果 +创建成功后,可在用户列表中查看已创建的用户信息 + +![userlist](img/userlist.png) + +### 后续步骤 +* 创建用户组:创建用户后,可将多个用户绑定在一个用户组中,可参考[用户组管理](user-group.md)。 +* 添加项目成员:项目管理员可进入指定项目,将创建的用户添加为项目成员,可参考[成员/成员组管理](../project/group_member.md)。 + +### 更多操作 +* 编辑用户:点击用户列表的「编辑」按钮,编辑用户信息。其中,用户名不可更改,其他信息项均可更改。 +* 删除用户:点击用户列表的「删除」按钮,删除用户。 +* 修改用户密码:点击用户列表的「更多」按钮,下拉菜单中点击「更修改该用户密码」。 +:::tip +管理员还可以对指定的用户进行「禁用」或者「启用」。 当用户被管理员禁用后,该用户将无法登录,也无法进行任何操作。 管理员用户永远无法禁用自己本身。 +::: + + + diff --git a/versioned_docs/version-v2/website.css b/versioned_docs/version-v2/website.css new file mode 100644 index 00000000..ab51379c --- /dev/null +++ b/versioned_docs/version-v2/website.css @@ -0,0 +1,6 @@ +/* fix https://github.com/GitbookIO/gitbook/issues/1626 */ +.markdown-section table { + table-layout: fixed; + display:block; + overflow-x: auto; +} \ No newline at end of file diff --git a/versioned_sidebars/version-v2-sidebars.json b/versioned_sidebars/version-v2-sidebars.json new file mode 100644 index 00000000..d68d3d4a --- /dev/null +++ b/versioned_sidebars/version-v2-sidebars.json @@ -0,0 +1,294 @@ +{ + "version-v2/tutorialSidebar": [ + { + "type": "doc", + "id": "intro" + }, + { + "type": "doc", + "id": "online-demo" + }, + { + "type": "category", + "label": "产品支持", + "items": [ + { + "type": "doc", + "id": "support/compare" + }, + { + "type": "doc", + "id": "support/community-support" + }, + { + "type": "doc", + "id": "support/commercial-support" + } + ] + }, + "quick-usage", + { + "type": "category", + "label": "安装部署", + "items": [ + + { + "type": "doc", + "id": "deploy-manual/intro" + }, + { + "type": "doc", + "id": "deploy-manual/config" + }, + { + "type": "doc", + "id": "deploy-manual/source" + }, + { + "type": "doc", + "id": "deploy-manual/rpm" + }, + { + "type": "doc", + "id": "deploy-manual/docker" + }, + { + "type": "doc", + "id": "deploy-manual/docker-compose" + }, + { + "type": "doc", + "id": "deploy-manual/cluster" + } + ] + }, + { + "type": "category", + "label": "用户手册", + "items": [ + { + "type": "category", + "label": "项目", + "items": [ + { + "type": "doc", + "id": "user-manual/project/intro" + }, + { + "type": "doc", + "id": "user-manual/project/project_create" + }, + { + "type": "doc", + "id": "user-manual/project/instance-manager" + }, + { + "type": "doc", + "id": "user-manual/project/group_member" + }, + { + "type": "doc", + "id": "user-manual/project/rule-template-manager" + }, + { + "type": "doc", + "id": "user-manual/project/workflow-template-manager" + }, + { + "type": "doc", + "id": "user-manual/project/whitelist-manager" + }, + { + "type": "category", + "label": "工单", + "items": [ + { + "type": "doc", + "id": "user-manual/project/workflow/intro" + }, + { + "type": "doc", + "id": "user-manual/project/workflow/create-workflow" + }, + { + "type": "doc", + "id": "user-manual/project/workflow/audit-workflow" + }, + { + "type": "doc", + "id": "user-manual/project/workflow/exec-workflow" + } + ] + }, + { + "type": "category", + "label": "扫描任务", + "items": [ + { + "type": "doc", + "id": "user-manual/project/audit_task/intro" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/metadata_audit" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/slowlog_audit" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/processlist_audit" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/baiduyunrds" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/mybatis" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/SQLfile_audit" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/java_application_audit" + }, + { + "type": "doc", + "id": "user-manual/project/audit_task/java_agent_audit" + } + ] + } + ] + }, + { + "type": "category", + "label": "系统设置", + "items": [ + { + "type": "doc", + "id": "user-manual/sys-configuration/intro" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/login_syn" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/message_syn" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/process_syn" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/webhook" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/configuration" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/instance_syn" + }, + { + "type": "doc", + "id": "user-manual/sys-configuration/customize" + } + ] + }, + { + "type": "category", + "label": "工作台", + "items": [ + { + "type": "doc", + "id": "user-manual/sql-workbench/introduction" + }, + { + "type": "doc", + "id": "user-manual/sql-workbench/how-to-configure" + }, + { + "type": "doc", + "id": "user-manual/sql-workbench/how-to-use" + } + ] + }, + { + "type": "category", + "label": "用户管理", + "items": [ + { + "type": "doc", + "id": "user-manual/user-manager/intro" + }, + { + "type": "doc", + "id": "user-manual/user-manager/user" + }, + { + "type": "doc", + "id": "user-manual/user-manager/user-group" + }, + { + "type": "doc", + "id": "user-manual/user-manager/role" + } + ] + }, + { + "type": "doc", + "id": "user-manual/customrule" + }, + { + "type": "doc", + "id": "user-manual/operation_records" + }, + { + "type": "doc", + "id": "user-manual/jetbrains" + } + ] + }, + { + "type": "category", + "label": "开发手册", + "items": [ + { + "type": "category", + "label": "数据库审核插件", + "items": [ + { + "type": "doc", + "id": "dev-manual/plugins/intro" + }, + { + "type": "doc", + "id": "dev-manual/plugins/howtouse" + }, + { + "type": "doc", + "id": "dev-manual/plugins/howtodev" + } + ] + } + ] + }, + { + "type": "category", + "label": "FAQ", + "items": [ + { + "type": "doc", + "id": "FAQ/whichdatabase" + } + ] + } + ] +} diff --git a/versions.json b/versions.json new file mode 100644 index 00000000..97b1ae88 --- /dev/null +++ b/versions.json @@ -0,0 +1,3 @@ +[ + "v2" +]