From 640a80297437fdaa5e9ee1650645a28740066d23 Mon Sep 17 00:00:00 2001 From: zoubingwu Date: Tue, 18 Jan 2022 17:23:44 +0800 Subject: [PATCH] dm/ui: finish main features of web ui (#4109) ref pingcap/tiflow#3583 --- .gitignore | 3 + dm/ui/.eslintrc.js | 1 + dm/ui/README.md | 19 +- dm/ui/locales/en.json | 80 +- dm/ui/locales/zh.json | 77 +- dm/ui/package.json | 59 +- dm/ui/public/mockServiceWorker.js | 338 ++++ dm/ui/src/App.tsx | 49 +- .../BatchImportTaskConfig/index.tsx | 250 +++ .../index.tsx} | 2 +- .../components/CreateTaskConfig/BasicInfo.tsx | 90 + .../CreateTaskConfig/EventFilter.tsx | 154 ++ .../CreateTaskConfig/MigrateRule.tsx | 258 +++ .../CreateTaskConfig/SourceInfo.tsx | 176 ++ .../CreateTaskConfig/TargetInfo.tsx | 107 + .../src/components/CreateTaskConfig/index.tsx | 126 ++ .../components/CreateTaskConfig/shared.tsx | 10 + dm/ui/src/i18n.ts | 2 +- dm/ui/src/layouts/Header.tsx | 15 +- dm/ui/src/layouts/SiderMenu.tsx | 106 +- dm/ui/src/main.tsx | 24 +- dm/ui/src/models/api.ts | 2 +- dm/ui/src/models/cluster.ts | 49 + dm/ui/src/models/index.ts | 9 - dm/ui/src/models/source.ts | 147 +- dm/ui/src/models/task.ts | 259 +++ dm/ui/src/models/taskConfig.ts | 67 + dm/ui/src/pages/cluster/member.tsx | 227 +++ dm/ui/src/pages/cluster/relay-log.tsx | 14 + dm/ui/src/pages/index.tsx | 7 + dm/ui/src/pages/migration/source.tsx | 31 +- dm/ui/src/pages/migration/sync-detail.tsx | 62 + dm/ui/src/pages/migration/task-config.tsx | 189 ++ dm/ui/src/pages/migration/task.tsx | 281 +++ dm/ui/src/utils/search.ts | 35 + dm/ui/src/utils/sleep.ts | 4 + dm/ui/vite.config.js | 42 +- dm/ui/yarn.lock | 1740 ++++++++++++----- 38 files changed, 4370 insertions(+), 741 deletions(-) create mode 100644 dm/ui/public/mockServiceWorker.js create mode 100644 dm/ui/src/components/BatchImportTaskConfig/index.tsx rename dm/ui/src/components/{CreateOrUpdateSource.tsx => CreateOrUpdateSource/index.tsx} (98%) create mode 100644 dm/ui/src/components/CreateTaskConfig/BasicInfo.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/EventFilter.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/MigrateRule.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/SourceInfo.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/TargetInfo.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/index.tsx create mode 100644 dm/ui/src/components/CreateTaskConfig/shared.tsx create mode 100644 dm/ui/src/models/cluster.ts create mode 100644 dm/ui/src/models/task.ts create mode 100644 dm/ui/src/models/taskConfig.ts create mode 100644 dm/ui/src/pages/cluster/member.tsx create mode 100644 dm/ui/src/pages/cluster/relay-log.tsx create mode 100644 dm/ui/src/pages/index.tsx create mode 100644 dm/ui/src/pages/migration/sync-detail.tsx create mode 100644 dm/ui/src/pages/migration/task-config.tsx create mode 100644 dm/ui/src/pages/migration/task.tsx create mode 100644 dm/ui/src/utils/search.ts create mode 100644 dm/ui/src/utils/sleep.ts diff --git a/.gitignore b/.gitignore index 04626eb186d..50acc886b4e 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,9 @@ dumped_data/* *-coverage.xml *-junit-report.xml dm/ui/dist +dm/ui/src/routes.tsx +dm/ui/src/mock.ts +dm/ui/stats.html # npm dependencies node_modules diff --git a/dm/ui/.eslintrc.js b/dm/ui/.eslintrc.js index 2e9db2f7a25..2b9b96096a2 100644 --- a/dm/ui/.eslintrc.js +++ b/dm/ui/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = { extends: ['@ti-fe/eslint-config'], + ignorePatterns: ['src/routes.tsx'], env: { // Your custom env variables, e.g., browser: true, jest: true }, diff --git a/dm/ui/README.md b/dm/ui/README.md index 24bc4d5f126..94bbdd659ba 100644 --- a/dm/ui/README.md +++ b/dm/ui/README.md @@ -1,7 +1,9 @@ -## DM Web UI +# DM Web UI Web UI for TiDB Data Migration Platform, built with TypeScript and React. +## Development + To start to develop it you will need Nodejs environment ready and yarn installed as package manager, following scripts will help you to get started: ```bash @@ -16,3 +18,18 @@ yarn build ``` See `package.json` for more scripts. + +By default, it talks to local DM Server through `http://localhost:8261/api/v1/...`, so you will need to have it running in your machine first. + +Make sure you have Golang installed since we'll need to build the server binaries from source, at the root of this project, run `make dm-worker` and `make dm-master` to get them. + +Create conf file for them, there are plenty of examples in `dm/tests/openapi/conf` directory. The `openapi` option is still experimental and is off by default so make sure you set it to true. + +Then run master and worker with configs you just created respectively. For example: + +```bash +./bin/dm-master -config path/to/conf.yaml +./bin/dm-worker -config path/to/conf.yaml +``` + +Now you can start the front-end development server with `yarn start`!. diff --git a/dm/ui/locales/en.json b/dm/ui/locales/en.json index 126414b33f9..5ead2ec5ff6 100644 --- a/dm/ui/locales/en.json +++ b/dm/ui/locales/en.json @@ -1,13 +1,29 @@ { "add": "Add", + "add event filter": "Add event filter", + "add migrate rule": "Add migration rule", "add new source": "Add new source", + "add source config": "Add source config", + "address": "address", + "are you sure to offline this master": "Are you sure to offline this master", + "are you sure to offline this worker": "Are you sure to offline this worker", "basic info": "Basics", + "binlog": "binlog", "binlog location": "binlog location", "binlog name": "binlog name", "binlog name or gtid": "binlog name or GTID", + "bound stage": "bound stage", "cancel": "Cancel", "cluster management": "Cluster", - "confirm to delete": "Confirm to delete ", + "collecting import results": "Collecting import results", + "confirm to delete source": "Confirm to delete source", + "confirm to delete task?": "Confirm to delete task?", + "confirm to pause task?": "Confirm to pause task?", + "confirm to resume task?": "Confirm to resume task?", + "consistency requirement": "Consistency requirement", + "create": "Create", + "data dir": "Data dir", + "database": "Database", "delete": "Delete", "deleted": "Deleted!", "deleting": "Deleting...", @@ -17,32 +33,90 @@ "enable gtid": "Enable GTID", "enable relay": "Enable relay", "enabled": "Enabled", + "event filter": "Event filter", + "event filter ignore event": "Ignore event", + "event filter ignore sql": "Ignore SQL", + "event filter name": "Name", + "event filter name is required": "Event filter name is required", + "event filter name should be unique": "Event filter name should be unique", "export": "Export", + "export concurrency": "Export concurrency", + "full migrate config": "Full replication config", + "gtid": "gtid", "host": "Host", + "host bad format": "Host has bad format", "host is required": "Host is required", "import": "Import", + "import all task config of dm cluster to web ui": "Import all task config of dm cluster to Web UI", + "import concurrency": "Import concurrency", + "import failed": "Import failed", + "import finished with {{success_count}} success and {{fail_count}} failures": "Import finished with {{success_count}} success and {{fail_count}} failures", + "import runtime task config": "Import runtime task configs", + "import task config": "Import task config", + "incremental migrate config": "Incremental replication config", "ip": "IP", + "is leader": "Leader", "member list": "Members", + "meta db": "Meta db", + "migrate rules": "Migration rules", "migration": "Migration", "name": "Name", + "next": "Next", + "offline": "offline", + "on duplicate behavior": "On duplicate behavior", + "online schema change": "Online Schema Change", "operations": "Operations", - "passowrd is required": "Passowrd is required", + "overwrite exist task config": "Overwrite existing task config", "password": "Password", + "password is required": "Password is required", + "pause": "Pause", + "please check the log": "Please check the log", "port": "Port", "port is required": "Port is required", + "previous": "Previous", + "processing imports": "Processing imports", + "reading task list": "Reading task list", + "refresh": "Refresh", "relay config (optional)": "Relay log (optional)", "relay log": "Relay Log", + "request success": "Request success", + "requesting": "Requesting", + "resume": "Resume", "save": "Save", "saved": "Saved!", "saving": "Saving...", "search placeholder": "Search...", + "somthing went wrong with the server": "Somthing went wrong with the server", + "source": "Source", + "source info": "Source info", "source list": "Source", "source name": "Source name", "source name is required": "Source name is required", + "start import": "Start import", + "status": "Status", + "sync config": "Replication config", "sync detail": "Sync Detail", + "synchronous concurrency": "Sync concurrency", + "table": "Table", + "target": "Target", + "target info": "Target info", "task config": "Task Config", + "task detail": "task detail", "task list": "Task", + "task mode": "Mode", + "task name": "Name", + "task name is required": "Task name is required", + "task shard mode": "Shard mode", "tls config (optional)": "TLS (optional)", + "transaction batch": "Transaction batch", + "type": "Type", "user name": "User", - "user name is required": "User name is required" + "user name is required": "User name is required", + "view": "View", + "{{count}} filters": "{{count}} filter", + "{{count}} filters_plural": "{{count}} filters", + "{{count}} rules": "{{count}} rule", + "{{count}} rules_plural": "{{count}} rules", + "{{val}} and other {{count}}": "{{val}}", + "{{val}} and other {{count}}_plural": "{{val}} and {{count}} others" } diff --git a/dm/ui/locales/zh.json b/dm/ui/locales/zh.json index 802daa4e19b..c1994751802 100644 --- a/dm/ui/locales/zh.json +++ b/dm/ui/locales/zh.json @@ -1,13 +1,29 @@ { "add": "添加", + "add event filter": "添加过滤器", + "add migrate rule": "添加同步规则", "add new source": "添加上游", + "add source config": "添加上游配置", + "address": "地址", + "are you sure to offline this master": "确定要下线此主节点吗?", + "are you sure to offline this worker": "确定要下线此从节点吗?", "basic info": "基本信息", + "binlog": "binlog", "binlog location": "binlog 位置", "binlog name": "binlog 名称", "binlog name or gtid": "binlog 名称或 GTID", + "bound stage": "bound stage", "cancel": "取消", "cluster management": "集群管理", - "confirm to delete": "确认删除 ", + "collecting import results": "汇总收集导入结果", + "confirm to delete source": "确认删除上游", + "confirm to delete task?": "确认删除任务?", + "confirm to pause task?": "确认暂停任务?", + "confirm to resume task?": "确认恢复任务?", + "consistency requirement": "一致性要求", + "create": "创建", + "data dir": "数据存储路径", + "database": "数据库", "delete": "删除", "deleted": "已删除", "deleting": "删除中...", @@ -17,32 +33,87 @@ "enable gtid": "启用 GTID", "enable relay": "启用 Relay log", "enabled": "已启用", + "event filter": "事件过滤", + "event filter ignore event": "忽略事件", + "event filter ignore sql": "忽略 SQL", + "event filter name": "过滤器名称", + "event filter name is required": "过滤器名称不能为空", + "event filter name should be unique": "过滤器名称必须唯一", "export": "导出", + "export concurrency": "导出并发数", + "full migrate config": "全量同步配置", + "gtid": "GTID", "host": "IP", + "host bad format": "IP 格式不正确", "host is required": "IP 不能为空", "import": "导入", + "import all task config of dm cluster to web ui": "导入集群所有任务配置到 Web 平台", + "import concurrency": "导入并发数", + "import failed": "导入失败", + "import finished with {{success_count}} success and {{fail_count}} failures": "导入完成,成功 {{success_count}} 条,失败 {{fail_count}} 条", + "import runtime task config": "导入运行时任务配置", + "import task config": "导入任务配置", + "incremental migrate config": "增量同步配置", "ip": "IP", + "is leader": "是否主节点", "member list": "成员列表", + "meta db": "Meta 数据库", + "migrate rules": "同步规则", "migration": "数据迁移", "name": "名称", + "next": "下一步", + "offline": "下线", + "on duplicate behavior": "冲突数据行为", + "online schema change": "Online Schema Change", "operations": "操作", - "passowrd is required": "密码不能为空", + "overwrite exist task config": "覆盖已存在的任务配置", "password": "密码", + "password is required": "密码不能为空", + "pause": "暂停", + "please check the log": "请查看日志", "port": "端口", "port is required": "端口不能为空", + "previous": "上一步", + "processing imports": "正在导入中", + "reading task list": "读取任务列表", + "refresh": "刷新", "relay config (optional)": "Relay 配置 (可选)", "relay log": "Relay 日志", + "request success": "请求成功", + "requesting": "请求中", + "resume": "恢复", "save": "保存", "saved": "已保存", "saving": "保存中...", "search placeholder": "搜索", + "somthing went wrong with the server": "服务器开小差了", + "source": "上游", + "source info": "上游信息", "source list": "上游配置", "source name": "名称", "source name is required": "名称不能为空", + "start import": "开始导入", + "status": "状态", + "sync config": "同步配置", "sync detail": "同步详情", + "synchronous concurrency": "同步并发数", + "table": "表", + "target": "下游", + "target info": "下游信息", "task config": "任务配置", + "task detail": "任务详情", "task list": "任务列表", + "task mode": "任务模式", + "task name": "任务名称", + "task name is required": "任务名称不能为空", + "task shard mode": "协调模式", "tls config (optional)": "TLS 配置 (可选)", + "transaction batch": "事物批次", + "type": "类型", "user name": "用户名", - "user name is required": "用户名不能为空" + "user name is required": "用户名不能为空", + "view": "查看", + "{{count}} filters_0": "{{count}} 条", + "{{count}} rules_0": "{{count}} 条", + "{{val}} and other {{count}}_0": "{{val}} 等 {{count}} 个" } diff --git a/dm/ui/package.json b/dm/ui/package.json index 9d92e48298b..7eea4f1c5a3 100644 --- a/dm/ui/package.json +++ b/dm/ui/package.json @@ -3,8 +3,9 @@ "version": "0.1.0", "scripts": { "start": "vite", + "start:mock": "vite --mode=mock", "build": "vite build", - "type-check": "tsc --noEmit", + "type-check": "vite optimize --force && tsc --noEmit", "serve": "vite preview", "fmt": "prettier src --write", "lint": "eslint --ext .tsx,.ts src/", @@ -12,47 +13,57 @@ }, "dependencies": { "@ant-design/icons": "^4.7.0", - "@reduxjs/toolkit": "^1.6.2", - "ahooks": "^2.10.12", - "antd": "^4.17.2", + "@reduxjs/toolkit": "^1.7.0", + "ahooks": "^3.0.1", + "antd": "^4.17.3", "clsx": "^1.1.1", - "i18next": "^21.5.3", + "fuse.js": "^6.5.3", + "i18next": "^21.6.0", "i18next-browser-languagedetector": "^6.1.2", "lodash": "^4.17.21", + "rc-queue-anim": "^2.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-i18next": "^11.14.3", + "react-i18next": "^11.15.1", "react-redux": "^7.2.6", - "react-router-dom": "^6.0.2", + "react-router-dom": "^6.1.1", + "react-syntax-highlighter": "^15.4.5", "reset-css": "^5.0.1" }, "devDependencies": { + "@faker-js/faker": "^5.5.3", "@ti-fe/cli": "^0.13.0", "@ti-fe/eslint-config": "^0.3.1", "@ti-fe/prettier-config": "^1.0.3", - "@types/lodash": "^4.14.177", - "@types/node": "^16.11.7", - "@types/react": "^17.0.34", + "@types/lodash": "^4.14.178", + "@types/node": "^16.11.12", + "@types/react": "^17.0.37", "@types/react-dom": "^17.0.11", - "@types/redux-logger": "^3.0.9", - "@typescript-eslint/eslint-plugin": "^5.3.1", - "@typescript-eslint/parser": "^5.3.1", - "@vitejs/plugin-react-refresh": "^1.3.6", - "eslint": "^8.2.0", + "@types/react-syntax-highlighter": "^13.5.2", + "@typescript-eslint/eslint-plugin": "^5.7.0", + "@typescript-eslint/parser": "^5.7.0", + "@vitejs/plugin-react": "^1.1.3", + "eslint": "^8.4.1", "husky": "^7.0.4", "i18next-scanner": "^3.1.0", "is-ci": "^3.0.1", "less": "^4.1.2", - "lint-staged": "^12.0.1", - "prettier": "^2.4.1", - "redux-logger": "^3.0.6", - "typescript": "4.3.5", - "vite": "^2.6.14", + "lint-staged": "^12.1.2", + "msw": "^0.36.3", + "msw-auto-mock": "^0.5.0", + "prettier": "^2.5.1", + "rollup-plugin-visualizer": "^5.5.2", + "typescript": "4.5.4", + "vite": "^2.7.10", "vite-plugin-i18next-scanner": "^0.4.0", - "vite-plugin-imp": "^2.0.10", - "vite-plugin-windicss": "^1.5.1", + "vite-plugin-imp": "^2.0.11", + "vite-plugin-next-react-router": "^0.6.1", + "vite-plugin-windicss": "^1.5.4", "vite-tsconfig-paths": "^3.3.17", - "windicss": "^3.2.1" + "windicss": "^3.3.0" }, - "license": "Apache-2.0" + "license": "Apache-2.0", + "msw": { + "workerDirectory": "public" + } } diff --git a/dm/ui/public/mockServiceWorker.js b/dm/ui/public/mockServiceWorker.js new file mode 100644 index 00000000000..47f3de8bb24 --- /dev/null +++ b/dm/ui/public/mockServiceWorker.js @@ -0,0 +1,338 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (0.36.3). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '02f4ad4a2797f85668baf196e553d929' +const bypassHeaderName = 'x-msw-bypass' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + return self.skipWaiting() +}) + +self.addEventListener('activate', async function (event) { + return self.clients.claim() +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll() + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter(client => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +// Resolve the "main" client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll() + + return allClients + .filter(client => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find(client => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: serializeHeaders(clonedResponse.headers), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +async function getResponse(event, client, requestId) { + const { request } = event + const requestClone = request.clone() + const getOriginalResponse = () => fetch(requestClone) + + // Bypass mocking when the request client is not active. + if (!client) { + return getOriginalResponse() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return await getOriginalResponse() + } + + // Bypass requests with the explicit bypass header + if (requestClone.headers.get(bypassHeaderName) === 'true') { + const cleanRequestHeaders = serializeHeaders(requestClone.headers) + + // Remove the bypass header to comply with the CORS preflight check. + delete cleanRequestHeaders[bypassHeaderName] + + const originalRequest = new Request(requestClone, { + headers: new Headers(cleanRequestHeaders), + }) + + return fetch(originalRequest) + } + + // Send the request to the client-side MSW. + const reqHeaders = serializeHeaders(request.headers) + const body = await request.text() + + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: reqHeaders, + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body, + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_SUCCESS': { + return delayPromise( + () => respondWithMock(clientMessage), + clientMessage.payload.delay + ) + } + + case 'MOCK_NOT_FOUND': { + return getOriginalResponse() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.payload + const networkError = new Error(message) + networkError.name = name + + // Rejecting a request Promise emulates a network error. + throw networkError + } + + case 'INTERNAL_ERROR': { + const parsedBody = JSON.parse(clientMessage.payload.body) + + console.error( + `\ +[MSW] Uncaught exception in the request handler for "%s %s": + +${parsedBody.location} + +This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses\ +`, + request.method, + request.url + ) + + return respondWithMock(clientMessage) + } + } + + return getOriginalResponse() +} + +self.addEventListener('fetch', function (event) { + const { request } = event + const accept = request.headers.get('accept') || '' + + // Bypass server-sent events. + if (accept.includes('text/event-stream')) { + return + } + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + const requestId = uuidv4() + + return event.respondWith( + handleRequest(event, requestId).catch(error => { + if (error.name === 'NetworkError') { + console.warn( + '[MSW] Successfully emulated a network error for the "%s %s" request.', + request.method, + request.url + ) + return + } + + // At this point, any exception indicates an issue with the original request/response. + console.error( + `\ +[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, + request.method, + request.url, + `${error.name}: ${error.message}` + ) + }) + ) +}) + +function serializeHeaders(headers) { + const reqHeaders = {} + headers.forEach((value, name) => { + reqHeaders[name] = reqHeaders[name] + ? [].concat(reqHeaders[name]).concat(value) + : value + }) + return reqHeaders +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = event => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(JSON.stringify(message), [channel.port2]) + }) +} + +function delayPromise(cb, duration) { + return new Promise(resolve => { + setTimeout(() => resolve(cb()), duration) + }) +} + +function respondWithMock(clientMessage) { + return new Response(clientMessage.payload.body, { + ...clientMessage.payload, + headers: clientMessage.payload.headers, + }) +} + +function uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0 + const v = c == 'x' ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) +} diff --git a/dm/ui/src/App.tsx b/dm/ui/src/App.tsx index 24306f18ad5..8dead0439ab 100644 --- a/dm/ui/src/App.tsx +++ b/dm/ui/src/App.tsx @@ -1,52 +1,9 @@ -import React, { lazy } from 'react' +import React from 'react' import { Provider } from 'react-redux' -import { BrowserRouter, RouteObject, useRoutes } from 'react-router-dom' +import { BrowserRouter, useRoutes } from 'react-router-dom' +import { routes } from '~/routes' import { store } from '~/models' -import Layout from '~/pages/_layout' - -const SourceList = lazy(() => import('~/pages/migration/source')) - -const routes: RouteObject[] = [ - { - path: '/', - element: , - children: [ - { - index: true, - element:
TODO
, - }, - { - path: '/migration/task', - element:
TODO
, - }, - { - path: '/migration/source', - element: , - }, - { - path: '/migration/task-config', - element:
TODO
, - }, - { - path: '/migration/sync-detail', - element:
TODO
, - }, - { - path: '/cluster/member', - element:
TODO
, - }, - { - path: '/cluster/relay-log', - element:
TODO
, - }, - { - path: '*', - element:
Page not found...
, - }, - ], - }, -] function RoutingApp() { const elements = useRoutes(routes) diff --git a/dm/ui/src/components/BatchImportTaskConfig/index.tsx b/dm/ui/src/components/BatchImportTaskConfig/index.tsx new file mode 100644 index 00000000000..468c72491af --- /dev/null +++ b/dm/ui/src/components/BatchImportTaskConfig/index.tsx @@ -0,0 +1,250 @@ +import React, { useCallback, useEffect, useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' +import { clamp } from 'lodash' +import { useSafeState } from 'ahooks' +import QueueAnim from 'rc-queue-anim' +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' +import { ghcolors } from 'react-syntax-highlighter/dist/esm/styles/prism' + +import { Button, Radio, Checkbox, Steps, Alert, StepProps } from '~/uikit' +import { + BatchImportTaskConfigResponse, + useDmapiBatchImportTaskConfigMutation, +} from '~/models/taskConfig' +import { sleep } from '~/utils/sleep' + +const { Step } = Steps + +const BlinkingText: React.FC<{ text: string; active: boolean }> = ({ + text, + active, +}) => { + const [count, setCount] = useSafeState(1) + let timer = useRef() + + useEffect(() => { + if (active) { + timer.current = window.setInterval(() => setCount(c => c + 1), 300) + } + return () => { + if (timer.current) { + clearInterval(timer.current) + } + } + }, [active]) + + if (!active) { + return {text} + } + return {text + '.'.repeat(count % 4)} +} + +const BatchImportTaskConfig: React.FC = () => { + const [t] = useTranslation() + const [percent, setPercent] = useSafeState(0) + const [error, setError] = useState() + const [importResult, setImportResult] = + useState() + const [currentStep, setCurrentStep] = useSafeState(-1) + const [overwrite, setOverwrite] = useState(false) + const [batchImportTaskConfig] = useDmapiBatchImportTaskConfigMutation() + const timerId = useRef() + const stopTimer = useRef(false) + + const calcStepStatus = (thisStep: number): Pick => { + if (currentStep === thisStep) { + if (currentStep === 1 && error) { + return { status: 'error' } + } + return { status: 'process' } + } + if (currentStep > thisStep) return { status: 'finish' } + return { status: 'wait' } + } + + const handleStartImport = () => { + setCurrentStep(0) + handleStartPlaceboProgress() + } + + const increment = () => { + timerId.current = window.setTimeout(increment, Math.random() * 100) + + setPercent(percent => { + if (percent >= 100) { + return 100 + } + let n = percent + let amount: number + if (n >= 0 && n < 20) { + amount = 1 + } else if (n >= 20 && n < 50) { + amount = 4 + } else if (n >= 50 && n < 80) { + amount = 2 + } else if (n >= 80 && n < 99) { + amount = 5 + } else { + amount = 0 + } + n = clamp(n + amount, 0, 80) // clamp here to make sure awalys 0 <= n <= 80 + return n + }) + } + + const waitLittleWhileThenGoToNextStep = async () => { + await sleep(600) // everytime we wait for little while before continue to next step for better ux + setCurrentStep(c => c + 1) + } + + const clearTimer = () => { + stopTimer.current = true + clearTimeout(timerId.current) + } + + const handleStartPlaceboProgress = useCallback(async () => { + // phase 1 + increment() + await sleep(1000 * Math.random() + 300) + setPercent(100) + await waitLittleWhileThenGoToNextStep() + + // phase 2 + setPercent(0) + try { + await sleep(3000) + const res = await batchImportTaskConfig({ overwrite }).unwrap() + setImportResult(res) + } catch (e: any) { + setError(e) + clearTimer() + await sleep(600) + setCurrentStep(4) + return + } + + setPercent(100) + await waitLittleWhileThenGoToNextStep() + + // phase 3 + setPercent(0) + await sleep(1000) + clearTimer() + setPercent(100) + + await waitLittleWhileThenGoToNextStep() + }, [percent, error]) + + useEffect(() => { + return () => { + if (timerId.current) { + clearTimeout(timerId.current) + } + } + }, []) + + return ( +
+ {currentStep === -1 && ( + <> +
+ + {t('import runtime task config')} + +

+ {t('import all task config of dm cluster to web ui')} +

+
+
+ setOverwrite(e.target.checked)}> + {t('overwrite exist task config')} + +
+ +
+ +
+ + )} + + {currentStep >= 0 && currentStep < 3 && ( + + + } + /> + + } + /> + + } + /> + + )} + + + {currentStep >= 3 + ? [ +
+ {error ? ( +
+ +
+ ) : ( +
+ + + + {importResult?.failed_task_list + ? JSON.stringify(importResult.failed_task_list, null, 2) + : 'null'} + +
+ )} +
, + ] + : null} +
+
+ ) +} + +export default BatchImportTaskConfig diff --git a/dm/ui/src/components/CreateOrUpdateSource.tsx b/dm/ui/src/components/CreateOrUpdateSource/index.tsx similarity index 98% rename from dm/ui/src/components/CreateOrUpdateSource.tsx rename to dm/ui/src/components/CreateOrUpdateSource/index.tsx index 9e43bb8b897..895ee6fdc21 100644 --- a/dm/ui/src/components/CreateOrUpdateSource.tsx +++ b/dm/ui/src/components/CreateOrUpdateSource/index.tsx @@ -91,7 +91,7 @@ const CreateOrUpdateSource: React.FC<{ diff --git a/dm/ui/src/components/CreateTaskConfig/BasicInfo.tsx b/dm/ui/src/components/CreateTaskConfig/BasicInfo.tsx new file mode 100644 index 00000000000..c61999614ff --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/BasicInfo.tsx @@ -0,0 +1,90 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +import { useNavigate } from 'react-router-dom' + +import { Form, Input, Select, Switch, Button } from '~/uikit' +import { OnDuplicateBehavior, TaskMode, TaskShardMode } from '~/models/task' +import { StepCompnent } from '~/components/CreateTaskConfig/shared' + +const BasicInfo: StepCompnent = ({ initialValues }) => { + const [t] = useTranslation() + const navigate = useNavigate() + + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +export default BasicInfo diff --git a/dm/ui/src/components/CreateTaskConfig/EventFilter.tsx b/dm/ui/src/components/CreateTaskConfig/EventFilter.tsx new file mode 100644 index 00000000000..0c732480a4f --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/EventFilter.tsx @@ -0,0 +1,154 @@ +import React, { useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { pick } from 'lodash' + +import { Form, Button, Card, Input, Select } from '~/uikit' +import { FileAddOutlined, CloseOutlined } from '~/uikit/icons' +import { StepCompnent } from '~/components/CreateTaskConfig/shared' +import { supportedIgnorableEvents, TaskFormData } from '~/models/task' + +const itemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, +} + +const EventFilters: StepCompnent = ({ prev, initialValues }) => { + const [t] = useTranslation() + const [form] = Form.useForm() + + const handleSubmit = useCallback(() => { + const rules = form.getFieldValue( + 'binlog_filter_rule_array' + ) as TaskFormData['binlog_filter_rule_array'] + + if (rules && rules.length > 0) { + form.setFieldsValue({ + binlog_filter_rule_array: rules, + binlog_filter_rule: rules.reduce( + (acc, next) => ({ + ...acc, + [next.name]: pick(next, ['ignore_event', 'ignore_sql']), + }), + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + {} as TaskFormData['binlog_filter_rule'] + ), + }) + } + + form.submit() + }, [form]) + + return ( +
+
+ + + {(fields, { add, remove }) => ( + <> + {fields.map(field => ( + + remove(field.name)} + className="!text-gray-500 absolute top-2 right-2 group-hover:opacity-100 opacity-0 transition" + /> + + { + const existingRules = (form.getFieldValue( + 'binlog_filter_rule_array' + ) as TaskFormData['binlog_filter_rule_array'])!.map( + i => i.name + ) + + return existingRules.filter(name => name === value) + .length >= 2 + ? Promise.reject( + new Error( + t('event filter name should be unique') + ) + ) + : Promise.resolve() + }, + }, + ]} + > + + + + + + + + + setCurrentSource(val as string)} + > + {data?.data.map(source => ( + + {source.source_name} + + ))} + + + + { + setCascaderValue(value) + const dbPattern = createPattern([ + ...new Set( + value.map((item: string[]) => item[0]) + ), + ] as string[]) + const tablePattern = createPattern([ + ...new Set( + value + .map((item: string[]) => item[1]) + .filter(Boolean) + ), + ] as string[]) + const newData = [ + ...form.getFieldValue('table_migrate_rule'), + ] + newData[field.key] = { + ...newData[field.key], + source: { + ...newData[field.key].source, + schema: dbPattern, + table: tablePattern, + }, + } + form.setFieldsValue({ + table_migrate_rule: newData, + }) + }} + > + {isFetching ? ( + + ) : ( + + )} + + } + /> + + + + +
+ +
+ +
+ +
+

{t('event filter')}

+ + + +
+ +
+ +
+ +
+

{t('target')}

+ + + + + + + + + +
+ + + ))} + + + + )} + + + + + + + +
+ ) +} + +export default MigrateRule diff --git a/dm/ui/src/components/CreateTaskConfig/SourceInfo.tsx b/dm/ui/src/components/CreateTaskConfig/SourceInfo.tsx new file mode 100644 index 00000000000..a3e093712a3 --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/SourceInfo.tsx @@ -0,0 +1,176 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' + +import { + Button, + Collapse, + Form, + Input, + InputNumber, + Select, + Card, +} from '~/uikit' +import { FileAddOutlined, CloseOutlined } from '~/uikit/icons' +import { useDmapiGetSourceListQuery } from '~/models/source' +import { StepCompnent } from '~/components/CreateTaskConfig/shared' + +const formLayout = { + labelCol: { span: 6 }, + wrapperCol: { span: 18 }, +} + +const itemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 20 }, +} + +const SourceInfo: StepCompnent = ({ prev, initialValues }) => { + const [t] = useTranslation() + const { data, isFetching } = useDmapiGetSourceListQuery({ withStatus: false }) + + return ( +
+ + +
+
+

