diff --git a/redisinsight/ui/src/assets/img/workbench/vis_tag_cloud.svg b/redisinsight/ui/src/assets/img/workbench/vis_tag_cloud.svg new file mode 100644 index 0000000000..22259f5eab --- /dev/null +++ b/redisinsight/ui/src/assets/img/workbench/vis_tag_cloud.svg @@ -0,0 +1,3 @@ + + + diff --git a/redisinsight/ui/src/components/query-card/QueryCard.tsx b/redisinsight/ui/src/components/query-card/QueryCard.tsx index 166fe60835..694ed6187b 100644 --- a/redisinsight/ui/src/components/query-card/QueryCard.tsx +++ b/redisinsight/ui/src/components/query-card/QueryCard.tsx @@ -4,7 +4,7 @@ import cx from 'classnames' import { EuiLoadingContent, keys } from '@elastic/eui' import { useParams } from 'react-router-dom' -import { WBQueryType } from 'uiSrc/pages/workbench/constants' +import { WBQueryType, ProfileQueryType } from 'uiSrc/pages/workbench/constants' import { RunQueryMode, ResultsMode, ResultsSummary } from 'uiSrc/slices/interfaces/workbench' import { getWBQueryType, @@ -44,6 +44,7 @@ export interface Props { onQueryDelete: () => void onQueryReRun: () => void onQueryOpen: () => void + onQueryProfile: (type: ProfileQueryType) => void } const getDefaultPlugin = (views: IPluginVisualization[], query: string) => @@ -75,6 +76,7 @@ const QueryCard = (props: Props) => { createdAt, onQueryOpen, onQueryDelete, + onQueryProfile, onQueryReRun, loading, emptyCommand, @@ -186,6 +188,7 @@ const QueryCard = (props: Props) => { setSelectedValue={changeViewTypeSelected} onQueryDelete={onQueryDelete} onQueryReRun={onQueryReRun} + onQueryProfile={onQueryProfile} /> {isOpen && ( <> diff --git a/redisinsight/ui/src/components/query-card/QueryCardHeader/QueryCardHeader.tsx b/redisinsight/ui/src/components/query-card/QueryCardHeader/QueryCardHeader.tsx index 9aeb779b54..09de6cefa7 100644 --- a/redisinsight/ui/src/components/query-card/QueryCardHeader/QueryCardHeader.tsx +++ b/redisinsight/ui/src/components/query-card/QueryCardHeader/QueryCardHeader.tsx @@ -32,7 +32,7 @@ import { numberWithSpaces } from 'uiSrc/utils/numbers' import { ThemeContext } from 'uiSrc/contexts/themeContext' import { appPluginsSelector } from 'uiSrc/slices/app/plugins' import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry' -import { getViewTypeOptions, WBQueryType } from 'uiSrc/pages/workbench/constants' +import { getViewTypeOptions, WBQueryType, getProfileViewTypeOptions, ProfileQueryType, isCommandAllowedForProfile } from 'uiSrc/pages/workbench/constants' import { IPluginVisualization } from 'uiSrc/slices/interfaces' import { RunQueryMode, ResultsMode, ResultsSummary } from 'uiSrc/slices/interfaces/workbench' import { appRedisCommandsSelector } from 'uiSrc/slices/app/redis-commands' @@ -70,6 +70,7 @@ export interface Props { setSelectedValue: (type: WBQueryType, value: string) => void onQueryDelete: () => void onQueryReRun: () => void + onQueryProfile: (type: ProfileQueryType) => void } const getExecutionTimeString = (value: number): string => { @@ -109,6 +110,7 @@ const QueryCardHeader = (props: Props) => { setSelectedValue, onQueryDelete, onQueryReRun, + onQueryProfile, db, } = props @@ -237,6 +239,30 @@ const QueryCardHeader = (props: Props) => { } }) + const profileOptions: EuiSuperSelectOption[] = (getProfileViewTypeOptions() as any[]).map((item) => { + const { value, id, text } = item + return { + value: id ?? value, + inputDisplay: ( +
+ +
+ ), + dropdownDisplay: ( +
+ {truncateText(text, 20)} +
+ ), + 'data-test-subj': `profile-type-option-${value}-${id}`, + } + }) + + const canCommandProfile = isCommandAllowedForProfile(query) + const indexForSeparator = findIndex(pluginsOptions, (option) => !option.internal) if (indexForSeparator > -1) { modifiedOptions.splice(indexForSeparator + 1, 0, { @@ -320,6 +346,26 @@ const QueryCardHeader = (props: Props) => { )} + {isOpen && canCommandProfile && !summaryText && ( + +
+
+ onQueryProfile(value)} + data-testid="run-profile-type" + /> +
+
+
+ )} { return } - if (commandUpper.startsWith(Command.Aggregate)) { - const [matched, ...arrayResponse] = response + const isProfileCommand = commandUpper.startsWith(Command.Profile) + const profileQueryType = command?.split(' ')?.[2] + + if ( + commandUpper.startsWith(Command.Aggregate) + || (isProfileCommand && profileQueryType.toUpperCase() === ProfileType.Aggregate) + ) { + const [matched, ...arrayResponse] = isProfileCommand ? response[0] : response setHeaderText(`Matched:${matched}`) const result = parseAggregateRawResponse(arrayResponse) return } - if (commandUpper.startsWith(Command.Search)) { - const [matched, ...arrayResponse] = response + if ( + commandUpper.startsWith(Command.Search) + || (isProfileCommand && profileQueryType.toUpperCase() === ProfileType.Search) + ) { + const [matched, ...arrayResponse] = isProfileCommand ? response[0] : response setHeaderText(`Matched:${matched}`) const result = parseSearchRawResponse(command, arrayResponse) diff --git a/redisinsight/ui/src/packages/redisearch/src/constants/constants.ts b/redisinsight/ui/src/packages/redisearch/src/constants/constants.ts index 021c8b9e06..76aa3e490e 100644 --- a/redisinsight/ui/src/packages/redisearch/src/constants/constants.ts +++ b/redisinsight/ui/src/packages/redisearch/src/constants/constants.ts @@ -4,6 +4,12 @@ export enum Command { Search = 'FT.SEARCH', Aggregate = 'FT.AGGREGATE', Info = 'FT.INFO', + Profile = 'FT.PROFILE', +} + +export enum ProfileType { + Search = 'SEARCH', + Aggregate = 'AGGREGATE', } export enum CommandArgument { diff --git a/redisinsight/ui/src/packages/ri-explain/README.md b/redisinsight/ui/src/packages/ri-explain/README.md new file mode 100644 index 0000000000..d5b2221dd1 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/README.md @@ -0,0 +1 @@ +# RI-Explain plugin \ No newline at end of file diff --git a/redisinsight/ui/src/packages/ri-explain/package.json b/redisinsight/ui/src/packages/ri-explain/package.json new file mode 100644 index 0000000000..8fb14c1f79 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/package.json @@ -0,0 +1,72 @@ +{ + "author": { + "name": "Redis Ltd.", + "email": "support@redis.com", + "url": "https://redis.com/redis-enterprise/redis-insight" + }, + "bugs": { + "url": "https://github.com/" + }, + "description": "Show Profile/Explain Visualization", + "source": "./src/main.tsx", + "styles": "./dist/styles.css", + "main": "./dist/index.js", + "name": "explain-plugin", + "version": "0.0.1", + "scripts": { + "start": "cross-env NODE_ENV=development parcel serve src/index.html", + "build": "rimraf dist && cross-env NODE_ENV=production concurrently \"yarn build:js && yarn minify:js\" \"yarn build:css\" \"yarn build:assets\"", + "build-lite": "rm dist/*.js && cross-env NODE_ENV=production concurrently \"yarn build:js && yarn minify:js\"", + "build:js": "parcel build src/main.tsx --dist-dir dist", + "build:css": "parcel build src/styles/styles.less --dist-dir dist", + "build:assets": "parcel build src/assets/**/* --dist-dir dist", + "minify:js": "terser -- dist/main.js > dist/index.js && rimraf dist/main.js" + }, + "targets": { + "main": false, + "module": { + "includeNodeModules": true + } + }, + "visualizations": [ + { + "id": "profile-explain-viz", + "name": "Visualization", + "activationMethod": "renderCore", + "matchCommands": [ + "FT.EXPLAIN", + "FT.EXPLAINCLI", + "FT.PROFILE", + "GRAPH.EXPLAIN", + "GRAPH.PROFILE" + ], + "iconDark": "./dist/profile_icon_dark.svg", + "iconLight": "./dist/profile_icon_light.svg", + "description": "Profile/Explain plugin Visualization", + "default": true + } + ], + "devDependencies": { + "@parcel/compressor-brotli": "^2.0.0", + "@parcel/compressor-gzip": "^2.0.0", + "@parcel/transformer-less": "^2.3.2", + "concurrently": "^6.3.0", + "cross-env": "^7.0.3", + "parcel": "^2.0.0", + "rimraf": "^3.0.2", + "terser": "^5.9.0" + }, + "dependencies": { + "@antv/hierarchy": "^0.6.8", + "@antv/x6": "^2.1.3", + "@antv/x6-react-shape": "^2.1.0", + "@elastic/eui": "34.6.0", + "@emotion/react": "^11.7.1", + "classnames": "^2.3.1", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "redisinsight-plugin-sdk": "^1.1.0", + "uuid": "^9.0.0" + } +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/App.tsx b/redisinsight/ui/src/packages/ri-explain/src/App.tsx new file mode 100644 index 0000000000..8fd8eaeb5c --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/App.tsx @@ -0,0 +1,25 @@ +import React from 'react' +import Explain from './Explain' + +export function App(props: { command?: string, data: any }) { + + const ErrorResponse = HandleError(props) + + if (ErrorResponse !== null) return ErrorResponse + + return ( +
+ +
+ ) +} + +function HandleError(props: { command?: string, data: any }): JSX.Element | null { + const { data: [{ response = '', status = '' } = {}] = [] } = props + + if (status === 'fail') { + return
{JSON.stringify(response)}
+ } + + return null +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/Explain.tsx b/redisinsight/ui/src/packages/ri-explain/src/Explain.tsx new file mode 100644 index 0000000000..649afcbb06 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/Explain.tsx @@ -0,0 +1,570 @@ +import React, { useEffect, useState, useRef } from 'react' +import { Model, Graph } from '@antv/x6' +import { register} from '@antv/x6-react-shape' +import Hierarchy from '@antv/hierarchy' +import { formatRedisReply } from 'redisinsight-plugin-sdk' + +import { + EuiButtonIcon, + EuiToolTip, + EuiIcon, +} from '@elastic/eui' + +import { + EDGE_COLOR_BODY_DARK, + EDGE_COLOR_BODY_LIGHT, + NODE_COLOR_BODY_DARK, + NODE_COLOR_BODY_LIGHT, +} from './constants' + +import { + CoreType, + ModuleType, + EntityInfo, + ParseExplain, + ParseGraphV2, + ParseProfile, + ParseProfileCluster, + GetAncestors, + GetTotalExecutionTime, +} from './parser' +import { ExplainNode, ProfileNode } from './Node' + +interface IExplain { + command: string + data: [{response: string[] | string | any}] +} + +function getEdgeSize(c: number) { + return Math.floor(Math.log(c || 1) + 1) +} + +function getNodeColor(isDarkTheme: boolean) { + return isDarkTheme ? NODE_COLOR_BODY_DARK : NODE_COLOR_BODY_LIGHT +} + +function getEdgeColor(isDarkTheme: boolean) { + return isDarkTheme ? EDGE_COLOR_BODY_DARK : EDGE_COLOR_BODY_LIGHT +} + +export default function Explain(props: IExplain): JSX.Element { + const command = props.command.split(' ')[0].toLowerCase() + if (command.startsWith('graph')) { + const info = props.data[0].response + const resp = ParseGraphV2(info) + + let profilingTime: IProfilingTime = {} + let t = command.endsWith('explain') ? CoreType.Explain : CoreType.Profile + if (t === CoreType.Profile) { + profilingTime = { + 'Total Execution Time': GetTotalExecutionTime(resp) + } + } + + return ( + + ) + } + + const module = ModuleType.Search + + const [parsedRedisReply, setParsedRedisReply] = useState('') + + useEffect(() => { + if (command == 'ft.profile') { + const getParsedResponse = async () => { + const formattedResponse = await formatRedisReply(props.data[0].response, props.command) + setParsedRedisReply(formattedResponse) + } + getParsedResponse() + } + }) + + if (command == 'ft.profile') { + const info = props.data[0].response[1] + + let data: EntityInfo + let profilingTime: IProfilingTime = {} + + if (info.length > 5 && typeof info[0] === 'string' && info[0].toLowerCase().startsWith('shard')) { + let [cluster, entityInfo] = ParseProfileCluster(info) + cluster['Coordinator'].forEach((kv: [string, string]) => profilingTime[kv[0]] = kv[1]) + data = entityInfo + return ( + <> +
Visualization is not supported for a clustered database.
+
{parsedRedisReply}
+ + ) + } else if (typeof info[0] === 'string' && info[0].toLowerCase().startsWith('coordinator')) { + const resultsProfile = info[2] + data = ParseProfile(resultsProfile) + profilingTime = { + 'Total Coordinator time': info[4], + 'Total profile time': resultsProfile[0][1], + 'Parsing time': resultsProfile[1][1], + 'Pipeline creation time': resultsProfile[2][1], + } + return ( + <> +
Visualization is not supported for a clustered database.
+
{parsedRedisReply}
+ + ) + } else { + data = ParseProfile(info) + profilingTime = { + 'Total Profile Time': info[0][1], + 'Parsing Time': info[1][1], + 'Pipeline Creation Time': info[2][1], + } + } + + return ( + + ) + } + + const resp = props.data[0].response + + const data = ParseExplain( + Array.isArray(resp) ? resp.join('\n') : resp.split('\\n').join('\n') + ) + return ( + + ) +} + +register({ + shape: 'react-explain-node', + width: 100, + height: 100, + component: ExplainNode as any +}) + +register({ + shape: 'react-profile-node', + width: 100, + height: 100, + component: ProfileNode as any, +}) + +const isDarkTheme = document.body.classList.contains('theme_DARK') + +interface IProfilingTime { + [key: string]: string +} + +function ExplainDraw({data, type, module, profilingTime}: {data: any, type: CoreType, module: ModuleType, profilingTime?: IProfilingTime}): JSX.Element { + const container = useRef(null) + + const [done, setDone] = useState(false) + const [collapse, setCollapse] = useState(type !== CoreType.Profile) + const [isFullScreen, setIsFullScreen] = useState(false) + const [core, setCore] = useState() + + function resize() { + const isFullScreen = parent.document.body.getElementsByClassName('fullscreen').length > 0 + const b = core?.getAllCellsBBox() + const width = Math.max((b?.width || 1080) + 100, document.body.offsetWidth) + if (isFullScreen) { + setIsFullScreen(true) + const height = Math.max((b?.height || 585) + 100, parent.document.body.offsetHeight) + if (type !== CoreType.Profile && collapse) { + core?.resize(width, window.outerHeight - 250) + core?.positionContent("top") + } else { + core?.resize(width, height) + } + } else { + setIsFullScreen(false) + if (type !== CoreType.Profile && collapse) { + core?.resize(width, 400) + core?.positionContent("top") + } else { + core?.resize(width, (b?.height || 585) + 100) + } + } + } + + window.addEventListener('resize', resize) + useEffect(() => { + + if (done) return + setDone(true) + + const graph = new Graph({ + container: container?.current as HTMLElement, + autoResize: false, + interacting: false, + background: { + color: isDarkTheme ? 'black' : 'white', + }, + translating: { + restrict: true, + }, + async: true, + virtual: true, + }) + + setCore(graph) + + graph.on("resize", () => graph.centerContent()) + graph.on("node:mouseenter", x => { + const {id} = x.node.getData() + // Find ancestors of a node + const ancestors = GetAncestors(data, id, {found: false, pairs: []}) + ancestors.pairs.forEach(p => { + // Highlight ancestor and their ancestor + document.querySelector(`#node-${p[0]}`)?.setAttribute("style", "outline: 1px solid #85A2FE !important;") + // Get edge size of parent ancestor to apply the right edge stroke + const edge = graph.getCellById(`${p[0]}-${p[1]}`) + const edgeColor = '#85A2FE' + edge.setAttrs({ + line: { + stroke: edgeColor, + strokeWidth: (edge.getAttrs() as any)?.line?.strokeWidth, + }, + }) + }) + }) + + graph.on("node:mouseleave", x => { + const {id} = x.node.getData() + const ancestors = GetAncestors(data, id, {found: false, pairs: []}) + ancestors.pairs.forEach(p => { + document.querySelector(`#node-${p[0]}`)?.setAttribute("style", "") + const edge = graph.getCellById(`${p[0]}-${p[1]}`) + const edgeColor = getEdgeColor(isDarkTheme) + edge.setAttrs({ + line: { + stroke: edgeColor, + strokeWidth: (edge.getAttrs() as any)?.line?.strokeWidth, + }, + }) + }) + }) + + resize() + + const result = Hierarchy.compactBox(data, { + direction: 'BT', + getHeight() { + return 200 + }, + getWidth() { + return 250 + }, + getHGap() { + return 50 + }, + getVGap() { + return 0 + }, + nodeSep: type === CoreType.Explain ? 250 : 350, + rankSep: 150, + subTreeSep: 0, + }) + + const model: Model.FromJSONData = { nodes: [], edges: [] } + const traverse = (data: any) => { + if (data) { + const info = data.data as EntityInfo + + // snippet if prefix with parent suffix will always be followed by ':'. + // + // Currently snippets are passed to child only for TAG + // expressions which has ':' at the center. + // + // Example child data with parent snippet: : + if (!info.snippet && info.parentSnippet && info.data?.startsWith(`${info.parentSnippet}:`)) { + info.data = info.data.substr(info.parentSnippet.length + 1) + info.snippet = info.parentSnippet + } + + if (module === ModuleType.Graph) { + info.recordsProduced = info.counter + delete info.counter + delete info.size + } + + let nodeProps = { + shape: 'react-explain-node', + width: 240, + height: (info.snippet ? 64 : 42), + } + if (type === CoreType.Profile) { + nodeProps = { + shape: 'react-profile-node', + width: 320, + height: (info.snippet ? 114 : 86), + } + } + + + const portId = data.id + '-source' + let targetPort = {} + const targetItem: any = [] + if (info.parentId) { + targetItem.push({id: `${info.id}-${info.parentId}-target`, group: `${info.parentId}-target`}) + targetPort[info.parentId+'-target'] = { + position: { name: 'bottom' }, + attrs: { + circle: { + r: 0 + } + } + } + } + model.nodes?.push({ + id: data.id, + x: (data.x || 0) + document.body.clientWidth / 2, + y: (data.y || 0) + document.body.clientHeight, + ...nodeProps, + data: info, + attrs: { + body: { + fill: getNodeColor(isDarkTheme), + stroke: 'transparent', + }, + }, + ports: { + groups: { + [portId]: { + position: { name: 'top' }, + attrs: { + circle: { + r: 0 + } + } + }, + ...targetPort, + }, + items: [ + ...data.children.map(c => ({ + id: `${data.id}-${c.id}`, group: portId + })), + ...targetItem, + ], + }, + }) + } + if (data.children) { + data.children.forEach((item: any) => { + const itemRecords = parseInt(item.data.counter || 0) + const edgeColor = getEdgeColor(isDarkTheme) + model.edges?.push({ + id: `${data.id}-${item.id}`, + source: { + cell: data.id, + port: `${data.id}-${item.id}`, + }, + target: { + cell: item.id, + port: `${data.id}-${item.id}` + }, + router: { + name: 'manhattan', + args: { + startDirections: ['top'], + endDirections: ['bottom'], + // cost: 33, + // step: 10, + padding: { + top: 15, + bottom: 10, + right: 20, + left: 10, + } + }, + }, + attrs: { + line: { + stroke: edgeColor, + strokeWidth: getEdgeSize(itemRecords), + targetMarker: null, + }, + }, + }) + traverse(item) + }) + } + } + traverse(result) + + graph.fromJSON(model) + + graph.centerContent() + + }, [done]) + + const ele = document.querySelector("#container-parent") + + let pos = { top: 0, left: 0, x: 0, y: 0 } + + const mouseMoveHandler = function (e) { + // How far the mouse has been moved + const dx = e.clientX - pos.x + const dy = e.clientY - pos.y + + // Scroll the element + if (ele) { + ele.scrollTop = pos.top - dy + ele.scrollLeft = pos.left - dx + } + } + + + const mouseUpHandler = function () { + document.removeEventListener('mousemove', mouseMoveHandler) + document.removeEventListener('mouseup', mouseUpHandler) + } + + + const mouseDownHandler = function (e) { + pos = { + // The current scroll + left: ele?.scrollLeft || 0, + top: ele?.scrollTop || 0, + // Get the current mouse position + x: e.clientX, + y: e.clientY, + } + + document.addEventListener('mousemove', mouseMoveHandler) + setTimeout(() => document.addEventListener('mouseup', mouseUpHandler), 100) + } + + ele?.addEventListener('mousedown', mouseDownHandler) + + + if (type !== CoreType.Profile && collapse) { + core?.resize(undefined, isFullScreen ? (window.outerHeight - 250) : 400) + core?.positionContent("top") + } else { + core?.resize(undefined, core?.getContentBBox().height + 100) + } + + return ( +
+ { type !== CoreType.Profile && collapse &&
} +
+
+ { !(collapse) && ( +
+ { + [ + { + name: 'Zoom In', + onClick: () => { + setTimeout(() => document.addEventListener('mouseup', mouseUpHandler), 100) + core && Math.floor(core.zoom()) <= 3 && core?.zoom(0.5) + core?.resize(undefined, core?.getContentBBox().height + 50) + }, + icon: 'magnifyWithPlus' + }, + { + name: 'Zoom Out', + onClick: () => { + setTimeout(() => document.addEventListener('mouseup', mouseUpHandler), 100) + if (Math.floor(core?.zoom() || 0) <= 0.5) { + core?.centerContent() + } else { + core?.zoom(-0.5) + } + core?.resize(undefined, core?.getContentBBox().height + 50) + }, + icon: 'magnifyWithMinus' + }, + { + name: 'Reset Zoom', + onClick: () => { + setTimeout(() => document.addEventListener('mouseup', mouseUpHandler), 100) + core?.zoomTo(1) + core?.resize(undefined, core?.getContentBBox().height + 50) + }, + icon: 'bullseye' + }, + ].map(item => ( + + + + )) + } +
+ )} + { type !== CoreType.Profile && +
{ + e.preventDefault() + setTimeout(() => document.addEventListener('mouseup', mouseUpHandler), 100) + if (!collapse) { // About to collapse? + core?.zoomTo(1) + core?.resize(undefined, core?.getContentBBox().height + 50) + } + setCollapse(!collapse) + }} + > + { + collapse + ? + <> +
Expand
+ + + : + <> +
Collapse
+ + + } +
+ } + { profilingTime && + ( + module === ModuleType.Search && + ( +
+ { + Object.keys(profilingTime).map(key => ( +
+
{profilingTime[key]}
+
{key}
+
+ )) + } +
+ ) + )} +
+
+ ) +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/Node.tsx b/redisinsight/ui/src/packages/ri-explain/src/Node.tsx new file mode 100644 index 0000000000..c8d46fb24a --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/Node.tsx @@ -0,0 +1,126 @@ +import React from 'react' +import { EuiToolTip, EuiIcon } from '@elastic/eui' +import { EntityInfo, EntityType } from './parser' + +interface INodeProps { + label: string + numRecords?: string + executionTime?: string + snippet?: string +} + + +function Snippet({content}: {content: string}) { + return ( +
+ {content} +
+ ) +} + +export function ExplainNode(props: INodeProps) { + const propData: EntityInfo = (props as any).node.getData() + const { id, type, data, snippet, subType } = propData + + const infoData = data ? data : type + + return ( +
+
+
+
+ {infoData} +
+ {subType && [EntityType.GEO, EntityType.NUMERIC, EntityType.TEXT, EntityType.TAG, EntityType.FUZZY, EntityType.WILDCARD, EntityType.PREFIX, EntityType.IDS, EntityType.LEXRANGE, EntityType.NUMBER].includes(subType) &&
{subType}
} +
+
+ { + snippet && + } +
+ ) +} + + + +interface INodeToolTip { + content?: string + items?: {[key: string]: string} +} + +function NodeToolTipContent(props: INodeToolTip) { + + if (props.content !== undefined) { + return
{props.content}
+ } + + if (props.items !== undefined) { + let items = props.items + return ( +
+ { + Object.keys(items).map(k => ( +
{k}: {items[k]}
+ )) + } +
+ ) + } + + return null +} + +export function ProfileNode(props: INodeProps) { + const info: EntityInfo = (props as any).node.getData() + const {id, data, type, snippet, time, counter, size, recordsProduced} = info + + let items = {} + + if (counter !== undefined) { + items['Counter'] = counter + } + + if (size !== undefined) { + items['Size'] = size + } + + const infoData = data ? data : type + return ( +
+
+
+ {infoData} +
+
{[EntityType.GEO, EntityType.NUMERIC, EntityType.TEXT, EntityType.TAG].includes(type) ? type : ''}
+
+ { + snippet && + } +
+ }> +
+
+
{time} ms
+
+
+ + } + > +
+
{ + counter !== undefined ? counter : + size !== undefined ? size : recordsProduced}
+
+
+
+
+
+ ) +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_dark.svg b/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_dark.svg new file mode 100644 index 0000000000..f335f3f6cb --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_light.svg b/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_light.svg new file mode 100644 index 0000000000..c092a49e88 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/assets/profile_icon_light.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/redisinsight/ui/src/packages/ri-explain/src/constants.ts b/redisinsight/ui/src/packages/ri-explain/src/constants.ts new file mode 100644 index 0000000000..2abfeaa89f --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/constants.ts @@ -0,0 +1,6 @@ +export const NODE_COLOR_BODY_DARK = '#5F95FF' +export const NODE_COLOR_BODY_LIGHT = '#8992B3' + +export const EDGE_COLOR_BODY_DARK = '#6B6B6B' +export const EDGE_COLOR_BODY_LIGHT = '#8992B3' + diff --git a/redisinsight/ui/src/packages/ri-explain/src/index.html b/redisinsight/ui/src/packages/ri-explain/src/index.html new file mode 100644 index 0000000000..ddb4447fc8 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/index.html @@ -0,0 +1,18 @@ + + + + + + + Profile/Explain Plugin Visualization + + + + + + + + +
+ + diff --git a/redisinsight/ui/src/packages/ri-explain/src/main.tsx b/redisinsight/ui/src/packages/ri-explain/src/main.tsx new file mode 100644 index 0000000000..3fd1f2bf62 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/main.tsx @@ -0,0 +1,42 @@ +/* eslint-disable react/jsx-filename-extension */ +import React from 'react' +import { render } from 'react-dom' +import { App } from './App' + +interface Props { + command?: string + data?: { response: any, status: string }[] +} + +import { appendIconComponentCache } from '@elastic/eui/es/components/icon/icon' +import { icon as EuiIconMagnifyWithPlus } from '@elastic/eui/es/components/icon/assets/magnifyWithPlus' +import { icon as EuiIconMagnifyWithMinus } from '@elastic/eui/es/components/icon/assets/magnifyWithMinus' +import { icon as EuiIconBullsEye } from '@elastic/eui/es/components/icon/assets/bullseye' +import { icon as EuiIconEditorItemAlignCenter } from '@elastic/eui/es/components/icon/assets/editorItemAlignCenter' +import { icon as EuiIconClock } from '@elastic/eui/es/components/icon/assets/clock' +import { icon as EuiIconReportingApp } from '@elastic/eui/es/components/icon/assets/app_reporting' +import { icon as EuiIconArrowUp } from '@elastic/eui/es/components/icon/assets/arrow_up' +import { icon as EuiIconArrowDown } from '@elastic/eui/es/components/icon/assets/arrow_down' + +appendIconComponentCache({ + magnifyWithPlus: EuiIconMagnifyWithPlus, + magnifyWithMinus: EuiIconMagnifyWithMinus, + bullseye: EuiIconBullsEye, + editorItemAlignCenter: EuiIconEditorItemAlignCenter, + clock: EuiIconClock, + reportingApp: EuiIconReportingApp, + arrowUp: EuiIconArrowUp, + arrowDown: EuiIconArrowDown, +}) + +const renderApp = (element: JSX.Element) => render( + element, + document.getElementById('app') +) + +const renderCore = (props: Props) => renderApp( + +) + +// This is a required action - export the main function for execution of the visualization +export default { renderCore } diff --git a/redisinsight/ui/src/packages/ri-explain/src/parser.ts b/redisinsight/ui/src/packages/ri-explain/src/parser.ts new file mode 100644 index 0000000000..d838163770 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/parser.ts @@ -0,0 +1,1150 @@ +import { v4 as uuidv4 } from 'uuid' + +enum TokenType { + + INIT = 'INIT', + + EOF = 'EOF', + ILLEGAL = 'ILLEGAL', + + UNION = 'UNION', + INTERSECT = 'INTERSECT', + NOT = 'NOT', + OPTIONAL = 'OPTIONAL', + EXACT = 'EXACT', + TAG = 'TAG', + VECTOR = 'VECTOR', + FUZZY = 'FUZZY', + WILDCARD = 'WILDCARD', + WILDCARD_EMPTY = 'WILDCARD_EMPTY', // }\n + PREFIX = 'PREFIX', + GEO_EXPR = 'GEO_EXPR', + IDS_EXPR = 'IDS_EXPR', + LEXRANGE_EXPR = 'LEXRANGE_EXPR', + NUMERIC = 'NUMERIC', + LBRACE = 'LBRACE', + RBRACE = 'RBRACE', + LPAREN = 'LAPAREN', + RPAREN = 'RAPAREN', + NUMBER = 'NUMBER', + NEW_LINE = 'NEW_LINE', + + PLUS = 'PLUS', + MINUS = 'MINUS', + COMMA = 'COMMA', + DOT = 'DOT', + + LESS = 'LESS', + GREATER = 'GREATER', + + EQUAL = 'EQUAL', + LESS_EQUAL = 'LESS_EQUAL', + GREATER_EQUAL = 'GREATER_EQUAL', + + IDENTIFIER = 'IDENTIFIER', +} + +class Token { + T: TokenType + Data: string + + constructor(t: TokenType, data: string) { + this.T = t + this.Data = data + } + +} + +const KEYWORDS = { + [TokenType.EOF.toString()]: TokenType.EOF, + [TokenType.ILLEGAL.toString()]: TokenType.ILLEGAL, + + [TokenType.UNION.toString()]: TokenType.UNION, + [TokenType.INTERSECT.toString()]: TokenType.INTERSECT, + [TokenType.NOT.toString()]: TokenType.NOT, + [TokenType.OPTIONAL.toString()]: TokenType.OPTIONAL, + [TokenType.EXACT.toString()]: TokenType.EXACT, + [TokenType.VECTOR.toString()]: TokenType.VECTOR, + [TokenType.TAG.toString()]: TokenType.TAG, + [TokenType.NUMERIC.toString()]: TokenType.NUMERIC, + + 'inf': TokenType.NUMBER, +} + +class Lexer { + Input: string + Position: number + ReadPosition: number + + C?: string + + constructor(input: string) { + this.Input = input + this.Position = 0 + this.ReadPosition = 0 + this.C = undefined + + this.ReadChar() + } + + ReadChar() { + if (this.ReadPosition >= this.Input.length) { + this.C = undefined + } else { + this.C = this.Input[this.ReadPosition] + } + this.Position = this.ReadPosition++ + } + + PeekChar() { + if (this.ReadPosition >= this.Input.length) { + return null + } else { + return this.Input[this.ReadPosition] + } + } + + SkipWhitespace() { + while (this.C == ' ' || this.C == '\t' || this.C == '\r') { + this.ReadChar() + } + } + + ReadIdentifier(): string { + let str = '' + + // variable identifiers start with @ + // For the below expression, we can parse the identifier "@t1" successfully + // @t1:INTERSECT + // + // Sample Query - `FT.EXPLAIN idx @t1:hello world @t2:howdy` + const startsWithAt = this.C === '@' + + // If a '/' was found, next char can be escaped. + // + // Sample Query - `FT.EXPLAIN rs:recipes 'very simple | @t:hello @t2:{ free\\world } (@n:[1 2]|@n:[3 4]) (@g:[1.5 0.5 0.5 km] -@g:[2.5 1.5 0.5 km])'` + let prevEscape = false + while ( + this.C !== undefined + && ( + isLetter(this.C) || + ['@', ':', '\\'].includes(this.C) || + (startsWithAt && isDigit(this.C)) || + + // Text can be searched in multiple schemas via '|' + // + // Example: + // FT.CREATE idx SCHEMA t1 TEXT t2 TEXT + // FT.EXPLAIN idx '@t1|t2:(text value)' + (startsWithAt && this.C === '|') || + str.startsWith('TAG:@') && isDigit(this.C) || + prevEscape + ) + ) { + str = str + this.C + if (this.C === '\\' && this.PeekChar() === '\\') { + // '\' appears twice query result when escaped a character. + // + // For example, if space has to be escaped, instead of '\ ', you will find '\\ '. + this.ReadChar() // read of extra '\' + prevEscape = true + } else { + prevEscape = false + } + this.ReadChar() + } + return str + } + + ReadNumber(): string { + let str = '' + while (this.C !== undefined && (isDigit(this.C) || this.C === '.') && parseFloat(str + this.C) != NaN) { + str = str + this.C + this.ReadChar() + } + return str + } + + NextToken() { + let t: Token | null = null + + this.SkipWhitespace() + + switch (this.C) { + case '\n': + t = new Token(TokenType.NEW_LINE, this.C) + break + case '{': + t = new Token(TokenType.LBRACE, this.C) + break + case '}': + t = new Token(TokenType.RBRACE, this.C) + break + case '(': + t = new Token(TokenType.LPAREN, this.C) + break + case ')': + t = new Token(TokenType.RPAREN, this.C) + break + case '+':// TODO: This should be PLUS token + t = new Token(TokenType.IDENTIFIER, this.C) + break + case '-':// TODO: This should be MINUS token + t = new Token(TokenType.IDENTIFIER, this.C) + let p = this.PeekChar() + if (p !== null && isDigit(p)){ + this.ReadChar() + const n = this.ReadNumber() + t = new Token(TokenType.NUMBER, '-' + n) + return t + } + break + case ',': + t = new Token(TokenType.COMMA, this.C) + break + case '.': + t = new Token(TokenType.DOT, this.C) + break + case '<': + let lPeekChar = this.PeekChar() + if (lPeekChar !== null && lPeekChar === '=') { + t = new Token(TokenType.LESS_EQUAL, '<=') + this.ReadChar() + } else { + t = new Token(TokenType.LESS, '<') + } + break + case '>': + let rPeekChar = this.PeekChar() + if (rPeekChar !== null && rPeekChar === '=') { + t = new Token(TokenType.GREATER_EQUAL, '>=') + this.ReadChar() + } else { + t = new Token(TokenType.GREATER, '>') + } + break + case '=': + let ePeekChar = this.PeekChar() + if (ePeekChar !== null && ePeekChar === '=') { + t = new Token(TokenType.EQUAL, '==') + this.ReadChar() + } else { + // No Assign Token + t = new Token(TokenType.ILLEGAL, this.C) + } + break + case undefined: + t = new Token(TokenType.EOF, '') + break + default: + if (this.C !== undefined && (isLetter(this.C) || ['@', ':'].includes(this.C))) { + const literal = this.ReadIdentifier() + let tokenType = KEYWORDS[literal] || TokenType.IDENTIFIER + if (literal.startsWith('TAG:')) { + tokenType = TokenType.TAG + } else if (literal === 'FUZZY') { + tokenType = TokenType.FUZZY + } else if (literal === 'WILDCARD') { + tokenType = TokenType.WILDCARD + } else if (literal === 'PREFIX') { + tokenType = TokenType.PREFIX + } else if (literal === 'IDS') { + tokenType = TokenType.IDS_EXPR + } else if (literal === 'LEXRANGE') { + tokenType = TokenType.LEXRANGE_EXPR + } else if (literal === 'GEO') { + tokenType = TokenType.GEO_EXPR + } else if (literal.startsWith('@') && literal.endsWith(':OPTIONAL')) { + tokenType = TokenType.OPTIONAL + } else if (literal.startsWith('@') && literal.endsWith(':NOT')) { + tokenType = TokenType.NOT + } else if (literal.startsWith('@') && literal.endsWith(':EXACT')) { + tokenType = TokenType.EXACT + } else if (literal.startsWith('@') && literal.endsWith(':VECTOR')) { + tokenType = TokenType.VECTOR + } else if (literal.startsWith('@') && literal.endsWith(':UNION')) { + tokenType = TokenType.UNION + } else if (literal.startsWith('@') && literal.endsWith(':INTERSECT')) { + tokenType = TokenType.INTERSECT + } + t = new Token(tokenType, literal) + return t + } else if (this.C !== undefined && isDigit(this.C)) { + const n = this.ReadNumber() + t = new Token(TokenType.NUMBER, n) + return t + } else { + t = new Token(TokenType.ILLEGAL, this.C) + } + } + this.ReadChar() + return t + } +} + +export enum EntityType { + Expr = 'Expr', + UNION = 'UNION', + INTERSECT = 'INTERSECT', + OPTIONAL = 'OPTIONAL', + NOT = 'NOT', + EXACT = 'EXACT', + VECTOR = 'VECTOR', + NUMERIC = 'NUMERIC', + + // These are used exclusively in FT.PROFILE + GEO = 'GEO', + FUZZY = 'FUZZY', + WILDCARD = 'WILDCARD', + PREFIX = 'PREFIX', + TEXT = 'TEXT', + NUMBER = 'NUMBER', + TAG = 'TAG', + + IDS = 'IDS', + LEXRANGE = 'LEXRANGE', + + Index = 'Index', + Scorer = 'Scorer', + Sorter = 'Sorter', + Loader = 'Loader', + + CLUSTER_MERGE = 'CLUSTER MERGE' +} + + +export interface EntityInfo { + id: string + type: EntityType, + subType?: EntityType, + data?: string + snippet?: string + children: EntityInfo[] + time?: string + counter?: string + size?: string + parentId?: string + parentSnippet?: string + level?: number + recordsProduced?: string +} + +interface IAncestors { + found: boolean + pairs: [string, string][] +} + +export function GetAncestors(info: EntityInfo, searchId: string, a: IAncestors): IAncestors { + if (searchId === info.id) { + return { + found: true, + pairs: info.parentId ? [[info.parentId, info.id]] : [] + } + } else { + let r: IAncestors = {...a} + for (let i = 0; i < info.children.length; i++) { + let c = info.children[i] + let ci = GetAncestors(c, searchId, a) + if (ci.found) { + r.found = true + r.pairs = [...a.pairs, ...ci.pairs] + if (info.parentId) { + r.pairs = [...r.pairs, [info.parentId, info.id]] + } + return r + } + } + return r + } +} + + +class Expr { + Core: string + SubType: EntityType + Time?: string + Info?: string + + constructor(expr: string, subType: EntityType, info: string | undefined = undefined) { + this.Core = expr + this.SubType = subType + this.Info = info + } + + toJSON(): EntityInfo { + + let snippet: string | undefined = undefined + + if (this.SubType === EntityType.TAG && this.Info?.startsWith('TAG:')) { + snippet = this.Info?.substr(4) + } else if (this.SubType === EntityType.GEO) { + snippet = this.Info + if (snippet?.endsWith(':')) { + snippet = snippet?.slice(0, -1) + } + } + + return { + id: uuidv4(), + // data: 'Expr', + // snippet: this.Core, + type: EntityType.Expr, + subType: this.SubType, + snippet: snippet, + data: this.Core, + children: [], + time: this.Time, + } + } +} + +class NumericExpr { + Left: number + LSign: Token + + Identifier: Token + + Right: number + RSign: Token + + + constructor(left: number, lsign: Token, identifier: Token, rsign: Token, right: number) { + this.Left = left + this.LSign = lsign + this.Identifier = identifier + this.Right = right + this.RSign = rsign + } + + toJSON(): EntityInfo { + return { + id: uuidv4(), + type: EntityType.NUMERIC, + data: 'Numeric', + snippet: `${this.Left.toString()} ${this.LSign.Data} ${this.Identifier.Data} ${this.RSign.Data} ${this.Right.toString()}`, + children: [], + } + } +} + +type SearchExpr = NumericExpr | Expr | ExpandExpr + +type ExprTuple2 = SearchExpr[] + +class ExpandExpr { + Type: EntityType + Info?: string + Core: ExprTuple2 + + constructor(type: EntityType, e: ExprTuple2, info?: string) { + this.Core = e + this.Info = info + this.Type = type + } + + toJSON(): EntityInfo { + const id = uuidv4() + + let snippet: string | undefined = undefined + + if (this.Type === EntityType.TAG && this.Info?.startsWith('TAG:')) { + snippet = this.Info?.substr(4) + } + + if (!this.Info?.startsWith(this.Type)) { + snippet = this.Info?.substring(0, this.Info.indexOf(`:${this.Type}`)) + } + + return { + id, + type: this.Type, + snippet, + children: this.Core.map(x => x.toJSON()).map((d: EntityInfo) => ({ + ...d, + parentId: id, + parentSnippet: snippet, + })) + } + } +} + + +class Parser { + private L: Lexer + CurrentToken: Token + PeekToken: Token + Errors: string[] + + constructor(l: Lexer) { + this.L = l + + this.Errors = [] + this.CurrentToken = new Token(TokenType.INIT, '') + this.PeekToken = new Token(TokenType.INIT, '') + + this.nextToken() + this.nextToken() + } + + currentTokenIs(t: TokenType) { + return this.CurrentToken?.T === t + } + + peekTokenIs(t: TokenType) { + return this.PeekToken?.T === t + } + + nextToken() { + this.CurrentToken = this.PeekToken + this.PeekToken = this.L.NextToken() + + if (this.CurrentToken.T === TokenType.EOF) { + throw new Error("Didn't expect EOF token") + } + } + + assertToken(t: TokenType) { + assertToken(t, this.CurrentToken.T) + } + + // Parse an entity which can expand, i.e., has further children of + // an entity type. + // + // Example: + // { { ... } ( { ... } ...) } + parseExpandExpr(t: EntityType): ExpandExpr { + + assertExpandEntity(t) + + this.assertToken(t as unknown as TokenType) + + let data = this.CurrentToken.Data + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + let Exprs: SearchExpr[] = [] + this.nextToken() + + this.assertToken(TokenType.NEW_LINE) + + this.nextToken() + + while (true) { + + if (this.CurrentToken.T === TokenType.RBRACE && this.PeekToken.T === TokenType.NEW_LINE) { + + this.nextToken() + break + } + + const t = this.CurrentToken.T; + + if (this.CurrentToken?.T === TokenType.NUMERIC) { + Exprs.push(this.parseNumericExpr()) + } else if (this.CurrentToken?.T === TokenType.IDENTIFIER) { + Exprs.push(this.parseExpr()) + } else if ([ + TokenType.UNION, + TokenType.INTERSECT, + TokenType.NOT, + TokenType.OPTIONAL, + TokenType.EXACT, + TokenType.VECTOR, + TokenType.TAG + ].includes(t)) { + Exprs.push(this.parseExpandExpr(EntityType[t])) + } else if (this.CurrentToken.T === TokenType.GEO_EXPR) { + Exprs.push(this.parseGeoExpr()) + } else if ([TokenType.FUZZY, TokenType.WILDCARD, TokenType.PREFIX].includes(t)) { + Exprs.push(this.parseSimpleExpr(EntityType[t])) + } else if (this.CurrentToken.T === TokenType.IDS_EXPR) { + Exprs.push(this.parseIdsExpr()) + } else if (this.CurrentToken.T === TokenType.LEXRANGE_EXPR) { + Exprs.push(this.parseLexrangeExpr()) + } else if (this.CurrentToken.T === TokenType.NUMBER) { + Exprs.push(new Expr(this.CurrentToken.Data.toString(), EntityType.NUMBER)) + } else if (this.CurrentToken.T === TokenType.LESS) { + Exprs.push(this.parseWildcardEmpty()) + } + + this.nextToken() + } + + return new ExpandExpr(t, Exprs, data) + } + + parseLexrangeExpr() { + this.assertToken(TokenType.LEXRANGE_EXPR) + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + let first = this.CurrentToken.Data + + this.nextToken() + + this.assertToken(TokenType.DOT) + + this.nextToken() + + this.assertToken(TokenType.DOT) + + this.nextToken() + + this.assertToken(TokenType.DOT) + + this.nextToken() + + let second = this.CurrentToken.Data + + this.nextToken() + + this.assertToken(TokenType.RBRACE) + + return new Expr(`${first}...${second}`, EntityType.LEXRANGE) + } + + parseIdsExpr() { + this.assertToken(TokenType.IDS_EXPR) + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + this.nextToken() + + let ids: number[] = [] + + while (this.CurrentToken.T !== TokenType.RBRACE) { + ids.push(parseInt(this.CurrentToken.Data)) + + this.nextToken() + + + this.assertToken(TokenType.COMMA) + + this.nextToken() + } + + this.assertToken(TokenType.RBRACE) + + this.nextToken() + + return new Expr(ids.join(','), EntityType.IDS) + } + + // This is a special result. + // + // Example output: }\n + parseWildcardEmpty() { + // TODO: Check for WILDCARD_EMPTY + this.assertToken(TokenType.LESS) + + this.nextToken() + + this.assertToken(TokenType.WILDCARD) + + this.nextToken() + + this.assertToken(TokenType.GREATER) + + this.nextToken() + + // TODO: Once fixed by redisearch team, remove this. + this.assertToken(TokenType.RBRACE) + + + return new Expr("", EntityType.WILDCARD) + } + + parseExpr() { + + this.assertToken(TokenType.IDENTIFIER) + + let str = '' + + while (this.CurrentToken.T !== TokenType.NEW_LINE) { + str = str + this.CurrentToken.Data + this.nextToken() + } + + return new Expr(str, EntityType.TEXT) + } + + // Parse a very simple entity with format: + // { } + parseSimpleExpr(e: EntityType) { + + assertSimpleEntity(e) + + this.assertToken(TokenType[e]) + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + let identifierData = this.CurrentToken.Data; + + this.nextToken() + + this.assertToken(TokenType.RBRACE) + + this.nextToken() + + return new Expr(identifierData, e) + } + + parseGeoExpr() { + this.assertToken(TokenType.GEO_EXPR) + + let geoData = this.CurrentToken.Data + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + let identifierData = this.CurrentToken.Data + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + this.nextToken() + + this.assertToken(TokenType.NUMBER) + + let first = this.CurrentToken.Data; + + this.nextToken() + + this.assertToken(TokenType.COMMA) + + this.nextToken() + + this.assertToken(TokenType.NUMBER) + + let second = this.CurrentToken.Data; + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + assert(this.CurrentToken.Data === '-', "Expected Identifier to be MINUS") + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + assert(this.CurrentToken.Data === '-', "Expected Identifier to be MINUS") + + this.nextToken() + + this.assertToken(TokenType.GREATER) + + this.nextToken() + + this.assertToken(TokenType.NUMBER) + + let third = this.CurrentToken.Data; + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + let metric = this.CurrentToken.Data; + + this.nextToken() + + this.assertToken(TokenType.RBRACE) + + this.nextToken() + + return new Expr(`${first},${second} --> ${third} ${metric}`, EntityType.GEO, identifierData) + } + + parseNumericExpr() { + this.assertToken(TokenType.NUMERIC) + + this.nextToken() + + this.assertToken(TokenType.LBRACE) + + this.nextToken() + + this.assertToken(TokenType.NUMBER) + + let left = this.CurrentToken?.Data + + this.nextToken() + + let lsign = this.CurrentToken // TODO: Check sign + + this.nextToken() + + this.assertToken(TokenType.IDENTIFIER) + + let identifier = this.CurrentToken + + this.nextToken() + + while (this.CurrentToken.T === TokenType.IDENTIFIER) { + identifier.Data = identifier.Data + this.CurrentToken.Data + this.nextToken() + } + + + let rsign = this.CurrentToken + + this.nextToken() + + + this.assertToken(TokenType.NUMBER) + + let right = this.CurrentToken?.Data + + this.nextToken() + + + this.assertToken(TokenType.RBRACE) + + this.nextToken()// read off RBRACE + + // assertToken(TokenType.NEW_LINE, this.CurrentToken?.T) + // + // this.nextToken() // read off new line + + return new NumericExpr(left !== 'inf' ? parseFloat(left) : Infinity, lsign, identifier, rsign, right !== 'inf' ? parseFloat(right) : Infinity) + } +} + + +function Parse(data: string): SearchExpr { + const l = new Lexer(data) + + let p = new Parser(l) + + const t = p.CurrentToken.T; + + if (p.CurrentToken?.T === TokenType.NUMERIC) { + return p.parseNumericExpr() + } else if ([ + TokenType.UNION, + TokenType.INTERSECT, + TokenType.NOT, + TokenType.OPTIONAL, + TokenType.EXACT, + TokenType.VECTOR, + TokenType.TAG, + ].includes(t)) { + return p.parseExpandExpr(EntityType[t]) + } else if (p.CurrentToken.T === TokenType.GEO_EXPR) { + return p.parseGeoExpr() + } else if ([TokenType.FUZZY, TokenType.WILDCARD, TokenType.PREFIX].includes(t)) { + return p.parseSimpleExpr(EntityType[t]) + } else if (p.CurrentToken.T === TokenType.IDS_EXPR) { + return p.parseIdsExpr() + } else if (p.CurrentToken.T === TokenType.LEXRANGE_EXPR) { + return p.parseLexrangeExpr() + } else if (p.CurrentToken.T === TokenType.LESS) { + return p.parseWildcardEmpty() + } else { + return p.parseExpr() + } +} + +export function ParseExplain(output: string) { + return Parse(output).toJSON() +} + + +function isLetter(str: string): boolean { + return str.length === 1 && (str.match(/[a-z]/i) !== null) +} + +function isDigit(str: string): boolean { + return str >='0' && str <= '9' +} + + +function assert(c: boolean, errorMsg: string) { + if (!c) { + throw new Error(errorMsg) + } +} + +function assertToken(expected: TokenType, actual: TokenType | undefined) { + if (actual === undefined) { + throw new Error("Token is undefined") + } + + assert(expected === actual, `Expected ${expected}, Actual: ${actual}`) +} + +function assertExpandEntity(t: EntityType) { + if (![ + EntityType.UNION, + EntityType.INTERSECT, + EntityType.NOT, + EntityType.OPTIONAL, + EntityType.EXACT, + EntityType.VECTOR, + EntityType.TAG, + ].includes(t)) { + throw new Error(`${t} is not an expand entity`) + } +} + + +function assertSimpleEntity(t: EntityType) { + if (![ + EntityType.FUZZY, + EntityType.WILDCARD, + EntityType.PREFIX, + ].includes(t)) { + throw new Error(`${t} is not a simple entity`) + } +} + +export function ParseProfileCluster(info: any[]): [Object, EntityInfo] { + + let clusterInfo: {[key: string]: any[]} = {} + let key: string = '' + let i = 0 + while (i < info.length) { + if (Array.isArray(info[i])) { + clusterInfo[key].push(info[i]) + } else if (typeof(info[i]) === 'string') { + key = info[i] + clusterInfo[key] = [] + } else { + throw new Error("Expected array or string - " + JSON.stringify(info)) + } + i++ + } + + let shards: EntityInfo[] = [] + + Object.keys(clusterInfo).map(k => { + if (k.toLowerCase().startsWith('shard')) { + let shardProfileInfo = ParseProfile(clusterInfo[k]) + shards.push({ + id: uuidv4(), + type: k as EntityType, + children: [shardProfileInfo], + }) + } + }) + + return [ + clusterInfo, + { + id: uuidv4(), + type: EntityType.CLUSTER_MERGE, + // children: shards, + children: Object.keys(clusterInfo).filter(k => k.toLowerCase().startsWith('shard')).map(k => + ParseProfile(clusterInfo[k]) + ) + } + ] +} + +export function ParseProfile(info: any[][]): EntityInfo { + const parserData: any = info[info.length - 2] + let resp = parserData[0].toLowerCase().startsWith('iterators') ? ParseIteratorProfile(parserData[1]) : null + + const processorsProfile: string[][] = info[info.length - 1].slice(1) + + for (let i = 0; i < processorsProfile.length; i++) { + const e = processorsProfile[i] + let id = uuidv4() + resp = { + id, + type: e[1] as EntityType, + time: e[3], + counter: e[5], + children: resp ? [{...resp, parentId: id}] : [], + } + } + + return resp as EntityInfo +} + +export function ParseIteratorProfile(data: any[]): EntityInfo { + + let props: {[key: string]: any} = {} + + // Parse items with the following format [key1, value1, key2, value2, null, key3, value3, key4, value4_1[], value4_2[]] + for (let x = 0; x < data.length; x += 2) { + let key = data[x] + if (key === null) { + + while (data[x] === null) { + x = x + 1 + } + key = data[x] + } + + let val = data[x + 1] + + while (data[x + 1] === null) x = x + 1 + val = data[x + 1] + + if (Array.isArray(val)) { + let arr: any[] = [] + while ((x + 1) < data.length && Array.isArray(data[x + 1])) { + arr.push(data[x + 1]) + x = x + 1 + } + props[key] = arr + } else { + props[key] = val + } + } + + let childrens = props['Child iterators'] || props['Child Iterators'] || [] + + const id = uuidv4() + return { + id, + type: props['Type'] || props['TYPE'], + time: props['Time'], + counter: props['Counter'], + size: props['Size'], + data: props['Term'], + children: childrens.map(ParseIteratorProfile).map((d: EntityInfo) => ({...d, parentId: id})), + } + + // const t: EntityType = props['Type'] + // if ([EntityType.UNION, EntityType.INTERSECT].includes(t)) { + // const l = data.length + + // return { + // id: uuidv4(), + // type: t, + // time: data[5], + // counter: data[7], + // children: props['Child iterators'].map(x => ParseIteratorProfile(x)), + // } + // // } else if (t === EntityType.NUMERIC) { + // // return { + // // id: uuidv4(), + // // type: EntityType.NUMERIC, + // // snippet: 'Numeric', + // // children: [], + // // } + // } else { + // return { + // id: uuidv4(), + // type: data[1], + // data: data[3], + // time: data[5], + // counter: data[7], + // size: data[9], + // children: [], + // } + // } +} + +export enum ModuleType { + Graph, + Search, +} + +export enum CoreType { + Profile, + Explain, +} + +export function getOutputLevel(output: string) { + let i = 0 + while (output[i] == ' ' && i < output.length) { + i++ + } + return (i > 0 ? i / 4 : 0) + 1 +} + +function ParseEntity(entity: string, children: EntityInfo[]): EntityInfo { + const info = entity.trim().split('|') + + let time: string | undefined = '', size: string | undefined = '' + + const metaData = info.slice(-1)[0].trim() + + // Is GRAPH.PROFILE output + if (metaData.startsWith('Records produced')) { + + [size, time] = metaData.trim().split(',') + + size = size.split(': ')[1] + time = time.split(': ')[1].split(' ')[0] + info.pop() + } + + const snippet = [...info.slice(1)].join('|').trim() + + return { + id: uuidv4(), + type: info[0] as EntityType, + snippet, + children, + time, + size, + counter: size, + level: getOutputLevel(entity), + } +} + + +export function ParseGraphV2(output: string[]) { + + const level = getOutputLevel(output[0]) + 1 + + let entity = ParseEntity(output[0], []) + let children: EntityInfo[] = [] + + let pairs: [number, number][] = [] + + let s: number | null = null, e: number | null = null + let i = 1 + + while (i < output.length) { + let l = getOutputLevel(output[i]) + if (l === level) { + if (s == null) { + s = i + } else if (s != null) { + pairs.push([s, i]) + s = i + } + } + i++ + } + + if (s !== null) { + pairs.push([s, i]) + } + + for (let k = 0; k < pairs.length; k++) { + let p = pairs[k] + children.push({...ParseGraphV2(output.slice(p[0], p[1])), parentId: entity.id}) + } + + entity.children = children + return entity +} + + +export function GetTotalExecutionTime(g: EntityInfo) { + return parseFloat(g.time || '') + g.children.reduce((a, c) => a + GetTotalExecutionTime(c), 0) +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/styles/_dark_theme.less b/redisinsight/ui/src/packages/ri-explain/src/styles/_dark_theme.less new file mode 100644 index 0000000000..54175c82c7 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/styles/_dark_theme.less @@ -0,0 +1,3 @@ +.theme_DARK { + @import (less)'../../node_modules/@elastic/eui/dist/eui_theme_dark.min.css'; +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/styles/_light_theme.less b/redisinsight/ui/src/packages/ri-explain/src/styles/_light_theme.less new file mode 100644 index 0000000000..1177707d0f --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/styles/_light_theme.less @@ -0,0 +1,3 @@ +.theme_LIGHT { + @import (less)'../../node_modules/@elastic/eui/dist/eui_theme_light.min.css'; +} diff --git a/redisinsight/ui/src/packages/ri-explain/src/styles/styles.less b/redisinsight/ui/src/packages/ri-explain/src/styles/styles.less new file mode 100644 index 0000000000..feba7ced40 --- /dev/null +++ b/redisinsight/ui/src/packages/ri-explain/src/styles/styles.less @@ -0,0 +1,394 @@ +@import "_dark_theme.less"; +@import "_light_theme.less"; + +* { + margin: 0px; + padding: 0px; +} + +#mainApp::-webkit-scrollbar { + width: 2em; +} + +#mainApp::-webkit-scrollbar-thumb { + background-color: rgba(105, 112, 125, 0.5); + border: 6px solid transparent; + background-clip: content-box; +} + +#container-parent::-webkit-scrollbar { + width: 16px; + height: 16px; +} + +#container-parent::-webkit-scrollbar-corner, #container-parent::-webkit-scrollbar-track { + background: transparent; +} + +#container-parent::-webkit-scrollbar-thumb { + background-color: rgba(105, 112, 125, 0.5); + border: 6px solid transparent; + background-clip: content-box; +} + +.theme_DARK { + --info-background: #2b2b2b;; + --info-color: white; + --svg-background: #010101; + --tooltip-background: #3E4B5E; + + --node-border-color: #3D3D3D; + --node-border-shadow: #17336952; + --node-metadata-border-color: #3C3C3C; + --node-metadata-color: #B5B6C0; + --node-background: #212021; + --edge-background: #6B6B6B; + --text-color: #DFE5EF; +} + +.theme_LIGHT { + --info-background: #EBEFFA; + --info-color: black; + --svg-background: #FFFFFF; + --tooltip-background: white; + + --node-border-color: #E4EAF2; + --node-border-shadow: #17336926; + --node-metadata-border-color: #CCD7E7; + --node-metadata-color: #415681; + --node-background: #FFF; + --edge-background: #8992B3; + --text-color: #173369; +} + +body { + background-color: var(--svg-background); + overflow: hidden; +} + + +* div, +* span { + font-family: 'Graphik', sans-serif !important; +} + +.euiPagination__list { + list-style: none; + padding-inline-start: 0px; +} + + +.responseFail { + color: #e06c75; + padding: 12px !important; + font-family: monospace !important; +} + +.parsedRedisReply { + white-space: pre-wrap; + word-break: break-all; + font: normal normal normal 14px/17px Inconsolata !important; + padding: 4px 12px !important; + color: var(--info-color); +} + +.responseInfo { + color: var(--info-color); + padding: 12px !important; + font-family: monospace !important; +} + +.euiToolTip { + color: var(--info-color) !important; + background-color: var(--tooltip-background) !important; + font-size: 12px !important; +} + +.euiToolTip__arrow { + background-color: var(--tooltip-background) !important; +} + + +.euiToolTipAnchor { + display: unset !important; +} + +.InfoData { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + // Make text selectable + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.FooterCommon { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + color: var(--node-metadata-color); + font-size: 12px; + + + // Make text selectable + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.ProfileContainer { + width: 320px; + min-height: 84px; + + padding-left: 18px !important; + padding-right: 18px !important; + + box-shadow: 0px 3px 12px var(--node-border-shadow); + border: 1px solid var(--node-border-color) !important; + border-radius: 4px; + opacity: 1; + + display: flex; + flex-direction: column; + justify-content: space-around; + + background-color: var(--node-background); + color: var(--text-color); + + &:hover { + outline: 2px solid #85A2FE !important; + box-sizing: border-box; + } + + .Main { + + display: flex; + justify-content: space-between; + line-height: 18px; + + font-size: 13px; + color: var(--text-color); + + padding-top: 12px; + padding-bottom: 12px; + + .Type { + color: #CE915B; + text-transform: lowercase; + } + } + + .Footer{ + padding-top: 4px; + padding-bottom: 12px; + height: auto; + } + + .MetaData { + display: flex; + justify-content: space-between; + line-height: 18px; + color: var(--node-metadata-color); + + padding-top: 12px; + padding-bottom: 12px; + + height: 42px; //FIXME: fixed height? + border-top: 0.5px solid var(--node-metadata-border-color); + + .Time { + display: flex; + align-items: center; + font-size: 12px; + + div:first-child { + padding-right: 5px; + } + + } + + .Size { + display: flex; + align-items: center; + font-size: 13px; + + div:first-child { + padding-right: 5px; + } + + + } + + .IconContainer { + > svg { + width: 12px !important; + height: 13px !important; + } + } + } +} + +.ExplainContainer { + width: 240px; + min-height: 42px; + + box-shadow: 0px 3px 12px var(--node-border-shadow); + border: 1px solid var(--node-border-color) !important; + border-radius: 4px; + opacity: 1; + + padding: 12px 18px 12px 18px !important; + + display: flex; + flex-direction: column; + justify-content: space-around; + + background-color: var(--node-background); + + &:hover { + outline: 2px solid #85A2FE !important; + box-sizing: border-box; + } + + .Main { + // height: 42px; + font-size: 13px; + color: var(--text-color); + + .Info { + display: flex; + justify-content: space-between; + .Type { + color: #CE915B; + text-transform: lowercase; + } + } + + } + + .Footer{ + height: 24px; + padding-top: 6px; + } +} + + +.ProfileInfo { + display: flex; + justify-content: center; + color: var(--text-color); + + font-family: 'Graphik', sans-serif !important; + font-size: 13px; + + padding-bottom: 3px !important; + + position: absolute; + bottom: 12px; + width: 100%; +} + +.ProfileTimeInfo { + background-color: var(--info-background); + + padding-top: 3px !important; + + .Item { + + padding-left: 18px; + padding-right: 18px; + + .Key { + font-size: 13px; + line-height: 18px; + } + + .Value { + font-size: 18px; + line-height: 24px; + } + } +} + +.ProfileTimeMini { + background-color: var(--svg-background); +} + +.NodeType { + color: #CE915B; +} + +.NodeMetadata { + display: flex; + justify-content: space-between; + font-size: 12px; + color: darkgrey; +} + +.NodeInfoDivider { + width: 284px; + height: 29px; + border-bottom: 1px solid #3D3D3D !important; + position: absolute; + color: #B5B6C0; +} + +.NodeTime { + display: flex; + align-items: center; +} + + +.NodeContentInfo { + display: flex; + align-items: center; +} + + +.NodeTimeIcon { + padding-right: 5px !important; +} + +.NodeContentIcon { + padding-left: 5px !important; +} + +.Box { + width: 5px; + height: 9px; + background-color: #FF6280; + + align-self: center; + + margin-left: 2px !important; +} + +.ZoomMenu { + position: absolute; + bottom: 110px; + right: 10px; + border-right: 4px; + box-shadow: 0 1px 6px rgb(0 0 0 / 16%), 0 1px 6px rgb(0 0 0 / 23%); + display: flex; + flex-direction: column; +} + +.CollapseButton { + color: var(--text-color); + line-height: 18px; + font-size: 12px; + display: flex; + justify-content: center; + cursor: pointer; + + div:first-child { + padding-right: 5px; + } +} diff --git a/redisinsight/ui/src/packages/clients-list/yarn.lock b/redisinsight/ui/src/packages/ri-explain/yarn.lock similarity index 64% rename from redisinsight/ui/src/packages/clients-list/yarn.lock rename to redisinsight/ui/src/packages/ri-explain/yarn.lock index eaa9bbe21f..d9231ca8ac 100644 --- a/redisinsight/ui/src/packages/clients-list/yarn.lock +++ b/redisinsight/ui/src/packages/ri-explain/yarn.lock @@ -2,208 +2,82 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== - -"@babel/core@^7.12.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.21.0", "@babel/generator@^7.21.1": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== - dependencies: - "@babel/types" "^7.21.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.21.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" +"@antv/hierarchy@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@antv/hierarchy/-/hierarchy-0.6.8.tgz#b77c490a9c2dd6da186cbacee0e7887b8c1b3fa4" + integrity sha512-wVzUl+pxny5gyGJ2mkWx8IiEypX6bnMHgr/NILgbxY6shoy0Vf4FhZpI3CY8Ez7bQT6js8fMkB2NymPW7d7i8A== + dependencies: + "@antv/util" "^2.0.7" + +"@antv/util@^2.0.7": + version "2.0.17" + resolved "https://registry.yarnpkg.com/@antv/util/-/util-2.0.17.tgz#e8ef42aca7892815b229269f3dd10c6b3c7597a9" + integrity sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q== + dependencies: + csstype "^3.0.8" + tslib "^2.0.3" + +"@antv/x6-common@^2.0.x": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@antv/x6-common/-/x6-common-2.0.4.tgz#14dcfa4266d1ea594b0029b80defb916dbe01a7f" + integrity sha512-OeCMJUP2/fAbGLCfUuFU/p9oSdyG/RLNpDE4xUT8pBHfhhlKfoMDz9RkYr6+ZAg8F5hgN3zBkZDuLXhO6uN8hQ== + dependencies: + lodash-es "^4.17.15" + utility-types "^3.10.0" + +"@antv/x6-geometry@^2.0.x": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@antv/x6-geometry/-/x6-geometry-2.0.4.tgz#d08213e200e16c8d065a0235189239cb367a0797" + integrity sha512-dlsLNRRTiCw8TsJ/03j3y5IbbbK4Npf6zBH6kAx8nnW+edNT/TAOChvPRzizwD+vA7wY9Rp2AiRnp/vCdIYC5w== + +"@antv/x6-react-shape@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@antv/x6-react-shape/-/x6-react-shape-2.1.0.tgz#b364a021d9690abb1f8f35cefd2da913dfd145d3" + integrity sha512-HY9tPbMU1Z7Tu2lwBenXJe53DzT2MFt9LXRBPyN+r5qu8kP3VMU1vzS+2+LsPFdPL3s71wolGjL1GExUoh77JQ== + +"@antv/x6@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@antv/x6/-/x6-2.1.3.tgz#65899f44058bb7ef6dba0986aa65fb38c1737d87" + integrity sha512-1y/BU76RmENucn5wPvSvabd+RnwBJ6y61XckBPvmoDHnvsY8xsKjedTL3Hqpvf2/5nfU21YPmvo+1gV0x4nO0w== + dependencies: + "@antv/x6-common" "^2.0.x" + "@antv/x6-geometry" "^2.0.x" + utility-types "^3.10.0" + +"@babel/code-frame@^7.0.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== - "@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.15.4", "@babel/runtime@^7.9.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" - integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.1" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.2" - "@babel/types" "^7.21.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@elastic/datemath@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@elastic/datemath/-/datemath-5.0.3.tgz#7baccdab672b9a3ecb7fe8387580670936b58573" - integrity sha512-8Hbr1Uyjm5OcYBfEB60K7sCP6U3IXuWDaLaQmYv3UxgI4jqBWbakoemwWvsqPVUvnwEjuX6z7ghPZbefs8xiaA== + version "7.17.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.0.tgz#b8d142fc0f7664fb3d9b5833fd40dcbab89276c0" + integrity sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ== dependencies: - tslib "^1.9.3" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.13.10": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" "@elastic/eui@34.6.0": version "34.6.0" @@ -249,83 +123,70 @@ uuid "^8.3.0" vfile "^4.2.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== +"@emotion/cache@^11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" + integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== + dependencies: + "@emotion/memoize" "^0.7.4" + "@emotion/sheet" "^1.1.0" + "@emotion/utils" "^1.0.0" + "@emotion/weak-memoize" "^0.2.5" + stylis "4.0.13" + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/memoize@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" + integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== + +"@emotion/react@^11.7.1": + version "11.7.1" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.7.1.tgz#3f800ce9b20317c13e77b8489ac4a0b922b2fe07" + integrity sha512-DV2Xe3yhkF1yT4uAUoJcYL1AmrnO5SVsdfvu+fBuS7IbByDeTVx9+wFmvx9Idzv7/78+9Mgx2Hcmr7Fex3tIyw== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/cache" "^11.7.1" + "@emotion/serialize" "^1.0.2" + "@emotion/sheet" "^1.1.0" + "@emotion/utils" "^1.0.0" + "@emotion/weak-memoize" "^0.2.5" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.2.tgz#77cb21a0571c9f68eb66087754a65fa97bfcd965" + integrity sha512-95MgNJ9+/ajxU7QIAruiOAdYNjxZX7G2mhgrtDWswA21VviYIRP1R5QilZ/bDY42xiKsaktP4egJb3QdYQZi1A== dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.4" + "@emotion/unitless" "^0.7.5" + "@emotion/utils" "^1.0.0" + csstype "^3.0.2" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" +"@emotion/sheet@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" + integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@lmdb/lmdb-darwin-arm64@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.7.9.tgz#4b7e64874e42e1d3d9510e77da02716632bc0f16" - integrity sha512-62sdgx7g+d/lALCPVmHBwwZsw8EZlRZ99Tvm2FIH+eskTOqJKcK33GjnQpOYm3JtGspzVcCPGtupiDrkxxtmTQ== - -"@lmdb/lmdb-darwin-x64@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.7.9.tgz#51c1591c6ae93041447c06272e954920a4e33ed1" - integrity sha512-luf5OZrxTtWc59Ku+1fimRoWW1taUYWGM4Prma2sydyTifAsmKGYontJxJqG2o12L4QZULpxgH/ghzdw46ooCQ== - -"@lmdb/lmdb-linux-arm64@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.7.9.tgz#72928db4f025af44c7990335901aa87bcdc7f86f" - integrity sha512-FzcA6m/RQZ6dfT6QmO2RUnIo0MjfuMYSXXNFbb/BmGatVAsmiORIVb06aq0kHVo8B1SJ7cYmoPyHyWSYXyGraw== - -"@lmdb/lmdb-linux-arm@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.7.9.tgz#b46caeea66244be48bfaedebb6dab9d98470fb78" - integrity sha512-Y71NC8ZfRQosH9MpBX0aTV6YnJWdsnhRy+KxQeWQRd/D+Y0gwFVmXFghJwx21OuE5fnSW8oJYCearRFRum/C5w== - -"@lmdb/lmdb-linux-x64@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.9.tgz#c294cd43fe5ec63792ce6e29aedf2392b65d4d9f" - integrity sha512-oeLSoieaib9afQHK6/QUCeR5E2VbOY7W/Jv6ixuhK0VzPE/ovFQqzeCAPoTb0btKscVPiGUNcZbhB+LeswZFZg== - -"@lmdb/lmdb-win32-x64@2.7.9": - version "2.7.9" - resolved "https://registry.yarnpkg.com/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.7.9.tgz#4ae02608204e117cbf5bca2f3d67594669354d40" - integrity sha512-qz5WyPikCS0siyoMjV4x6cHS0AMErh6mqBS4hgWUgTMebG3qn1AuBw4eQpmTMf32ES9fVMFeDhZBjC5eHoC3Og== +"@emotion/utils@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af" + integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA== + +"@emotion/weak-memoize@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== "@mapbox/hast-util-table-cell-style@^0.2.0": version "0.2.0" @@ -334,36 +195,6 @@ dependencies: unist-util-visit "^1.4.1" -"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.0.tgz#d31a238c943ffc34bab73ad6ce7a6466d65888ef" - integrity sha512-5qpnNHUyyEj9H3sm/4Um/bnx1lrQGhe8iqry/1d+cQYCRd/gzYA0YLeq0ezlk4hKx4vO+dsEsNyeowqRqslwQA== - -"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.0.tgz#2f6fbbec3d3f0bbe9c6678c899f1c1a6e25ed980" - integrity sha512-ZphTFFd6SFweNAMKD+QJCrWpgkjf4qBuHltiMkKkD6FFrB3NOTRVmetAGTkJ57pa+s6J0yCH06LujWB9rZe94g== - -"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.0.tgz#19875441da50b9aa8f8e726eb097a4cead435a3f" - integrity sha512-NEX6hdSvP4BmVyegaIbrGxvHzHvTzzsPaxXCsUt0mbLbPpEftsvNwaEVKOowXnLoeuGeD4MaqSwL3BUK2elsUA== - -"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.0.tgz#3b855ac72cc16e89db2f72adf47ddc964c20a53d" - integrity sha512-ztKVV1dO/sSZyGse0PBCq3Pk1PkYjsA/dsEWE7lfrGoAK3i9HpS2o7XjGQ7V4va6nX+xPPOiuYpQwa4Bi6vlww== - -"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.0.tgz#455f1d5bb00e87f78c67711f26e7bff9f1457684" - integrity sha512-9uvdAkZMOPCY7SPRxZLW8XGqBOVNVEhqlgffenN8shA1XR9FWVsSM13nr/oHtNgXg6iVyML7RwWPyqUeThlwxg== - -"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.0.tgz#03c6bfcd3acb179ea69546c20d50895b9d623ada" - integrity sha512-Wg0+9615kHKlr9iLVcG5I+/CHnf6w3x5UADRv8Ad16yA0Bu5l9eVOROjV7aHPG6uC8ZPFIVVaoSjDChD+Y0pzg== - "@parcel/bundler-default@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.3.2.tgz#329f171e210dfb22beaa52ae706ccde1dae384c1" @@ -392,6 +223,20 @@ dependencies: chalk "^4.1.0" +"@parcel/compressor-brotli@^2.0.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@parcel/compressor-brotli/-/compressor-brotli-2.2.1.tgz#0ebcb44f656e0f2093f6fa43ef074fbc12d77a49" + integrity sha512-CXmneKgudev9VthRShKL20JTV8paYS53A2LBA5nspfgEPnbFeAzX2LV0/QqY983+f+WCEWzieySGcVRxCxK5nQ== + dependencies: + "@parcel/plugin" "^2.2.1" + +"@parcel/compressor-gzip@^2.0.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@parcel/compressor-gzip/-/compressor-gzip-2.2.1.tgz#3c9182888ca83f86e8f1da48bbe2059e50ee7bb1" + integrity sha512-aj9TQifbxqWNQxhUUMvC/UJ6+fY+nPrqJbAJHjrJGrbYncjS0jok1Wkh40iu0qY5OAz3YGUvzadr3nFgL5UsDQ== + dependencies: + "@parcel/plugin" "^2.2.1" + "@parcel/compressor-raw@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.3.2.tgz#1a808ae9e61ed86f655935e1d2a984383b3c00a7" @@ -663,7 +508,7 @@ "@parcel/utils" "2.3.2" posthtml "^0.16.4" -"@parcel/plugin@2.3.2": +"@parcel/plugin@2.3.2", "@parcel/plugin@^2.2.1": version "2.3.2" resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.3.2.tgz#7701c40567d2eddd5d5b2b6298949cd03a2a22fa" integrity sha512-SaLZAJX4KH+mrAmqmcy9KJN+V7L+6YNTlgyqYmfKlNiHu7aIjLL+3prX8QRcgGtjAYziCxvPj0cl1CCJssaiGg== @@ -732,9 +577,9 @@ nullthrows "^1.1.1" "@parcel/source-map@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.1.1.tgz#fb193b82dba6dd62cc7a76b326f57bb35000a782" - integrity sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@parcel/source-map/-/source-map-2.0.2.tgz#9aa0b00518cee31d5634de6e9c924a5539b142c1" + integrity sha512-NnUrPYLpYB6qyx2v6bcRPn/gVigmGG6M6xL8wIg/i0dP1GLkuY1nf+Hqdf63FzPTqqT7K3k6eE5yHPQVMO5jcA== dependencies: detect-libc "^1.0.3" @@ -814,6 +659,15 @@ "@parcel/plugin" "2.3.2" json5 "^2.2.0" +"@parcel/transformer-less@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@parcel/transformer-less/-/transformer-less-2.3.2.tgz#5e9fe261e6d3a196f89cfb811e60c549f1034e37" + integrity sha512-elQ00PiUkadFM2DdZrqTciobXSQjPkZA5ZSfdC/lfW7aSP28bnLI1EV3FfHZhiwJcmJ/nccmT2ZwRVwJKus7hg== + dependencies: + "@parcel/plugin" "2.3.2" + "@parcel/source-map" "^2.0.0" + less "^4.1.1" + "@parcel/transformer-postcss@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.3.2.tgz#a428c81569dd66758c5fab866dca69b4c6e59743" @@ -856,15 +710,6 @@ "@parcel/utils" "2.3.2" react-refresh "^0.9.0" -"@parcel/transformer-sass@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@parcel/transformer-sass/-/transformer-sass-2.3.2.tgz#ee124d02acb1f44417f0d78d366302dd68aa412b" - integrity sha512-jVDdhyzfCYLY/91gOfMAT0Cj3a3czETD71WpvnXhzfctnhZZ/lhC1aFUJxlhIF1hkVNyZ1b9USCCBAD4fje2Jg== - dependencies: - "@parcel/plugin" "2.3.2" - "@parcel/source-map" "^2.0.0" - sass "^1.38.0" - "@parcel/transformer-svg@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.3.2.tgz#9a66aef5011c7bbb1fa3ce9bb52ca56d8f0f964d" @@ -906,12 +751,10 @@ chalk "^4.1.0" "@parcel/watcher@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.1.0.tgz#5f32969362db4893922c526a842d8af7a8538545" - integrity sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.5.tgz#f913a54e1601b0aac972803829b0eece48de215b" + integrity sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw== dependencies: - is-glob "^4.0.3" - micromatch "^4.0.5" node-addon-api "^3.2.1" node-gyp-build "^4.3.0" @@ -938,9 +781,9 @@ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/chroma-js@^2.0.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/chroma-js/-/chroma-js-2.4.0.tgz#476a16ae848c77478079d6749236fdb98837b92c" - integrity sha512-JklMxityrwjBTjGY2anH8JaTx3yjRU3/sEHSblLH1ba5lqcSh1LnImXJZO5peJfXyqKYWjHTGy4s5Wz++hARrw== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@types/chroma-js/-/chroma-js-2.1.3.tgz#0b03d737ff28fad10eb884e0c6cedd5ffdc4ba0a" + integrity sha512-1xGPhoSGY1CPmXLCBcjVZSQinFjL26vlR8ZqprsBWiFyED4JacJJ9zHhh5aaUXqbY9B37mKQ73nlydVAXmr1+g== "@types/hast@^2.0.0": version "2.3.4" @@ -958,9 +801,9 @@ hoist-non-react-statics "^3.3.0" "@types/lodash@^4.14.160": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + version "4.14.178" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" + integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== "@types/mdast@^3.0.0": version "3.0.10" @@ -969,11 +812,6 @@ dependencies: "@types/unist" "*" -"@types/node@^17.0.21": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - "@types/numeral@^0.0.28": version "0.0.28" resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-0.0.28.tgz#e43928f0bda10b169b6f7ecf99e3ddf836b8ebe4" @@ -995,24 +833,17 @@ integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== "@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + version "15.7.4" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== "@types/react-beautiful-dnd@^13.0.0": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.3.tgz#9812f6086c4b77ce08c83120788d92084a26db0f" - integrity sha512-BNdmvONKtsrZq3AGrujECQrIn8cDT+fZsxBLXuX3YWY/nHfZinUFx4W88eS0rkcXzuLbXpKOsu/1WCMPMLEpPg== + version "13.1.2" + resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.2.tgz#510405abb09f493afdfd898bf83995dc6385c130" + integrity sha512-+OvPkB8CdE/bGdXKyIhc/Lm2U7UAYCCJgsqmopFmh9gbAudmslkI8eOrPDjg4JhwSE6wytz4a3/wRjKtovHVJg== dependencies: "@types/react" "*" -"@types/react-dom@^17.0.13": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492" - integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ== - dependencies: - "@types/react" "^17" - "@types/react-input-autosize@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@types/react-input-autosize/-/react-input-autosize-2.2.1.tgz#6a335212e7fce1e1a4da56ae2095c8c5c35fbfe6" @@ -1021,9 +852,9 @@ "@types/react" "*" "@types/react-redux@^7.1.20": - version "7.1.25" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.25.tgz#de841631205b24f9dfb4967dd4a7901e048f9a88" - integrity sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg== + version "7.1.22" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.22.tgz#0eab76a37ef477cc4b53665aeaf29cb60631b72a" + integrity sha512-GxIA1kM7ClU73I6wg9IRTVwSO9GS+SAKZKe0Enj+82HMU6aoESFU2HNAdNi3+J53IaOHPiUfT3kSG4L828joDQ== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -1045,18 +876,9 @@ "@types/react" "*" "@types/react@*": - version "18.0.28" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" - integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^17", "@types/react@^17.0.40": - version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" - integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1092,14 +914,9 @@ vfile-message "*" abortcontroller-polyfill@^1.1.9: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -acorn@^8.5.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + version "1.7.3" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" + integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== ansi-regex@^5.0.1: version "5.0.1" @@ -1120,22 +937,14 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aria-hidden@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.2.tgz#8c4f7cc88d73ca42114106fdf6f47e68d31475b8" - integrity sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA== +aria-hidden@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.1.3.tgz#bb48de18dc84787a3c6eee113709c473c64ec254" + integrity sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA== dependencies: - tslib "^2.0.0" + tslib "^1.0.0" -attr-accept@^2.2.2: +attr-accept@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== @@ -1157,15 +966,10 @@ base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -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== - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= brace-expansion@^1.1.7: version "1.1.11" @@ -1178,24 +982,18 @@ brace-expansion@^1.1.7: brace@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" - integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q== + integrity sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg= -braces@^3.0.2, 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== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.6.6: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== +browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.6.6: + version "4.19.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" + integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001312" + electron-to-chromium "^1.4.71" + escalade "^3.1.1" + node-releases "^2.0.2" + picocolors "^1.0.0" buffer-from@^1.0.0: version "1.1.2" @@ -1217,10 +1015,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449: - version "1.0.30001458" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001458.tgz#871e35866b4654a7d25eccca86864f411825540c" - integrity sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001312: + version "1.0.30001312" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" + integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== ccount@^1.0.0: version "1.1.0" @@ -1264,21 +1062,6 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -"chokidar@>=3.0.0 <4.0.0": - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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" - chroma-js@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.4.2.tgz#dffc214ed0c11fa8eefca2c36651d8e57cbfb2b0" @@ -1290,9 +1073,9 @@ chrome-trace-event@^1.0.2: integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== classnames@^2.2.6, classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== cliui@^7.0.2: version "7.0.4" @@ -1306,7 +1089,7 @@ cliui@^7.0.2: clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= collapse-white-space@^1.0.2: version "1.0.6" @@ -1330,7 +1113,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" @@ -1338,9 +1121,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + version "2.9.2" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== comma-separated-tokens@^1.0.0: version "1.0.8" @@ -1360,7 +1143,7 @@ commander@^7.0.0, commander@^7.2.0: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concurrently@^6.3.0: version "6.5.1" @@ -1376,15 +1159,17 @@ concurrently@^6.3.0: tree-kill "^1.2.2" yargs "^16.2.0" -convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + 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" @@ -1415,19 +1200,21 @@ css-box-model@^1.2.0: dependencies: tiny-invariant "^1.0.6" -css-declaration-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== +css-declaration-sorter@^6.0.3: + version "6.1.4" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz#b9bfb4ed9a41f8dcca9bf7184d849ea94a8294b4" + integrity sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw== + dependencies: + timsort "^0.3.0" css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== dependencies: boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" + css-what "^5.1.0" + domhandler "^4.3.0" domutils "^2.8.0" nth-check "^2.0.1" @@ -1439,62 +1226,62 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== +cssnano-preset-default@^5.1.12: + version "5.1.12" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz#64e2ad8e27a279e1413d2d2383ef89a41c909be9" + integrity sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w== + dependencies: + css-declaration-sorter "^6.0.3" + cssnano-utils "^3.0.2" + postcss-calc "^8.2.0" + postcss-colormin "^5.2.5" + postcss-convert-values "^5.0.4" + postcss-discard-comments "^5.0.3" + postcss-discard-duplicates "^5.0.3" + postcss-discard-empty "^5.0.3" + postcss-discard-overridden "^5.0.4" + postcss-merge-longhand "^5.0.6" + postcss-merge-rules "^5.0.6" + postcss-minify-font-values "^5.0.4" + postcss-minify-gradients "^5.0.6" + postcss-minify-params "^5.0.5" + postcss-minify-selectors "^5.1.3" + postcss-normalize-charset "^5.0.3" + postcss-normalize-display-values "^5.0.3" + postcss-normalize-positions "^5.0.4" + postcss-normalize-repeat-style "^5.0.4" + postcss-normalize-string "^5.0.4" + postcss-normalize-timing-functions "^5.0.3" + postcss-normalize-unicode "^5.0.4" + postcss-normalize-url "^5.0.5" + postcss-normalize-whitespace "^5.0.4" + postcss-ordered-values "^5.0.5" + postcss-reduce-initial "^5.0.3" + postcss-reduce-transforms "^5.0.4" + postcss-svgo "^5.0.4" + postcss-unique-selectors "^5.0.4" + +cssnano-utils@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.0.2.tgz#d82b4991a27ba6fec644b39bab35fe027137f516" + integrity sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ== cssnano@^5.0.15: - version "5.1.15" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + version "5.0.17" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.17.tgz#ff45713c05cfc780a1aeb3e663b6f224d091cabf" + integrity sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw== dependencies: - cssnano-preset-default "^5.2.14" + cssnano-preset-default "^5.1.12" lilconfig "^2.0.3" yaml "^1.10.2" @@ -1506,26 +1293,31 @@ csso@^4.2.0: css-tree "^1.1.2" csstype@^3.0.2: + version "3.0.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" + integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + +csstype@^3.0.8: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== date-fns@^2.16.1: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + version "2.28.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" + integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== -debug@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.1.2" + ms "^2.1.1" detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-node-es@^1.1.0: version "1.1.0" @@ -1538,23 +1330,23 @@ diff-match-patch@^1.0.4: integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" entities "^2.0.0" domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== -domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== +domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: domelementtype "^2.2.0" @@ -1577,10 +1369,10 @@ dotenv@^7.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -electron-to-chromium@^1.4.284: - version "1.4.311" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.311.tgz#953bc9a4767f5ce8ec125f9a1ad8e00e8f67e479" - integrity sha512-RoDlZufvrtr2Nx3Yx5MB8jX3aHIxm8nRWPJm3yVvyHmyKaRvn90RjzB6hNnt0AkhS3IInJdyRfQb4mWhPvUjVw== +electron-to-chromium@^1.4.71: + version "1.4.71" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" + integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== emoji-regex@^8.0.0: version "8.0.0" @@ -1602,6 +1394,13 @@ entities@^3.0.1: resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + 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" @@ -1617,48 +1416,31 @@ escalade@^3.1.1: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -file-selector@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.4.0.tgz#59ec4f27aa5baf0841e9c6385c8386bef4d18b17" - integrity sha512-iACCiXeMYOvZqlF1kTiYINzgepRBymz1wwjiuup9u9nayhb6g4fSwiyJ/6adli+EPwrWtpgQAh2PoS7HukEGEg== +file-selector@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.2.4.tgz#7b98286f9dbb9925f420130ea5ed0a69238d4d80" + integrity sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA== dependencies: tslib "^2.0.3" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -focus-lock@^0.11.6: - version "0.11.6" - resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.11.6.tgz#e8821e21d218f03e100f7dc27b733f9c4f61e683" - integrity sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg== +focus-lock@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.10.1.tgz#5f46fa74fefb87144479c2f8e276f0eedd8081b2" + integrity sha512-b9yUklCi4fTu2GXn7dnaVf4hiLVVBp7xTiZarAHMODV2To6Bitf6F/UI67RmKbdgJQeVwI1UO0d9HYNbXt3GkA== dependencies: tslib "^2.0.3" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -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" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= get-caller-file@^2.0.5: version "2.0.5" @@ -1675,41 +1457,34 @@ get-port@^4.2.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== -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== - dependencies: - is-glob "^4.0.1" - glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.2.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.12.1" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.1.tgz#ec206be932e6c77236677127577aa8e50bf1c5cb" + integrity sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw== dependencies: type-fest "^0.20.2" +graceful-fs@^4.1.2: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" @@ -1811,7 +1586,7 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -1824,9 +1599,9 @@ html-void-elements@^1.0.0: integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== htmlnano@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.0.3.tgz#50ee639ed63357d4a6c01309f52a35892e4edc2e" - integrity sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A== + version "2.0.0" + resolved "https://registry.yarnpkg.com/htmlnano/-/htmlnano-2.0.0.tgz#07376faa064f7e1e832dfd91e1a9f606b0bc9b78" + integrity sha512-thKQfhcp2xgtsWNE27A2bliEeqVL5xjAgGn0wajyttvFFsvFWWah1ntV9aEX61gz0T6MBQ5xK/1lXuEumhJTcg== dependencies: cosmiconfig "^7.0.1" posthtml "^0.16.5" @@ -1842,10 +1617,17 @@ htmlparser2@^7.1.1: domutils "^2.8.0" entities "^3.0.1" -immutable@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.4.tgz#83260d50889526b4b531a5e293709a77f7c55a2a" - integrity sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w== +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" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= import-fresh@^3.2.1: version "3.3.0" @@ -1858,7 +1640,7 @@ import-fresh@^3.2.1: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -1896,14 +1678,7 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -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" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-buffer@^2.0.0: version "2.0.5" @@ -1915,23 +1690,11 @@ is-decimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -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" @@ -1940,18 +1703,18 @@ is-hexadecimal@^1.0.0: is-json@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" - integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + integrity sha1-a+Fm0USCihMdaGiRuYPfYsOUkf8= is-plain-obj@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" @@ -1965,18 +1728,13 @@ is-word-character@^1.0.0: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -jsesc@^2.5.1: - version "2.5.2" - 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" @@ -1987,15 +1745,34 @@ json-source-map@^0.6.1: resolved "https://registry.yarnpkg.com/json-source-map/-/json-source-map-0.6.1.tgz#e0b1f6f4ce13a9ad57e2ae165a24d06e62c79a0f" integrity sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg== -json5@^2.2.0, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +less@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0" + integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^2.5.2" + source-map "~0.6.0" lilconfig@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== lines-and-columns@^1.1.6: version "1.2.4" @@ -2003,42 +1780,40 @@ lines-and-columns@^1.1.6: integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lmdb@^2.0.2: - version "2.7.9" - resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.7.9.tgz#51c9fafa0955a7a9ad7fb221cd1ab55b58321ab1" - integrity sha512-511A7FRcgTgXgwfnfCti8GNXxPWCRr+W1pMph5SPQRbApU2aUenTNC5F0WzQxyhpeMOQ4lIrCGyFPwFQUSSH8A== - dependencies: - msgpackr "1.8.3" - node-addon-api "^4.3.0" - node-gyp-build-optional-packages "5.0.6" - ordered-binary "^1.4.0" + version "2.2.1" + resolved "https://registry.yarnpkg.com/lmdb/-/lmdb-2.2.1.tgz#b7fd22ed2268ab74aa71108b793678314a7b94bb" + integrity sha512-tUlIjyJvbd4mqdotI9Xe+3PZt/jqPx70VKFDrKMYu09MtBWOT3y2PbuTajX+bJFDjbgLkQC0cTx2n6dithp/zQ== + dependencies: + msgpackr "^1.5.4" + nan "^2.14.2" + node-gyp-build "^4.2.3" + ordered-binary "^1.2.4" weak-lru-cache "^1.2.2" - optionalDependencies: - "@lmdb/lmdb-darwin-arm64" "2.7.9" - "@lmdb/lmdb-darwin-x64" "2.7.9" - "@lmdb/lmdb-linux-arm" "2.7.9" - "@lmdb/lmdb-linux-arm64" "2.7.9" - "@lmdb/lmdb-linux-x64" "2.7.9" - "@lmdb/lmdb-win32-x64" "2.7.9" + +lodash-es@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@^4.17.21: version "4.17.21" @@ -2052,12 +1827,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: - yallist "^3.0.2" + pify "^4.0.1" + semver "^5.6.0" markdown-escapes@^1.0.0: version "1.0.4" @@ -2093,74 +1869,74 @@ mdn-data@2.0.14: mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= "memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== -micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -minimatch@^3.1.1: +minimatch@^3.0.4: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -moment@^2.29.1: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msgpackr-extract@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-3.0.0.tgz#5b5c5fbfff25be5ee5b5a82a9cbe02e37f72bed0" - integrity sha512-oy6KCk1+X4Bn5m6Ycq5N1EWl9npqG/cLrE8ga8NX7ZqfqYUUBS08beCQaGq80fjbKBySur0E6x//yZjzNJDt3A== +msgpackr-extract@^1.0.14: + version "1.0.16" + resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-1.0.16.tgz#701c4f6e6f25c100ae84557092274e8fffeefe45" + integrity sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA== dependencies: - node-gyp-build-optional-packages "5.0.7" - optionalDependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.0" - "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.0" - "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.0" - "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.0" - "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.0" - "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.0" - -msgpackr@1.8.3, msgpackr@^1.5.1: - version "1.8.3" - resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.8.3.tgz#78c1b91359f72707f4abeaca40cc423bd2d75185" - integrity sha512-m2JefwcKNzoHYXkH/5jzHRxAw7XLWsAdvu0FOJ+OLwwozwOV/J6UA62iLkfIMbg7G8+dIuRwgg6oz+QoQ4YkoA== + nan "^2.14.2" + node-gyp-build "^4.2.3" + +msgpackr@^1.5.1, msgpackr@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.5.4.tgz#2b6ea6cb7d79c0ad98fc76c68163c48eda50cf0d" + integrity sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA== optionalDependencies: - msgpackr-extract "^3.0.0" + msgpackr-extract "^1.0.14" -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nan@^2.14.2: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nanoid@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +needle@^2.5.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-addon-api@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - node-emoji@^1.10.0: version "1.11.0" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" @@ -2168,30 +1944,15 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-gyp-build-optional-packages@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz#2949f5cc7dace3ac470fa2ff1a37456907120a1d" - integrity sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw== - -node-gyp-build-optional-packages@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz#5d2632bbde0ab2f6e22f1bbac2199b07244ae0b3" - integrity sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w== - -node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-gyp-build@^4.2.3, node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== -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== +node-releases@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" + integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== normalize-url@^6.0.1: version "6.1.0" @@ -2199,9 +1960,9 @@ normalize-url@^6.0.1: integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" @@ -2213,26 +1974,26 @@ nullthrows@^1.1.1: numeral@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/numeral/-/numeral-2.0.6.tgz#4ad080936d443c2561aed9f2197efffe25f4e506" - integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== + integrity sha1-StCAk21EPCVhrtnyGX7//iX05QY= object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -ordered-binary@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.4.0.tgz#6bb53d44925f3b8afc33d1eed0fa15693b211389" - integrity sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ== +ordered-binary@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.2.4.tgz#51d3a03af078a0bdba6c7bc8f4fedd1f5d45d83e" + integrity sha512-A/csN0d3n+igxBPfUrjbV5GC69LWj2pjZzAAeeHXLukQ4+fytfP4T1Lg0ju7MSPSwq7KtHkGaiwO8URZN5IpLg== -parcel@2.3.2: +parcel@^2.0.0: version "2.3.2" resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.3.2.tgz#d1cb475f27edae981edea7a7104e04d3a35a87ca" integrity sha512-4jhgoBcQaiGKmnmBvNyKyOvZrxCgzgUzdEoVup/fRCOP99hNmvYIN5IErIIJxsU9ObcG/RGCFF8wa4kVRsWfIg== @@ -2281,6 +2042,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -2289,7 +2055,7 @@ parse5@^6.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^3.1.0: version "3.1.1" @@ -2306,12 +2072,12 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -postcss-calc@^8.2.3: +postcss-calc@^8.2.0: version "8.2.4" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== @@ -2319,200 +2085,199 @@ postcss-calc@^8.2.3: postcss-selector-parser "^6.0.9" postcss-value-parser "^4.2.0" -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== +postcss-colormin@^5.2.5: + version "5.2.5" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.5.tgz#d1fc269ac2ad03fe641d462b5d1dada35c69968a" + integrity sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg== dependencies: - browserslist "^4.21.4" + browserslist "^4.16.6" caniuse-api "^3.0.0" colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== +postcss-convert-values@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz#3e74dd97c581f475ae7b4500bc0a7c4fb3a6b1b6" + integrity sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw== dependencies: - browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== +postcss-discard-comments@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz#011acb63418d600fdbe18804e1bbecb543ad2f87" + integrity sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q== -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== +postcss-discard-duplicates@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz#10f202a4cfe9d407b73dfea7a477054d21ea0c1f" + integrity sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw== -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== +postcss-discard-empty@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz#ec185af4a3710b88933b0ff751aa157b6041dd6a" + integrity sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA== -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== +postcss-discard-overridden@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz#cc999d6caf18ea16eff8b2b58f48ec3ddee35c9c" + integrity sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg== -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== +postcss-merge-longhand@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz#090e60d5d3b3caad899f8774f8dccb33217d2166" + integrity sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" + stylehacks "^5.0.3" -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== +postcss-merge-rules@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz#26b37411fe1e80202fcef61cab027265b8925f2b" + integrity sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ== dependencies: - browserslist "^4.21.4" + browserslist "^4.16.6" caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" + cssnano-utils "^3.0.2" postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== +postcss-minify-font-values@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz#627d824406b0712243221891f40a44fffe1467fd" + integrity sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== +postcss-minify-gradients@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz#b07cef51a93f075e94053fd972ff1cba2eaf6503" + integrity sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A== dependencies: colord "^2.9.1" - cssnano-utils "^3.1.0" + cssnano-utils "^3.0.2" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== +postcss-minify-params@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz#86cb624358cd45c21946f8c317893f0449396646" + integrity sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg== dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" + browserslist "^4.16.6" + cssnano-utils "^3.0.2" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== +postcss-minify-selectors@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz#6ac12d52aa661fd509469d87ab2cebb0a1e3a1b5" + integrity sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ== dependencies: postcss-selector-parser "^6.0.5" -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== +postcss-normalize-charset@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz#719fb9f9ca9835fcbd4fed8d6e0d72a79e7b5472" + integrity sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA== -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== +postcss-normalize-display-values@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz#94cc82e20c51cc4ffba6b36e9618adc1e50db8c1" + integrity sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== +postcss-normalize-positions@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz#4001f38c99675437b83277836fb4291887fcc6cc" + integrity sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== +postcss-normalize-repeat-style@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz#d005adf9ee45fae78b673031a376c0c871315145" + integrity sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== +postcss-normalize-string@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz#b5e00a07597e7aa8a871817bfeac2bfaa59c3333" + integrity sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== +postcss-normalize-timing-functions@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz#47210227bfcba5e52650d7a18654337090de7072" + integrity sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== +postcss-normalize-unicode@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz#02866096937005cdb2c17116c690f29505a1623d" + integrity sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig== dependencies: - browserslist "^4.21.4" + browserslist "^4.16.6" postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== +postcss-normalize-url@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz#c39efc12ff119f6f45f0b4f516902b12c8080e3a" + integrity sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ== dependencies: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== +postcss-normalize-whitespace@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz#1d477e7da23fecef91fc4e37d462272c7b55c5ca" + integrity sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw== dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== +postcss-ordered-values@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz#e878af822a130c3f3709737e24cb815ca7c6d040" + integrity sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ== dependencies: - cssnano-utils "^3.1.0" + cssnano-utils "^3.0.2" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== +postcss-reduce-initial@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz#68891594defd648253703bbd8f1093162f19568d" + integrity sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA== dependencies: - browserslist "^4.21.4" + browserslist "^4.16.6" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== +postcss-reduce-transforms@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz#717e72d30befe857f7d2784dba10eb1157863712" + integrity sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g== dependencies: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== +postcss-svgo@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.4.tgz#cfa8682f47b88f7cd75108ec499e133b43102abf" + integrity sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg== dependencies: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== +postcss-unique-selectors@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz#08e188126b634ddfa615fb1d6c262bafdd64826e" + integrity sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ== dependencies: postcss-selector-parser "^6.0.5" @@ -2522,28 +2287,21 @@ postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^8.4.5: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + version "8.4.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1" + integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA== dependencies: - nanoid "^3.3.4" + nanoid "^3.2.0" picocolors "^1.0.0" source-map-js "^1.0.2" -posthtml-parser@^0.10.1: +posthtml-parser@^0.10.0, posthtml-parser@^0.10.1: version "0.10.2" resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.10.2.tgz#df364d7b179f2a6bf0466b56be7b98fd4e97c573" integrity sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg== dependencies: htmlparser2 "^7.1.1" -posthtml-parser@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" - integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== - dependencies: - htmlparser2 "^7.1.1" - posthtml-render@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" @@ -2552,17 +2310,17 @@ posthtml-render@^3.0.0: is-json "^2.0.1" posthtml@^0.16.4, posthtml@^0.16.5: - version "0.16.6" - resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.6.tgz#e2fc407f67a64d2fa3567afe770409ffdadafe59" - integrity sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ== + version "0.16.5" + resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.5.tgz#d32f5cf32436516d49e0884b2367d0a1424136f6" + integrity sha512-1qOuPsywVlvymhTFIBniDXwUDwvlDri5KUQuBqjmCc8Jj4b/HDSVWU//P6rTWke5rzrk+vj7mms2w8e1vD0nnw== dependencies: - posthtml-parser "^0.11.0" + posthtml-parser "^0.10.0" posthtml-render "^3.0.0" -prismjs@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" - integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== +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== prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" @@ -2580,6 +2338,11 @@ property-information@^5.0.0, property-information@^5.3.0: 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" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -2602,9 +2365,9 @@ react-ace@^7.0.5: prop-types "^15.7.2" react-beautiful-dnd@^13.0.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" - integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== + version "13.1.0" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.0.tgz#ec97c81093593526454b0de69852ae433783844d" + integrity sha512-aGvblPZTJowOWUNiwd6tNfEpgkX5OxmpqxHKNW/4VmvZTNTbeiq7bA3bn5T+QSF2uibXB0D1DmJsb1aC/+3cUA== dependencies: "@babel/runtime" "^7.9.2" css-box-model "^1.2.0" @@ -2614,55 +2377,54 @@ react-beautiful-dnd@^13.0.0: redux "^4.0.4" use-memo-one "^1.1.1" -react-clientside-effect@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz#29f9b14e944a376b03fb650eed2a754dd128ea3a" - integrity sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg== +react-clientside-effect@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.5.tgz#e2c4dc3c9ee109f642fac4f5b6e9bf5bcd2219a3" + integrity sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA== dependencies: "@babel/runtime" "^7.12.13" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-dropzone@^11.2.0: - version "11.7.1" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-11.7.1.tgz#3851bb75b26af0bf1b17ce1449fd980e643b9356" - integrity sha512-zxCMwhfPy1olUEbw3FLNPLhAm/HnaYH5aELIEglRbqabizKAdHs0h+WuyOpmA+v1JXn0++fpQDdNfUagWt5hJQ== + version "11.5.3" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-11.5.3.tgz#757d4980fcae839896a894e41d3e72df04981f86" + integrity sha512-68+T6sWW5L89qJnn3SD1aRazhuRBhTT9JOI1W8vI5YWsfegM4C7tlGbPH1AgEbmZY5s8E8L0QhX0e3VdAa0KWA== dependencies: - attr-accept "^2.2.2" - file-selector "^0.4.0" - prop-types "^15.8.1" + attr-accept "^2.2.1" + file-selector "^0.2.2" + prop-types "^15.7.2" -react-focus-lock@^2.9.2: - version "2.9.4" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.9.4.tgz#4753f6dcd167c39050c9d84f9c63c71b3ff8462e" - integrity sha512-7pEdXyMseqm3kVjhdVH18sovparAzLg5h6WvIx7/Ck3ekjhrrDMEegHSa3swwC8wgfdd7DIdUVRGeiHT9/7Sgg== +react-focus-lock@^2.6.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.7.1.tgz#a9fbb3fa4efaee32162406e5eb96ae658964193b" + integrity sha512-ImSeVmcrLKNMqzUsIdqOkXwTVltj79OPu43oT8tVun7eIckA4VdM7UmYUFo3H/UC2nRVgagMZGFnAOQEDiDYcA== dependencies: "@babel/runtime" "^7.0.0" - focus-lock "^0.11.6" + focus-lock "^0.10.1" prop-types "^15.6.2" - react-clientside-effect "^1.2.6" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" + react-clientside-effect "^1.2.5" + use-callback-ref "^1.2.5" + use-sidecar "^1.0.5" react-focus-on@^3.5.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/react-focus-on/-/react-focus-on-3.7.0.tgz#bf782b51483d52d1d336b7b09cb864897af26cdf" - integrity sha512-TsCnbJr4qjqFatJ4U1N8qGSZH+FUzxJ5mJ5ta7TY2YnDmUbGGmcvZMTZgGjQ1fl6vlztsMyg6YyZlPAeeIhEUg== - dependencies: - aria-hidden "^1.2.2" - react-focus-lock "^2.9.2" - react-remove-scroll "^2.5.5" - react-style-singleton "^2.2.0" + version "3.5.4" + resolved "https://registry.yarnpkg.com/react-focus-on/-/react-focus-on-3.5.4.tgz#be45a9d0495f3bb6f5249704c85362df94980ecf" + integrity sha512-HnU0YGKhNSUsC4k6K8L+2wk8mC/qdg+CsS7A1bWLMgK7UuBphdECs2esnS6cLmBoVNjsFnCm/vMypeezKOdK3A== + dependencies: + aria-hidden "^1.1.3" + react-focus-lock "^2.6.0" + react-remove-scroll "^2.4.1" + react-style-singleton "^2.1.1" tslib "^2.3.1" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" + use-callback-ref "^1.2.5" + use-sidecar "^1.0.5" react-input-autosize@^2.2.2: version "2.2.2" @@ -2687,9 +2449,9 @@ react-is@~16.3.0: integrity sha512-ybEM7YOr4yBgFd6w8dJqwxegqZGJNBZl6U27HnGKuTZmDvVrD5quWOK/wAnMywiZzW+Qsk+l4X2c70+thp/A8Q== react-redux@^7.2.0: - version "7.2.9" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" - integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== + version "7.2.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.6.tgz#49633a24fe552b5f9caf58feb8a138936ddfe9aa" + integrity sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ== dependencies: "@babel/runtime" "^7.15.4" "@types/react-redux" "^7.1.20" @@ -2703,82 +2465,79 @@ react-refresh@^0.9.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== -react-remove-scroll-bar@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" - integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== +react-remove-scroll-bar@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.2.0.tgz#d4d545a7df024f75d67e151499a6ab5ac97c8cdd" + integrity sha512-UU9ZBP1wdMR8qoUs7owiVcpaPwsQxUDC2lypP6mmixaGlARZa7ZIBx1jcuObLdhMOvCsnZcvetOho0wzPa9PYg== dependencies: - react-style-singleton "^2.2.1" - tslib "^2.0.0" + react-style-singleton "^2.1.0" + tslib "^1.0.0" -react-remove-scroll@^2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" - integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== +react-remove-scroll@^2.4.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.4.3.tgz#83d19b02503b04bd8141ed6e0b9e6691a2e935a6" + integrity sha512-lGWYXfV6jykJwbFpsuPdexKKzp96f3RbvGapDSIdcyGvHb7/eqyn46C7/6h+rUzYar1j5mdU+XECITHXCKBk9Q== dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" - tslib "^2.1.0" - use-callback-ref "^1.3.0" - use-sidecar "^1.1.2" + react-remove-scroll-bar "^2.1.0" + react-style-singleton "^2.1.0" + tslib "^1.0.0" + use-callback-ref "^1.2.3" + use-sidecar "^1.0.1" -react-style-singleton@^2.2.0, react-style-singleton@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" - integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== +react-style-singleton@^2.1.0, react-style-singleton@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66" + integrity sha512-jNRp07Jza6CBqdRKNgGhT3u9umWvils1xsuMOjZlghBDH2MU0PL2WZor4PGYjXpnRCa9DQSlHMs/xnABWOwYbA== dependencies: get-nonce "^1.0.0" invariant "^2.2.4" - tslib "^2.0.0" + tslib "^1.0.0" react-virtualized-auto-sizer@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.7.tgz#bfb8414698ad1597912473de3e2e5f82180c1195" - integrity sha512-Mxi6lwOmjwIjC1X4gABXMJcKHsOo0xWl3E3ugOgufB8GJU+MqrtY35aBuvCYv/razQ1Vbp7h1gWJjGjoNN5pmA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.6.tgz#66c5b1c9278064c5ef1699ed40a29c11518f97ca" + integrity sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ== react-window@^1.8.5: - version "1.8.8" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.8.tgz#1b52919f009ddf91970cbdb2050a6c7be44df243" - integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112" + integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.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" +redisinsight-plugin-sdk@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/redisinsight-plugin-sdk/-/redisinsight-plugin-sdk-1.1.0.tgz#5ac39dc5398b1f73f2357e67ce51e1875fbece4f" + integrity sha512-TtPYfpxVZlwASkO8WFEB8+l6H9N9SVGwVxU0hRGzkEdXZyeQ+Xm/1WwnkGKMaeJyvfpIGrPWVl+lN4pDQ3iqbA== redux@^4.0.0, redux@^4.0.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" - integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + 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.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" - integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== + 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.27.0" + prismjs "~1.25.0" -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== rehype-raw@^5.0.0: version "5.1.0" @@ -2843,17 +2602,17 @@ remark-rehype@^8.0.0: repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-from@^4.0.0: version "4.0.0" @@ -2879,33 +2638,28 @@ safe-buffer@^5.0.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -sass@^1.38.0: - version "1.58.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.58.3.tgz#2348cc052061ba4f00243a208b09c40e031f270d" - integrity sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" -semver@^5.7.0, semver@^5.7.1: +semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2918,7 +2672,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -2931,11 +2685,16 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + 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" @@ -2944,7 +2703,7 @@ space-separated-tokens@^1.0.0: spawn-command@^0.0.2-1: version "0.0.2-1" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= stable@^0.1.8: version "0.1.8" @@ -2988,14 +2747,19 @@ style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== +stylehacks@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.3.tgz#2ef3de567bfa2be716d29a93bf3d208c133e8d04" + integrity sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg== dependencies: - browserslist "^4.21.4" + browserslist "^4.16.6" postcss-selector-parser "^6.0.4" +stylis@4.0.13: + version "4.0.13" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91" + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -3036,41 +2800,28 @@ tabbable@^3.0.0: integrity sha512-wjB6puVXTYO0BSFtCmWQubA/KIn7Xvajw0x0l6eJUudMG/EAiJvIUnyNX6xO4NpGrJ16lbD0eUseB9WxW0vlpQ== terser@^5.2.0, terser@^5.9.0: - version "5.16.5" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.5.tgz#1c285ca0655f467f92af1bbab46ab72d1cb08e5a" - integrity sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg== + version "5.10.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" + integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" commander "^2.20.0" + source-map "~0.7.2" source-map-support "~0.5.20" text-diff@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/text-diff/-/text-diff-1.0.1.tgz#6c105905435e337857375c9d2f6ca63e453ff565" - integrity sha512-jAnlP3ggZk7FeLX1awaMR8Y2sMyil9P9FXvNjaIJIQBAom1zvpKGGH31htOVrUFp0vlyygmJJpNrbJ4rfjsxrA== + integrity sha1-bBBZBUNeM3hXN1ydL2ymPkU/9WU= timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tiny-invariant@^1.0.6: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" + version "1.2.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" + integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== tree-kill@^1.2.2: version "1.2.2" @@ -3085,33 +2836,28 @@ trim-trailing-lines@^1.0.0: trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.0.0, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -typescript@>=3.0.0: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -3172,9 +2918,9 @@ unist-util-stringify-position@^2.0.0: "@types/unist" "^2.0.2" unist-util-stringify-position@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" - integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz#d517d2883d74d0daa0b565adc3d10a02b4a8cde9" + integrity sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA== dependencies: "@types/unist" "^2.0.0" @@ -3209,14 +2955,6 @@ unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - url-parse@^1.5.0: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -3225,30 +2963,28 @@ url-parse@^1.5.0: querystringify "^2.1.1" requires-port "^1.0.0" -use-callback-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" - integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== - dependencies: - tslib "^2.0.0" +use-callback-ref@^1.2.3, use-callback-ref@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5" + integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg== use-memo-one@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" - integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== - -use-sidecar@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" - integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.2.tgz#0c8203a329f76e040047a35a1197defe342fab20" + integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ== + +use-sidecar@^1.0.1, use-sidecar@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b" + integrity sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA== dependencies: detect-node-es "^1.1.0" - tslib "^2.0.0" + tslib "^1.9.3" util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= utility-types@^3.10.0: version "3.10.0" @@ -3260,6 +2996,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + v8-compile-cache@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -3271,9 +3012,9 @@ vfile-location@^3.0.0, vfile-location@^3.2.0: integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== vfile-message@*: - version "3.1.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" - integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.0.tgz#5437035aa43185ff4b9210d32fada6c640e59143" + integrity sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position "^3.0.0" @@ -3325,7 +3066,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= xtend@^4.0.0, xtend@^4.0.1: version "4.0.2" @@ -3342,11 +3083,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" diff --git a/redisinsight/ui/src/pages/workbench/components/wb-results/WBResults/WBResults.tsx b/redisinsight/ui/src/pages/workbench/components/wb-results/WBResults/WBResults.tsx index 1de1cbc119..314a329aad 100644 --- a/redisinsight/ui/src/pages/workbench/components/wb-results/WBResults/WBResults.tsx +++ b/redisinsight/ui/src/pages/workbench/components/wb-results/WBResults/WBResults.tsx @@ -3,6 +3,8 @@ import cx from 'classnames' import { EuiIcon, EuiText } from '@elastic/eui' import { Theme } from 'uiSrc/constants' +import { ProfileQueryType } from 'uiSrc/pages/workbench/constants' +import { generateProfileQueryForCommand } from 'uiSrc/pages/workbench/utils' import { CodeButtonParams } from 'uiSrc/pages/workbench/components/enablement-area/interfaces' import { Nullable } from 'uiSrc/utils' import QueryCard from 'uiSrc/components/query-card' @@ -21,6 +23,7 @@ export interface Props { onQueryReRun: (query: string, commandId?: Nullable, executeParams?: CodeButtonParams) => void onQueryDelete: (commandId: string) => void onQueryOpen: (commandId: string) => void + onQueryProfile: (query: string, commandId?: Nullable, executeParams?: CodeButtonParams) => void } const WBResults = (props: Props) => { const { @@ -28,6 +31,7 @@ const WBResults = (props: Props) => { activeMode, activeResultsMode, onQueryReRun, + onQueryProfile, onQueryDelete, onQueryOpen, scrollDivRef @@ -48,6 +52,21 @@ const WBResults = (props: Props) => {
) + const handleQueryProfile = ( + profileType: ProfileQueryType, + commandExecution: { command: string, mode?: RunQueryMode, resultsMode?: ResultsMode } + ) => { + const { command, mode, resultsMode } = commandExecution + const profileQuery = generateProfileQueryForCommand(command, profileType) + if (profileQuery) { + onQueryProfile( + profileQuery, + null, + { mode, results: resultsMode, clearEditor: false, }, + ) + } + } + return (
@@ -86,6 +105,10 @@ const WBResults = (props: Props) => { resultsMode={resultsMode} db={db} onQueryOpen={() => onQueryOpen(id)} + onQueryProfile={(profileType) => handleQueryProfile( + profileType, + { command, mode, resultsMode }, + )} onQueryReRun={() => onQueryReRun( command, null, diff --git a/redisinsight/ui/src/pages/workbench/components/wb-results/WBResultsWrapper.tsx b/redisinsight/ui/src/pages/workbench/components/wb-results/WBResultsWrapper.tsx index 9a23f7d2a7..ec91f806e5 100644 --- a/redisinsight/ui/src/pages/workbench/components/wb-results/WBResultsWrapper.tsx +++ b/redisinsight/ui/src/pages/workbench/components/wb-results/WBResultsWrapper.tsx @@ -13,6 +13,7 @@ export interface Props { onQueryReRun: (query: string, commandId?: Nullable, executeParams?: CodeButtonParams) => void onQueryOpen: (commandId: string) => void onQueryDelete: (commandId: string) => void + onQueryProfile: (query: string, commandId?: Nullable, executeParams?: CodeButtonParams) => void } const WBResultsWrapper = (props: Props) => ( diff --git a/redisinsight/ui/src/pages/workbench/components/wb-view/WBView/WBView.tsx b/redisinsight/ui/src/pages/workbench/components/wb-view/WBView/WBView.tsx index 0f7234359e..209e870737 100644 --- a/redisinsight/ui/src/pages/workbench/components/wb-view/WBView/WBView.tsx +++ b/redisinsight/ui/src/pages/workbench/components/wb-view/WBView/WBView.tsx @@ -109,6 +109,11 @@ const WBView = (props: Props) => { onSubmit(query, commandId, executeParams) } + const handleProfile = (query?: string, commandId?: Nullable, executeParams: CodeButtonParams = {}) => { + sendEventSubmitTelemetry(TelemetryEvent.WORKBENCH_COMMAND_PROFILE, query, executeParams) + onSubmit(query, commandId, executeParams) + } + const sendEventSubmitTelemetry = ( event: TelemetryEvent, commandInit = script, @@ -227,6 +232,7 @@ const WBView = (props: Props) => { activeResultsMode={resultsMode} scrollDivRef={scrollDivRef} onQueryReRun={handleReRun} + onQueryProfile={handleProfile} onQueryOpen={onQueryOpen} onQueryDelete={onQueryDelete} /> diff --git a/redisinsight/ui/src/pages/workbench/constants.ts b/redisinsight/ui/src/pages/workbench/constants.ts index 0166a6d403..ba9e2d954a 100644 --- a/redisinsight/ui/src/pages/workbench/constants.ts +++ b/redisinsight/ui/src/pages/workbench/constants.ts @@ -27,6 +27,40 @@ export const VIEW_TYPE_OPTIONS = [ export const getViewTypeOptions = () => [...VIEW_TYPE_OPTIONS] + +export const SEARCH_COMMANDS = ['ft.search', 'ft.aggregate'] +export const GRAPH_COMMANDS = ['graph.query'] + +const ALLOWED_PROFILE_COMMANDS = [...SEARCH_COMMANDS, ...GRAPH_COMMANDS] + +export const isCommandAllowedForProfile = (query: string) => { + return ALLOWED_PROFILE_COMMANDS.includes(query?.split(' ')?.[0]?.toLowerCase()) +} + +export enum ProfileQueryType { + Profile = 'Profile', + Explain = 'Explain' +} + +const PROFILE_VIEW_TYPE_OPTIONS = [ + { + id: ProfileQueryType.Profile, + text: 'Profile the command', + name: 'Profile', + value: WBQueryType.Text, + }, + { + id: ProfileQueryType.Explain, + text: 'Explain the command', + name: 'Explain', + value: WBQueryType.Text, + }, +] + +export const getProfileViewTypeOptions = () => + [...PROFILE_VIEW_TYPE_OPTIONS] + + export enum ModuleCommandPrefix { RediSearch = 'FT.', } diff --git a/redisinsight/ui/src/pages/workbench/utils.spec.ts b/redisinsight/ui/src/pages/workbench/utils.spec.ts new file mode 100644 index 0000000000..3d91dad1d8 --- /dev/null +++ b/redisinsight/ui/src/pages/workbench/utils.spec.ts @@ -0,0 +1,79 @@ +import { ProfileQueryType, SEARCH_COMMANDS, GRAPH_COMMANDS } from './constants' + +import { + generateGraphProfileQuery, + generateSearchProfileQuery, + generateProfileQueryForCommand, +} from './utils' + + +const generateGraphProfileQueryTests: Record[] = [ + { input: 'GRAPH.QUERY key "MATCH (n) RETURN n"', output: 'graph.profile key "MATCH (n) RETURN n"', type: ProfileQueryType.Profile }, + { input: 'GRAPH.QUERY key "MATCH (n) RETURN n"', output: 'graph.explain key "MATCH (n) RETURN n"', type: ProfileQueryType.Explain }, + { input: 'graph.query key "MATCH (n) RETURN n"', output: 'graph.profile key "MATCH (n) RETURN n"', type: ProfileQueryType.Profile }, + { input: 'graph.query key "MATCH (n) RETURN n"', output: 'graph.explain key "MATCH (n) RETURN n"', type: ProfileQueryType.Explain }, + { input: null, output: null, type: ProfileQueryType.Profile }, + { input: null, output: null, type: ProfileQueryType.Explain }, +] + +describe('generateGraphProfileQuery', () => { + generateGraphProfileQueryTests.forEach(test => { + it(`should be output: ${test.output} for input: ${test.input} and type: ${test.type}`, () => { + const result = generateGraphProfileQuery(test.input, test.type); + expect(result).toEqual(test.output); + }); + }) +}); + + +const generateSearchProfileQueryTests: Record[] = [ + { input: 'FT.SEARCH index tomatoes', output: 'ft.profile index SEARCH QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'FT.AGGREGATE index tomatoes', output: 'ft.profile index AGGREGATE QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'FT.SEARCH index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: 'FT.AGGREGATE index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: 'ft.search index tomatoes', output: 'ft.profile index search QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'ft.aggregate index tomatoes', output: 'ft.profile index aggregate QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'ft.search index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: 'ft.aggregate index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: 'ft.SEARCH index tomatoes', output: 'ft.profile index SEARCH QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'ft.AGGREGATE index tomatoes', output: 'ft.profile index AGGREGATE QUERY tomatoes', type: ProfileQueryType.Profile }, + { input: 'ft.SEARCH index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: 'ft.AGGREGATE index tomatoes', output: 'ft.explain index tomatoes', type: ProfileQueryType.Explain }, + { input: null, output: null, type: ProfileQueryType.Profile }, + { input: null, output: null, type: ProfileQueryType.Explain }, +] + +describe('generateSearchProfileQuery', () => { + generateSearchProfileQueryTests.forEach(test => { + it(`should be output: ${test.output} for input: ${test.input} and type: ${test.type}`, () => { + const result = generateSearchProfileQuery(test.input, test.type); + expect(result).toEqual(test.output); + }); + }) +}); + +const generateProfileQueryForCommandTests: Record[] = [ + ...generateGraphProfileQueryTests, + ...generateSearchProfileQueryTests, + { input: 'GRAPH.LIST', output: null, type: ProfileQueryType.Profile }, + { input: 'GRAPH.LIST', output: null, type: ProfileQueryType.Explain }, + { input: 'GRAPH.PROFILE key "MATCH (n) RETURN n"', output: null, type: ProfileQueryType.Profile }, + { input: 'GRAPH.PROFILE key "MATCH (n) RETURN n"', output: null, type: ProfileQueryType.Explain }, + { input: 'GRAPH.EXPLAIN key "MATCH (n) RETURN n"', output: null, type: ProfileQueryType.Profile }, + { input: 'GRAPH.EXPLAIN key "MATCH (n) RETURN n"', output: null, type: ProfileQueryType.Explain }, + { input: 'ft._LIST', output: null, type: ProfileQueryType.Profile }, + { input: 'ft._LIST', output: null, type: ProfileQueryType.Explain }, + { input: 'ft.profile index SEARCH QUERY tomatoes', output: null, type: ProfileQueryType.Profile }, + { input: 'ft.profile index AGGREGATE QUERY tomatoes', output: null, type: ProfileQueryType.Explain }, + { input: 'ft.explain index tomatoes', output: null, type: ProfileQueryType.Profile }, + { input: 'ft.explain index tomatoes', output: null, type: ProfileQueryType.Explain }, +] +describe('generateProfileQueryForCommand', () => { + generateProfileQueryForCommandTests.forEach(test => { + it(`should be output: ${test.output} for input: ${test.input} and type: ${test.type}`, () => { + const result = generateProfileQueryForCommand(test.input, test.type); + + expect(result).toEqual(test.output); + }); + }) +}); diff --git a/redisinsight/ui/src/pages/workbench/utils.ts b/redisinsight/ui/src/pages/workbench/utils.ts new file mode 100644 index 0000000000..2bca2b87c2 --- /dev/null +++ b/redisinsight/ui/src/pages/workbench/utils.ts @@ -0,0 +1,41 @@ +import { ProfileQueryType, SEARCH_COMMANDS, GRAPH_COMMANDS } from './constants' + +export const generateGraphProfileQuery = (query: string, type: ProfileQueryType) => { + const q = query?.split(' ')?.slice(1) + + if (q) { + return [`graph.${type.toLowerCase()}`, ...q].join(' ') + } + + return null +} + +export const generateSearchProfileQuery = (query: string, type: ProfileQueryType) => { + const commandSplit = query?.split(' ') + const cmd = commandSplit?.[0] + + if (!commandSplit || !cmd) { + return null + } + + if (type === ProfileQueryType.Explain) { + return [`ft.${type.toLowerCase()}`, ...commandSplit?.slice(1)].join(' ') + } else { + let index = commandSplit?.[1] + + const queryType = cmd.split('.')?.[1] // SEARCH / AGGREGATE + return [`ft.${type.toLowerCase()}`, index, queryType, 'QUERY', ...commandSplit?.slice(2)].join(' ') + } +} + +export const generateProfileQueryForCommand = (query: string, type: ProfileQueryType) => { + const cmd = query?.split(' ')?.[0]?.toLowerCase() + + if (GRAPH_COMMANDS.includes(cmd)) { + return generateGraphProfileQuery(query, type) + } else if (SEARCH_COMMANDS.includes(cmd)) { + return generateSearchProfileQuery(query, type) + } + + return null +} diff --git a/redisinsight/ui/src/telemetry/events.ts b/redisinsight/ui/src/telemetry/events.ts index 174365bdbb..16ed548e91 100644 --- a/redisinsight/ui/src/telemetry/events.ts +++ b/redisinsight/ui/src/telemetry/events.ts @@ -103,6 +103,7 @@ export enum TelemetryEvent { WORKBENCH_COMMAND_COPIED = 'WORKBENCH_COMMAND_COPIED', WORKBENCH_COMMAND_RUN_AGAIN = 'WORKBENCH_COMMAND_RUN_AGAIN', + WORKBENCH_COMMAND_PROFILE = 'WORKBENCH_COMMAND_PROFILE', WORKBENCH_COMMAND_DELETE_COMMAND = 'WORKBENCH_COMMAND_DELETE_COMMAND', WORKBENCH_RESULTS_IN_FULL_SCREEN = 'WORKBENCH_RESULTS_IN_FULL_SCREEN', WORKBENCH_RESULTS_COLLAPSED = 'WORKBENCH_RESULTS_COLLAPSED', diff --git a/scripts/build-statics.cmd b/scripts/build-statics.cmd index 008f587986..813518d7a4 100644 --- a/scripts/build-statics.cmd +++ b/scripts/build-statics.cmd @@ -40,7 +40,16 @@ if not exist "%PLUGINS_DIR%\redistimeseries-app\dist" mkdir "%PLUGINS_DIR%\redis xcopy "%REDISTIMESERSIES_DIR%\dist" "%PLUGINS_DIR%\redistimeseries-app\dist\" /s /e /y copy "%REDISTIMESERSIES_DIR%\package.json" "%PLUGINS_DIR%\redistimeseries-app\" -: Build clients-list plugin +:: Build ri-explain plugin +set RI_EXPLIAIN_DIR=".\redisinsight\ui\src\packages\ri-explain" +call yarn --cwd "%RI_EXPLIAIN_DIR%" +call yarn --cwd "%RI_EXPLIAIN_DIR%" build +if not exist "%PLUGINS_DIR%\ri-explain" mkdir "%PLUGINS_DIR%\ri-explain" +if not exist "%PLUGINS_DIR%\ri-explain\dist" mkdir "%PLUGINS_DIR%\ri-explain\dist" +xcopy "%RI_EXPLIAIN_DIR%\dist" "%PLUGINS_DIR%\ri-explain\dist\" /s /e /y +copy "%RI_EXPLIAIN_DIR%\package.json" "%PLUGINS_DIR%\ri-explain\" + +:: Build clients-list plugin set CLIENTS_LIST_DIR=".\redisinsight\ui\src\packages\clients-list" call yarn --cwd "%CLIENTS_LIST_DIR%" call yarn --cwd "%CLIENTS_LIST_DIR%" build diff --git a/scripts/build-statics.sh b/scripts/build-statics.sh index 6c61681916..1f874c1435 100644 --- a/scripts/build-statics.sh +++ b/scripts/build-statics.sh @@ -35,6 +35,13 @@ yarn --cwd "${REDISTIMESERIES_DIR}" build mkdir -p "${PLUGINS_DIR}/redistimeseries-app" cp -R "${REDISTIMESERIES_DIR}/dist" "${REDISTIMESERIES_DIR}/package.json" "${PLUGINS_DIR}/redistimeseries-app" +# Build ri-explain plugin +RI_EXPLIAIN_DIR="./redisinsight/ui/src/packages/ri-explain" +yarn --cwd "${RI_EXPLIAIN_DIR}" +yarn --cwd "${RI_EXPLIAIN_DIR}" build +mkdir -p "${PLUGINS_DIR}/ri-explain" +cp -R "${RI_EXPLIAIN_DIR}/dist" "${RI_EXPLIAIN_DIR}/package.json" "${PLUGINS_DIR}/ri-explain" + # Build clients-list plugin CLIENTS_LIST_DIR="./redisinsight/ui/src/packages/clients-list" yarn --cwd "${CLIENTS_LIST_DIR}"