+ {t('full migrate config')} +

+ + + + + + + + + + + + +
+
+

+ {t('incremental migrate config')} +

+ + + + + + +
+
+
+
+ +
+ + {(fields, { add, remove }) => ( + <> + {fields.map(field => ( + + remove(field.name)} + className="!text-gray-500 absolute top-2 right-2 group-hover:opacity-100 opacity-0 transition" + /> + + + + + + + + + + + + + + + + + + + + + ))} + + + + )} + +
+ + + + + +
+ ) +} + +export default SourceInfo diff --git a/dm/ui/src/components/CreateTaskConfig/TargetInfo.tsx b/dm/ui/src/components/CreateTaskConfig/TargetInfo.tsx new file mode 100644 index 00000000000..231182b9ffb --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/TargetInfo.tsx @@ -0,0 +1,107 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' + +import { Form, Input, Button } from '~/uikit' +import { StepCompnent } from '~/components/CreateTaskConfig/shared' + +const IPv4Pattern = + /\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b/ + +const TargetInfo: StepCompnent = ({ prev, initialValues }) => { + const [t] = useTranslation() + return ( +
+
+
+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + +
+
+ + + + +
+ ) +} + +export default TargetInfo diff --git a/dm/ui/src/components/CreateTaskConfig/index.tsx b/dm/ui/src/components/CreateTaskConfig/index.tsx new file mode 100644 index 00000000000..9d2e7122b95 --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/index.tsx @@ -0,0 +1,126 @@ +import React, { useState, useCallback } from 'react' +import { useTranslation } from 'react-i18next' +import { merge } from 'lodash' +import { useNavigate } from 'react-router-dom' + +import { Card, Form, Steps, message } from '~/uikit' +import { + OnDuplicateBehavior, + Task, + TaskFormData, + TaskMode, +} from '~/models/task' +import BasicInfo from '~/components/CreateTaskConfig/BasicInfo' +import SourceInfo from '~/components/CreateTaskConfig/SourceInfo' +import TargetInfo from '~/components/CreateTaskConfig/TargetInfo' +import EventFilters from '~/components/CreateTaskConfig/EventFilter' +import MigrateRule from '~/components/CreateTaskConfig/MigrateRule' +import { useDmapiCreateTaskConfigMutation } from '~/models/taskConfig' + +const { Step } = Steps + +const defaultValue = { + name: '', + task_mode: TaskMode.ALL, + meta_schema: '', + enhance_online_schema_change: false, + on_duplicate: OnDuplicateBehavior.ERROR, + target_config: { + host: '', + port: 3306, + user: '', + password: '', + }, + source_config: { + source_conf: [], + }, + table_migrate_rule: [], +} + +const stepComponents = [ + BasicInfo, + SourceInfo, + TargetInfo, + EventFilters, + MigrateRule, +] + +const CreateTaskConfig: React.FC = () => { + const [t] = useTranslation() + const navigate = useNavigate() + const [currentStep, setCurrentStep] = useState(0) + const [taskData, setTaskData] = useState(defaultValue) + const [createTaskConfig] = useDmapiCreateTaskConfigMutation() + + const goNextStep = useCallback(() => { + setCurrentStep(c => c + 1) + }, []) + const goPrevStep = useCallback(() => { + setCurrentStep(c => c - 1) + }, []) + + const handleSubmit = useCallback( + taskData => { + const key = 'createTaskConfig-' + Date.now() + message.loading({ content: t('saving'), key }) + const payload = { ...taskData } + delete payload.binlog_filter_rule_array + if ( + Object.values(payload.target_config.security).filter(Boolean).length === + 0 + ) { + delete payload.target_config.security + } + createTaskConfig(payload as Task) + .unwrap() + .then(() => { + message.success({ content: t('saved'), key }) + navigate('#') + }) + .catch(() => { + message.destroy(key) + }) + }, + [taskData] + ) + + const getStepComponent = () => { + const Comp = stepComponents[currentStep] + return React.cloneElement(, { + prev: goPrevStep, + next: goNextStep, + submit: handleSubmit, + initialValues: taskData, + }) + } + + return ( + + + + + + + + +
+ { + const nextTaskData = merge({}, taskData, values) + setTaskData(nextTaskData) + + if (currentStep === stepComponents.length - 1) { + handleSubmit(nextTaskData) + } else { + goNextStep() + } + }} + > + {getStepComponent()} + +
+
+ ) +} + +export default CreateTaskConfig diff --git a/dm/ui/src/components/CreateTaskConfig/shared.tsx b/dm/ui/src/components/CreateTaskConfig/shared.tsx new file mode 100644 index 00000000000..b5cb9ae2e7e --- /dev/null +++ b/dm/ui/src/components/CreateTaskConfig/shared.tsx @@ -0,0 +1,10 @@ +import React from 'react' + +import { TaskFormData } from '~/models/task' + +export type StepCompnent = React.FC<{ + prev?: () => void + next?: () => void + submit?: (values: TaskFormData) => void + initialValues?: TaskFormData +}> diff --git a/dm/ui/src/i18n.ts b/dm/ui/src/i18n.ts index 3cceb646f23..a6b7713552c 100644 --- a/dm/ui/src/i18n.ts +++ b/dm/ui/src/i18n.ts @@ -18,7 +18,7 @@ const resources = Object.keys(translations).reduce( ) const i18nextOptions = { - lng: JSON.parse(localStorage.getItem('lang') ?? '') || 'en', + lng: JSON.parse(localStorage.getItem('lang') ?? 'null') || 'en', fallbackLng: 'en', interpolation: { escapeValue: false, diff --git a/dm/ui/src/layouts/Header.tsx b/dm/ui/src/layouts/Header.tsx index 21c704e50b4..6bd725db127 100644 --- a/dm/ui/src/layouts/Header.tsx +++ b/dm/ui/src/layouts/Header.tsx @@ -6,11 +6,18 @@ import { Select, Space } from '~/uikit' export default function HeaderNav() { const { i18n } = useTranslation() - const [lang, setLang] = useLocalStorageState<'en' | 'zh'>('lang', 'en') + const [lang, setLang] = useLocalStorageState<'en' | 'zh'>('lang', { + defaultValue: 'en', + }) - const handleLangChange = useCallback(value => { - i18n.changeLanguage(value).then(() => setLang(value)) - }, []) + const handleLangChange = useCallback( + value => { + i18n.changeLanguage(value).then(() => { + setLang(value) + }) + }, + [i18n] + ) return (
diff --git a/dm/ui/src/layouts/SiderMenu.tsx b/dm/ui/src/layouts/SiderMenu.tsx index e0041c45ce3..caabb4667c9 100644 --- a/dm/ui/src/layouts/SiderMenu.tsx +++ b/dm/ui/src/layouts/SiderMenu.tsx @@ -1,17 +1,52 @@ -import React from 'react' -import { useNavigate, useLocation } from 'react-router-dom' +import React, { useMemo } from 'react' +import { useLocation, useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' +import { groupBy } from 'lodash' +import { pages } from '~/routes' import { Menu } from '~/uikit' import { + ClusterOutlined, DashboardOutlined, ExportOutlined, - ClusterOutlined, } from '~/uikit/icons' import logo from '~/assets/logo.png' +import i18n from '~/i18n' const { SubMenu } = Menu +function usePagesToMenuItems(key: string) { + const groupedPages = useMemo( + () => + groupBy(pages, page => { + if (page.route === '/') { + return page.route + } + + return '/' + page.route.split('/')[1] + }), + [pages] + ) + + return useMemo(() => { + if (!groupedPages[key]) { + return [] + } + return groupedPages[key] + .filter( + page => + page.meta && + typeof page?.meta.index === 'number' && + page.meta.index >= 0 + ) + .sort((a, b) => a.meta!.index - b.meta!.index) + .map(page => ({ + text: page?.meta?.title(), + itemKey: page.route, + })) + }, [groupedPages, i18n.language]) +} + const SiderMenu: React.FC<{ collapsed: boolean }> = ({ collapsed }) => { @@ -19,47 +54,28 @@ const SiderMenu: React.FC<{ const navigate = useNavigate() const loc = useLocation() - const items = [ - { itemKey: '/', text: 'Dashboard', icon: }, - { - itemKey: '/migration', - text: t('migration'), - icon: , - items: [ - { - text: t('task list'), - itemKey: '/migration/task', - }, - { - text: t('source list'), - itemKey: '/migration/source', - }, - { - text: t('task config'), - itemKey: '/migration/task-config', - }, - { - text: t('sync detail'), - itemKey: '/migration/sync-detail', - }, - ], - }, - { - itemKey: '/cluster', - text: t('cluster management'), - icon: , - items: [ - { - text: t('member list'), - itemKey: '/cluster/member', - }, - { - text: t('relay log'), - itemKey: '/cluster/relay-log', - }, - ], - }, - ] + const migrationItems = usePagesToMenuItems('/migration') + const clusterItems = usePagesToMenuItems('/cluster') + + const items = useMemo( + () => [ + { itemKey: '/', text: 'Dashboard', icon: }, + { + itemKey: '/migration', + text: t('migration'), + icon: , + items: migrationItems, + }, + { + itemKey: '/cluster', + text: t('cluster management'), + icon: , + items: clusterItems, + }, + ], + [migrationItems, clusterItems] + ) + return (
@@ -75,7 +91,7 @@ const SiderMenu: React.FC<{ theme="light" mode="inline" defaultSelectedKeys={[loc.pathname]} - defaultOpenKeys={['/migration']} + defaultOpenKeys={['/migration', '/cluster']} > {items.map(item => { if (item.items) { diff --git a/dm/ui/src/main.tsx b/dm/ui/src/main.tsx index e5180d67d55..efba5a13611 100644 --- a/dm/ui/src/main.tsx +++ b/dm/ui/src/main.tsx @@ -8,9 +8,21 @@ import { render } from 'react-dom' import App from './App' -render( - - - , - document.getElementById('root') -) +function mountApp() { + render( + + + , + document.getElementById('root') + ) +} + +if (import.meta.env.MODE === 'mock') { + // @ts-ignore + import('./mock').then(({ startWorker }) => { + startWorker() + mountApp() + }) +} else { + mountApp() +} diff --git a/dm/ui/src/models/api.ts b/dm/ui/src/models/api.ts index 0ce94911be0..204be306f51 100644 --- a/dm/ui/src/models/api.ts +++ b/dm/ui/src/models/api.ts @@ -3,7 +3,7 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' export const api = createApi({ baseQuery: fetchBaseQuery({ baseUrl: '/api/v1' }), endpoints: () => ({}), - tagTypes: ['Source'], + tagTypes: ['Source', 'Task', 'TaskConfig', 'ClusterMaster', 'ClusterWorker'], reducerPath: 'api', }) diff --git a/dm/ui/src/models/cluster.ts b/dm/ui/src/models/cluster.ts new file mode 100644 index 00000000000..22629bd2753 --- /dev/null +++ b/dm/ui/src/models/cluster.ts @@ -0,0 +1,49 @@ +import { api, ListResponse } from './api' + +const injectedRtkApi = api.injectEndpoints({ + endpoints: build => ({ + dmapiGetClusterMasterList: build.query, void>({ + query: () => ({ url: `/cluster/masters` }), + providesTags: ['ClusterMaster'], + }), + dmapiOfflineMasterNode: build.mutation({ + query: masterName => ({ + url: `/cluster/masters/${masterName}`, + method: 'DELETE', + }), + invalidatesTags: ['ClusterMaster'], + }), + dmapiGetClusterWorkerList: build.query, void>({ + query: () => ({ url: `/cluster/workers` }), + providesTags: ['ClusterWorker'], + }), + dmapiOfflineWorkerNode: build.mutation({ + query: workerName => ({ + url: `/cluster/workers/${workerName}`, + method: 'DELETE', + }), + invalidatesTags: ['ClusterWorker'], + }), + }), +}) + +export type ClusterMaster = { + name: string + alive: boolean + leader: boolean + addr: string +} + +export type ClusterWorker = { + name: string + addr: string + bound_stage: string + bound_source_name: string +} + +export const { + useDmapiGetClusterMasterListQuery, + useDmapiGetClusterWorkerListQuery, + useDmapiOfflineMasterNodeMutation, + useDmapiOfflineWorkerNodeMutation, +} = injectedRtkApi diff --git a/dm/ui/src/models/index.ts b/dm/ui/src/models/index.ts index 7ec9f360d02..0f2dd8cff1d 100644 --- a/dm/ui/src/models/index.ts +++ b/dm/ui/src/models/index.ts @@ -4,7 +4,6 @@ import { isRejectedWithValue, } from '@reduxjs/toolkit' import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux' -import { createLogger } from 'redux-logger' import { api } from '~/models/api' import { message } from '~/uikit' @@ -32,14 +31,6 @@ export const store = configureStore({ middlewares.push(api.middleware, rtkQueryErrorLogger) - if (import.meta.env.DEV) { - const logger = createLogger({ - duration: true, - collapsed: true, - }) - middlewares.push(logger) - } - return middlewares }, diff --git a/dm/ui/src/models/source.ts b/dm/ui/src/models/source.ts index ae35525ec7a..763f09b6bc4 100644 --- a/dm/ui/src/models/source.ts +++ b/dm/ui/src/models/source.ts @@ -2,149 +2,88 @@ import { api, ListResponse } from './api' const injectedRtkApi = api.injectEndpoints({ endpoints: build => ({ - dmapiCreateSource: build.mutation< - DmapiCreateSourceApiResponse, - DmapiCreateSourceApiArg - >({ + dmapiCreateSource: build.mutation>({ query: queryArg => ({ url: `/sources`, method: 'POST', body: queryArg, }), + invalidatesTags: ['Source'], }), dmapiGetSourceList: build.query< - DmapiGetSourceListApiResponse, - DmapiGetSourceListApiArg + ListResponse, + { + withStatus?: boolean + } >({ query: queryArg => ({ url: `/sources`, params: { with_status: queryArg.withStatus }, }), + providesTags: ['Source'], }), dmapiDeleteSource: build.mutation< - DmapiDeleteSourceApiResponse, - DmapiDeleteSourceApiArg + { + task_name_list?: string[] + }, + { + sourceName: string + force?: boolean + } >({ query: queryArg => ({ url: `/sources/${queryArg.sourceName}`, method: 'DELETE', params: { force: queryArg.force }, }), + invalidatesTags: ['Source'], }), dmapiGetSourceStatus: build.query< - DmapiGetSourceStatusApiResponse, - DmapiGetSourceStatusApiArg + ListResponse, + { + sourceName: string + } >({ query: queryArg => ({ url: `/sources/${queryArg.sourceName}/status`, }), }), dmapiTransferSource: build.mutation< - DmapiTransferSourceApiResponse, - DmapiTransferSourceApiArg + void, + { + sourceName: string + workerName: string + } >({ query: queryArg => ({ url: `/sources/${queryArg.sourceName}/transfer`, method: 'POST', - body: queryArg.workerNameRequest, + body: { + worker_name: queryArg.workerName, + }, }), + invalidatesTags: ['Source'], }), - dmapiGetSourceSchemaList: build.query< - DmapiGetSourceSchemaListApiResponse, - DmapiGetSourceSchemaListApiArg - >({ + dmapiGetSourceSchemaList: build.query({ query: queryArg => ({ url: `/sources/${queryArg.sourceName}/schemas`, }), }), - dmapiGetSourceTableList: build.query< - DmapiGetSourceTableListApiResponse, - DmapiGetSourceTableListApiArg + dmapiGetSourceTableList: build.mutation< + string[], + { sourceName: string; schemaName: string } >({ query: queryArg => ({ url: `/sources/${queryArg.sourceName}/schemas/${queryArg.schemaName}`, }), }), - dmapiGetSchemaListByTaskAndSource: build.query< - DmapiGetSchemaListByTaskAndSourceApiResponse, - DmapiGetSchemaListByTaskAndSourceApiArg - >({ - query: queryArg => ({ - url: `/tasks/${queryArg['task-name']}/sources/${queryArg.sourceName}/schemas`, - }), - }), - dmapiGetTableListByTaskAndSource: build.query< - DmapiGetTableListByTaskAndSourceApiResponse, - DmapiGetTableListByTaskAndSourceApiArg - >({ - query: queryArg => ({ - url: `/tasks/${queryArg['task-name']}/sources/${queryArg.sourceName}/schemas/${queryArg.schemaName}`, - }), - }), }), - overrideExisting: false, }) -export { injectedRtkApi as enhancedApi } - -export type DmapiCreateSourceApiResponse = Source - -export type DmapiCreateSourceApiArg = Partial - -export type DmapiGetSourceListApiResponse = GetSourceListResponse - -export type DmapiGetSourceListApiArg = { - withStatus?: boolean -} - -export type DmapiDeleteSourceApiResponse = DeleteSourceResponse - -export type DmapiDeleteSourceApiArg = { - sourceName: string - force?: boolean -} - -export type DmapiGetSourceStatusApiResponse = GetSourceStatusResponse - export type DmapiGetSourceStatusApiArg = { sourceName: string } -export type DmapiTransferSourceApiResponse = undefined - -export type DmapiTransferSourceApiArg = { - sourceName: string - workerNameRequest: WorkerNameRequest -} - -export type DmapiGetSourceSchemaListApiResponse = SchemaNameList - -export type DmapiGetSourceSchemaListApiArg = { - sourceName: string -} - -export type DmapiGetSourceTableListApiResponse = TableNameList - -export type DmapiGetSourceTableListApiArg = { - sourceName: string - schemaName: string -} - -export type DmapiGetSchemaListByTaskAndSourceApiResponse = SchemaNameList - -export type DmapiGetSchemaListByTaskAndSourceApiArg = { - 'task-name': string - sourceName: string -} - -export type DmapiGetTableListByTaskAndSourceApiResponse = TableNameList - -export type DmapiGetTableListByTaskAndSourceApiArg = { - 'task-name': string - sourceName: string - schemaName: string -} - export type Security = { ssl_ca_content: string ssl_cert_content: string @@ -194,24 +133,6 @@ export type Source = { relay_config?: RelayConfig } -export type GetSourceListResponse = ListResponse - -export type TaskNameList = string[] - -export type DeleteSourceResponse = { - task_name_list?: TaskNameList -} - -export type GetSourceStatusResponse = ListResponse - -export type WorkerNameRequest = { - worker_name: string -} - -export type SchemaNameList = string[] - -export type TableNameList = string[] - export const { useDmapiCreateSourceMutation, useDmapiGetSourceListQuery, @@ -219,7 +140,5 @@ export const { useDmapiGetSourceStatusQuery, useDmapiTransferSourceMutation, useDmapiGetSourceSchemaListQuery, - useDmapiGetSourceTableListQuery, - useDmapiGetSchemaListByTaskAndSourceQuery, - useDmapiGetTableListByTaskAndSourceQuery, + useDmapiGetSourceTableListMutation, } = injectedRtkApi diff --git a/dm/ui/src/models/task.ts b/dm/ui/src/models/task.ts new file mode 100644 index 00000000000..a16d9f25d5d --- /dev/null +++ b/dm/ui/src/models/task.ts @@ -0,0 +1,259 @@ +import { api, ListResponse } from './api' + +const injectedRtkApi = api.injectEndpoints({ + endpoints: build => ({ + dmapiStartTask: build.mutation< + Task, + { + remove_meta: boolean + task: Task + source_name_list?: string[] + } + >({ + query: queryArg => ({ + url: `/tasks`, + method: 'POST', + body: queryArg, + }), + invalidatesTags: ['Task'], + }), + dmapiGetTaskList: build.query, { withStatus: boolean }>({ + query: queryArg => ({ + url: `/tasks`, + params: { with_status: queryArg.withStatus }, + }), + providesTags: ['Task'], + }), + dmapiDeleteTask: build.mutation({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}`, + method: 'DELETE', + params: { source_name_list: queryArg.sourceNameList }, + }), + invalidatesTags: ['Task'], + }), + dmapiGetTaskStatus: build.query< + ListResponse, + TaskWithSourceList + >({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}/status`, + params: queryArg.sourceNameList + ? { source_name_list: queryArg.sourceNameList } + : undefined, + }), + }), + dmapiPauseTask: build.mutation({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}/pause`, + method: 'POST', + body: queryArg.sourceNameList, + }), + invalidatesTags: ['Task'], + }), + dmapiResumeTask: build.mutation({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}/resume`, + method: 'POST', + body: queryArg.sourceNameList, + }), + invalidatesTags: ['Task'], + }), + dmapiGetSchemaListByTaskAndSource: build.query< + string[], + { + taskName: string + sourceName: string + } + >({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}/sources/${queryArg.sourceName}/schemas`, + }), + }), + dmapiGetTableListByTaskAndSource: build.query< + string[], + { + taskName: string + sourceName: string + schemaName: string + } + >({ + query: queryArg => ({ + url: `/tasks/${queryArg.taskName}/sources/${queryArg.sourceName}/schemas/${queryArg.schemaName}`, + }), + }), + }), +}) + +export type TaskWithSourceList = { + taskName: string + sourceNameList?: string[] +} + +export type Security = { + ssl_ca_content: string + ssl_cert_content: string + ssl_key_content: string + cert_allowed_cn?: string[] +} | null + +export type TaskTargetDataBase = { + host: string + port: number + user: string + password: string + security?: Security +} + +export type TaskBinLogFilterRule = { + ignore_event?: string[] + ignore_sql?: string[] +} + +export const supportedIgnorableEvents = [ + 'all', + 'all dml', + 'all ddl', + 'none', + 'none ddl', + 'none dml', + 'insert', + 'update', + 'delete', + 'create database', + 'drop database', + 'create table', + 'create index', + 'drop table', + 'truncate table', + 'rename table', + 'drop index', + 'alter table', +] as const + +export type TaskTableMigrateRule = { + source: { + source_name: string + schema: string + table: string + } + target?: { + schema: string + table: string + } + binlog_filter_rule?: string[] +} + +export type TaskFullMigrateConf = { + export_threads?: number + import_threads?: number + data_dir?: string + consistency?: string +} + +export type TaskIncrMigrateConf = { + repl_threads?: number + repl_batch?: number +} + +export type TaskSourceConf = { + source_name: string + binlog_name?: string + binlog_pos?: number + binlog_gtid?: string +} + +export type TaskSourceConfig = { + full_migrate_conf?: TaskFullMigrateConf + incr_migrate_conf?: TaskIncrMigrateConf + source_conf: TaskSourceConf[] +} + +export enum TaskMode { + FULL = 'full', + INCREMENTAL = 'incremental', + ALL = 'all', +} + +export enum TaskShardMode { + PESSIMISTIC = 'pessimistic', + OPTIMISTIC = 'optimistic', +} + +export enum OnDuplicateBehavior { + OVERWRITE = 'overwrite', + ERROR = 'error', +} + +export type Task = { + name: string + task_mode: TaskMode + shard_mode?: TaskShardMode + meta_schema?: string + enhance_online_schema_change: boolean + on_duplicate: OnDuplicateBehavior + target_config: TaskTargetDataBase + binlog_filter_rule?: { + [key: string]: TaskBinLogFilterRule + } + table_migrate_rule: TaskTableMigrateRule[] + source_config: TaskSourceConfig + status_list?: SubTaskStatus[] +} + +export interface TaskFormData extends Task { + binlog_filter_rule_array?: Array +} + +export type LoadStatus = { + finished_bytes: number + total_bytes: number + progress: string + meta_binlog: string + meta_binlog_gtid: string +} + +export type ShardingGroup = { + target: string + ddl_list: string[] + first_location: string + synced: string[] + unsynced: string[] +} + +export type SyncStatus = { + total_events: number + total_tps: number + recent_tps: number + master_binlog: string + master_binlog_gtid: string + syncer_binlog: string + syncer_binlog_gtid: string + blocking_ddls: string[] + unresolved_groups: ShardingGroup[] + synced: boolean + binlog_type: string + seconds_behind_master: number +} + +export type SubTaskStatus = { + name: string + source_name: string + worker_name: string + stage: string + unit: string + unresolved_ddl_lock_id?: string + load_status?: LoadStatus | null + sync_status?: SyncStatus | null +} + +export const { + useDmapiStartTaskMutation, + useDmapiGetTaskListQuery, + useDmapiDeleteTaskMutation, + useDmapiGetTaskStatusQuery, + useDmapiPauseTaskMutation, + useDmapiResumeTaskMutation, + useDmapiGetSchemaListByTaskAndSourceQuery, + useDmapiGetTableListByTaskAndSourceQuery, +} = injectedRtkApi diff --git a/dm/ui/src/models/taskConfig.ts b/dm/ui/src/models/taskConfig.ts new file mode 100644 index 00000000000..ee88087473c --- /dev/null +++ b/dm/ui/src/models/taskConfig.ts @@ -0,0 +1,67 @@ +import { api, ListResponse } from './api' +import { Task } from './task' + +const injectedRtkApi = api.injectEndpoints({ + endpoints: build => ({ + dmapiBatchImportTaskConfig: build.mutation< + BatchImportTaskConfigResponse, + { overwrite: boolean } + >({ + query: queryArg => ({ + url: `/task/templates/import`, + method: 'POST', + body: queryArg, + }), + invalidatesTags: ['TaskConfig'], + }), + dmapiCreateTaskConfig: build.mutation({ + query: queryArg => ({ + url: `/task/templates`, + method: 'POST', + body: queryArg, + }), + invalidatesTags: ['TaskConfig'], + }), + dmapiGetTaskConfigList: build.query, void>({ + query: () => ({ url: `/task/templates` }), + providesTags: ['TaskConfig'], + }), + dmapiGetTaskConfig: build.query({ + query: queryArg => ({ + url: `/task/templates/${queryArg.taskName}`, + }), + }), + dmapUpdateTaskConfig: build.mutation({ + query: queryArg => ({ + url: `/task/templates/${queryArg.taskName}`, + method: 'PUT', + }), + invalidatesTags: ['TaskConfig'], + }), + dmapiDeleteTaskConfig: build.mutation({ + query: queryArg => ({ + url: `/task/templates/${queryArg.taskName}`, + method: 'DELETE', + }), + invalidatesTags: ['TaskConfig'], + }), + }), + overrideExisting: false, +}) + +export type BatchImportTaskConfigResponse = { + success_task_list: string[] + failed_task_list: { + task_name: string + error_msg: string + }[] +} + +export const { + useDmapiBatchImportTaskConfigMutation, + useDmapiCreateTaskConfigMutation, + useDmapiGetTaskConfigListQuery, + useDmapiGetTaskConfigQuery, + useDmapUpdateTaskConfigMutation, + useDmapiDeleteTaskConfigMutation, +} = injectedRtkApi diff --git a/dm/ui/src/pages/cluster/member.tsx b/dm/ui/src/pages/cluster/member.tsx new file mode 100644 index 00000000000..1a162238fb8 --- /dev/null +++ b/dm/ui/src/pages/cluster/member.tsx @@ -0,0 +1,227 @@ +import React, { useCallback } from 'react' +import { useTranslation } from 'react-i18next' + +import { + Space, + Button, + Tabs, + Card, + Table, + Badge, + message, + Modal, +} from '~/uikit' +import { + RedoOutlined, + CheckCircleOutlined, + ExclamationCircleOutlined, +} from '~/uikit/icons' +import i18n from '~/i18n' +import { + useDmapiGetClusterMasterListQuery, + useDmapiGetClusterWorkerListQuery, + useDmapiOfflineMasterNodeMutation, + useDmapiOfflineWorkerNodeMutation, +} from '~/models/cluster' + +const { TabPane } = Tabs + +const MasterTable: React.FC = () => { + const [t] = useTranslation() + const { data, isFetching, refetch } = useDmapiGetClusterMasterListQuery() + const [offlineMasterNode] = useDmapiOfflineMasterNodeMutation() + const handleConfirmOffline = (name: string) => { + Modal.confirm({ + title: t('are you sure to offline this master'), + icon: , + onOk() { + const key = 'offlineMasterNode-' + Date.now() + message.loading({ content: t('requesting'), key }) + offlineMasterNode(name) + .unwrap() + .then(() => message.success({ content: t('request success') })) + .catch(() => message.destroy(key)) + }, + }) + } + const dataSource = data?.data + const columns = [ + { + title: t('name'), + dataIndex: 'name', + }, + { + title: t('address'), + dataIndex: 'addr', + }, + { + title: t('status'), + dataIndex: 'alive', + render(alive: boolean) { + return alive ? : + }, + }, + { + title: t('is leader'), + dataIndex: 'leader', + render(leader: boolean) { + return leader ? ( + + ) : null + }, + }, + { + title: t('operations'), + dataIndex: 'name', + render(name: string) { + return ( + + + + ) + }, + }, + ] + + return ( +
+
+ + + +
+ + + + ) +} + +const WorkerTable: React.FC = () => { + const [t] = useTranslation() + const { data, isFetching, refetch } = useDmapiGetClusterWorkerListQuery() + const [offlineWorkerNode] = useDmapiOfflineWorkerNodeMutation() + const handleConfirmOffline = (name: string) => { + Modal.confirm({ + title: t('are you sure to offline this worker'), + icon: , + onOk() { + const key = 'offlineWorkerNode-' + Date.now() + message.loading({ content: t('requesting'), key }) + offlineWorkerNode(name) + .unwrap() + .then(() => message.success({ content: t('request success') })) + .catch(() => message.destroy(key)) + }, + }) + } + const dataSource = data?.data + const columns = [ + { + title: t('name'), + dataIndex: 'name', + }, + { + title: t('address'), + dataIndex: 'addr', + }, + { + title: t('bound stage'), + dataIndex: 'bound_stage', + render(bound_stage: string) { + return ( + + ) + }, + }, + { + title: t('source'), + dataIndex: 'bound_source_name', + }, + { + title: t('operations'), + dataIndex: 'name', + render(name: string) { + return ( + + + + + + ) + }, + }, + ] + + return ( +
+
+ + + +
+ +
+ + ) +} + +const Member: React.FC = () => { + return ( +
+ + + + + + + + + + +
+ ) +} + +export const meta = { + title: () => i18n.t('member list'), + index: 0, +} + +export default Member diff --git a/dm/ui/src/pages/cluster/relay-log.tsx b/dm/ui/src/pages/cluster/relay-log.tsx new file mode 100644 index 00000000000..44f577b4b0c --- /dev/null +++ b/dm/ui/src/pages/cluster/relay-log.tsx @@ -0,0 +1,14 @@ +import React from 'react' + +import i18n from '~/i18n' + +const RelayLog: React.FC = () => { + return
TODO
+} + +export const meta = { + title: () => i18n.t('relay log'), + index: 0, +} + +export default RelayLog diff --git a/dm/ui/src/pages/index.tsx b/dm/ui/src/pages/index.tsx new file mode 100644 index 00000000000..c6d95d8c356 --- /dev/null +++ b/dm/ui/src/pages/index.tsx @@ -0,0 +1,7 @@ +import React from 'react' + +const Dashboard = () => { + return
TODO
+} + +export default Dashboard diff --git a/dm/ui/src/pages/migration/source.tsx b/dm/ui/src/pages/migration/source.tsx index 0a59574018e..ac04040b005 100644 --- a/dm/ui/src/pages/migration/source.tsx +++ b/dm/ui/src/pages/migration/source.tsx @@ -28,8 +28,8 @@ import { useDmapiDeleteSourceMutation, useDmapiGetSourceListQuery, } from '~/models/source' - -const { confirm } = Modal +import i18n from '~/i18n' +import { useFuseSearch } from '~/utils/search' const SourceList: React.FC = () => { const [t] = useTranslation() @@ -56,6 +56,9 @@ const SourceList: React.FC = () => { message.success({ content: t('saved'), key, duration: 6 }) setShowModal(false) }) + .catch(() => { + message.destroy(key) + }) }, [currentSource] ) @@ -63,10 +66,10 @@ const SourceList: React.FC = () => { const handleRemoveSource = useCallback(async () => { const key = 'removeSource-' + Date.now() - confirm({ + Modal.confirm({ title: ( - {t('confirm to delete')} + {t('confirm to delete source')} {selectedSources.join(', ')}? ), @@ -84,6 +87,11 @@ const SourceList: React.FC = () => { }, [selectedSources]) const dataSource = data?.data + + const { result, setKeyword } = useFuseSearch(dataSource, { + keys: ['source_name', 'host'], + }) + const columns = [ { title: t('name'), @@ -118,14 +126,15 @@ const SourceList: React.FC = () => { render(data: Source) { return ( - { setCurrentSource(data) setShowModal(true) }} > {t('edit')} - + ) }, @@ -150,6 +159,7 @@ const SourceList: React.FC = () => { setKeyword(e.target.value)} suffix={} placeholder={t('search placeholder')} /> @@ -160,7 +170,7 @@ const SourceList: React.FC = () => { {t('import')} {selectedSources.length > 0 && ( - )} @@ -178,7 +188,7 @@ const SourceList: React.FC = () => {
{ ) } +export const meta = { + title: () => i18n.t('source list'), + index: 1, +} + export default SourceList diff --git a/dm/ui/src/pages/migration/sync-detail.tsx b/dm/ui/src/pages/migration/sync-detail.tsx new file mode 100644 index 00000000000..4cd0c9f51aa --- /dev/null +++ b/dm/ui/src/pages/migration/sync-detail.tsx @@ -0,0 +1,62 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' + +import i18n from '~/i18n' +import { Input, Row, Col, Button, Space, Table } from '~/uikit' +import { RedoOutlined, SearchOutlined } from '~/uikit/icons' +import { useDmapiGetTaskListQuery } from '~/models/task' +import { useFuseSearch } from '~/utils/search' + +const SyncDetail: React.FC = () => { + const [t] = useTranslation() + const { data, isFetching, refetch } = useDmapiGetTaskListQuery({ + withStatus: true, + }) + + const dataSource = data?.data + const { result, setKeyword } = useFuseSearch(dataSource, { + keys: ['name'], + }) + const columns = [ + { + title: t('task name'), + dataIndex: 'name', + }, + ] + return ( +
+ +
+ + setKeyword(e.target.value)} + suffix={} + placeholder={t('search placeholder')} + /> + + + + + +
+ + ) +} + +export const meta = { + title: () => i18n.t('sync detail'), + index: 3, +} + +export default SyncDetail diff --git a/dm/ui/src/pages/migration/task-config.tsx b/dm/ui/src/pages/migration/task-config.tsx new file mode 100644 index 00000000000..0728bede07d --- /dev/null +++ b/dm/ui/src/pages/migration/task-config.tsx @@ -0,0 +1,189 @@ +import React, { useState } from 'react' +import { useTranslation } from 'react-i18next' +import { useNavigate, useLocation } from 'react-router-dom' + +import { + Input, + Table, + Row, + Col, + Space, + Button, + Dropdown, + Menu, + Modal, +} from '~/uikit' +import { + RedoOutlined, + PlusSquareOutlined, + ExportOutlined, + ImportOutlined, + DownOutlined, + SearchOutlined, +} from '~/uikit/icons' +import i18n from '~/i18n' +import { useDmapiGetTaskConfigListQuery } from '~/models/taskConfig' +import { Task } from '~/models/task' +import { unimplemented } from '~/utils/unimplemented' +import CreateTaskConfig from '~/components/CreateTaskConfig' +import BatchImportTaskConfig from '~/components/BatchImportTaskConfig' +import { useFuseSearch } from '~/utils/search' + +const TaskConfig: React.FC = () => { + const [t] = useTranslation() + const [isModalVisible, setIsModalVisible] = useState(false) + const navigate = useNavigate() + const loc = useLocation() + + const { data, isFetching, refetch } = useDmapiGetTaskConfigListQuery( + undefined, + { skip: loc.hash === '#new' } + ) + + const dataSource = data?.data + const { result, setKeyword } = useFuseSearch(dataSource, { + keys: ['name'], + }) + const columns = [ + { + title: t('name'), + dataIndex: 'name', + }, + { + title: t('type'), + dataIndex: 'task_mode', + }, + { + title: t('source info'), + render(data: Task) { + const { source_config } = data + + if (source_config?.source_conf?.length > 0) { + return t('{{val}} and other {{count}}', { + val: source_config.source_conf[0].source_name, + count: source_config.source_conf.length, + }) + } + + return '-' + }, + }, + { + title: t('target info'), + render(data: Task) { + return data.target_config.host + }, + }, + { + title: t('migrate rules'), + render(data: Task) { + return t('{{count}} rules', { + count: data.table_migrate_rule.length, + }) + }, + }, + { + title: t('event filter'), + render(data: Task) { + return t('{{count}} filters', { + count: Object.keys(data.binlog_filter_rule || {}).length, + }) + }, + }, + { + title: t('operations'), + render() { + return ( + + + + + ) + }, + }, + ] + + if (loc.hash === '#new') { + return + } + + return ( +
+ +
+ + setKeyword(e.target.value)} + suffix={} + placeholder={t('search placeholder')} + /> + + + + + } + onClick={unimplemented} + key="1" + > + {t('export')} + + + } + > + + + + + + + + + + +
+ + setIsModalVisible(false)} + > + + + + ) +} + +export const meta = { + title: () => i18n.t('task config'), + index: 2, +} + +export default TaskConfig diff --git a/dm/ui/src/pages/migration/task.tsx b/dm/ui/src/pages/migration/task.tsx new file mode 100644 index 00000000000..329e3df4d49 --- /dev/null +++ b/dm/ui/src/pages/migration/task.tsx @@ -0,0 +1,281 @@ +import React, { useCallback, useState } from 'react' +import { useTranslation } from 'react-i18next' +import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' +import { ghcolors } from 'react-syntax-highlighter/dist/esm/styles/prism' + +import { + Table, + TableColumnsType, + Row, + Col, + Space, + Input, + Button, + Dropdown, + Menu, + Modal, + message, + Drawer, + Spin, + Collapse, + Pagination, +} from '~/uikit' +import { + SearchOutlined, + RedoOutlined, + DownOutlined, + PauseCircleOutlined, + PlayCircleOutlined, + CloseCircleOutlined, + ExclamationCircleOutlined, + DatabaseOutlined, + FlagOutlined, +} from '~/uikit/icons' +import { + Task, + useDmapiGetTaskListQuery, + useDmapiDeleteTaskMutation, + useDmapiPauseTaskMutation, + useDmapiResumeTaskMutation, + useDmapiGetTaskStatusQuery, +} from '~/models/task' +import i18n from '~/i18n' +import { useFuseSearch } from '~/utils/search' + +const TaskList: React.FC = () => { + const [t] = useTranslation() + const [visible, setVisible] = useState(false) + const [currentTaskName, setCurrentTaskName] = useState('') + const [selectedSources, setSelectedSources] = useState([]) + const [displayedSubtaskOffset, setDisplayedSubtaskOffset] = useState({ + start: 0, + end: 10, + }) + + const { data, isFetching, refetch } = useDmapiGetTaskListQuery({ + withStatus: true, + }) + const { data: currentTaskStatus } = useDmapiGetTaskStatusQuery( + { taskName: currentTaskName }, + { skip: !currentTaskName } + ) + + const [pauseTask] = useDmapiPauseTaskMutation() + const [resumeTask] = useDmapiResumeTaskMutation() + const [deleteTask] = useDmapiDeleteTaskMutation() + + const rowSelection = { + selectedRowKeys: selectedSources, + onChange: (selectedRowKeys: React.Key[], selectedRows: Task[]) => { + setSelectedSources(selectedRows.map(i => i.name)) + }, + } + + const handleRequest = useCallback( + ({ key, handler, title }) => { + Modal.confirm({ + title, + icon: , + onOk() { + message.loading({ content: t('requesting'), key }) + Promise.all( + selectedSources.map(name => handler({ taskName: name }).unwrap()) + ) + .then(() => message.success({ content: t('request success'), key })) + .catch(() => { + message.destroy(key) + }) + }, + }) + }, + [selectedSources] + ) + + const handlePauseTask = useCallback(() => { + if (!selectedSources.length) { + return + } + handleRequest({ + title: t('confirm to pause task?'), + key: 'pauseTask-' + Date.now(), + handler: pauseTask, + }) + }, [selectedSources, handleRequest]) + const handleResumeTask = useCallback(() => { + if (!selectedSources.length) { + return + } + handleRequest({ + title: t('confirm to resume task?'), + key: 'resumeTask-' + Date.now(), + handler: resumeTask, + }) + }, [selectedSources, handleRequest]) + const handleDeleteTask = useCallback(() => { + if (!selectedSources.length) { + return + } + handleRequest({ + title: t('confirm to delete task?'), + key: 'deleteTask-' + Date.now(), + handler: deleteTask, + }) + }, [selectedSources, handleRequest]) + const handlePageChange = useCallback((page: number, pageSize: number) => { + const start = (page - 1) * pageSize + setDisplayedSubtaskOffset({ start, end: start + pageSize }) + }, []) + + const dataSource = data?.data + + const { result, setKeyword } = useFuseSearch(dataSource, { + keys: ['name'], + }) + + const columns: TableColumnsType | undefined = [ + { + title: t('task name'), + dataIndex: 'name', + }, + { + title: t('source info'), + dataIndex: 'name', + }, + { + title: t('target info'), + dataIndex: 'name', + }, + { + title: t('operations'), + dataIndex: 'name', + render(name: string) { + return ( + + + + ) + }, + }, + ] + + return ( +
+ +
+ + } + onChange={e => setKeyword(e.target.value)} + placeholder={t('search placeholder')} + /> + + + + } + onClick={handleResumeTask} + > + {t('resume')} + + } + onClick={handleDeleteTask} + > + {t('delete')} + + + } + > + + + + + + +
+ + setVisible(false)} + > + {currentTaskStatus ? ( + <> + + {currentTaskStatus.data + .slice(displayedSubtaskOffset.start, displayedSubtaskOffset.end) + .map(item => { + return ( + + + + {item.source_name} + + + + {item.stage} + + + } + > + + {JSON.stringify(item, null, 2)} + + + ) + })} + + +
+ +
+ + ) : ( +
+ +
+ )} +
+ + ) +} + +export const meta = { + title: () => i18n.t('task list'), + index: 0, +} + +export default TaskList diff --git a/dm/ui/src/utils/search.ts b/dm/ui/src/utils/search.ts new file mode 100644 index 00000000000..d9b75cafef9 --- /dev/null +++ b/dm/ui/src/utils/search.ts @@ -0,0 +1,35 @@ +import { useEffect, useRef, useState } from 'react' +import Fuse from 'fuse.js' +import { useDebounce } from 'ahooks' + +export function useFuseSearch(list?: T[], options?: Fuse.IFuseOptions) { + const [keyword, setKeyword] = useState('') + const fuseRef = useRef>() + const [result, setResult] = useState([]) + const debouncedKeyword = useDebounce(keyword, { wait: 600 }) + const searchResult = () => { + const val = debouncedKeyword?.trim() + if (val && fuseRef.current) { + setResult(fuseRef.current.search(val).map(i => i.item)) + } else { + setResult(list ?? []) + } + } + + useEffect(() => { + if (list && list.length > 0) { + fuseRef.current = new Fuse(list, options) + } + searchResult() + }, [list]) + + useEffect(() => { + searchResult() + }, [debouncedKeyword]) + + return { + result, + keyword, + setKeyword, + } +} diff --git a/dm/ui/src/utils/sleep.ts b/dm/ui/src/utils/sleep.ts new file mode 100644 index 00000000000..0b0e58f481b --- /dev/null +++ b/dm/ui/src/utils/sleep.ts @@ -0,0 +1,4 @@ +export const sleep = (ms: number) => + new Promise(resolve => { + setTimeout(resolve, ms) + }) diff --git a/dm/ui/vite.config.js b/dm/ui/vite.config.js index c235ce55d53..b7deb6fbfe8 100644 --- a/dm/ui/vite.config.js +++ b/dm/ui/vite.config.js @@ -1,17 +1,31 @@ import { defineConfig } from 'vite' -import reactRefresh from '@vitejs/plugin-react-refresh' import WindiCSS from 'vite-plugin-windicss' import { i18nextScanner } from 'vite-plugin-i18next-scanner' -import tsconfigPaths from 'vite-tsconfig-paths' +import tsConfigPath from 'vite-tsconfig-paths' +import { reactRouterPlugin } from 'vite-plugin-next-react-router' +import reactPlugin from '@vitejs/plugin-react' +import { visualizer } from 'rollup-plugin-visualizer' +import vitePluginImp from 'vite-plugin-imp' // https://vitejs.dev/config/ export default defineConfig({ base: '/dashboard/', plugins: [ - reactRefresh(), + reactPlugin(), WindiCSS(), - tsconfigPaths(), + tsConfigPath(), + reactRouterPlugin({ async: false }), i18nextScanner({ langs: ['en', 'zh'] }), + vitePluginImp({ + libList: [ + { + libName: 'lodash', + libDirectory: '', + camel2DashComponentName: false, + style: () => false, + }, + ], + }), ], server: { port: 8080, @@ -29,4 +43,24 @@ export default defineConfig({ }, }, }, + build: { + rollupOptions: { + plugins: [visualizer({ template: 'treemap' })], + output: { + manualChunks(id) { + if (id.includes('rc-') || id.includes('antd')) { + return 'uikit' + } + + if (id.includes('@ant-design/icons')) { + return 'icons' + } + + if (id.includes('node_modules')) { + return 'vendor' + } + }, + }, + }, + }, }) diff --git a/dm/ui/yarn.lock b/dm/ui/yarn.lock index 94006a71a48..c300ccd5c83 100644 --- a/dm/ui/yarn.lock +++ b/dm/ui/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@ahooksjs/use-request@^2.8.13": - version "2.8.13" - resolved "https://registry.yarnpkg.com/@ahooksjs/use-request/-/use-request-2.8.13.tgz#5ace53859feb6b4fe9ebcbf2e72982bb9b7db383" - integrity sha512-zGSOwGNy6fTudvBcLJ8Ly7DwacEGzQS06fGe1b1mEPWTsK/R6y8ItIbtE2RXTeMoCpbxagamMWo5ZDJkJlmZ6Q== - dependencies: - lodash.debounce "^4.0.8" - lodash.throttle "^4.1.1" - "@ant-design/colors@^6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" @@ -71,7 +63,7 @@ resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== -"@apidevtools/swagger-parser@^10.0.1", "@apidevtools/swagger-parser@^10.0.2": +"@apidevtools/swagger-parser@^10.0.1", "@apidevtools/swagger-parser@^10.0.2", "@apidevtools/swagger-parser@^10.0.3": version "10.0.3" resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz#32057ae99487872c4dd96b314a1ab4b95d89eaf5" integrity sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g== @@ -83,7 +75,7 @@ call-me-maybe "^1.0.1" z-schema "^5.0.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": +"@babel/code-frame@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== @@ -95,7 +87,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== -"@babel/core@^7.12.10", "@babel/core@^7.14.8": +"@babel/core@^7.12.10": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== @@ -116,6 +108,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.16.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.5.tgz#924aa9e1ae56e1e55f7184c8bf073a50d8677f5c" + integrity sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.5" + "@babel/helper-compilation-targets" "^7.16.3" + "@babel/helper-module-transforms" "^7.16.5" + "@babel/helpers" "^7.16.5" + "@babel/parser" "^7.16.5" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.5" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/generator@^7.12.11", "@babel/generator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" @@ -125,7 +138,23 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.16.0": +"@babel/generator@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf" + integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== @@ -135,6 +164,13 @@ browserslist "^4.17.5" semver "^6.3.0" +"@babel/helper-environment-visitor@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8" + integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-function-name@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" @@ -186,6 +222,20 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" +"@babel/helper-module-transforms@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.5.tgz#530ebf6ea87b500f60840578515adda2af470a29" + integrity sha512-CkvMxgV4ZyyioElFwcuWnDCcNIeyqTkCm9BxXZi73RR1ozqlpboqsbGUNvRTflgZtFbbJ1v5Emvm+lkjMYY/LQ== + dependencies: + "@babel/helper-environment-visitor" "^7.16.5" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.5" + "@babel/types" "^7.16.0" + "@babel/helper-optimise-call-expression@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" @@ -193,10 +243,10 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-plugin-utils@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== +"@babel/helper-plugin-utils@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074" + integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ== "@babel/helper-replace-supers@^7.16.0": version "7.16.0" @@ -241,6 +291,15 @@ "@babel/traverse" "^7.16.3" "@babel/types" "^7.16.0" +"@babel/helpers@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.5.tgz#29a052d4b827846dd76ece16f565b9634c554ebd" + integrity sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw== + dependencies: + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.5" + "@babel/types" "^7.16.0" + "@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" @@ -260,19 +319,49 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== -"@babel/plugin-transform-react-jsx-self@^7.14.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c" - integrity sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w== +"@babel/parser@^7.16.5": + version "7.16.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314" + integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ== + +"@babel/plugin-syntax-jsx@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz#bf255d252f78bc8b77a17cadc37d1aa5b8ed4394" + integrity sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.5" -"@babel/plugin-transform-react-jsx-source@^7.14.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.0.tgz#d40c959d7803aae38224594585748693e84c0a22" - integrity sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA== +"@babel/plugin-transform-react-jsx-development@^7.16.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.5.tgz#87da9204c275ffb57f45d192a1120cf104bc1e86" + integrity sha512-uQSLacMZSGLCxOw20dzo1dmLlKkd+DsayoV54q3MHXhbqgPzoiGerZQgNPl/Ro8/OcXV2ugfnkx+rxdS0sN5Uw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.5" + +"@babel/plugin-transform-react-jsx-self@^7.16.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.5.tgz#e16bf9cd52f2e8ea11f9d7edfb48458586c760bf" + integrity sha512-fvwq+jir1Vn4f5oBS0H/J/gD5CneTD53MHs+NMjlHcha4Sq35fwxI5RtmJGEBXO+M93f/eeD9cAhRPhmLyJiVw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.5" + +"@babel/plugin-transform-react-jsx-source@^7.16.0": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.5.tgz#7c2aeb6539780f3312266de3348bbb74ce9d3ce1" + integrity sha512-/eP+nZywJntGLjSPjksAnM9/ELIs3RbiEuTu2/zAOzwwBcfiu+m/iptEq1lERUUtSXubYSHVnVHMr13GR+TwPw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.5" + +"@babel/plugin-transform-react-jsx@^7.16.0", "@babel/plugin-transform-react-jsx@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.5.tgz#5298aedc5f81e02b1cb702e597e8d6a346675765" + integrity sha512-+arLIz1d7kmwX0fKxTxbnoeG85ONSnLpvdODa4P3pc1sS7CV1hfmtYWufkW/oYsPnkDrEeQFxhUWcFnrXW7jQQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.5" + "@babel/plugin-syntax-jsx" "^7.16.5" + "@babel/types" "^7.16.0" "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.16.3" @@ -281,6 +370,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.3.1": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" @@ -305,6 +401,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.16.5": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3" + integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.5" + "@babel/helper-environment-visitor" "^7.16.5" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.5" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" @@ -323,14 +435,14 @@ resolved "https://registry.yarnpkg.com/@cush/relative/-/relative-1.0.0.tgz#8cd1769bf9bde3bb27dac356b1bc94af40f6cc16" integrity sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA== -"@eslint/eslintrc@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" - integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.0.0" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -343,16 +455,21 @@ resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.0.0-rc.6.tgz#7985f681564cff4ffaebb5896eb4be20af3aae7a" integrity sha512-dDnQizD94EdBwEj/fh3zPRa/HWCS9O5au2PuHhZBbuM3xWHxuaKzPBOEWze7Nn0xW68MIpZ7Xdyn1CoCpjKCuQ== -"@humanwhocodes/config-array@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" - integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== +"@faker-js/faker@^5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-5.5.3.tgz#18e3af6b8eae7984072bbeb0c0858474d7c4cefe" + integrity sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw== + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -362,6 +479,26 @@ resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== +"@mswjs/cookies@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.1.6.tgz#176f77034ab6d7373ae5c94bcbac36fee8869249" + integrity sha512-A53XD5TOfwhpqAmwKdPtg1dva5wrng2gH5xMvklzbd9WLTSVU953eCRa8rtrrm6G7Cy60BOGsBRN89YQK0mlKA== + dependencies: + "@types/set-cookie-parser" "^2.4.0" + set-cookie-parser "^2.4.6" + +"@mswjs/interceptors@^0.12.7": + version "0.12.7" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.12.7.tgz#0d1cd4cd31a0f663e0455993951201faa09d0909" + integrity sha512-eGjZ3JRAt0Fzi5FgXiV/P3bJGj0NqsN7vBS0J0FO2AQRQ0jCKQS4lEFm4wvlSgKQNfeuc/Vz6d81VtU3Gkx/zg== + dependencies: + "@open-draft/until" "^1.0.3" + "@xmldom/xmldom" "^0.7.2" + debug "^4.3.2" + headers-utils "^3.0.2" + outvariant "^1.2.0" + strict-event-emitter "^0.2.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -383,15 +520,20 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@reduxjs/toolkit@^1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.6.2.tgz#2f2b5365df77dd6697da28fdf44f33501ed9ba37" - integrity sha512-HbfI/hOVrAcMGAYsMWxw3UJyIoAS9JTdwddsjlr5w3S50tXhWb+EMyhIw+IAvCVCLETkzdjgH91RjDSYZekVBA== +"@open-draft/until@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" + integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== + +"@reduxjs/toolkit@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.7.0.tgz#fe00b8869bc076cf92efc00417832822d1e5c367" + integrity sha512-iApo4zS+8kWnIn4xucTDWpqRjDNkXruFIyJQWwThIEIbMj5kwqvbMaQcEgd2a305B68Z+4bvZqAqJSATeddaJA== dependencies: - immer "^9.0.6" - redux "^4.1.0" - redux-thunk "^2.3.0" - reselect "^4.0.0" + immer "^9.0.7" + redux "^4.1.2" + redux-thunk "^2.4.1" + reselect "^4.1.5" "@rollup/pluginutils@^4.1.1": version "4.1.1" @@ -439,6 +581,18 @@ resolved "https://registry.yarnpkg.com/@ti-fe/prettier-config/-/prettier-config-1.0.3.tgz#130892efc123689e28668601df06d19ee027a522" integrity sha512-fmLZQP68EuDkJlSM2gKUoMqN5RcQnGJXZwZZi0fARMxO+n87hzaZOyFDBc+U6GqEXexyUTXcr65qe1vPh0kX2w== +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + "@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" @@ -447,10 +601,18 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/js-cookie@^2.2.6": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" - integrity sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA== +"@types/inquirer@^8.1.3": + version "8.1.3" + resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-8.1.3.tgz#dfda4c97cdbe304e4dceb378a80f79448ea5c8fe" + integrity sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + +"@types/js-levenshtein@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" + integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.9": version "7.0.9" @@ -462,20 +624,20 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.177": - version "4.14.177" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578" - integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw== +"@types/lodash@^4.14.178": + version "4.14.178" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" + integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== -"@types/node@^16.11.7": - version "16.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" - integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== +"@types/node@*": + version "17.0.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.5.tgz#57ca67ec4e57ad9e4ef5a6bab48a15387a1c83e0" + integrity sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/node@^16.11.12": + version "16.11.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.12.tgz#ac7fb693ac587ee182c3780c26eb65546a1a3c10" + integrity sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw== "@types/prop-types@*": version "15.7.4" @@ -499,7 +661,14 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react@*", "@types/react@^17.0.34": +"@types/react-syntax-highlighter@^13.5.2": + version "13.5.2" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-13.5.2.tgz#357cc03581dc434c57c3b31f70e0eecdbf7b3ab0" + integrity sha512-sRZoKZBGKaE7CzMvTTgz+0x/aVR58ZYUTfB7HN76vC+yQnvo1FWtzNARBt0fGqcLGEVakEzMu/CtPzssmanu8Q== + dependencies: + "@types/react" "*" + +"@types/react@*": version "17.0.34" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.34.tgz#797b66d359b692e3f19991b6b07e4b0c706c0102" integrity sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg== @@ -508,30 +677,51 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/redux-logger@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@types/redux-logger/-/redux-logger-3.0.9.tgz#9193b3d51bb6ab98d25514ba7764e4f98a64d3ec" - integrity sha512-cwYhVbYNgH01aepeMwhd0ABX6fhVB2rcQ9m80u8Fl50ZODhsZ8RhQArnLTkE7/Zrfq4Sz/taNoF7DQy9pCZSKg== +"@types/react@^17.0.37": + version "17.0.37" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" + integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg== dependencies: - redux "^4.0.0" + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/set-cookie-parser@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" + integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== + dependencies: + "@types/node" "*" + "@types/throttle-debounce@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== -"@typescript-eslint/eslint-plugin@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz#d8ff412f10f54f6364e7fd7c1e70eb6767f434c3" - integrity sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw== +"@types/through@*": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895" + integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg== + dependencies: + "@types/node" "*" + +"@types/unist@*": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@typescript-eslint/eslint-plugin@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.7.0.tgz#12d54709f8ea1da99a01d8a992cd0474ad0f0aa9" + integrity sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg== dependencies: - "@typescript-eslint/experimental-utils" "5.3.1" - "@typescript-eslint/scope-manager" "5.3.1" + "@typescript-eslint/experimental-utils" "5.7.0" + "@typescript-eslint/scope-manager" "5.7.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -539,95 +729,103 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz#bbd8f9b67b4d5fdcb9d2f90297d8fcda22561e05" - integrity sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w== +"@typescript-eslint/experimental-utils@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.7.0.tgz#2b1633e6613c3238036156f70c32634843ad034f" + integrity sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.3.1" - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/typescript-estree" "5.3.1" + "@typescript-eslint/scope-manager" "5.7.0" + "@typescript-eslint/types" "5.7.0" + "@typescript-eslint/typescript-estree" "5.7.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.1.tgz#8ff1977c3d3200c217b3e4628d43ef92f89e5261" - integrity sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw== +"@typescript-eslint/parser@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.7.0.tgz#4dca6de463d86f02d252e681136a67888ea3b181" + integrity sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g== dependencies: - "@typescript-eslint/scope-manager" "5.3.1" - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/typescript-estree" "5.3.1" + "@typescript-eslint/scope-manager" "5.7.0" + "@typescript-eslint/types" "5.7.0" + "@typescript-eslint/typescript-estree" "5.7.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz#3cfbfbcf5488fb2a9a6fbbe97963ee1e8d419269" - integrity sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg== +"@typescript-eslint/scope-manager@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.7.0.tgz#70adf960e5a58994ad50438ba60d98ecadd79452" + integrity sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA== dependencies: - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/visitor-keys" "5.3.1" + "@typescript-eslint/types" "5.7.0" + "@typescript-eslint/visitor-keys" "5.7.0" -"@typescript-eslint/types@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.1.tgz#afaa715b69ebfcfde3af8b0403bf27527912f9b7" - integrity sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ== +"@typescript-eslint/types@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.7.0.tgz#2d4cae0105ba7d08bffa69698197a762483ebcbe" + integrity sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA== -"@typescript-eslint/typescript-estree@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz#50cc4bfb93dc31bc75e08ae52e29fcb786d606ec" - integrity sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ== +"@typescript-eslint/typescript-estree@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.7.0.tgz#968fad899050ccce4f08a40cd5fabc0798525006" + integrity sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg== dependencies: - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/visitor-keys" "5.3.1" + "@typescript-eslint/types" "5.7.0" + "@typescript-eslint/visitor-keys" "5.7.0" debug "^4.3.2" globby "^11.0.4" is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz#c2860ff22939352db4f3806f34b21d8ad00588ba" - integrity sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ== +"@typescript-eslint/visitor-keys@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.7.0.tgz#e05164239eb7cb8aa9fa06c516ede480ce260178" + integrity sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg== dependencies: - "@typescript-eslint/types" "5.3.1" + "@typescript-eslint/types" "5.7.0" eslint-visitor-keys "^3.0.0" -"@vitejs/plugin-react-refresh@^1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.6.tgz#19818392db01e81746cfeb04e096ab3010e79fe3" - integrity sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA== - dependencies: - "@babel/core" "^7.14.8" - "@babel/plugin-transform-react-jsx-self" "^7.14.5" - "@babel/plugin-transform-react-jsx-source" "^7.14.5" +"@vitejs/plugin-react@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-1.1.3.tgz#0a649db2ea4637fd188adb36502b59da05ff6303" + integrity sha512-xv8QujX/uR4ti8qpt0hMriM2bdpxX4jm4iU6GAZfCwHjh/ewkX/8DJgnmQpE0HSJmgz8dixyUnRJKi2Pf1nNoQ== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-react-jsx-development" "^7.16.0" + "@babel/plugin-transform-react-jsx-self" "^7.16.0" + "@babel/plugin-transform-react-jsx-source" "^7.16.0" "@rollup/pluginutils" "^4.1.1" - react-refresh "^0.10.0" + react-refresh "^0.11.0" + resolve "^1.20.0" -"@windicss/config@1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@windicss/config/-/config-1.5.1.tgz#e3fdaddfc553442c85f67f2e9290ef46ce87b3a1" - integrity sha512-nWNgvvJj9RcYhLcqwju/Z8FfaHRjyWHDYS3IgY7lWUM+vWTLFuKqhavKfC1589kdYjiO9JeX07Vg+YzfcxP0Yw== +"@windicss/config@1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@windicss/config/-/config-1.5.4.tgz#69b10fb02cfea1103a4ca9a65a738ef7d3734b29" + integrity sha512-muRPFulqh7nU3VrsPb5+k6ulNyiw8VGg62zAWRZIBfeCRXZb2gV1Q8a/tPn8X1T/+HTt4f/1bzFiusqMKscmlw== dependencies: - debug "^4.3.2" + debug "^4.3.3" jiti "^1.12.9" windicss "^3.2.1" -"@windicss/plugin-utils@1.5.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.5.1.tgz#9750bb72e8c14585e011d46a33351d47d8519e31" - integrity sha512-gxJiTCMKv1p1x4W2BLG2yfNe+DfIVPc8+aKvfCUCtOpdg5GB5yzhuAC4ROsKiXHxu4QXoojrh7jXH6ELlrELpQ== +"@windicss/plugin-utils@1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@windicss/plugin-utils/-/plugin-utils-1.5.4.tgz#a283b1fe040b9559542462c80bbf1db9fd2850e8" + integrity sha512-fS4y52OYB9rIzEUolIWIrrHYuaQfcqTaX3ISbFUiNbvNgH97JATjzB2iOnNqWNy6pH3M8RP0TqYQOOCCeanDoA== dependencies: "@antfu/utils" "^0.3.0" - "@windicss/config" "1.5.1" - debug "^4.3.2" + "@windicss/config" "1.5.4" + debug "^4.3.3" fast-glob "^3.2.7" magic-string "^0.25.7" micromatch "^4.0.4" windicss "^3.2.1" +"@xmldom/xmldom@^0.7.2": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" + integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== + acorn-class-fields@^0.3.7: version "0.3.7" resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720" @@ -678,16 +876,11 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.0.4: +acorn@^8.0.4, acorn@^8.6.0: version "8.6.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== -acorn@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" - integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -696,19 +889,15 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ahooks@^2.10.12: - version "2.10.12" - resolved "https://registry.yarnpkg.com/ahooks/-/ahooks-2.10.12.tgz#e8cab653039434279e69569a8342c602b3545dab" - integrity sha512-X3nZwr6+CSi1XjGyd/tQU1vF11mNaP4Bo0pdEdUL2ksBURQl0QZvDeUMrKBYHAStq7852P20ycVgu405XxDlFg== +ahooks@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ahooks/-/ahooks-3.0.1.tgz#092a0fdc4083fb8d4ec48ce0115e1d91343468d9" + integrity sha512-/qIFqEmIQevlp7MPV/VMNTx2dvy6fr7VsnDDEIJ3dp82P0XFREHRRlkdrbsivXBEX7r1LU4KihEkjgKbXyrgFg== dependencies: - "@ahooksjs/use-request" "^2.8.13" - "@types/js-cookie" "^2.2.6" dayjs "^1.9.1" intersection-observer "^0.7.0" - js-cookie "^2.2.1" - lodash.debounce "^4.0.8" - lodash.isequal "^4.5.0" - lodash.throttle "^4.1.1" + js-cookie "^3.0.0" + lodash "^4.17.21" resize-observer-polyfill "^1.5.1" screenfull "^5.0.0" @@ -727,7 +916,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -763,10 +952,10 @@ ansi-styles@^6.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== -antd@^4.17.2: - version "4.17.2" - resolved "https://registry.yarnpkg.com/antd/-/antd-4.17.2.tgz#c50123e6da990d8a41bc1ed6fbfc6d587b014ae0" - integrity sha512-1/xwj72mzg2ly5byvnxsgucEL5JMrinlsaAr4Y+vjobmTBSI9l9zOVkwwOG8kPIrFkhrzC1I42n6GZKnTwfZmg== +antd@^4.17.3: + version "4.17.3" + resolved "https://registry.yarnpkg.com/antd/-/antd-4.17.3.tgz#48e2cfaec75cb414782a16918c0f322af1f2d509" + integrity sha512-enA6rsOAGtw0uN+khzvPoCui9j6m1ZvtAHY2IWC/mOUIwfycC8iuToND9ptAqeNF5yX8RZhFubmcc7Xeqk6wWg== dependencies: "@ant-design/colors" "^6.0.0" "@ant-design/icons" "^4.7.0" @@ -779,7 +968,7 @@ antd@^4.17.2: lodash "^4.17.21" memoize-one "^6.0.0" moment "^2.25.3" - rc-cascader "~2.2.0" + rc-cascader "~2.3.0" rc-checkbox "~2.3.0" rc-collapse "~3.1.0" rc-dialog "~8.6.0" @@ -796,8 +985,8 @@ antd@^4.17.2: rc-picker "~2.5.17" rc-progress "~3.1.0" rc-rate "~2.9.0" - rc-resize-observer "^1.0.0" - rc-select "~13.1.0-alpha.0" + rc-resize-observer "^1.1.0" + rc-select "~13.2.1" rc-slider "~9.7.4" rc-steps "~4.1.0" rc-switch "~3.2.0" @@ -806,12 +995,20 @@ antd@^4.17.2: rc-textarea "~0.3.0" rc-tooltip "~5.1.1" rc-tree "~5.3.0" - rc-tree-select "~4.7.0" + rc-tree-select "~4.8.0" rc-trigger "^5.2.10" rc-upload "~4.3.0" rc-util "^5.14.0" scroll-into-view-if-needed "^2.2.25" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + append-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" @@ -878,6 +1075,25 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -886,7 +1102,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -914,6 +1130,19 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cac@^6.7.12: + version "6.7.12" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.12.tgz#6fb5ea2ff50bd01490dbda497f4ae75a99415193" + integrity sha512-rM7E2ygtMkJqD9c7WnFU6fruFcN3xe4FM5yUmgxhZzIKJk4uHl9U/fhwdajGFQbQuv43FAUo1Fe8gX/oIKDeSA== + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -937,6 +1166,14 @@ caniuse-lite@^1.0.30001280: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz#066a506046ba4be34cde5f74a08db7a396718fb7" integrity sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA== +chalk@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -946,7 +1183,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -954,12 +1191,47 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.4.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + ci-info@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== -classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6: +classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== @@ -976,13 +1248,10 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-truncate@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" +cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-truncate@^2.1.0: version "2.1.0" @@ -992,6 +1261,19 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -1020,6 +1302,11 @@ clone-stats@^1.0.0: resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + clone@^2.1.1, clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -1068,7 +1355,12 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -commander@^2.7.1: +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@2, commander@^2.7.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -1093,6 +1385,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + convert-source-map@^1.5.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -1100,6 +1397,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + copy-anything@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" @@ -1119,17 +1421,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1144,6 +1435,16 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.9.tgz#6410af31b26bd0520933d02cbc64fce9ce3fbf0b" integrity sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw== +d3-array@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== + +d3-polygon@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.6.tgz#0bf8cb8180a6dc107f518ddf7975e12abbfbd38e" + integrity sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ== + date-fns@2.x: version "2.25.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.25.0.tgz#8c5c8f1d958be3809a9a03f4b742eba894fc5680" @@ -1182,11 +1483,6 @@ debug@^4.3.3: dependencies: ms "2.1.2" -deep-diff@^0.3.5: - version "0.3.8" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" - integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1197,6 +1493,13 @@ deepmerge@^4.0.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1248,6 +1551,11 @@ duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +earcut@^2.1.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.3.tgz#d44ced2ff5a18859568e327dd9c7d46b16f55cf4" + integrity sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug== + electron-to-chromium@^1.3.896: version "1.3.896" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.896.tgz#4a94efe4870b1687eafd5c378198a49da06e8a1b" @@ -1270,7 +1578,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -1294,13 +1602,6 @@ errno@^0.1.1: dependencies: prr "~1.0.1" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" @@ -1341,113 +1642,113 @@ es6-promise@^3.2.1: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" integrity sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM= -esbuild-android-arm64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.13.tgz#da07b5fb2daf7d83dcd725f7cf58a6758e6e702a" - integrity sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ== - -esbuild-darwin-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.13.tgz#e94e9fd3b4b5455a2e675cd084a19a71b6904bbf" - integrity sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA== - -esbuild-darwin-arm64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.13.tgz#8c320eafbb3ba2c70d8062128c5b71503e342471" - integrity sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g== - -esbuild-freebsd-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.13.tgz#ce0ca5b8c4c274cfebc9326f9b316834bd9dd151" - integrity sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A== - -esbuild-freebsd-arm64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.13.tgz#463da17562fdcfdf03b3b94b28497d8d8dcc8f62" - integrity sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw== - -esbuild-linux-32@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.13.tgz#2035793160da2c4be48a929e5bafb14a31789acc" - integrity sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w== - -esbuild-linux-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.13.tgz#fbe4802a8168c6d339d0749f977b099449b56f22" - integrity sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw== - -esbuild-linux-arm64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.13.tgz#f08d98df28d436ed4aad1529615822bb74d4d978" - integrity sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng== - -esbuild-linux-arm@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.13.tgz#6f968c3a98b64e30c80b212384192d0cfcb32e7f" - integrity sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ== - -esbuild-linux-mips64le@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.13.tgz#690c78dc4725efe7d06a1431287966fbf7774c7f" - integrity sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w== - -esbuild-linux-ppc64le@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.13.tgz#7ec9048502de46754567e734aae7aebd2df6df02" - integrity sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ== - -esbuild-netbsd-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.13.tgz#439bdaefffa03a8fa84324f5d83d636f548a2de3" - integrity sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ== - -esbuild-openbsd-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.13.tgz#c9958e5291a00a3090c1ec482d6bcdf2d5b5d107" - integrity sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w== - -esbuild-sunos-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.13.tgz#ac9ead8287379cd2f6d00bd38c5997fda9c1179e" - integrity sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ== - -esbuild-windows-32@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.13.tgz#a3820fc86631ca594cb7b348514b5cc3f058cfd6" - integrity sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw== - -esbuild-windows-64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.13.tgz#1da748441f228d75dff474ddb7d584b81887323c" - integrity sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA== - -esbuild-windows-arm64@0.13.13: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.13.tgz#06dfa52a6b178a5932a9a6e2fdb240c09e6da30c" - integrity sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A== - -esbuild@^0.13.2: - version "0.13.13" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.13.tgz#0b5399c20f219f663c8c1048436fb0f59ab17a41" - integrity sha512-Z17A/R6D0b4s3MousytQ/5i7mTCbaF+Ua/yPfoe71vdTv4KBvVAvQ/6ytMngM2DwGJosl8WxaD75NOQl2QF26Q== +esbuild-android-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" + integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== + +esbuild-darwin-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" + integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== + +esbuild-darwin-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" + integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== + +esbuild-freebsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" + integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== + +esbuild-freebsd-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" + integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== + +esbuild-linux-32@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" + integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== + +esbuild-linux-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" + integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== + +esbuild-linux-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" + integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== + +esbuild-linux-arm@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" + integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== + +esbuild-linux-mips64le@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" + integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== + +esbuild-linux-ppc64le@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" + integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== + +esbuild-netbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" + integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== + +esbuild-openbsd-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" + integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== + +esbuild-sunos-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" + integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== + +esbuild-windows-32@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" + integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== + +esbuild-windows-64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" + integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== + +esbuild-windows-arm64@0.13.15: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" + integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== + +esbuild@^0.13.12: + version "0.13.15" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" + integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== optionalDependencies: - esbuild-android-arm64 "0.13.13" - esbuild-darwin-64 "0.13.13" - esbuild-darwin-arm64 "0.13.13" - esbuild-freebsd-64 "0.13.13" - esbuild-freebsd-arm64 "0.13.13" - esbuild-linux-32 "0.13.13" - esbuild-linux-64 "0.13.13" - esbuild-linux-arm "0.13.13" - esbuild-linux-arm64 "0.13.13" - esbuild-linux-mips64le "0.13.13" - esbuild-linux-ppc64le "0.13.13" - esbuild-netbsd-64 "0.13.13" - esbuild-openbsd-64 "0.13.13" - esbuild-sunos-64 "0.13.13" - esbuild-windows-32 "0.13.13" - esbuild-windows-64 "0.13.13" - esbuild-windows-arm64 "0.13.13" + esbuild-android-arm64 "0.13.15" + esbuild-darwin-64 "0.13.15" + esbuild-darwin-arm64 "0.13.15" + esbuild-freebsd-64 "0.13.15" + esbuild-freebsd-arm64 "0.13.15" + esbuild-linux-32 "0.13.15" + esbuild-linux-64 "0.13.15" + esbuild-linux-arm "0.13.15" + esbuild-linux-arm64 "0.13.15" + esbuild-linux-mips64le "0.13.15" + esbuild-linux-ppc64le "0.13.15" + esbuild-netbsd-64 "0.13.15" + esbuild-openbsd-64 "0.13.15" + esbuild-sunos-64 "0.13.15" + esbuild-windows-32 "0.13.15" + esbuild-windows-64 "0.13.15" + esbuild-windows-arm64 "0.13.15" escalade@^3.1.1: version "3.1.1" @@ -1533,10 +1834,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" - integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1553,18 +1854,18 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" - integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== +eslint@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.4.1.tgz#d6531bbf3e598dffd7c0c7d35ec52a0b30fdfa2d" + integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg== dependencies: - "@eslint/eslintrc" "^1.0.4" - "@humanwhocodes/config-array" "^0.6.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -1572,10 +1873,10 @@ eslint@^8.2.0: doctrine "^3.0.0" enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^6.0.0" + eslint-scope "^7.1.0" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.2.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -1602,14 +1903,14 @@ eslint@^8.2.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" - integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== +espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: - acorn "^8.5.0" + acorn "^8.6.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.0.0" + eslint-visitor-keys "^3.1.0" esprima-next@^5.7.0: version "5.7.0" @@ -1650,6 +1951,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -1670,6 +1976,15 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1708,6 +2023,20 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1742,6 +2071,18 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== +flubber@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/flubber/-/flubber-0.4.2.tgz#14452d4a838cc3b9f2fb6175da94e35acd55fbaa" + integrity sha512-79RkJe3rA4nvRCVc2uXjj7U/BAUq84TS3KHn6c0Hr9K64vhj83ZNLUziNx4pJoBumSPhOl5VjH+Z0uhi+eE8Uw== + dependencies: + d3-array "^1.2.0" + d3-polygon "^1.0.3" + earcut "^2.1.1" + svg-path-properties "^0.2.1" + svgpath "^2.2.1" + topojson-client "^3.0.0" + flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -1750,6 +2091,11 @@ flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -1778,6 +2124,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +fuse.js@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.5.3.tgz#7446c0acbc4ab0ab36fa602e97499bdb69452b93" + integrity sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1818,7 +2169,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1899,6 +2250,11 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graphql@^15.5.1: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + gulp-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" @@ -1921,11 +2277,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-flag@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-5.0.1.tgz#5483db2ae02a472d1d0691462fc587d1843cd940" - integrity sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA== - has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" @@ -1945,6 +2296,32 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +headers-utils@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/headers-utils/-/headers-utils-3.0.2.tgz#dfc65feae4b0e34357308aefbcafa99c895e59ef" + integrity sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ== + +highlight.js@^10.4.1, highlight.js@~10.7.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + history@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/history/-/history-5.1.0.tgz#2e93c09c064194d38d52ed62afd0afc9d9b01ece" @@ -1959,6 +2336,11 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" +html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-parse-stringify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" @@ -2014,20 +2396,32 @@ i18next-scanner@^3.1.0: vinyl "^2.2.0" vinyl-fs "^3.0.1" -i18next@*, i18next@^21.5.3: +i18next@*: version "21.5.3" resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.5.3.tgz#b2d4fd24bef7ea4ec4eba2ed3cadc0c28c0e3b4c" integrity sha512-9R8127a0/N5okiD7eeo6XBPQsHgHsLr1GdQEa35Pcw305ArC9KZDLs9kbgdn3xuVUNYlVu8+gWzz73eVkna0gA== dependencies: "@babel/runtime" "^7.12.0" -iconv-lite@^0.4.4: +i18next@^21.6.0: + version "21.6.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.6.0.tgz#257abf455b24136640a20728b44cf59f60cdeb5c" + integrity sha512-RjNuACL35wWZgtkyMcjcCmK7R72u3P6jTNbGKzrvHGI9M0iK5Vn1DsBIwOByppaXLIbe0viJ79Nz2h8w1UwPoQ== + dependencies: + "@babel/runtime" "^7.12.0" + +iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -2043,10 +2437,10 @@ image-size@~0.5.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= -immer@^9.0.6: - version "9.0.6" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" - integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== +immer@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.7.tgz#b6156bd7db55db7abc73fd2fdadf4e579a701075" + integrity sha512-KGllzpbamZDvOIxnmJ0jI840g7Oikx58lBPWV0hUh7dtAyZpFqqrBZdKka5GlTwMTZ1Tjc/bKKW4VSFAt6BqMA== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -2074,11 +2468,31 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inquirer@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.2.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -2106,10 +2520,18 @@ is-absolute@^1.0.0: is-relative "^1.0.0" is-windows "^1.0.1" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" is-bigint@^1.0.1: version "1.0.4" @@ -2118,6 +2540,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -2157,6 +2586,16 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2179,13 +2618,23 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" @@ -2196,6 +2645,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-node-process@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.0.1.tgz#4fc7ac3a91e8aac58175fe0578abbc56f2831b23" + integrity sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ== + is-number-object@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" @@ -2261,6 +2715,11 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -2288,6 +2747,13 @@ is-windows@^1.0.1: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2308,10 +2774,15 @@ jiti@^1.12.9: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.12.9.tgz#2ce45b265cfc8dc91ebd70a5204807cf915291bc" integrity sha512-TdcJywkQtcwLxogc4rSMAi479G2eDPzfW0fLySks7TPhgZZ4s/tM6stnzayIh3gS/db3zExWJyUx4cNWrwAmoQ== -js-cookie@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" - integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== +js-cookie@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" + integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== + +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -2330,11 +2801,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2379,6 +2845,11 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kolorist@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/kolorist/-/kolorist-1.5.0.tgz#a06f7dd11d1b5fdb743d79c8acd4e1ecbcbd89b3" + integrity sha512-pPobydIHK884YBtkS/tWSZXpSAEpcMbilyun3KL37ot935qL2HNKm/tI45i/Rd+MxdIWEhm7/LmUQzWZYK+Qhg== + lazystream@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" @@ -2418,28 +2889,30 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +lilconfig@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== -lint-staged@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.0.1.tgz#796bdfce87c5557bfea1497f7c6c4a7da3ffc338" - integrity sha512-4sqWnR+uhhRzqtOmkMPr0EWogeYMg9JwGxNErlxA8NzMTFv8dI93Be5htXMODfr/Sj9WVwCtjJntq9sJ6wpwvQ== +lint-staged@^12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.2.tgz#90c571927e1371fc133e720671dd7989eab53f74" + integrity sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A== dependencies: - cli-truncate "3.1.0" + cli-truncate "^3.1.0" colorette "^2.0.16" commander "^8.3.0" - cosmiconfig "^7.0.1" debug "^4.3.2" + enquirer "^2.3.6" execa "^5.1.1" + lilconfig "2.0.4" listr2 "^3.13.3" micromatch "^4.0.4" normalize-path "^3.0.0" - object-inspect "1.11.0" - string-argv "0.3.1" - supports-color "9.0.2" + object-inspect "^1.11.0" + string-argv "^0.3.1" + supports-color "^9.0.2" + yaml "^1.10.2" listr2@^3.13.3: version "3.13.3" @@ -2463,11 +2936,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -2483,16 +2951,19 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - lodash@^4.0.0, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -2517,6 +2988,14 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowlight@^1.17.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" + integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== + dependencies: + fault "^1.0.0" + highlight.js "~10.7.0" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2604,7 +3083,49 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@^3.1.30: +msw-auto-mock@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/msw-auto-mock/-/msw-auto-mock-0.5.0.tgz#c7e0eadf0be380f14b3cc5a568f106dee9cc8ddd" + integrity sha512-FYHckfLoaX0j9owt7nJnlCQKgAX+GFoUsfKhPD1BT53m5m/rJ4jwyGGxWyqas0Vj9/KESgSEWI+RXh+aTrz1Hg== + dependencies: + "@apidevtools/swagger-parser" "^10.0.3" + cac "^6.7.12" + oazapfts "^3.5.0" + prettier "2.5.1" + swagger2openapi "^7.0.8" + +msw@^0.36.3: + version "0.36.3" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.36.3.tgz#7feb243a5fcf563806d45edc027bc36144741170" + integrity sha512-Itzp/QhKaleZoslXDrNik3ramW9ynqzOdbwydX2ehBSSaZd5QoiAl/bHYcV33R6CEZcJgIX1N4s+G6XkF/bhkA== + dependencies: + "@mswjs/cookies" "^0.1.6" + "@mswjs/interceptors" "^0.12.7" + "@open-draft/until" "^1.0.3" + "@types/cookie" "^0.4.1" + "@types/inquirer" "^8.1.3" + "@types/js-levenshtein" "^1.1.0" + chalk "4.1.1" + chokidar "^3.4.2" + cookie "^0.4.1" + graphql "^15.5.1" + headers-utils "^3.0.2" + inquirer "^8.2.0" + is-node-process "^1.0.1" + js-levenshtein "^1.1.6" + node-fetch "^2.6.1" + path-to-regexp "^6.2.0" + statuses "^2.0.0" + strict-event-emitter "^0.2.0" + type-fest "^1.2.2" + yargs "^17.3.0" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nanoid@^3.1.22, nanoid@^3.1.30: version "3.1.30" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== @@ -2664,7 +3185,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -2745,7 +3266,7 @@ object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@1.11.0, object-inspect@^1.11.0, object-inspect@^1.9.0: +object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== @@ -2814,6 +3335,14 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + openapi-types@^9.1.0: version "9.3.1" resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-9.3.1.tgz#617ae6db3efd3e3f68e849f65ced58801d01d3cf" @@ -2831,6 +3360,21 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + ordered-read-streams@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" @@ -2838,6 +3382,16 @@ ordered-read-streams@^1.0.0: dependencies: readable-stream "^2.0.1" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +outvariant@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" + integrity sha512-bcILvFkvpMXh66+Ubax/inxbKRyWTUiiFIW2DWkiS79wakrLGn3Ydy+GvukadiyfZjaL6C7YhIem4EZSM282wA== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -2879,15 +3433,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" parse-node-version@^1.0.1: version "1.0.1" @@ -2924,17 +3480,27 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" + integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.2.2, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== @@ -2951,25 +3517,35 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -postcss@^8.3.8: - version "8.3.11" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858" - integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA== +postcss@^8.4.5: + version "8.4.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== dependencies: nanoid "^3.1.30" picocolors "^1.0.0" - source-map-js "^0.6.2" + source-map-js "^1.0.1" prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.2.1, prettier@^2.4.1: +prettier@2.5.1, prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + +prettier@^2.2.1: version "2.4.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== +prismjs@^1.25.0, prismjs@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756" + integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg== + process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2989,6 +3565,13 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -3021,6 +3604,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + rc-align@^4.0.0: version "4.0.11" resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e" @@ -3033,16 +3623,17 @@ rc-align@^4.0.0: rc-util "^5.3.0" resize-observer-polyfill "^1.5.1" -rc-cascader@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-2.2.1.tgz#ec6cfa9d631e6e787abedb2db8c6b014ba1e15b6" - integrity sha512-4saWcwpmxxh5fhUdaDgOLF2gWL8KNxLwWqELX702HNXEt2yU7AixjfvgEORNsnQZleT2W2AaGMkRDeWrwt8fMw== +rc-cascader@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-2.3.2.tgz#17899efa1bb4334fb604250f201d85fafca718eb" + integrity sha512-6Zw9u5Shg6JT823SDsR9aanx1V2EuzN8oTyrDBTQGHNjlm4eD++3OFguj+FApFyINtVdQh7faa0XNky0dSmWgw== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" - rc-tree-select "~4.7.0" + classnames "^2.3.1" + rc-tree-select "~4.8.0" rc-trigger "^5.0.4" - rc-util "^5.0.1" + rc-util "^5.6.1" warning "^4.0.1" rc-checkbox@~2.3.0: @@ -3204,6 +3795,14 @@ rc-progress@~3.1.0: "@babel/runtime" "^7.10.1" classnames "^2.2.6" +rc-queue-anim@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/rc-queue-anim/-/rc-queue-anim-2.0.0.tgz#e78cf9c0f333cb41327e9ed603357f156d0ddce2" + integrity sha512-tojpP72NbaWkwzmR/7x4gFpTBCYR/8I3Jb+KwSdOWpRIDrlmsA4ARAqSElG92GJ7CXAIjxavIGulcqJhXfzHYQ== + dependencies: + "@babel/runtime" "^7.11.1" + tween-one "^1.0.52" + rc-rate@~2.9.0: version "2.9.1" resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.9.1.tgz#e43cb95c4eb90a2c1e0b16ec6614d8c43530a731" @@ -3223,10 +3822,20 @@ rc-resize-observer@^1.0.0: rc-util "^5.0.0" resize-observer-polyfill "^1.5.1" -rc-select@~13.1.0-alpha.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-13.1.1.tgz#851315d08a743504db57c7a5358cc907b69b45a5" - integrity sha512-Oy4L27x5QgGR8902pw0bJVjrTWFnKPKvdLHzJl5pjiA+jM1hpzDfLGg/bY2ntk5ElxxQKZUwbFKUeqfCQU7SrQ== +rc-resize-observer@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.1.1.tgz#ef666e38065f550730176404bae2ce8ca5fb1ac4" + integrity sha512-5A3B9ha297ItltzXl812WFE36SyRDTNclfrXE3FL1pEwXkBh7iSEzxjzfwsPeMcF9ahy3ZoxLgLuRksXBGGD6A== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-util "^5.15.0" + resize-observer-polyfill "^1.5.1" + +rc-select@~13.2.1: + version "13.2.1" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-13.2.1.tgz#d69675f8bc72622a8f3bc024fa21bfee8d56257d" + integrity sha512-L2cJFAjVEeDiNVa/dlOVKE79OUb0J7sUBvWN3Viav3XHcjvv9Ovn4D8J9QhBSlDXeGuczZ81CZI3BbdHD25+Gg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -3306,14 +3915,14 @@ rc-tooltip@^5.0.1, rc-tooltip@~5.1.1: "@babel/runtime" "^7.11.2" rc-trigger "^5.0.0" -rc-tree-select@~4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-4.7.0.tgz#4e612d5ba3f30a51f590e3c0e38e1e4c49f34aef" - integrity sha512-xcc2yPpQieTW6BcRkcKbT1dcAYCQ7ARtkoHlS9EsNdd6xgw9LA6rek6PMed8r/VRMfiKtWV4c4xijW5PI6s4Rw== +rc-tree-select@~4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-4.8.0.tgz#bcbcfb45553f84a878e4ff037ff00b526a4afa62" + integrity sha512-evuVIF7GHCGDdvISdBWl4ZYmG/8foof/RDtzCu/WFLA1tFKZD77RRC3khEsjh4WgsB0vllLe7j+ODJ7jHRcDRQ== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - rc-select "~13.1.0-alpha.0" + rc-select "~13.2.1" rc-tree "~5.3.0" rc-util "^5.7.0" @@ -3357,6 +3966,15 @@ rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.0.7, rc-util@^5.12.0, react-is "^16.12.0" shallowequal "^1.1.0" +rc-util@^5.15.0: + version "5.16.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.16.1.tgz#374db7cb735512f05165ddc3d6b2c61c21b8b4e3" + integrity sha512-kSCyytvdb3aRxQacS/71ta6c+kBWvM1v8/2h9d/HaNWauc3qB8pLnF20PJ8NajkNN8gb+rR1l0eWO+D4Pz+LLQ== + dependencies: + "@babel/runtime" "^7.12.5" + react-is "^16.12.0" + shallowequal "^1.1.0" + rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.1: version "3.4.2" resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.4.2.tgz#1078327aa7230b5e456d679ed2ce99f3c036ebd1" @@ -3375,12 +3993,13 @@ react-dom@^17.0.2: object-assign "^4.1.1" scheduler "^0.20.2" -react-i18next@^11.14.3: - version "11.14.3" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.14.3.tgz#b44b5c4d1aadac5211be011827a2830be60f2522" - integrity sha512-Hf2aanbKgYxPjG8ZdKr+PBz9sY6sxXuZWizxCYyJD2YzvJ0W9JTQcddVEjDaKyBoCyd3+5HTerdhc9ehFugc6g== +react-i18next@^11.15.1: + version "11.15.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.15.1.tgz#1dec5f2bf2cf7bc5043e9fcb391c9d6e24bb9bfe" + integrity sha512-lnje1uKu5XeM5MLvfbt1oygF+nEIZnpOM4Iu8bkx5ECD4XRYgi3SJDmolrp0EDxDHeK2GgFb+vEEK0hsZ9sjeA== dependencies: "@babel/runtime" "^7.14.5" + html-escaper "^2.0.2" html-parse-stringify "^3.0.1" react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: @@ -3405,26 +4024,37 @@ react-redux@^7.2.6: prop-types "^15.7.2" react-is "^17.0.2" -react-refresh@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" - integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.0.2.tgz#860cefa697b9d4965eced3f91e82cdbc5995f3ad" - integrity sha512-cOpJ4B6raFutr0EG8O/M2fEoyQmwvZWomf1c6W2YXBZuFBx8oTk/zqjXghwScyhfrtnt0lANXV2182NQblRxFA== +react-router-dom@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.1.1.tgz#ed59376ff9115bc49227e87982a32e91e9530ca3" + integrity sha512-O3UH89DI4o+swd2q6lF4dSmpuNCxwkUXcj0zAFcVc1H+YoPE6T7uwoFMX0ws1pUvCY8lYDucFpOqCCdal6VFzg== dependencies: history "^5.1.0" - react-router "6.0.2" + react-router "6.1.1" -react-router@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.0.2.tgz#bd2b0fa84fd1d152671e9f654d9c0b1f5a7c86da" - integrity sha512-8/Wm3Ed8t7TuedXjAvV39+c8j0vwrI5qVsYqjFr5WkJjsJpEvNSoLRUbtqSEYzqaTUj1IV+sbPJxvO+accvU0Q== +react-router@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.1.1.tgz#16f41bf54e87d995bcd4d447720a693f77d8fcb9" + integrity sha512-55o96RiDZmC0uD17DPqVmzzfdNd2Dc+EjkYvMAmHl43du/GItaTdFr5WwjTryNWPXZ+OOVQxQhwAX25UwxpHtw== dependencies: history "^5.1.0" +react-syntax-highlighter@^15.4.5: + version "15.4.5" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.4.5.tgz#db900d411d32a65c8e90c39cd64555bf463e712e" + integrity sha512-RC90KQTxZ/b7+9iE6s9nmiFLFjWswUcfULi4GwVzdFVKVMQySkJWBuOmJFfjwjMVCo0IUUuJrWebNKyviKpwLQ== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "^10.4.1" + lowlight "^1.17.0" + prismjs "^1.25.0" + refractor "^3.2.0" + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -3433,7 +4063,7 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -readable-stream@3: +readable-stream@3, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -3455,6 +4085,13 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -3472,25 +4109,27 @@ recrawl-sync@^2.0.3: slash "^3.0.0" tslib "^1.9.3" -redux-logger@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" - integrity sha1-91VZZvMJjzyIYExEnPC69XeCdL8= - dependencies: - deep-diff "^0.3.5" - -redux-thunk@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.0.tgz#ac89e1d6b9bdb9ee49ce69a69071be41bbd82d67" - integrity sha512-/y6ZKQNU/0u8Bm7ROLq9Pt/7lU93cT0IucYMrubo89ENjxPa7i8pqLKu6V4X7/TvYovQ6x01unTeyeZ9lgXiTA== +redux-thunk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== -redux@^4.0.0, redux@^4.1.0: +redux@^4.0.0, redux@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== dependencies: "@babel/runtime" "^7.9.2" +refractor@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.5.0.tgz#334586f352dda4beaf354099b48c2d18e0819aec" + integrity sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg== + dependencies: + hastscript "^6.0.0" + parse-entities "^2.0.0" + prismjs "~1.25.0" + reftools@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" @@ -3546,10 +4185,10 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -reselect@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.2.tgz#7bf642992d143d4f3b0f2dca8aa52018808a1d51" - integrity sha512-wg60ebcPOtxcptIUfrr7Jt3h4BR86cCW3R7y4qt65lnNb4yz4QgrXcbSioVsIOYguyz42+XTHIyJ5TEruzkFgQ== +reselect@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" + integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== reset-css@^5.0.1: version "5.0.1" @@ -3609,13 +4248,28 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^2.57.0: - version "2.60.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.60.0.tgz#4ee60ab7bdd0356763f87d7099f413e5460fc193" - integrity sha512-cHdv9GWd58v58rdseC8e8XIaPUo8a9cgZpnCMMDGZFDZKEODOiPPEQFXLriWr/TjXzhPPmG5bkAztPsOARIcGQ== +rollup-plugin-visualizer@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.5.2.tgz#ae2130ee5ae4a2d901e764e492b71357cb95eed7" + integrity sha512-sh+P9KhuWTzeStyRA5yNZpoEFGuj5Ph34JLMa9+muhU8CneFf9L0XE4fmAwAojJLWp//uLUEyytBPSCdZEg5AA== + dependencies: + nanoid "^3.1.22" + open "^7.4.2" + source-map "^0.7.3" + yargs "^16.2.0" + +rollup@^2.59.0: + version "2.62.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.62.0.tgz#9e640b419fc5b9e0241844f6d55258bd79986ecc" + integrity sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw== optionalDependencies: fsevents "~2.3.2" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -3623,6 +4277,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.2.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" + integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== + dependencies: + tslib "^2.1.0" + rxjs@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" @@ -3687,6 +4348,11 @@ semver@^7.2.1, semver@^7.3.5: dependencies: lru-cache "^6.0.0" +set-cookie-parser@^2.4.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" + integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -3814,10 +4480,10 @@ sortobject@^4.0.0: resolved "https://registry.yarnpkg.com/sortobject/-/sortobject-4.16.0.tgz#9f1deca8da47f0d2da0a9100d9b0a407fd9d7b3f" integrity sha512-jdcWhqJjxyYxRcXa30qImF3PZea1GpNwdKxUac28T28+GodptH4XihPuRlgCY0hITIEQVnw8DtQ81Fb6fomBaw== -source-map-js@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" - integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== +source-map-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" + integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== source-map-support@^0.5.19: version "0.5.20" @@ -3837,17 +4503,39 @@ source-map@^0.6.0, source-map@~0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +statuses@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string-argv@0.3.1: +strict-event-emitter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz#78e2f75dc6ea502e5d8a877661065a1e2deedecd" + integrity sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w== + dependencies: + events "^3.3.0" + +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -3857,7 +4545,7 @@ string-convert@^0.2.0: resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3948,12 +4636,10 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.0.2.tgz#50f082888e4b0a4e2ccd2d0b4f9ef4efcd332485" - integrity sha512-ii6tc8ImGFrgMPYq7RVAMKkhPo9vk8uA+D3oKbJq/3Pk2YSMv1+9dUAesa9UxMbxBTvxwKTQffBahNVNxEvM8Q== - dependencies: - has-flag "^5.0.0" +style-utils@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/style-utils/-/style-utils-0.3.4.tgz#ff407c360d3b5c1a0971279586e39ce27251064f" + integrity sha512-7hUxeI95H6J0REP/7Y4WTPj0YsRrKljWIz0Q3Tex1nzzba9xAgGOnm3dr5qwsvEbAHcgu0V/sXfZDdqZ/tDtfg== supports-color@^5.3.0: version "5.5.0" @@ -3969,7 +4655,27 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -swagger2openapi@^7.0.4, swagger2openapi@^7.0.7: +supports-color@^9.0.2: + version "9.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" + integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== + +svg-path-properties@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/svg-path-properties/-/svg-path-properties-0.2.2.tgz#b073d81be7292eae0e233ab8a83f58dc27113296" + integrity sha1-sHPYG+cpLq4OIzq4qD9Y3CcRMpY= + +svg-path-properties@^1.0.4: + version "1.0.11" + resolved "https://registry.yarnpkg.com/svg-path-properties/-/svg-path-properties-1.0.11.tgz#d804b77dea286ddd56bd182548b9c4f5980dcf83" + integrity sha512-Wo6SjzONZPL9UAgrnwcCkDGRYP9CbHJGkNcPFIgEVRjiOiJxSd/AtwnGk/4N4iOLGUoas57TMxY0xASDeb9YJg== + +svgpath@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/svgpath/-/svgpath-2.4.0.tgz#04711c8a8d5d6dea22afee8043d5bddbe6ff16a7" + integrity sha512-X868o/qIF/T3G9oMImzAECWh+DsDFm1Dn1SxYGO6AxucZXfbQwsRcJwUVtQzw9+Nl3cV4rXKTqW/Q8+rCAv/mA== + +swagger2openapi@^7.0.4, swagger2openapi@^7.0.7, swagger2openapi@^7.0.8: version "7.0.8" resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== @@ -4014,11 +4720,18 @@ through2@^4.0.0: dependencies: readable-stream "3" -through@^2.3.8: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-absolute-glob@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" @@ -4051,6 +4764,13 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= +topojson-client@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.1.0.tgz#22e8b1ed08a2b922feeb4af6f53b6ef09a467b99" + integrity sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw== + dependencies: + commander "2" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4081,7 +4801,7 @@ tslib@^1.8.1, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.3.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== @@ -4098,6 +4818,23 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tween-functions@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" + integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8= + +tween-one@^1.0.52: + version "1.0.57" + resolved "https://registry.yarnpkg.com/tween-one/-/tween-one-1.0.57.tgz#b837295ff362f835e53924dc20c4fe37d956d8f8" + integrity sha512-TlK4RMISb3UCXq/wlk+yghWLQeybEi3Ktu8efGOzIy201urhAkdrXO2nyuIgaIQQa8v27Nkmh5DhBEFx211+Dw== + dependencies: + "@babel/runtime" "^7.11.1" + flubber "^0.4.2" + raf "^3.4.1" + style-utils "^0.3.0" + svg-path-properties "^1.0.4" + tween-functions "^1.2.0" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -4115,7 +4852,17 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@4.3.5, "typescript@>=4.1 <=4.5", typescript@^4.1.2, typescript@^4.3.5: +type-fest@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +typescript@4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + +"typescript@>=4.1 <=4.5", typescript@^4.1.2, typescript@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== @@ -4229,10 +4976,10 @@ vite-plugin-i18next-scanner@^0.4.0: vinyl-fs "^3.0.3" workerpool "^6.1.5" -vite-plugin-imp@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/vite-plugin-imp/-/vite-plugin-imp-2.0.10.tgz#311fa1a855d4b55ef701fbc61b237c577398a2fe" - integrity sha512-fn+g1/K3jedgS+etFHhD9fQzxpX3DI5DXjCw3wkP+dYBzG2sPDGoSiOxxsZS4YRFf5jo94ARqMMam9dbA6mWag== +vite-plugin-imp@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/vite-plugin-imp/-/vite-plugin-imp-2.0.11.tgz#821fd8548a7a18c2027bbf0a55f0865487b33052" + integrity sha512-98lCTKiGvE54O8qtJdmDuGaJv8d7bd2p2k140M1i2+L81DCn2eKKRkdAJxNUiYUugv+pucX0Ye0omQ5SGrFH+A== dependencies: "@babel/core" "^7.12.10" "@babel/generator" "^7.12.11" @@ -4241,14 +4988,22 @@ vite-plugin-imp@^2.0.10: chalk "^4.1.0" param-case "^3.0.4" -vite-plugin-windicss@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.5.1.tgz#bf15165da15cacadc3cdb8cc1a61d287cef2dc75" - integrity sha512-AUuRFT5Y7SfW9eclaKf5BOTZ7MMfkUZzOeVzqd9yq/uIwzWyleRtssCTuJgZ0+om+hnXn9YwcIpR26lsaasIbg== +vite-plugin-next-react-router@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/vite-plugin-next-react-router/-/vite-plugin-next-react-router-0.6.1.tgz#5aa5a7e82261a12e36a675cb46a93886daf395e7" + integrity sha512-Ha/G6SQWajAj3fm2WVpNBD+z6ZQv9NHw8EcOYJbCbLkdLBbkwh1EI73jewG+LetCggk8om+zEqGh8hA+fHrpXg== dependencies: - "@windicss/plugin-utils" "1.5.1" - chalk "^4.1.2" - debug "^4.3.2" + consola "^2.15.3" + fast-glob "^3.2.7" + +vite-plugin-windicss@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/vite-plugin-windicss/-/vite-plugin-windicss-1.5.4.tgz#b3bda784e50a9b6603ff4c253614271ac300d9d3" + integrity sha512-bG2IERA9J50MGq1QEbGC/PjrkVIaq2b3LilCeidyIpmFV/4aR14/wGDe83SobF+8coIeJ+23S0uDK/fXX5X0pQ== + dependencies: + "@windicss/plugin-utils" "1.5.4" + debug "^4.3.3" + kolorist "^1.5.0" windicss "^3.2.1" vite-tsconfig-paths@^3.3.17: @@ -4261,15 +5016,15 @@ vite-tsconfig-paths@^3.3.17: recrawl-sync "^2.0.3" tsconfig-paths "^3.9.0" -vite@^2.6.14: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.14.tgz#35c09a15e4df823410819a2a239ab11efb186271" - integrity sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA== +vite@^2.7.10: + version "2.7.10" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.7.10.tgz#d12c4c10e56a0ecf7890cb529c15996c6111218f" + integrity sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w== dependencies: - esbuild "^0.13.2" - postcss "^8.3.8" + esbuild "^0.13.12" + postcss "^8.4.5" resolve "^1.20.0" - rollup "^2.57.0" + rollup "^2.59.0" optionalDependencies: fsevents "~2.3.2" @@ -4285,6 +5040,13 @@ warning@^4.0.1: dependencies: loose-envify "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -4321,6 +5083,11 @@ windicss@^3.2.1: resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.2.1.tgz#bd0f7b9ebabba04ea8dfedcbb0263c2ef9591db4" integrity sha512-LusrIrryBFHAPQ/OOTbS4EWWuzI6eGeJglI9nQ3kDBr1cqH69NWt8Z8q59f9kTkgptXroejmWfksWwqgHs8EVw== +windicss@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/windicss/-/windicss-3.3.0.tgz#b671ac48e458b010b8eb68561bf28771c05dc5f0" + integrity sha512-LxA9iCPEe4lBbC5MGLo6g1gbJxYlTXpDCLJRaHo0EcEN6X0ki26hunOJWGcBvO9qz1r/ead1L7wS5MkSoOCIZQ== + word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -4354,7 +5121,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -4369,7 +5136,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -4379,6 +5146,24 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" + integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.0.1: version "17.2.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" @@ -4392,6 +5177,19 @@ yargs@^17.0.1: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.3.0: + version "17.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" + integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + z-schema@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.2.tgz#f410394b2c9fcb9edaf6a7511491c0bb4e89a504"