From c148746a6a83834cb4ba1fdb6c935e4ffc1d5de6 Mon Sep 17 00:00:00 2001 From: Breezewish Date: Thu, 30 Jul 2020 17:05:42 +0800 Subject: [PATCH 1/4] Some refinement and dependency upgrade --- ui/dashboardApp/index.ts | 32 +- ui/dashboardApp/layout/main/Sider/index.tsx | 31 +- ui/dashboardApp/layout/root/index.tsx | 17 - ui/dashboardApp/layout/translations/en.yaml | 1 + ui/dashboardApp/layout/translations/zh.yaml | 1 + ui/dashboardApp/nprogress.less | 69 ++ ui/lib/apps/InstanceProfiling/index.meta.ts | 4 +- ui/lib/apps/QueryEditor/index.meta.ts | 9 + ui/lib/apps/QueryEditor/index.tsx | 8 + ui/lib/apps/QueryEditor/translations/en.yaml | 2 + ui/lib/apps/QueryEditor/translations/zh.yaml | 2 + .../pages/List/TimeRangeSelector.tsx | 2 +- ui/lib/components/Expand/index.tsx | 8 +- ui/lib/components/TopLoadingBar/index.tsx | 20 - ui/lib/components/index.ts | 1 - ui/package.json | 62 +- ui/yarn.lock | 768 ++++++++++++------ 17 files changed, 680 insertions(+), 357 deletions(-) delete mode 100644 ui/dashboardApp/layout/root/index.tsx create mode 100644 ui/dashboardApp/nprogress.less create mode 100644 ui/lib/apps/QueryEditor/index.meta.ts create mode 100644 ui/lib/apps/QueryEditor/index.tsx create mode 100644 ui/lib/apps/QueryEditor/translations/en.yaml create mode 100644 ui/lib/apps/QueryEditor/translations/zh.yaml delete mode 100644 ui/lib/components/TopLoadingBar/index.tsx diff --git a/ui/dashboardApp/index.ts b/ui/dashboardApp/index.ts index a4e2351b5a..d6e14da7de 100644 --- a/ui/dashboardApp/index.ts +++ b/ui/dashboardApp/index.ts @@ -3,6 +3,8 @@ import '@lib/utils/wdyr' import * as singleSpa from 'single-spa' import i18next from 'i18next' import { Modal } from 'antd' +import NProgress from 'nprogress' +import './nprogress.less' import AppRegistry from '@lib/utils/registry' import * as routing from '@lib/utils/routing' @@ -13,19 +15,19 @@ import { saveAppOptions, loadAppOptions } from '@lib/utils/appOptions' import * as telemetry from '@lib/utils/telemetry' import client, { InfoInfoResponse } from '@lib/client' -import LayoutRoot from '@dashboard/layout/root' import LayoutMain from '@dashboard/layout/main' import LayoutSignIn from '@dashboard/layout/signin' import AppUserProfile from '@lib/apps/UserProfile/index.meta' import AppOverview from '@lib/apps/Overview/index.meta' +import AppClusterInfo from '@lib/apps/ClusterInfo/index.meta' import AppKeyViz from '@lib/apps/KeyViz/index.meta' import AppStatement from '@lib/apps/Statement/index.meta' +import AppSlowQuery from '@lib/apps/SlowQuery/index.meta' import AppDiagnose from '@lib/apps/Diagnose/index.meta' import AppSearchLogs from '@lib/apps/SearchLogs/index.meta' import AppInstanceProfiling from '@lib/apps/InstanceProfiling/index.meta' -import AppClusterInfo from '@lib/apps/ClusterInfo/index.meta' -import AppSlowQuery from '@lib/apps/SlowQuery/index.meta' +import AppQueryEditor from '@lib/apps/QueryEditor/index.meta' function removeSpinner() { const spinner = document.getElementById('dashboard_page_spinner') @@ -65,16 +67,19 @@ async function main() { const registry = new AppRegistry(options) - singleSpa.registerApplication( - 'root', - AppRegistry.newReactSpaApp(() => LayoutRoot, 'root'), - () => true, - { registry } - ) + NProgress.configure({ + showSpinner: false, + }) + window.addEventListener('single-spa:before-routing-event', () => { + NProgress.set(0.2) + }) + window.addEventListener('single-spa:routing-event', () => { + NProgress.done(true) + }) singleSpa.registerApplication( 'layout', - AppRegistry.newReactSpaApp(() => LayoutMain, '__spa__main__'), + AppRegistry.newReactSpaApp(() => LayoutMain, 'root'), () => { return !routing.isSignInPage() }, @@ -83,7 +88,7 @@ async function main() { singleSpa.registerApplication( 'signin', - AppRegistry.newReactSpaApp(() => LayoutSignIn, '__spa__main__'), + AppRegistry.newReactSpaApp(() => LayoutSignIn, 'root'), () => { return routing.isSignInPage() }, @@ -93,13 +98,14 @@ async function main() { registry .register(AppUserProfile) .register(AppOverview) + .register(AppClusterInfo) .register(AppKeyViz) .register(AppStatement) - .register(AppClusterInfo) + .register(AppSlowQuery) .register(AppDiagnose) .register(AppSearchLogs) .register(AppInstanceProfiling) - .register(AppSlowQuery) + .register(AppQueryEditor) if (routing.isLocationMatch('/')) { singleSpa.navigateToUrl('#' + registry.getDefaultRouter()) diff --git a/ui/dashboardApp/layout/main/Sider/index.tsx b/ui/dashboardApp/layout/main/Sider/index.tsx index c93f36dc1c..4aa3d7cb57 100644 --- a/ui/dashboardApp/layout/main/Sider/index.tsx +++ b/ui/dashboardApp/layout/main/Sider/index.tsx @@ -1,5 +1,5 @@ -import React, { useState, useEffect } from 'react' -import { ExperimentOutlined } from '@ant-design/icons' +import React, { useState, useEffect, useMemo } from 'react' +import { ExperimentOutlined, BugOutlined } from '@ant-design/icons' import { Layout, Menu } from 'antd' import { Link } from 'react-router-dom' import { useEventListener } from '@umijs/hooks' @@ -70,7 +70,7 @@ function Sider({ key="debug" title={ - + {t('nav.sider.debug')} } @@ -79,6 +79,21 @@ function Sider({ ) + const experimentalSubMenuItems = [useAppMenuItem(registry, 'query_editor')] + const experimentalSubMenu = ( + + + {t('nav.sider.experimental')} + + } + > + {experimentalSubMenuItems} + + ) + const menuItems = [ useAppMenuItem(registry, 'overview'), useAppMenuItem(registry, 'cluster_info'), @@ -88,6 +103,7 @@ function Sider({ useAppMenuItem(registry, 'diagnose'), useAppMenuItem(registry, 'search_logs'), debugSubMenu, + experimentalSubMenu, ] const extraMenuItems = [ @@ -103,6 +119,14 @@ function Sider({ width: collapsed ? collapsedWidth : fullWidth, }) + const defaultOpenKeys = useMemo(() => { + if (defaultCollapsed) { + return [] + } else { + return ['debug', 'experimental'] + } + }, [defaultCollapsed]) + return ( {menuItems} diff --git a/ui/dashboardApp/layout/root/index.tsx b/ui/dashboardApp/layout/root/index.tsx deleted file mode 100644 index 49fe281a4e..0000000000 --- a/ui/dashboardApp/layout/root/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import { HashRouter as Router } from 'react-router-dom' - -import { Root, TopLoadingBar } from '@lib/components' - -function App() { - return ( - - - -
-
-
- ) -} - -export default App diff --git a/ui/dashboardApp/layout/translations/en.yaml b/ui/dashboardApp/layout/translations/en.yaml index fbb8c1d14b..877a481567 100644 --- a/ui/dashboardApp/layout/translations/en.yaml +++ b/ui/dashboardApp/layout/translations/en.yaml @@ -26,3 +26,4 @@ nav: signout: Sign Out sider: debug: Advanced Debugging + experimental: Experimental Features diff --git a/ui/dashboardApp/layout/translations/zh.yaml b/ui/dashboardApp/layout/translations/zh.yaml index 42af71fdb8..2712cdee0d 100644 --- a/ui/dashboardApp/layout/translations/zh.yaml +++ b/ui/dashboardApp/layout/translations/zh.yaml @@ -26,3 +26,4 @@ nav: signout: 登出 sider: debug: 高级调试 + experimental: 实验性功能 diff --git a/ui/dashboardApp/nprogress.less b/ui/dashboardApp/nprogress.less new file mode 100644 index 0000000000..2cc90d5caf --- /dev/null +++ b/ui/dashboardApp/nprogress.less @@ -0,0 +1,69 @@ +@progress-color: #ffc53d; + +#nprogress { + pointer-events: none; +} + +#nprogress .bar { + background: @progress-color; + + position: fixed; + z-index: 1031; + top: 0; + left: 0; + + width: 100%; + height: 2px; +} + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px @progress-color, 0 0 5px @progress-color; + opacity: 1; + transform: rotate(3deg) translate(0px, -4px); +} + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; +} + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: @progress-color; + border-left-color: @progress-color; + border-radius: 50%; + animation: nprogress-spinner 400ms linear infinite; +} + +.nprogress-custom-parent { + overflow: hidden; + position: relative; +} + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; +} + +@keyframes nprogress-spinner { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/ui/lib/apps/InstanceProfiling/index.meta.ts b/ui/lib/apps/InstanceProfiling/index.meta.ts index 0d0c1c9d3f..da59500eec 100644 --- a/ui/lib/apps/InstanceProfiling/index.meta.ts +++ b/ui/lib/apps/InstanceProfiling/index.meta.ts @@ -1,9 +1,9 @@ -import { HeatMapOutlined } from '@ant-design/icons' +import { AimOutlined } from '@ant-design/icons' export default { id: 'instance_profiling', routerPrefix: '/instance_profiling', - icon: HeatMapOutlined, + icon: AimOutlined, translations: require.context('./translations/', false, /\.yaml$/), reactRoot: () => import(/* webpackChunkName: "app_instance_profiling" */ '.'), } diff --git a/ui/lib/apps/QueryEditor/index.meta.ts b/ui/lib/apps/QueryEditor/index.meta.ts new file mode 100644 index 0000000000..39f0b8443f --- /dev/null +++ b/ui/lib/apps/QueryEditor/index.meta.ts @@ -0,0 +1,9 @@ +import { ConsoleSqlOutlined } from '@ant-design/icons' + +export default { + id: 'query_editor', + routerPrefix: '/query_editor', + icon: ConsoleSqlOutlined, + translations: require.context('./translations/', false, /\.yaml$/), + reactRoot: () => import(/* webpackChunkName: "query_editor" */ '.'), +} diff --git a/ui/lib/apps/QueryEditor/index.tsx b/ui/lib/apps/QueryEditor/index.tsx new file mode 100644 index 0000000000..ec8a9658bc --- /dev/null +++ b/ui/lib/apps/QueryEditor/index.tsx @@ -0,0 +1,8 @@ +import React, { useCallback } from 'react' +import { Root } from '@lib/components' + +function App() { + return abc +} + +export default App diff --git a/ui/lib/apps/QueryEditor/translations/en.yaml b/ui/lib/apps/QueryEditor/translations/en.yaml new file mode 100644 index 0000000000..f812e9e708 --- /dev/null +++ b/ui/lib/apps/QueryEditor/translations/en.yaml @@ -0,0 +1,2 @@ +query_editor: + nav_title: Query Editor diff --git a/ui/lib/apps/QueryEditor/translations/zh.yaml b/ui/lib/apps/QueryEditor/translations/zh.yaml new file mode 100644 index 0000000000..f812e9e708 --- /dev/null +++ b/ui/lib/apps/QueryEditor/translations/zh.yaml @@ -0,0 +1,2 @@ +query_editor: + nav_title: Query Editor diff --git a/ui/lib/apps/Statement/pages/List/TimeRangeSelector.tsx b/ui/lib/apps/Statement/pages/List/TimeRangeSelector.tsx index 44d70b2224..b6cb3255d4 100644 --- a/ui/lib/apps/Statement/pages/List/TimeRangeSelector.tsx +++ b/ui/lib/apps/Statement/pages/List/TimeRangeSelector.tsx @@ -214,7 +214,7 @@ export default function TimeRangeSelector({ value={[sliderTimeRange.begin_time!, sliderTimeRange.end_time!]} onChange={handleSliderChange} onAfterChange={handleSliderAfterChange} - tipFormatter={(val) => dayjs.unix(val).format('HH:mm')} + tipFormatter={(val) => dayjs.unix(val!).format('HH:mm')} /> {dayjs.unix(sliderTimeRange.begin_time!).format('MM-DD HH:mm')} ~{' '} diff --git a/ui/lib/components/Expand/index.tsx b/ui/lib/components/Expand/index.tsx index 9c2b55c026..53c2564a87 100644 --- a/ui/lib/components/Expand/index.tsx +++ b/ui/lib/components/Expand/index.tsx @@ -1,7 +1,6 @@ import React from 'react' import { useTranslation } from 'react-i18next' import { addTranslationResource } from '@lib/utils/i18n' -// import ReactResizeDetector from 'react-resize-detector' export interface IExpandProps { expanded?: boolean @@ -11,12 +10,7 @@ export interface IExpandProps { function Expand({ collapsedContent, children, expanded }: IExpandProps) { // FIXME: Animations - return ( -
- {expanded ? children : collapsedContent ?? children} - {/* */} -
- ) + return
{expanded ? children : collapsedContent ?? children}
} const translations = { diff --git a/ui/lib/components/TopLoadingBar/index.tsx b/ui/lib/components/TopLoadingBar/index.tsx deleted file mode 100644 index d1efa180eb..0000000000 --- a/ui/lib/components/TopLoadingBar/index.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React, { useRef } from 'react' -import { useEventListener } from '@umijs/hooks' -import LoadingBar from 'react-top-loading-bar' - -const useLoadingBar = () => { - const loadingBar = useRef() - useEventListener('single-spa:before-routing-event', () => - loadingBar.current.continuousStart() - ) - useEventListener('single-spa:routing-event', () => - loadingBar.current.complete() - ) - - return loadingBar -} - -export default function TopLoadingBar() { - const loadingBar = useLoadingBar() - return -} diff --git a/ui/lib/components/index.ts b/ui/lib/components/index.ts index c60205f04a..ecde03c808 100644 --- a/ui/lib/components/index.ts +++ b/ui/lib/components/index.ts @@ -53,4 +53,3 @@ export { default as ErrorBar } from './ErrorBar' export { default as LanguageDropdown } from './LanguageDropdown' export { default as ParamsPageWrapper } from './ParamsPageWrapper' -export { default as TopLoadingBar } from './TopLoadingBar' diff --git a/ui/package.json b/ui/package.json index 995f7b164f..b8a6f275cc 100644 --- a/ui/package.json +++ b/ui/package.json @@ -6,40 +6,41 @@ "node": ">=12.0.0" }, "dependencies": { - "@ant-design/icons": "^4.0.6", + "@ant-design/icons": "^4.2.1", "@baurine/grafana-value-formats": "^1.0.0", - "@fortawesome/fontawesome-free": "^5.13.0", + "@fortawesome/fontawesome-free": "^5.14.0", "@g07cha/flexbox-react": "^5.0.0", - "@umijs/hooks": "^1.9.2", - "@welldone-software/why-did-you-render": "^4.2.0", - "antd": "^4.2.5", + "@umijs/hooks": "^1.9.3", + "@welldone-software/why-did-you-render": "^4.2.7", + "ace-builds": "^1.4.12", + "antd": "~4.2", "axios": "^0.19.0", - "bulma": "^0.8.2", + "bulma": "^0.9.0", "classnames": "^2.2.6", "d3": "^5.15.1", - "dayjs": "^1.8.24", + "dayjs": "^1.8.31", "echarts": "^4.8.0", "echarts-for-react": "^2.0.16", - "framer-motion": "^1.10.3", - "i18next": "^19.4.2", - "i18next-browser-languagedetector": "^4.0.1", + "framer-motion": "^2.3.0", + "i18next": "^19.6.3", + "i18next-browser-languagedetector": "^5.0.0", "lodash": "^4.17.19", - "moize": "^5.4.6", - "office-ui-fabric-react": "^7.105.3", + "moize": "^5.4.7", + "nprogress": "^0.2.0", + "office-ui-fabric-react": "^7.123.10", "react": "^16.13.1", + "react-ace": "^9.1.1", "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.13.1", "react-highlight-words": "^0.16.0", - "react-i18next": "^11.3.5", - "react-resize-detector": "^4.2.3", + "react-i18next": "^11.7.0", "react-router": "^6.0.0-alpha.3", "react-router-dom": "^6.0.0-alpha.3", "react-spring": "^8.0.27", - "react-syntax-highlighter": "^12.2.1", - "react-top-loading-bar": "^1.2.0", - "react-use": "^14.2.0", - "single-spa": "^5.3.4", - "single-spa-react": "^2.14.0", + "react-syntax-highlighter": "^13.0.0", + "react-use": "^15.3.3", + "single-spa": "^5.5.5", + "single-spa-react": "^3.0.1", "sql-formatter-plus-plus": "^1.4.0", "string-template": "^1.0.0" }, @@ -70,40 +71,41 @@ ] }, "devDependencies": { - "@babel/plugin-proposal-decorators": "^7.8.3", - "@openapitools/openapi-generator-cli": "^1.0.12-4.3.0", + "@babel/plugin-proposal-decorators": "^7.10.5", + "@openapitools/openapi-generator-cli": "^1.0.15-4.3.1", "@storybook/addon-actions": "^6.0.0-rc.3", "@storybook/addon-links": "^6.0.0-rc.3", "@storybook/addons": "^6.0.0-rc.3", "@storybook/preset-create-react-app": "^3.1.4", "@storybook/react": "^6.0.0-rc.3", "@types/d3": "^5.7.2", - "@types/lodash": "^4.14.149", - "@types/node": "^13.11.1", - "@types/react": "^16.9.34", + "@types/lodash": "^4.14.158", + "@types/node": "^14.0.27", + "@types/react": "^16.9.43", + "@types/react-dom": "^16.9.8", "@types/webpack-env": "^1.15.2", "babel-plugin-dynamic-import-node": "^2.3.0", "babel-plugin-import": "^1.13.0", "browserslist-useragent-regexp": "^2.1.0", - "customize-cra": "^1.0.0-alpha.0", + "customize-cra": "^1.0.0", "esm": "^3.2.25", "gulp": "^4.0.2", - "gulp-cli": "^2.2.0", + "gulp-cli": "^2.3.0", "gulp-shell": "^0.8.0", - "http-proxy-middleware": "^1.0.3", + "http-proxy-middleware": "^1.0.5", "husky": "^4.2.5", - "less": "^3.10.3", + "less": "^3.12.2", "less-loader": "^5.0.0", "mixpanel-browser": "^2.38.0", "prettier": "^2.0.4", "pretty-quick": "^2.0.1", - "react-app-rewire-alias": "^0.1.3", + "react-app-rewire-alias": "^0.1.6", "react-app-rewire-multiple-entry": "^2.1.0", "react-app-rewire-yaml": "^1.1.0", "react-app-rewired": "^2.1.5", "react-markdown": "^4.3.1", "react-scripts": "3.4.1", - "typescript": "^3.7.4", + "typescript": "^3.9.7", "webpack-bundle-analyzer": "^3.7.0", "webpackbar": "^4.0.0" } diff --git a/ui/yarn.lock b/ui/yarn.lock index 2d772aa286..99221d4b8a 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -19,22 +19,24 @@ resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz#480b025f4b20ef7fe8f47d4a4846e4fee84ea06c" integrity sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ== -"@ant-design/icons@^4.0.6", "@ant-design/icons@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.1.0.tgz#444edcc3822d5b43b2b038d6f893cd7f7dfcc48d" - integrity sha512-R1aIPJboGq4nVYwW7s0v/V2g6yiY27Kec5ldfK3mWHskw7bihPOKwxkHbITuSJcVNJsSvA6LNMlKZoY1u8DIKQ== +"@ant-design/icons@^4.1.0", "@ant-design/icons@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.2.1.tgz#6f3ea5d98ab782072e4e9cbb70f25e4403ae1a6b" + integrity sha512-245ZI40MOr5GGws+sNSiJIRRoEf/J2xvPSMgwRYf3bv8mVGQZ6XTQI/OMeV16KtiSZ3D+mBKXVYSBz2fhigOXQ== dependencies: "@ant-design/colors" "^3.1.0" "@ant-design/icons-svg" "^4.0.0" + "@babel/runtime" "^7.10.1" classnames "^2.2.6" insert-css "^2.0.0" - rc-util "^4.9.0" + rc-util "^5.0.1" "@ant-design/react-slick@~0.26.1": - version "0.26.1" - resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.26.1.tgz#1462ad1342a83af51b7ea4ee0ae1d76d91d1b3d3" - integrity sha512-1CR3vNFxAMmMb9btF6w9yT1xlrhZr6f/K+OkqoCLfWxN7h7jC16UCr1RsGBoFUdSq8bYfTr3pe6AiiCEDsALvA== + version "0.26.3" + resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.26.3.tgz#5ebdd0cc327ed1a92c0c69e4599efa00834a6ca8" + integrity sha512-FhaFfS+oea0P5WvhaM7BC2/P9r4F0yMoewBpDqVkOq+JxEiKRHJ7iBYJsenv2WEymnWeO3eCuMrz/Eez7pHpGg== dependencies: + "@babel/runtime" "^7.10.4" classnames "^2.2.5" json2mq "^0.2.0" lodash "^4.17.15" @@ -256,6 +258,18 @@ "@babel/helper-replace-supers" "^7.10.4" "@babel/helper-split-export-declaration" "^7.10.4" +"@babel/helper-create-class-features-plugin@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6": version "7.9.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897" @@ -373,6 +387,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-member-expression-to-functions@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" + integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== + dependencies: + "@babel/types" "^7.10.5" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -649,6 +670,15 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-decorators" "^7.8.3" +"@babel/plugin-proposal-decorators@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" + "@babel/plugin-proposal-dynamic-import@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" @@ -809,6 +839,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" + integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" @@ -1892,6 +1929,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" + integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.10.2", "@babel/runtime@^7.5.0", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" @@ -1965,6 +2009,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" + integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@baurine/grafana-value-formats@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@baurine/grafana-value-formats/-/grafana-value-formats-1.0.0.tgz#030e19a602799d364814d5f010a55ca2ea67b140" @@ -2090,39 +2143,47 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@fluentui/keyboard-key@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.2.0.tgz#8bbe4c27e0166a46007de8c54c55d6ed4b091e19" - integrity sha512-2CdaGMONY1ijub9Y6HbamcimhHsBHll5NwLTvomG15NGCftX9N3jlCnHbBBpiFCG0wDFcn1TVWyvcXRQ4BvUeg== +"@fluentui/date-time-utilities@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-7.3.0.tgz#e6ee84a7b5097ca98e1cb8779dd001a1707c5cea" + integrity sha512-VymHB/GFaQM6LebrLHuPrHgk6Ra85CNjMB4+R8MAkna04w3sf07ivTfBUO3eLhAfxuW9YmlB7um8eavHq2xoDw== + dependencies: + "@uifabric/set-version" "^7.0.18" + tslib "^1.10.0" + +"@fluentui/keyboard-key@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@fluentui/keyboard-key/-/keyboard-key-0.2.7.tgz#5a907d917b7c2ec0c06ca5938c5424f5cb36540e" + integrity sha512-NX6BPT/hXOocYCksnqSw3gTFwaMHaIsaqfe6ZbGZpfBIN4idwhVUYDLwcyjUx0FmUJoWfaVsa61fbelg35USiA== dependencies: tslib "^1.10.0" -"@fluentui/react-focus@^7.12.2": - version "7.12.2" - resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-7.12.2.tgz#85cae6fe1d5cea215738cf9fff4bc2d9bd1612d7" - integrity sha512-7HPijihxlLB9oiIQXXP8dydFAViEIJflWz6GLvFRdea0bh6fdWThXIPE8LZ85AuXOPwrLS22zzA5wcq5cGAmjw== +"@fluentui/react-focus@^7.12.25": + version "7.12.25" + resolved "https://registry.yarnpkg.com/@fluentui/react-focus/-/react-focus-7.12.25.tgz#fd7c5d371fd79a551d6b8e30f0d7526398230b07" + integrity sha512-NRh5HXNJ7X52I48B+SJGOM0X8vqpoD4NO8KlBpcDJFwN3VV/5Mi5BGRUq87rpbpKdPB2q4Ni3o8E2LB4qQmL0A== dependencies: - "@fluentui/keyboard-key" "^0.2.0" - "@uifabric/merge-styles" "^7.14.0" - "@uifabric/set-version" "^7.0.12" - "@uifabric/styling" "^7.12.12" - "@uifabric/utilities" "^7.20.0" + "@fluentui/keyboard-key" "^0.2.7" + "@uifabric/merge-styles" "^7.16.3" + "@uifabric/set-version" "^7.0.18" + "@uifabric/styling" "^7.14.5" + "@uifabric/utilities" "^7.24.5" tslib "^1.10.0" -"@fluentui/react-icons@^0.1.21": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@fluentui/react-icons/-/react-icons-0.1.21.tgz#a9501802e689320b15c1401da7ae27d4beb5641c" - integrity sha512-iTNRqMr4m7fk8GkoBtHwuVwwolL5HjHB0dttz2JjJTzL4zLxgLUOb/lB/CyZItV1W+/rUlJCoIuct27Nn2D86A== +"@fluentui/react-icons@^0.1.40": + version "0.1.40" + resolved "https://registry.yarnpkg.com/@fluentui/react-icons/-/react-icons-0.1.40.tgz#d643c5e982941a31b7c9a64acd9e377f4deae7c6" + integrity sha512-UFGMeQgajjfFwWtoEvk7eHd6Bye4aeVzOVTVKQ9MWxZZQIzP5gzA8Qk8dMfwSrPV5oplsMlTKijl7kULdY+H6g== dependencies: - "@uifabric/set-version" "^7.0.12" - "@uifabric/styling" "^7.12.12" - "@uifabric/utilities" "^7.20.0" + "@microsoft/load-themed-styles" "^1.10.26" + "@uifabric/set-version" "^7.0.18" + "@uifabric/utilities" "^7.24.5" tslib "^1.10.0" -"@fortawesome/fontawesome-free@^5.13.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz#fcb113d1aca4b471b709e8c9c168674fbd6e06d9" - integrity sha512-xKOeQEl5O47GPZYIMToj6uuA2syyFlq9EMSl2ui0uytjY9xbe8XS0pexNWmxrdcCyNGyDmLyYw5FtKsalBUeOg== +"@fortawesome/fontawesome-free@^5.14.0": + version "5.14.0" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz#a371e91029ebf265015e64f81bfbf7d228c9681f" + integrity sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA== "@g07cha/flexbox-react@^5.0.0": version "5.0.0" @@ -2344,17 +2405,17 @@ dependencies: mkdirp "^1.0.4" -"@openapitools/openapi-generator-cli@^1.0.12-4.3.0": - version "1.0.12-4.3.0" - resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.12-4.3.0.tgz#845f0bfd47a73bdaa188667c3085d721e0d91785" - integrity sha512-p6y0ur69/vEslpARrcWg3geujOAjxoQIlIamZGm1cWsu4y4RrEdrolueWA1Lxww2pUzgxvb9PwD6hHFZNNfgrw== +"@openapitools/openapi-generator-cli@^1.0.15-4.3.1": + version "1.0.15-4.3.1" + resolved "https://registry.yarnpkg.com/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.15-4.3.1.tgz#25ef943eba3c82e82379b30f858bb05ed97dae0b" + integrity sha512-U+sanspDmeBElVNjYHQ4U7BbSEJUQzjNKmiTzXpcEw/r93sgxmzS2Sew5t+Zj6kyN1YTvjhRjJikNcW9/bmTKA== "@popmotion/easing@^1.0.1", "@popmotion/easing@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@popmotion/easing/-/easing-1.0.2.tgz#17d925c45b4bf44189e5a38038d149df42d8c0b4" integrity sha512-IkdW0TNmRnWTeWI7aGQIVDbKXPWHVEYdGgd5ZR4SH/Ty/61p63jCjrPxX1XrR7IGkl08bjhJROStD7j+RKgoIw== -"@popmotion/popcorn@^0.4.2", "@popmotion/popcorn@^0.4.4": +"@popmotion/popcorn@^0.4.2": version "0.4.4" resolved "https://registry.yarnpkg.com/@popmotion/popcorn/-/popcorn-0.4.4.tgz#a5f906fccdff84526e3fcb892712d7d8a98d6adc" integrity sha512-jYO/8319fKoNLMlY4ZJPiPu8Ea8occYwRZhxpaNn/kZsK4QG2E7XFlXZMJBsTWDw7I1i0uaqyC4zn1nwEezLzg== @@ -3360,10 +3421,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== -"@types/lodash@^4.14.149": - version "4.14.152" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.152.tgz#7e7679250adce14e749304cdb570969f77ec997c" - integrity sha512-Vwf9YF2x1GE3WNeUMjT5bTHa2DqgUo87ocdgTScupY2JclZ5Nn7W2RLM/N0+oreexUk8uaVugR81NnTY/jNNXg== +"@types/lodash@^4.14.158": + version "4.14.158" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.158.tgz#b38ea8b6fe799acd076d7a8d7ab71c26ef77f785" + integrity sha512-InCEXJNTv/59yO4VSfuvNrZHt7eeNtWQEgnieIA+mIC+MOWM9arOWG2eQ8Vhk6NbOre6/BidiXhkZYeDY9U35w== "@types/markdown-to-jsx@^6.11.0": version "6.11.1" @@ -3397,10 +3458,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.5.tgz#3d03acd3b3414cf67faf999aed11682ed121f22b" integrity sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA== -"@types/node@^13.11.1": - version "13.13.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.9.tgz#79df4ae965fb76d31943b54a6419599307a21394" - integrity sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ== +"@types/node@^14.0.27": + version "14.0.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" + integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== "@types/node@^14.0.4": version "14.0.13" @@ -3453,7 +3514,7 @@ "@types/react" "*" "@types/reactcss" "*" -"@types/react-dom@^16.0.3": +"@types/react-dom@^16.0.3", "@types/react-dom@^16.9.8": version "16.9.8" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== @@ -3467,7 +3528,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.0.34", "@types/react@^16.9.34": +"@types/react@*", "@types/react@^16.0.34": version "16.9.35" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368" integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ== @@ -3475,6 +3536,14 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/react@^16.9.43": + version "16.9.43" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b" + integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/reactcss@*": version "1.2.3" resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.3.tgz#af28ae11bbb277978b99d04d1eedfd068ca71834" @@ -3590,86 +3659,86 @@ semver "^7.3.2" tsutils "^3.17.1" -"@uifabric/foundation@^7.7.19": - version "7.7.19" - resolved "https://registry.yarnpkg.com/@uifabric/foundation/-/foundation-7.7.19.tgz#132f2cf28c09cfc52b9366913f9f39fb172d43b1" - integrity sha512-fD4lCxKxLrBzK9nHqgzuVyDnD2H45nZd/pWAYBJz/N7gu/+maozuaUl2h3dp2EzbdIyFd7qINP8iqOHPu9m5uQ== +"@uifabric/foundation@^7.7.39": + version "7.7.39" + resolved "https://registry.yarnpkg.com/@uifabric/foundation/-/foundation-7.7.39.tgz#d3eb9e0a86a31c631db8eb4c41397304e81d3327" + integrity sha512-dQvUcSbLFPAiLagn8gxPXMVB+I//3pz6QB313mQaNlOgeSw45S8Hm1b/sy/KoMqHl8zCJRmZInX3IYTpmhKrJQ== dependencies: - "@uifabric/merge-styles" "^7.14.0" - "@uifabric/set-version" "^7.0.12" - "@uifabric/styling" "^7.12.12" - "@uifabric/utilities" "^7.20.0" + "@uifabric/merge-styles" "^7.16.3" + "@uifabric/set-version" "^7.0.18" + "@uifabric/styling" "^7.14.5" + "@uifabric/utilities" "^7.24.5" tslib "^1.10.0" -"@uifabric/icons@^7.3.45": - version "7.3.45" - resolved "https://registry.yarnpkg.com/@uifabric/icons/-/icons-7.3.45.tgz#a136b2162badc3ec9a14402e48d17cb2639b9ce4" - integrity sha512-RIDFYF9of6mNjUY2Arryf9IbpuF8o2BWTlsnEiEVF73dGbbAF0MSJ9McM52hl1ntJ2coRMEgzHim/t3C9KN8Xw== +"@uifabric/icons@^7.3.65": + version "7.3.65" + resolved "https://registry.yarnpkg.com/@uifabric/icons/-/icons-7.3.65.tgz#584e5b38cd709504344ef0001472da0707516dd0" + integrity sha512-aDnuRS1+su/slD4pkIzdZfrDQxYfgosGdildvgIAKX9HSShw4BZKH7KkqenAdmhY3iBZoV5htr+kGFZGiCjWTw== dependencies: - "@uifabric/set-version" "^7.0.12" - "@uifabric/styling" "^7.12.12" + "@uifabric/set-version" "^7.0.18" + "@uifabric/styling" "^7.14.5" tslib "^1.10.0" -"@uifabric/merge-styles@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@uifabric/merge-styles/-/merge-styles-7.14.0.tgz#309c1d67ffba5824060544d2d6dd122258ff9c02" - integrity sha512-LR70l856QTVYfceUA1HtHws0iFUQI3pN1Z2fyH2M1RPeBA35NimpaGkEaNSPHsCAiJ09evVsG6JP7iTUItWHUQ== +"@uifabric/merge-styles@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@uifabric/merge-styles/-/merge-styles-7.16.3.tgz#4e55748a7991bbb419240d828c3e18afb4bb4df1" + integrity sha512-MmLPDRVbFENixb77K041y9VlSohcULbYXHlolYedNW+KCr1tyu700GunnBwOnWRhKOoKgStvBZZdy5X7ty41xQ== dependencies: - "@uifabric/set-version" "^7.0.12" + "@uifabric/set-version" "^7.0.18" tslib "^1.10.0" -"@uifabric/react-hooks@^7.4.2": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@uifabric/react-hooks/-/react-hooks-7.4.2.tgz#8784efe70ed30909c3ec54dad5419f30d0c41913" - integrity sha512-TcCsfCrXUwd4zAnCCGC5fTk9fzcm5Aoi1Z+HZICyVI3Vmm5wVh3HUnnjA2bV4O3Fxg5QN4YWKCWnD3mVSF9Cog== +"@uifabric/react-hooks@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@uifabric/react-hooks/-/react-hooks-7.6.2.tgz#1685e13b2b40a53a07eca08314f38a8e0419b009" + integrity sha512-ETokkVskutNvaWWGUy6x4bOFyek1/tVfUygG1NyiqNs78S2qfl4Pt8pyZs5PDOcGNfPor5IIKSi519ZmRayCIw== dependencies: - "@uifabric/set-version" "^7.0.12" - "@uifabric/utilities" "^7.20.0" + "@uifabric/set-version" "^7.0.18" + "@uifabric/utilities" "^7.24.5" tslib "^1.10.0" -"@uifabric/set-version@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@uifabric/set-version/-/set-version-7.0.12.tgz#542c261fd5d675cff84290ee5c1327c9d4855e7a" - integrity sha512-XNqfKwNUoHnkW5sj15Zd0cNf5ga9fFjbTUrvc/ix74tkUPc2vrV3qBteW61IaNTNKWOFns5kewvhCK2jU4LnRg== +"@uifabric/set-version@^7.0.18": + version "7.0.18" + resolved "https://registry.yarnpkg.com/@uifabric/set-version/-/set-version-7.0.18.tgz#50860f5b8c2fceaa46ed7e22af0307d4318ca232" + integrity sha512-W/SD7FzukXw1tz8zeD7fy548as1I048dA9tTnfbWMH9iSAbRG1LWmkw2+4BgyoOcEDumcQlpGY2818+atpndyw== dependencies: tslib "^1.10.0" -"@uifabric/styling@^7.12.12": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@uifabric/styling/-/styling-7.12.12.tgz#017ef59cc13544f338a677e5392400be575d6062" - integrity sha512-Z9+Y8ExZD94qZ78oNje9IBID1FAEWE4enYfGWRZzvGdVjE6Bfp29cvuOQgCm2Qf8ExQVf/v1YvEAJgASQz7ThQ== +"@uifabric/styling@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@uifabric/styling/-/styling-7.14.5.tgz#db2b91d403607214a9f37a8e3898779c76316bff" + integrity sha512-9HFZsBMXqW6uilhbL/z9Ih2JwqK0IVM1Z0HYAG9cYOciXvCZ6MUUi08nnkwRq2bkOe6vgaiCovsAh2HkOhb+0Q== dependencies: "@microsoft/load-themed-styles" "^1.10.26" - "@uifabric/merge-styles" "^7.14.0" - "@uifabric/set-version" "^7.0.12" - "@uifabric/utilities" "^7.20.0" + "@uifabric/merge-styles" "^7.16.3" + "@uifabric/set-version" "^7.0.18" + "@uifabric/utilities" "^7.24.5" tslib "^1.10.0" -"@uifabric/utilities@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@uifabric/utilities/-/utilities-7.20.0.tgz#ccfd2c0ba5ac33090f86a8c79d4d6140a4c842da" - integrity sha512-/VkAptQCeFZbk25+0iReqEYEZd23vpyiIlWfp62ANsvqWuis/ze+gtPbdCxtJucHxccquOKxuqpX1E4Azdm3CA== +"@uifabric/utilities@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@uifabric/utilities/-/utilities-7.24.5.tgz#b9c59d140133ede887085c41c85db78e4df46daf" + integrity sha512-pg8pzEwNoytofrcTx0LHBm9NZNgyJqTiF6AQV0sRbL1eF27sxGZXb9PD7PBWv0rRJ79Q0xyEr4PiEsLZ2k/d5w== dependencies: - "@uifabric/merge-styles" "^7.14.0" - "@uifabric/set-version" "^7.0.12" + "@uifabric/merge-styles" "^7.16.3" + "@uifabric/set-version" "^7.0.18" prop-types "^15.7.2" tslib "^1.10.0" -"@umijs/hooks@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@umijs/hooks/-/hooks-1.9.2.tgz#647becc86d4e6aa96f78371edab987b533845b8b" - integrity sha512-mYT9C7cL4u1ZymCn8zNBiAV011fwnNQFYGkl3HCVyqWTzqtdVngSbVL3vUE9ii6v30zge/tpPQAjosjrrBHfIQ== +"@umijs/hooks@^1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@umijs/hooks/-/hooks-1.9.3.tgz#cc0de9e832714e03c1338aba17969aed2d29afd7" + integrity sha512-h83Zk0x2oO8HeTZlSLsT4KVh+Me1VoXu+DHmT+cpqR7caBhii0T5c8Weko/pFBkEiB4QKzvWi7Zj+78VSKkI5w== dependencies: - "@umijs/use-request" "^1.4.2" + "@umijs/use-request" "^1.4.3" intersection-observer "^0.7.0" lodash.isequal "^4.5.0" resize-observer-polyfill "^1.5.1" screenfull "^5.0.0" -"@umijs/use-request@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@umijs/use-request/-/use-request-1.4.2.tgz#8673435d3d0c4205062b74e35f3fb0d25397c213" - integrity sha512-PBoOsM+4ISspGGV/5y2i21HLd/h+BkdIDmbxYvUIOF/MVXrumS6C9EFJaSl9+RrLzW9w10/wKpy0GGIg1CJ3gw== +"@umijs/use-request@^1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@umijs/use-request/-/use-request-1.4.3.tgz#bc5fadc4cb07d796eb35f09838d6a15cb12802f7" + integrity sha512-aH4GCdRnMCaaciygdN0KtCDQdBBh1KyiNUAgYDPX8Y4brmbymEpJViX1FU4isOTbV34WlbkWTiBpR9HIi2ciNQ== dependencies: lodash.debounce "^4.0.8" lodash.throttle "^4.1.1" @@ -3978,10 +4047,10 @@ text-table "^0.2.0" webpack-log "^1.1.2" -"@welldone-software/why-did-you-render@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-4.2.2.tgz#720128a4f626997ece1ac455a7b13f9ef10dae0a" - integrity sha512-v08t2WXFQdnxkPodXzbPeho3FwgrlwzjwxasN+8A1LSZnkcxJpYvOF8/z+OySqehC44JT6oPB1KEnBVMrebHdw== +"@welldone-software/why-did-you-render@^4.2.7": + version "4.2.7" + resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-4.2.7.tgz#7731bc42ef44e146be3c39f026bc4826dd4e5699" + integrity sha512-La1INHiFnHi9USYGAaRsPhMXMOt2x3qee8cXxRija0h3tQJY1/XmSSelyXDMQkVtDDa61DMfk3H59gxWDmnqsA== dependencies: lodash "^4" @@ -4020,6 +4089,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +ace-builds@^1.4.12, ace-builds@^1.4.6: + version "1.4.12" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.12.tgz#888efa386e36f4345f40b5233fcc4fe4c588fae7" + integrity sha512-G+chJctFPiiLGvs3+/Mly3apXTcfgE45dT5yp12BcWZ1kUs+gm0qd3/fv4gsz6fVag4mM0moHVpjHDIgph6Psg== + acorn-globals@^4.1.0, acorn-globals@^4.3.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -4242,7 +4316,7 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -antd@^4.2.5: +antd@~4.2: version "4.2.5" resolved "https://registry.yarnpkg.com/antd/-/antd-4.2.5.tgz#5f68fa9282e49306b8c8d44304321d9b979772d7" integrity sha512-8rKCvik1gbru/nzodt+21r6ksWP9VPUfC74dhTLlRA1bY+7+ZZCS87+ikbAIARQRTh88LOe6nOxn5+3rJ3yOZA== @@ -5446,10 +5520,10 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bulma@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz#5d928f16ed4a84549c2873f95c92c38c69c631a7" - integrity sha512-vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA== +bulma@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.9.0.tgz#948c5445a49e9d7546f0826cb3820d17178a814f" + integrity sha512-rV75CJkubNUroAt0qCRkjznZLoaXq/ctfMXsMvKSL84UetbSyx5REl96e8GoQ04G4Tkw0XF3STECffTOQrbzOQ== bytes@3.0.0: version "3.0.0" @@ -5903,7 +5977,7 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1, clone@^2.1.2: +clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -6087,10 +6161,10 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" -compute-scroll-into-view@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.13.tgz#be1b1663b0e3f56cd5f7713082549f562a3477e2" - integrity sha512-o+w9w7A98aAFi/GjK8cxSV+CdASuPa2rR5UWs3+yHkJzWqaKoBEufFNWYaXInCSmUfDCVhesG+v9MTWqOjsxFg== +compute-scroll-into-view@^1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz#80e3ebb25d6aa89f42e533956cb4b16a04cfe759" + integrity sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ== concat-map@0.0.1: version "0.0.1" @@ -6619,10 +6693,10 @@ cuint@^0.2.2: resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= -customize-cra@^1.0.0-alpha.0: - version "1.0.0-alpha.0" - resolved "https://registry.yarnpkg.com/customize-cra/-/customize-cra-1.0.0-alpha.0.tgz#7a9523a93d0720cd2190dc24137691b981abf185" - integrity sha512-Ve/D8ZWGLIfW/rKO0dXmEB4rpstxs0rNlnU3eoYU5ijwZljpJVpLheIoTuGJi+poqFhn1YNkNx7zFVpZNnK5ig== +customize-cra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/customize-cra/-/customize-cra-1.0.0.tgz#73286563631aa08127ad4d30a2e3c89cf4e93c8d" + integrity sha512-DbtaLuy59224U+xCiukkxSq8clq++MOtJ1Et7LED1fLszWe88EoblEYFBJ895sB1mC6B4uu3xPT/IjClELhMbA== dependencies: lodash.flow "^3.5.0" @@ -6908,10 +6982,10 @@ data-urls@^1.0.0, data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -dayjs@^1.8.24: - version "1.8.27" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.27.tgz#a8ae63ee990af28c05c430f0e160ae835a0fbbf8" - integrity sha512-Jpa2acjWIeOkg8KURUHICk0EqnEFSSF5eMEscsOgyJ92ZukXwmpmRkPSUka7KHSfbj5eKH30ieosYip+ky9emQ== +dayjs@^1.8.31: + version "1.8.31" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.31.tgz#0cd1114c2539dd5ad9428be0c38df6d4bb40b9d3" + integrity sha512-mPh1mslned+5PuIuiUfbw4CikHk6AEAf2Baxih+wP5fssv+wmlVhvgZ7mq+BhLt7Sr/Hc8leWDiwe6YnrpNt3g== debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" @@ -7111,6 +7185,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "^2.6.0" +diff-match-patch@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" @@ -8077,6 +8156,11 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-equals@^1.6.0: version "1.6.3" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-1.6.3.tgz#84839a1ce20627c463e1892f2ae316380c81b459" @@ -8124,7 +8208,7 @@ fastest-stable-stringify@^1.0.1: resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz#9122d406d4c9d98bea644a6b6853d5874b87b028" integrity sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg= -fault@^1.0.2: +fault@^1.0.0, fault@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== @@ -8498,23 +8582,22 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@^1.10.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-1.11.0.tgz#9463a4d8e1be9f25d0f75712a4a835691c028d65" - integrity sha512-DkJFWAHIv57L4xu8Ufq9GMs9Ifqpgt5Yi55pc4NQos8TUGomgbLlnwpO1IXK85X5K1dVNKuTZMiqjWZLeOfG/A== +framer-motion@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-2.3.0.tgz#700c3d6a554c86bfa6a2d96e25f25829667cd0b4" + integrity sha512-zX6V5vz3joMzacqV7UpiHKUtqLMmU/YsVM6KpeRCi65KjUiymUX5O2jkpR3cCdlr1DkJ1yWUjBWY7xyiO834VA== dependencies: "@popmotion/easing" "^1.0.2" "@popmotion/popcorn" "^0.4.2" framesync "^4.0.4" hey-listen "^1.0.8" popmotion "9.0.0-beta-8" - style-value-types "^3.1.6" - stylefire "^7.0.2" + style-value-types "^3.1.9" tslib "^1.10.0" optionalDependencies: "@emotion/is-prop-valid" "^0.8.2" -framesync@^4.0.0, framesync@^4.0.1, framesync@^4.0.4: +framesync@^4.0.1, framesync@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/framesync/-/framesync-4.0.4.tgz#79c42c0118f26821c078570db0ff81fb863516a2" integrity sha512-mdP0WvVHe0/qA62KG2LFUAOiWLng5GLpscRlwzBxu2VXOp6B8hNs5C5XlFigsMgrfDrr2YbqTsgdWZTc4RXRMQ== @@ -8942,6 +9025,30 @@ gulp-cli@^2.2.0: v8flags "^3.0.1" yargs "^7.1.0" +gulp-cli@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" + integrity sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A== + dependencies: + ansi-colors "^1.0.1" + archy "^1.0.0" + array-sort "^1.0.0" + color-support "^1.1.3" + concat-stream "^1.6.0" + copy-props "^2.0.1" + fancy-log "^1.3.2" + gulplog "^1.0.0" + interpret "^1.4.0" + isobject "^3.0.1" + liftoff "^3.1.0" + matchdep "^2.0.0" + mute-stdout "^1.0.0" + pretty-hrtime "^1.0.0" + replace-homedir "^1.0.0" + semver-greatest-satisfied-range "^1.1.0" + v8flags "^3.2.0" + yargs "^7.1.0" + gulp-shell@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/gulp-shell/-/gulp-shell-0.8.0.tgz#0ed4980de1d0c67e5f6cce971d7201fd0be50555" @@ -9129,6 +9236,11 @@ highlight-words-core@^1.2.0: resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa" integrity sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg== +highlight.js@^10.1.1, highlight.js@~10.1.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.1.2.tgz#c20db951ba1c22c055010648dfffd7b2a968e00c" + integrity sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA== + highlight.js@~9.15.0, highlight.js@~9.15.1: version "9.15.10" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.10.tgz#7b18ed75c90348c045eef9ed08ca1319a2219ad2" @@ -9352,15 +9464,15 @@ http-proxy-middleware@0.19.1: lodash "^4.17.11" micromatch "^3.1.10" -http-proxy-middleware@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.0.4.tgz#425ea177986a0cda34f9c81ec961c719adb6c2a9" - integrity sha512-8wiqujNWlsZNbeTSSWMLUl/u70xbJ5VYRwPR8RcAbvsNxzAZbgwLzRvT96btbm3fAitZUmo5i8LY6WKGyHDgvA== +http-proxy-middleware@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.0.5.tgz#4c6e25d95a411e3d750bc79ccf66290675176dc2" + integrity sha512-CKzML7u4RdGob8wuKI//H8Ein6wNTEQR7yjVEzPbhBLGdOfkfvgTnp2HLnniKBDP9QW4eG10/724iTWLBeER3g== dependencies: "@types/http-proxy" "^1.17.4" http-proxy "^1.18.1" is-glob "^4.0.1" - lodash "^4.17.15" + lodash "^4.17.19" micromatch "^4.0.2" http-proxy@^1.17.0, http-proxy@^1.18.1: @@ -9407,19 +9519,19 @@ hyphenate-style-name@^1.0.2: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -i18next-browser-languagedetector@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.2.0.tgz#82e35d31f88a1d7c2b6d5913bf8c8481cd40aafb" - integrity sha512-qRSCBWgDUSqVQb3sTxkDC+ImYLhF+wB387Y1RpOcJvyex+V3abi+W83n4Awy+dx719AOBbKTy97FjrUGrAhbyw== +i18next-browser-languagedetector@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-5.0.0.tgz#9e946ed2ea5514a636913fe020a32455e82946e3" + integrity sha512-ekeKbRvTOsSOABSEPHFqyb6Q37JagZXjkISgQKHP84t/VZRW/B3FMVz+tBNQDVdZLsEaOe8fuJpeZsw2TvWeVQ== dependencies: "@babel/runtime" "^7.5.5" -i18next@^19.4.2: - version "19.4.5" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.4.5.tgz#f9ea8bbb48d1ec66bc3436f0bb74a16b11821e11" - integrity sha512-aLvSsURoupi3x9IndmV6+m3IGhzLzhYv7Gw+//K3ovdliyGcFRV0I1MuddI0Bk/zR7BG1U+kJOjeHFUcUIdEgg== +i18next@^19.6.3: + version "19.6.3" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.6.3.tgz#ce2346161b35c4c5ab691b0674119c7b349c0817" + integrity sha512-eYr98kw/C5z6kY21ti745p4IvbOJwY8F2T9tf/Lvy5lFnYRqE45+bppSgMPmcZZqYNT+xO0N0x6rexVR2wtZZQ== dependencies: - "@babel/runtime" "^7.3.1" + "@babel/runtime" "^7.10.1" iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" @@ -9631,7 +9743,7 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.0.0: +interpret@^1.0.0, interpret@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== @@ -10981,21 +11093,19 @@ less-loader@^5.0.0: loader-utils "^1.1.0" pify "^4.0.1" -less@^3.10.3: - version "3.11.1" - resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" - integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== +less@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4" + integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q== dependencies: - clone "^2.1.2" tslib "^1.10.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" - mkdirp "^0.5.0" - promise "^7.1.1" - request "^2.83.0" + native-request "^1.0.5" source-map "~0.6.0" leven@^3.1.0: @@ -11131,11 +11241,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" - integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -11156,6 +11261,11 @@ lodash.flow@^3.5.0: resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + 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" @@ -11260,6 +11370,14 @@ lowlight@1.12.1: fault "^1.0.2" highlight.js "~9.15.0" +lowlight@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.14.0.tgz#83ebc143fec0f9e6c0d3deffe01be129ce56b108" + integrity sha512-N2E7zTM7r1CwbzwspPxJvmjAbxljCPThTFawEX2Z7+P3NGrrvY54u8kyU16IY4qWfoVIxY8SYCS8jTkuG7TqYA== + dependencies: + fault "^1.0.0" + highlight.js "~10.1.0" + lru-cache@4.1.x: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11663,7 +11781,7 @@ mixpanel-browser@^2.38.0: resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.38.0.tgz#cfcc9105cbec47b67589b97d755c398dfc13b621" integrity sha512-6Gl95g91PWKBV6E25ga9coD7i4wWl3DgTgtaBPXG+ijNvvj6rQD1tOHJvcZgT4tucGbaNk4oYJC5lmrR0rnOBQ== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -11675,10 +11793,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moize@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/moize/-/moize-5.4.6.tgz#9a7e402462151be3a077c03464b20dc67497e0d0" - integrity sha512-gvMOccupuKKD9Yzgda474o/RIl0EIUnCPuNLn9GPo71HJZPhWdzu/RYZQjYRheDMcuJfXifB9ttzAYCrkGKM0A== +moize@^5.4.7: + version "5.4.7" + resolved "https://registry.yarnpkg.com/moize/-/moize-5.4.7.tgz#bffa28806441d9f5cf1c4158b67a29413c438e83" + integrity sha512-7PZH8QFJ51cIVtDv7wfUREBd3gL59JB0v/ARA3RI9zkSRa9LyGjS1Bdldii2J1/NQXRQ/3OOVOSdnZrCcVaZlw== dependencies: fast-equals "^1.6.0" fast-stringify "^1.1.0" @@ -11791,6 +11909,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +native-request@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.7.tgz#ff742dc555b4c8f2f1c14b548639ba174e573856" + integrity sha512-9nRjinI9bmz+S7dgNtf4A70+/vPhnd+2krGpy4SUlADuOuSa24IDkNaZ+R/QT1wQ6S8jBdi6wE7fLekFZNfUpQ== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -11987,6 +12110,11 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -12153,21 +12281,22 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -office-ui-fabric-react@^7.105.3: - version "7.115.4" - resolved "https://registry.yarnpkg.com/office-ui-fabric-react/-/office-ui-fabric-react-7.115.4.tgz#618ba876c3c7ec66f27737cc86320fa87a193d2a" - integrity sha512-Z2AhSjw03Pju3czyoAs+FhNBHbW5jCAtuAB7l6bBzODneDbhApskhLE/H/+GuIVRrGiaJaPo6K5LiTPEY8Pbig== +office-ui-fabric-react@^7.123.10: + version "7.123.10" + resolved "https://registry.yarnpkg.com/office-ui-fabric-react/-/office-ui-fabric-react-7.123.10.tgz#9774098c26a49c65e445eab8abd161f1aae04acf" + integrity sha512-EmVZMNOIFRDDsqNjBZb0XfLGcLvBWjIwMAZYfiWZpYpqn3uoK/8AQwKJBR2nGjj1Rg/qgv8WAB7B1S4cAL3Wdw== dependencies: - "@fluentui/react-focus" "^7.12.2" - "@fluentui/react-icons" "^0.1.21" + "@fluentui/date-time-utilities" "^7.3.0" + "@fluentui/react-focus" "^7.12.25" + "@fluentui/react-icons" "^0.1.40" "@microsoft/load-themed-styles" "^1.10.26" - "@uifabric/foundation" "^7.7.19" - "@uifabric/icons" "^7.3.45" - "@uifabric/merge-styles" "^7.14.0" - "@uifabric/react-hooks" "^7.4.2" - "@uifabric/set-version" "^7.0.12" - "@uifabric/styling" "^7.12.12" - "@uifabric/utilities" "^7.20.0" + "@uifabric/foundation" "^7.7.39" + "@uifabric/icons" "^7.3.65" + "@uifabric/merge-styles" "^7.16.3" + "@uifabric/react-hooks" "^7.6.2" + "@uifabric/set-version" "^7.0.18" + "@uifabric/styling" "^7.14.5" + "@uifabric/utilities" "^7.24.5" prop-types "^15.7.2" tslib "^1.10.0" @@ -12457,6 +12586,18 @@ parse-entities@^1.1.0, parse-entities@^1.1.2: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -13527,7 +13668,7 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prismjs@^1.8.4: +prismjs@^1.20.0, prismjs@^1.8.4, prismjs@~1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.20.0.tgz#9b685fc480a3514ee7198eac6a3bf5024319ff03" integrity sha512-AEDjSrVNkynnw6A+B1DsFkd6AVdTnp+/WoUixFRULlCLZVRZlVQMVWio/16jv7G1FscUxQxOQhWwApgbnxr6kQ== @@ -13742,11 +13883,6 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -raf-schd@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" - integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== - raf@^3.4.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -13812,6 +13948,17 @@ rc-align@^3.0.0, rc-align@^3.0.0-rc.0: rc-util "^4.12.0" resize-observer-polyfill "^1.5.1" +rc-align@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.1.tgz#0566de141a82d9a1923b7672c70bdb19dcde6e23" + integrity sha512-RQ5Fhxl0LW+zsxbY8dxAcpXdaHkHH2jzRSSpvBTS7G9LMK3T+WRcn4ovjg/eqAESM6TdTx0hfqWF2S1pO75jxQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + dom-align "^1.7.0" + rc-util "^5.0.1" + resize-observer-polyfill "^1.5.1" + rc-animate@3.x, rc-animate@^3.0.0, rc-animate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.0.0.tgz#f76d7051136b7d650fb3d29366a160e95a369c0a" @@ -13822,6 +13969,16 @@ rc-animate@3.x, rc-animate@^3.0.0, rc-animate@~3.0.0: raf "^3.4.0" rc-util "^4.15.3" +rc-animate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.1.0.tgz#051b689c2c7194e4c8ae016d32a0e5f9de6c8baa" + integrity sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw== + dependencies: + "@ant-design/css-animation" "^1.7.2" + classnames "^2.2.6" + raf "^3.4.0" + rc-util "^5.0.1" + rc-cascader@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.1.0.tgz#e4c8058f0d388c4fc63a1257c15e4e7ab60061f5" @@ -13887,20 +14044,19 @@ rc-field-form@~1.2.0: rc-util "^4.20.3" rc-hammerjs@~0.6.0: - version "0.6.9" - resolved "https://registry.yarnpkg.com/rc-hammerjs/-/rc-hammerjs-0.6.9.tgz#9a4ddbda1b2ec8f9b9596091a6a989842a243907" - integrity sha512-4llgWO3RgLyVbEqUdGsDfzUDqklRlQW5VEhE3x35IvhV+w//VPRG34SBavK3D2mD/UaLKaohgU41V4agiftC8g== + version "0.6.10" + resolved "https://registry.yarnpkg.com/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz#1831a3bd8f2199700bfcc5ad6b20a35630aeb5e0" + integrity sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg== dependencies: babel-runtime "6.x" hammerjs "^2.0.8" prop-types "^15.5.9" rc-input-number@~4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-4.6.2.tgz#1e0c1437a2aa45294588ece933f5b02551fce22d" - integrity sha512-780tUBUNCbQ4l/vKSXxMCiRKNBT6ApKXCDQG20GnT+v1lL4gq4GkdfoTGz6lb0uyY40rk7V09RtIXt7VIHrGRw== + version "4.6.3" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-4.6.3.tgz#828e5d11a8ea9be4b01c2463a57acfcaec283f5e" + integrity sha512-eTNIC16/Jvy6cr153BxUH0Ni0QEzz3x4qQNNd4uqBLjhGDwq4i1nj6nuRgJWgPjr3GQYJMY7gjs3AYF6shd8PA== dependencies: - babel-runtime "6.x" classnames "^2.2.0" rc-util "^4.5.1" @@ -13914,7 +14070,7 @@ rc-mentions@~1.1.0: rc-trigger "^4.0.0" rc-util "^4.6.0" -rc-menu@^8.0.1, rc-menu@~8.2.1: +rc-menu@^8.0.1: version "8.2.1" resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-8.2.1.tgz#132f26f61b05e5f85d7977dd3cdde6ec23335ce7" integrity sha512-E2HmP9ZGam5hiZ2UJ466m3n/iqbYsPAquyZaNEDcgjhktI/LcwzpEdLIgPVyfgOGQ84QTY9wBF6f9D/032/WxA== @@ -13927,6 +14083,19 @@ rc-menu@^8.0.1, rc-menu@~8.2.1: resize-observer-polyfill "^1.5.0" shallowequal "^1.1.0" +rc-menu@~8.2.1: + version "8.2.2" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-8.2.2.tgz#69d02cdd0d7cc3b78419b51ad548cf7ffe2c7850" + integrity sha512-Weu6tryEZtqZOBUWkx4RYkfH8/LRFK+F1TMUNtSYf1rRW/A9/Tv7cA69rofYXqwyjei7V6xDP42LE+SUS8mYNQ== + dependencies: + classnames "2.x" + mini-store "^3.0.1" + rc-animate "^3.0.0" + rc-trigger "^4.0.0" + rc-util "^4.13.0" + resize-observer-polyfill "^1.5.0" + shallowequal "^1.1.0" + rc-notification@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.3.2.tgz#94d2a46d6797b5f0a4a852e2f991187f3885b9e5" @@ -13937,10 +14106,11 @@ rc-notification@~4.3.0: rc-util "^4.0.4" rc-pagination@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-2.2.2.tgz#9773726fb6c5879bd4e5fe8848cb2dea50d80b97" - integrity sha512-7QVY4xcoLcB9jHDxOm/zY1b6wEP8/jEVpcOFUQk2bbKUtrt8cRNB+FIrDUvuVeiIEFYcMXFPgKoHHMrUaIuSGA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-2.2.5.tgz#40d675c06d604099be91831b019ca19f40c1999d" + integrity sha512-7hMFNi8R7C/4cLKgmSpUb3BfMFdt4DLrjTixSRMpMBR5jwGfwRyoV9g9Tm6gCuCaAlVAX1QNtlM1T2UqEOW5lw== dependencies: + "@babel/runtime" "^7.10.1" classnames "^2.2.1" rc-picker@~1.4.16: @@ -13978,10 +14148,23 @@ rc-resize-observer@^0.2.0: rc-util "^4.14.0" resize-observer-polyfill "^1.5.1" -rc-select@^10.1.0, rc-select@~10.3.5: - version "10.3.5" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-10.3.5.tgz#a3c8c6013414f3f4d878f1f806c9d8a77770bfb7" - integrity sha512-6/TNVEkMT6TPrgOwAJ/pLKlEgGpvCpAgCb5c0SFfyp5wR9bDjFld/U2hhIZ7tYvuvR1Nq/1Iaj0Tumd4nJDD/w== +rc-select@^10.1.0: + version "10.5.1" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-10.5.1.tgz#4d4c5d4f8d2fd3b7e3dccf74e4c43142b2979247" + integrity sha512-fZraoNNhjUmDJccfk6VYgrgHBWFmHWh/NJZh2Xttcm/usOolYI1RjO9ikP4QGhzlJBFtnTLH2pE2nchjn3TCXA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-animate "^3.0.0" + rc-trigger "^4.3.0" + rc-util "^5.0.1" + rc-virtual-list "^1.1.2" + warning "^4.0.3" + +rc-select@~10.3.5: + version "10.3.6" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-10.3.6.tgz#d11800c3a8c8e8c75ed9e4b0d6cf790ce59edc42" + integrity sha512-FDiqh48Djuq+NbUQyl4K110EkeLwBmxBQ94bSGdz7CFpT1wptVzDlpBc0PBqO+MUQ4Q+vCOhShArTf9GQyoJbg== dependencies: classnames "2.x" rc-animate "^3.0.0" @@ -14064,7 +14247,18 @@ rc-tree-select@~3.1.0: rc-tree "^3.1.0" rc-util "^4.17.0" -rc-tree@^3.1.0, rc-tree@~3.2.0: +rc-tree@^3.1.0: + version "3.8.2" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-3.8.2.tgz#e22c0a4e11726ee676a83227099f16634c5feb7f" + integrity sha512-4RLJhiGpt/Wvj7O9mm0IX+Bv9PrcdKL3j2BIpGLQX3Xd+n4p5PcqL46mRRdGoWvvTJcZ6ZEiZDg46nSyTYLdHA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-animate "^3.1.0" + rc-util "^5.0.0" + rc-virtual-list "^1.1.0" + +rc-tree@~3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-3.2.2.tgz#9822c4929570156a2170037a4faeb010cae10702" integrity sha512-eF4vJJpMnTmPufxplZ2xg+P3ogfFoUfZkZXV2qasC6JSTf+13jB7pA1xXjCwJ86V+7PqEGUsE/mljLusng0XEA== @@ -14085,6 +14279,18 @@ rc-trigger@^4.0.0, rc-trigger@^4.2.1: rc-animate "^3.0.0" rc-util "^4.20.0" +rc-trigger@^4.3.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-4.3.4.tgz#095cf7dddf2643a65621df4b1612d167af506c31" + integrity sha512-GaRqwJ99RA9qpN3crTndOIfQZG+dgs+l2i4bgB7tl1MBTaNbmJyopi+gyoaHwg2/C6mpvQ2XNrzADEyYEkxqlA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + raf "^3.4.1" + rc-align "^4.0.0" + rc-animate "^3.0.0" + rc-util "^5.0.1" + rc-trigger@~4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-4.1.0.tgz#6b13a41161716d6353e6324a01055efacb07cf71" @@ -14104,7 +14310,18 @@ rc-upload@~3.0.4: babel-runtime "6.x" classnames "^2.2.5" -rc-util@^4.0.4, rc-util@^4.11.0, rc-util@^4.12.0, rc-util@^4.13.0, rc-util@^4.14.0, rc-util@^4.15.3, rc-util@^4.16.1, rc-util@^4.17.0, rc-util@^4.20.0, rc-util@^4.20.1, rc-util@^4.20.3, rc-util@^4.20.5, rc-util@^4.20.6, rc-util@^4.5.1, rc-util@^4.6.0, rc-util@^4.8.0, rc-util@^4.9.0: +rc-util@^4.0.4, rc-util@^4.11.0, rc-util@^4.16.1, rc-util@^4.17.0, rc-util@^4.20.1, rc-util@^4.20.3, rc-util@^4.20.5, rc-util@^4.20.6, rc-util@^4.5.1, rc-util@^4.6.0: + version "4.21.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" + integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== + dependencies: + add-dom-event-listener "^1.1.0" + prop-types "^15.5.10" + react-is "^16.12.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + +rc-util@^4.12.0, rc-util@^4.13.0, rc-util@^4.14.0, rc-util@^4.15.3, rc-util@^4.20.0, rc-util@^4.8.0: version "4.20.7" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.20.7.tgz#8c19f3a489744ec00c9871ffe3701cdb7ff4a38e" integrity sha512-wzL7bGTimuUK/SgXlUIxcXYdQ27eAaBd8PTuiKz7ZI/Mbm5R6ZcRTWpeIGG56t+/79oi++kobfKbJrPxMTkKIw== @@ -14115,6 +14332,14 @@ rc-util@^4.0.4, rc-util@^4.11.0, rc-util@^4.12.0, rc-util@^4.13.0, rc-util@^4.14 react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" +rc-util@^5.0.0, rc-util@^5.0.1: + version "5.0.6" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.0.6.tgz#2b828bc87a818a66384b813f76a561ad4609e9b0" + integrity sha512-uLGxF9WjbpJSjd6iDnIjl8ZeMUglpcuh1DwO26aaXh++yAmlB6eIAJMUwwJCuqJvo4quCvsDPg1VkqHILc4U0A== + dependencies: + react-is "^16.12.0" + shallowequal "^1.1.0" + rc-virtual-list@^1.1.0, rc-virtual-list@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-1.1.3.tgz#4b59d1f727f3ba2dc4ccea21f3e92a5e023c11a0" @@ -14124,6 +14349,17 @@ rc-virtual-list@^1.1.0, rc-virtual-list@^1.1.2: raf "^3.4.1" rc-util "^4.8.0" +react-ace@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-9.1.1.tgz#fe27e1c668b0186dc1609c422198d1c2df34d2bf" + integrity sha512-dL0w6GwtnS1opsOoWhJaF7rF7xCM+NOEOfePmDfiaeU+EyZQ6nRWDBgyzKsuiB3hyXH3G9D6FX37ur/LKUdKjA== + dependencies: + ace-builds "^1.4.6" + diff-match-patch "^1.0.4" + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + prop-types "^15.7.2" + react-app-polyfill@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" @@ -14136,10 +14372,10 @@ react-app-polyfill@^1.0.6: regenerator-runtime "^0.13.3" whatwg-fetch "^3.0.0" -react-app-rewire-alias@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/react-app-rewire-alias/-/react-app-rewire-alias-0.1.4.tgz#320aa032810c3c25bc549fbb0e22e531d751e04e" - integrity sha512-M2+j/Re/qBrAyaJVK04JGZyNd4fYF1xrpWWM03lgCNNNRkPa7E2OVL0WUDHK2xyyOwBBwFYaPumoSTdzoo+PgA== +react-app-rewire-alias@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/react-app-rewire-alias/-/react-app-rewire-alias-0.1.6.tgz#27fd6b47769871d97665393e2e572caf184948ef" + integrity sha512-RWI9danv1hw2YJQ1LrAImmB4g1TpGe56RZUbfyhZGS2dwpz2s1tz9JlA2HszSdNUUqcjat+Qcw544/Wz/zE8kw== react-app-rewire-multiple-entry@^2.1.0: version "2.2.0" @@ -14309,10 +14545,10 @@ react-hotkeys@2.0.0: dependencies: prop-types "^15.6.1" -react-i18next@^11.3.5: - version "11.5.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.5.0.tgz#84a9bb535d44c0c1b336b94de164515c2cc2a714" - integrity sha512-V6rUT7MzYBdFCgUrhfr78FHRfnY3CFoR75ET9EP5Py5UPHKyaGiK1MvPx03TesLwsmIaVHlRFU/WLzqCedXevA== +react-i18next@^11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.0.tgz#f27c4c237a274e007a48ac1210db83e33719908b" + integrity sha512-8tvVkpuxQlubcszZON+jmoCgiA9gCZ74OAYli9KChPhETtq8pJsANBTe9KRLRLmX3ubumgvidURWr0VvKz1tww== dependencies: "@babel/runtime" "^7.3.1" html-parse-stringify2 "2.0.1" @@ -14371,17 +14607,6 @@ react-popper@^1.3.7: typed-styles "^0.0.7" warning "^4.0.2" -react-resize-detector@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-4.2.3.tgz#7df258668a30bdfd88e655bbdb27db7fd7b23127" - integrity sha512-4AeS6lxdz2KOgDZaOVt1duoDHrbYwSrUX32KeM9j6t9ISyRphoJbTRCMS1aPFxZHFqcCGLT1gMl3lEcSWZNW0A== - dependencies: - lodash "^4.17.15" - lodash-es "^4.17.15" - prop-types "^15.7.2" - raf-schd "^4.0.2" - resize-observer-polyfill "^1.5.1" - react-router-dom@^6.0.0-alpha.3: version "6.0.0-alpha.5" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.0.0-alpha.5.tgz#3c3e22226ee610eb91042a351741ce3f53596323" @@ -14487,6 +14712,17 @@ react-syntax-highlighter@^12.2.1: prismjs "^1.8.4" refractor "^2.4.1" +react-syntax-highlighter@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-13.0.0.tgz#7f29b0fae2aef1a4b16fdd309994ee49b94dcc42" + integrity sha512-wwZlztFmZNmE7ZsXYApUpoPhZ/QU6ngWh8fYnh8QkoKnvCxRQ6ZQiNuX+EzFN+NSVpDxpAJjW+faT25XVodX5A== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "^10.1.1" + lowlight "^1.14.0" + prismjs "^1.20.0" + refractor "^3.0.0" + react-textarea-autosize@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.2.0.tgz#fae38653f5ec172a855fd5fffb39e466d56aebdb" @@ -14496,37 +14732,30 @@ react-textarea-autosize@^8.1.1: use-composed-ref "^1.0.0" use-latest "^1.0.0" -react-top-loading-bar@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/react-top-loading-bar/-/react-top-loading-bar-1.2.0.tgz#fcbca3c2e462bee7b1c0d1850e8b584cd7bd5a26" - integrity sha512-5oNdy+DfD5JK06bcc/gsnnXHmml+d8eaBe3C8KQ3eLiH/BD8+FcwsgbAwqgOaRjuSeVQXdYN2JC2G1uVFtCLfA== - -react-universal-interface@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.0.tgz#b65cbf7d71a2f3f7dd9705d8e4f06748539bd465" - integrity sha512-PzApKKWfd7gvDi1sU/D07jUqnLvFxYqvJi+GEtLvBO5tXJjKr2Sa8ETVHkMA7Jcvdwt7ttbPq7Sed1JpFdNqBQ== - dependencies: - tslib "^1.9.3" +react-universal-interface@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" + integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== -react-use@^14.2.0: - version "14.3.0" - resolved "https://registry.yarnpkg.com/react-use/-/react-use-14.3.0.tgz#aa794db42108e15363be5c04db35a57acf8ecb6b" - integrity sha512-Jx7Zl0k8dHA0UKpTVwYUThC5/V+Dt6JzCGiMHPNIhsxJGkiKuB1AQ7J7pNq4zj3l37ABd/RF+jRGThw0czrJXA== +react-use@^15.3.3: + version "15.3.3" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-15.3.3.tgz#f16de7a16286c446388e8bd99680952fc3dc9a95" + integrity sha512-nYb94JbmDCaLZg3sOXmFW8HN+lXWxnl0caspXoYfZG1CON8JfLN9jMOyxRDUpm7dUq7WZ5mIept/ByqBQKJ0wQ== dependencies: "@types/js-cookie" "2.2.6" "@xobotyi/scrollbar-width" "1.9.5" copy-to-clipboard "^3.2.0" - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" fast-shallow-equal "^1.0.0" js-cookie "^2.2.1" nano-css "^5.2.1" - react-universal-interface "^0.6.0" + react-universal-interface "^0.6.2" resize-observer-polyfill "^1.5.1" screenfull "^5.0.0" set-harmonic-interval "^1.0.1" throttle-debounce "^2.1.0" ts-easing "^0.2.0" - tslib "^1.10.0" + tslib "^2.0.0" react@^16.13.1, react@^16.8.3: version "16.13.1" @@ -14673,6 +14902,15 @@ refractor@^2.4.1: parse-entities "^1.1.2" prismjs "~1.17.0" +refractor@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.0.0.tgz#7c8072eaf49dbc1b333e7acc64fb52a1c9b17c75" + integrity sha512-eCGK/oP4VuyW/ERqjMZRZHxl2QsztbkedkYy/SxqE/+Gh1gLaAF17tWIOcVJDiyGhar1NZy/0B9dFef7J0+FDw== + dependencies: + hastscript "^5.0.0" + parse-entities "^2.0.0" + prismjs "~1.20.0" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -14862,7 +15100,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.83.0, request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -15211,11 +15449,11 @@ screenfull@^5.0.0: integrity sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ== scroll-into-view-if-needed@^2.2.20: - version "2.2.24" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.24.tgz#12bca532990769bd509115a49edcfa755e92a0ea" - integrity sha512-vsC6SzyIZUyJG8o4nbUDCiIwsPdH6W/FVmjT2avR2hp/yzS53JjGmg/bKD20TkoNajbu5dAQN4xR7yes4qhwtQ== + version "2.2.25" + resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.25.tgz#117b7bc7c61bc7a2b7872a0984bc73a19bc6e961" + integrity sha512-C8RKJPq9lK7eubwGpLbUkw3lklcG3Ndjmea2PyauzrA0i4DPlzAmVMGxaZrBFqCrVLfvJmP80IyHnv4jxvg1OQ== dependencies: - compute-scroll-into-view "^1.0.13" + compute-scroll-into-view "^1.0.14" secure-keys@^1.0.0: version "1.0.0" @@ -15469,15 +15707,15 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -single-spa-react@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/single-spa-react/-/single-spa-react-2.14.0.tgz#4a55ea74a57db06adb41f0de3419a0c378745e1b" - integrity sha512-KQ2/y7/JBIquK0WUiwb1/Y7f4qTZITNotw+JwNPesj0WKeCi91u0LOZe2ps56QMJbyB4UrA5IzMBwbYWDr1pIw== +single-spa-react@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/single-spa-react/-/single-spa-react-3.0.1.tgz#7e67eaec47bc15b5716d6af6f83f5fbf1a1c05df" + integrity sha512-/toJWeG0UgJuN2CnvP5CewDR5IsH3GYXsFuOQgqkjY3BPUNDFYy4NiEAZE3OWpW+FjTbziGlrqy/u67WtE7tCw== -single-spa@^5.3.4: - version "5.5.1" - resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.5.1.tgz#2d9bc2155e3698dab1a1ec97e94e33de193db53b" - integrity sha512-cGIQN5u4GQVVOSSbYdPM+a48HmZmbT64S/aLZ5tBM2keWHfZkKF6+NyfMXvW3ZQ3xs4Ugs5st+ZxgmAO3e/yCw== +single-spa@^5.5.5: + version "5.5.5" + resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.5.5.tgz#77a947516874d50b1e1a43aa6c316b550605d4fb" + integrity sha512-10YHGwETkAT6k9dkOTClig2h/R6yA5qvLdvk6i7Z4/PK8A2iD/pVvYKIud0aZVA69OzO1lrQOHB4VgT4t8/kXw== sisteransi@^1.0.4: version "1.0.5" @@ -16102,6 +16340,14 @@ style-value-types@^3.1.6, style-value-types@^3.1.7: hey-listen "^1.0.8" tslib "^1.10.0" +style-value-types@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-3.1.9.tgz#faf7da660d3f284ed695cff61ea197d85b9122cc" + integrity sha512-050uqgB7WdvtgacoQKm+4EgKzJExVq0sieKBQQtJiU3Muh6MYcCp4T3M8+dfl6VOF2LR0NNwXBP1QYEed8DfIw== + dependencies: + hey-listen "^1.0.8" + tslib "^1.10.0" + styled-components@^2.0.0: version "2.4.1" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.4.1.tgz#663bd0485d4b6ab46f946210dc03d2398d1ade74" @@ -16116,17 +16362,6 @@ styled-components@^2.0.0: stylis "^3.4.0" supports-color "^3.2.3" -stylefire@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/stylefire/-/stylefire-7.0.3.tgz#9120ecbb084111788e0ddaa04074799750f20d1d" - integrity sha512-Q0l7NSeFz/OkX+o6/7Zg3VZxSAZeQzQpYomWmIpOehFM/rJNMSLVX5fgg6Q48ut2ETNKwdhm97mPNU643EBCoQ== - dependencies: - "@popmotion/popcorn" "^0.4.4" - framesync "^4.0.0" - hey-listen "^1.0.8" - style-value-types "^3.1.7" - tslib "^1.10.0" - stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -16557,7 +16792,7 @@ ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -16636,10 +16871,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.7.4: - version "3.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a" - integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ== +typescript@^3.9.7: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== ua-parser-js@^0.7.18: version "0.7.21" @@ -16986,6 +17221,13 @@ v8flags@^3.0.1: dependencies: homedir-polyfill "^1.0.1" +v8flags@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" From 14a31bceef1027d1b9e4ed5e5272c392202e931b Mon Sep 17 00:00:00 2001 From: Breezewish Date: Mon, 3 Aug 2020 10:04:55 +0800 Subject: [PATCH 2/4] Prototype impl --- Makefile | 2 +- cmd/tidb-dashboard/main.go | 3 +- go.mod | 1 + go.sum | 2 + pkg/apiserver/apiserver.go | 6 +- pkg/apiserver/foo/foo.go | 53 ------ pkg/apiserver/info/info.go | 10 +- pkg/apiserver/queryeditor/service.go | 174 ++++++++++++++++++ pkg/apiserver/statement/statement.go | 2 +- pkg/apiserver/user/auth.go | 6 +- pkg/apiserver/utils/error.go | 1 + pkg/config/config.go | 11 +- pkg/tidb/conn.go | 9 +- ui/dashboardApp/layout/main/Sider/index.tsx | 10 +- ui/lib/apps/QueryEditor/Editor.module.less | 10 + ui/lib/apps/QueryEditor/Editor.tsx | 35 ++++ .../apps/QueryEditor/ResultTable.module.less | 7 + ui/lib/apps/QueryEditor/ResultTable.tsx | 65 +++++++ .../QueryEditor/editorThemes/oneHalfDark.js | 118 ++++++++++++ .../QueryEditor/editorThemes/oneHalfLight.js | 102 ++++++++++ ui/lib/apps/QueryEditor/index.module.less | 40 ++++ ui/lib/apps/QueryEditor/index.tsx | 108 ++++++++++- ui/lib/components/Card/index.module.less | 16 ++ ui/lib/components/Card/index.tsx | 12 +- ui/lib/components/HighlightSQL/index.tsx | 2 +- ui/package.json | 1 + ui/yarn.lock | 15 +- 27 files changed, 738 insertions(+), 83 deletions(-) delete mode 100644 pkg/apiserver/foo/foo.go create mode 100644 pkg/apiserver/queryeditor/service.go create mode 100644 ui/lib/apps/QueryEditor/Editor.module.less create mode 100644 ui/lib/apps/QueryEditor/Editor.tsx create mode 100644 ui/lib/apps/QueryEditor/ResultTable.module.less create mode 100644 ui/lib/apps/QueryEditor/ResultTable.tsx create mode 100644 ui/lib/apps/QueryEditor/editorThemes/oneHalfDark.js create mode 100644 ui/lib/apps/QueryEditor/editorThemes/oneHalfLight.js create mode 100644 ui/lib/apps/QueryEditor/index.module.less diff --git a/Makefile b/Makefile index 31b813d50f..7ee85030a8 100644 --- a/Makefile +++ b/Makefile @@ -42,4 +42,4 @@ endif go build -o bin/tidb-dashboard -ldflags '$(LDFLAGS)' -tags "${BUILD_TAGS}" cmd/tidb-dashboard/main.go run: - bin/tidb-dashboard --debug + bin/tidb-dashboard --debug --experimental diff --git a/cmd/tidb-dashboard/main.go b/cmd/tidb-dashboard/main.go index a05c13fd18..3019423473 100644 --- a/cmd/tidb-dashboard/main.go +++ b/cmd/tidb-dashboard/main.go @@ -71,7 +71,8 @@ func NewCLIConfig() *DashboardCLIConfig { flag.StringVar(&cfg.CoreConfig.DataDir, "data-dir", "/tmp/dashboard-data", "path to the Dashboard Server data directory") flag.StringVar(&cfg.CoreConfig.PublicPathPrefix, "path-prefix", config.DefaultPublicPathPrefix, "public URL path prefix for reverse proxies") flag.StringVar(&cfg.CoreConfig.PDEndPoint, "pd", "http://127.0.0.1:2379", "PD endpoint address that Dashboard Server connects to") - flag.BoolVar(&cfg.CoreConfig.EnableTelemetry, "enable-telemetry", true, "enable client to report data for analysis") + flag.BoolVar(&cfg.CoreConfig.EnableTelemetry, "telemetry", true, "allow telemetry") + flag.BoolVar(&cfg.CoreConfig.EnableExperimental, "experimental", false, "allow experimental features") showVersion := flag.BoolP("version", "v", false, "print version information and exit") diff --git a/go.mod b/go.mod index 1669a4e1a7..eae8c8ade5 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/pingcap-incubator/tidb-dashboard go 1.13 require ( + github.com/VividCortex/mysqlerr v0.0.0-20200629151747-c28746d985dd github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/appleboy/gin-jwt/v2 v2.6.3 github.com/cenkalti/backoff/v4 v4.0.2 diff --git a/go.sum b/go.sum index c33fe93f29..2515045c7d 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,8 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VividCortex/mysqlerr v0.0.0-20200629151747-c28746d985dd h1:59Whn6shj5MTVjTf2OX6+7iMcmY6h5CK0kTWwRaplL4= +github.com/VividCortex/mysqlerr v0.0.0-20200629151747-c28746d985dd/go.mod h1:f3HiCrHjHBdcm6E83vGaXh1KomZMA2P6aeo3hKx/wg0= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index eb6b9a9035..b24f8e0518 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -27,11 +27,11 @@ import ( "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/clusterinfo" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/diagnose" - "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/foo" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/info" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/logsearch" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/metrics" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/profiling" + "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/queryeditor" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/slowquery" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/statement" "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/user" @@ -110,7 +110,6 @@ func (s *Service) Start(ctx context.Context) error { tidb.NewForwarder, pkghttp.NewHTTPClientWithConf, user.NewAuthService, - foo.NewService, info.NewService, clusterinfo.NewService, profiling.NewService, @@ -120,11 +119,11 @@ func (s *Service) Start(ctx context.Context) error { diagnose.NewService, keyvisual.NewService, metrics.NewService, + queryeditor.NewService, ), fx.Populate(&s.apiHandlerEngine), fx.Invoke( user.Register, - foo.Register, info.Register, clusterinfo.Register, profiling.Register, @@ -134,6 +133,7 @@ func (s *Service) Start(ctx context.Context) error { diagnose.Register, keyvisual.Register, metrics.Register, + queryeditor.Register, // Must be at the end s.status.Register, ), diff --git a/pkg/apiserver/foo/foo.go b/pkg/apiserver/foo/foo.go deleted file mode 100644 index a155d6ca99..0000000000 --- a/pkg/apiserver/foo/foo.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package foo - -import ( - "net/http" - - "github.com/gin-gonic/gin" - - "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/user" - - // Import for swag go doc - _ "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/utils" - "github.com/pingcap-incubator/tidb-dashboard/pkg/config" -) - -type Service struct { -} - -func NewService(config *config.Config) *Service { - return &Service{} -} - -func Register(r *gin.RouterGroup, auth *user.AuthService, s *Service) { - endpoint := r.Group("/foo") - endpoint.Use(auth.MWAuthRequired()) - endpoint.GET("/bar/:name", s.greetHandler) -} - -// @Summary Greet -// @Description Hello world! -// @Accept json -// @Produce json -// @Param name path string true "Name" -// @Success 200 {string} string -// @Router /foo/bar/{name} [get] -// @Security JwtAuth -// @Failure 401 {object} utils.APIError "Unauthorized failure" -func (s *Service) greetHandler(c *gin.Context) { - name := c.Param("name") - c.String(http.StatusOK, "Hello %s", name) -} diff --git a/pkg/apiserver/info/info.go b/pkg/apiserver/info/info.go index 26e402e09b..4f16e38970 100644 --- a/pkg/apiserver/info/info.go +++ b/pkg/apiserver/info/info.go @@ -47,8 +47,9 @@ func Register(r *gin.RouterGroup, auth *user.AuthService, s *Service) { } type InfoResponse struct { //nolint:golint - Version *version.Info `json:"version"` - EnableTelemetry bool `json:"enable_telemetry"` + Version *version.Info `json:"version"` + EnableTelemetry bool `json:"enable_telemetry"` + EnableExperimental bool `json:"enable_experimental"` } // @Summary Dashboard info @@ -61,8 +62,9 @@ type InfoResponse struct { //nolint:golint // @Failure 401 {object} utils.APIError "Unauthorized failure" func (s *Service) infoHandler(c *gin.Context) { resp := InfoResponse{ - Version: version.GetInfo(), - EnableTelemetry: s.config.EnableTelemetry, + Version: version.GetInfo(), + EnableTelemetry: s.config.EnableTelemetry, + EnableExperimental: s.config.EnableExperimental, } c.JSON(http.StatusOK, resp) } diff --git a/pkg/apiserver/queryeditor/service.go b/pkg/apiserver/queryeditor/service.go new file mode 100644 index 0000000000..aad7425b67 --- /dev/null +++ b/pkg/apiserver/queryeditor/service.go @@ -0,0 +1,174 @@ +// Copyright 2020 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package queryeditor + +import ( + "context" + "database/sql" + "net/http" + "time" + + "github.com/gin-gonic/gin" + "github.com/pingcap/log" + "go.uber.org/fx" + "go.uber.org/zap" + + "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/user" + "github.com/pingcap-incubator/tidb-dashboard/pkg/apiserver/utils" + "github.com/pingcap-incubator/tidb-dashboard/pkg/config" + "github.com/pingcap-incubator/tidb-dashboard/pkg/tidb" +) + +type Service struct { + lifecycleCtx context.Context + + config *config.Config + tidbForwarder *tidb.Forwarder +} + +func NewService(lc fx.Lifecycle, config *config.Config, tidbForwarder *tidb.Forwarder) *Service { + service := &Service{config: config, tidbForwarder: tidbForwarder} + lc.Append(fx.Hook{ + OnStart: func(ctx context.Context) error { + service.lifecycleCtx = ctx + return nil + }, + }) + + return service +} + +func Register(r *gin.RouterGroup, auth *user.AuthService, s *Service) { + endpoint := r.Group("/query_editor") + endpoint.Use(auth.MWAuthRequired()) + endpoint.Use(utils.MWConnectTiDB(s.tidbForwarder)) + endpoint.POST("/run", s.runHandler) +} + +type RunRequest struct { + Statements string `json:"statements" example:"show databases;"` + MaxRows int `json:"max_rows" example:"1000"` +} + +type RunResponse struct { + ErrorMsg string `json:"error_msg"` + ColumnNames []string `json:"column_names"` + Rows [][]interface{} `json:"rows"` + ExecutionMs int64 `json:"execution_ms"` + ActualRows int `json:"actual_rows"` +} + +func executeStatements(context context.Context, db *sql.DB, statements string) ([]string, [][]interface{}, error) { + rows, err := db.QueryContext(context, statements) + if err != nil { + return nil, nil, err + } + + defer rows.Close() + + colNames, err := rows.Columns() + if err != nil { + return nil, nil, err + } + + retRows := make([][]interface{}, 0) + + values := make([]sql.RawBytes, len(colNames)) + scanArgs := make([]interface{}, len(values)) + for i := range values { + scanArgs[i] = &values[i] + } + + for rows.Next() { + err = rows.Scan(scanArgs...) + if err != nil { + return nil, nil, err + } + + retRow := make([]interface{}, 0, len(values)) + var value interface{} + for _, col := range values { + if col == nil { + value = nil + } else { + value = string(col) + } + retRow = append(retRow, value) + } + retRows = append(retRows, retRow) + } + + if err = rows.Err(); err != nil { + return nil, nil, err + } + + return colNames, retRows, nil +} + +// @ID queryEditorRun +// @Summary Run +// @Description Run statements +// @Produce json +// @Param request body RunRequest true "Request body" +// @Success 200 {object} RunResponse +// @Router /query_editor/run [post] +// @Security JwtAuth +// @Failure 400 {object} utils.APIError "Bad request" +// @Failure 401 {object} utils.APIError "Unauthorized failure" +// @Failure 403 {object} utils.APIError "Experimental feature not enabled" +func (s *Service) runHandler(c *gin.Context) { + if !s.config.EnableExperimental { + c.Status(http.StatusForbidden) + _ = c.Error(utils.ErrExpNotEnabled.NewWithNoMessage()) + return + } + + var req RunRequest + if err := c.ShouldBindJSON(&req); err != nil { + c.Status(http.StatusBadRequest) + _ = c.Error(utils.ErrInvalidRequest.WrapWithNoMessage(err)) + return + } + + ctx, cancel := context.WithTimeout(s.lifecycleCtx, time.Minute*5) + defer cancel() + + startTime := time.Now() + colNames, rows, err := executeStatements(ctx, utils.GetTiDBConnection(c).DB(), req.Statements) + elapsedTime := time.Since(startTime) + + if err != nil { + log.Warn("Failed to execute user input statements", zap.String("statements", req.Statements), zap.Error(err)) + c.JSON(http.StatusOK, RunResponse{ + ErrorMsg: err.Error(), + ColumnNames: nil, + Rows: nil, + ExecutionMs: elapsedTime.Milliseconds(), + ActualRows: 0, + }) + return + } + + truncatedRows := rows + if len(truncatedRows) > req.MaxRows { + truncatedRows = truncatedRows[:req.MaxRows] + } + + c.JSON(http.StatusOK, RunResponse{ + ColumnNames: colNames, + Rows: truncatedRows, + ExecutionMs: elapsedTime.Milliseconds(), + ActualRows: len(rows), + }) +} diff --git a/pkg/apiserver/statement/statement.go b/pkg/apiserver/statement/statement.go index 4a96a2dac6..e33a988075 100644 --- a/pkg/apiserver/statement/statement.go +++ b/pkg/apiserver/statement/statement.go @@ -63,7 +63,7 @@ func (s *Service) configHandler(c *gin.Context) { c.JSON(http.StatusOK, cfg) } -// @Summary Statement configurationt +// @Summary Statement configuration // @Description Modify configuration of statements // @Param request body statement.Config true "Request body" // @Success 204 {object} string diff --git a/pkg/apiserver/user/auth.go b/pkg/apiserver/user/auth.go index 573604a638..a826e2e373 100644 --- a/pkg/apiserver/user/auth.go +++ b/pkg/apiserver/user/auth.go @@ -44,9 +44,9 @@ type AuthService struct { } type authenticateForm struct { - IsTiDBAuth bool `json:"is_tidb_auth" binding:"required"` - Username string `json:"username" binding:"required"` - Password string `json:"password"` + IsTiDBAuth bool `json:"is_tidb_auth" binding:"required" example:"true"` + Username string `json:"username" binding:"required" example:"root"` + Password string `json:"password" example:""` } type TokenResponse struct { diff --git a/pkg/apiserver/utils/error.go b/pkg/apiserver/utils/error.go index d927a8fe86..43a22d09c0 100644 --- a/pkg/apiserver/utils/error.go +++ b/pkg/apiserver/utils/error.go @@ -27,6 +27,7 @@ var ( ErrUnauthorized = ErrNS.NewType("unauthorized") ErrInsufficientPrivilege = ErrNS.NewType("insufficient_privilege") ErrInvalidRequest = ErrNS.NewType("invalid_request") + ErrExpNotEnabled = ErrNS.NewType("experimental_feature_not_enabled") ) type APIError struct { diff --git a/pkg/config/config.go b/pkg/config/config.go index 41482ff968..f6097692ca 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -33,14 +33,11 @@ type Config struct { PDEndPoint string PublicPathPrefix string - // TLS config for mTLS authentication between TiDB components. - ClusterTLSConfig *tls.Config + ClusterTLSConfig *tls.Config // TLS config for mTLS authentication between TiDB components. + TiDBTLSConfig *tls.Config // TLS config for mTLS authentication between TiDB and MySQL client. - // TLS config for mTLS authentication between TiDB and MySQL client. - TiDBTLSConfig *tls.Config - - // Enable client to report data for analysis - EnableTelemetry bool + EnableTelemetry bool + EnableExperimental bool } func (c *Config) NormalizePDEndPoint() error { diff --git a/pkg/tidb/conn.go b/pkg/tidb/conn.go index d357fe49c2..d2ca94685b 100644 --- a/pkg/tidb/conn.go +++ b/pkg/tidb/conn.go @@ -23,6 +23,7 @@ import ( "strings" "time" + "github.com/VividCortex/mysqlerr" "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" "github.com/pingcap/log" @@ -56,6 +57,8 @@ func (f *Forwarder) OpenTiDB(user string, pass string) (*gorm.DB, error) { dsnConfig.Timeout = time.Second dsnConfig.ParseTime = true dsnConfig.Loc = time.Local + dsnConfig.MultiStatements = true + if f.config.TiDBTLSConfig != nil { dsnConfig.TLSConfig = "tidb" } @@ -65,15 +68,15 @@ func (f *Forwarder) OpenTiDB(user string, pass string) (*gorm.DB, error) { if err != nil { if _, ok := err.(*net.OpError); ok || err == driver.ErrBadConn { if strings.HasPrefix(addr, "0.0.0.0:") { - log.Warn("The IP reported by TiDB is 0.0.0.0, which may not have the -advertise-address option") + log.Warn("TiDB reported its address to be 0.0.0.0. Please specify `-advertise-address` command line parameter when running TiDB") } return nil, ErrTiDBConnFailed.Wrap(err, "failed to connect to TiDB") } else if mysqlErr, ok := err.(*mysql.MySQLError); ok { - if mysqlErr.Number == 1045 { + if mysqlErr.Number == mysqlerr.ER_ACCESS_DENIED_ERROR { return nil, ErrTiDBAuthFailed.New("bad TiDB username or password") } } - log.Warn("unknown error occurred while OpenTiDB", zap.Error(err)) + log.Warn("Unknown error occurred while opening TiDB connection", zap.Error(err)) return nil, err } diff --git a/ui/dashboardApp/layout/main/Sider/index.tsx b/ui/dashboardApp/layout/main/Sider/index.tsx index 4aa3d7cb57..50a8bcdad4 100644 --- a/ui/dashboardApp/layout/main/Sider/index.tsx +++ b/ui/dashboardApp/layout/main/Sider/index.tsx @@ -9,6 +9,7 @@ import client, { InfoWhoAmIResponse } from '@lib/client' import Banner from './Banner' import styles from './index.module.less' +import { useClientRequest } from '@lib/utils/useClientRequest' function useAppMenuItem(registry, appId, title?: string) { const { t } = useTranslation() @@ -64,6 +65,10 @@ function Sider({ const activeAppId = useActiveAppId(registry) const currentLogin = useCurrentLogin() + const { data } = useClientRequest((cancelToken) => + client.getInstance().getInfo({ cancelToken }) + ) + const debugSubMenuItems = [useAppMenuItem(registry, 'instance_profiling')] const debugSubMenu = ( ) { + const [state, containerRef] = useSize() + return ( +
+ +
+ ) +} + +export default React.memo(React.forwardRef(Editor)) diff --git a/ui/lib/apps/QueryEditor/ResultTable.module.less b/ui/lib/apps/QueryEditor/ResultTable.module.less new file mode 100644 index 0000000000..439608c0a7 --- /dev/null +++ b/ui/lib/apps/QueryEditor/ResultTable.module.less @@ -0,0 +1,7 @@ +.resultTable { + position: absolute; + top: @padding-page; // FIXME: This is hacky. Can we provide a component? + bottom: 0; + left: 0; + width: 100%; +} diff --git a/ui/lib/apps/QueryEditor/ResultTable.tsx b/ui/lib/apps/QueryEditor/ResultTable.tsx new file mode 100644 index 0000000000..58e392d397 --- /dev/null +++ b/ui/lib/apps/QueryEditor/ResultTable.tsx @@ -0,0 +1,65 @@ +import React, { useMemo } from 'react' +import { QueryeditorRunResponse } from '@lib/client' +import { CardTable, Card } from '@lib/components' +import { IColumn } from 'office-ui-fabric-react/lib/DetailsList' +import { ScrollablePane } from 'office-ui-fabric-react/lib/ScrollablePane' + +import styles from './ResultTable.module.less' + +interface IResultTableProps { + results?: QueryeditorRunResponse +} + +function ResultTable({ results }: IResultTableProps) { + const columns: IColumn[] = useMemo(() => { + if (!results) { + return [] + } + if (results.error_msg) { + return [ + { + name: 'Error', + key: 'error', + minWidth: 100, + // maxWidth: 500, + fieldName: 'error', + isMultiline: true, + }, + ] + } else { + return (results.column_names ?? []).map((cn, idx) => ({ + name: cn, + key: cn, + minWidth: 200, + maxWidth: 500, + fieldName: String(idx), + })) + } + }, [results, results?.error_msg, results?.column_names]) + + const items = useMemo(() => { + if (!results) { + return [] + } + if (results.error_msg) { + return [{ error: results.error_msg }] + } else { + return results.rows ?? [] + } + }, [results, results?.error_msg, results?.rows]) + + return ( +
+ + + +
+ ) +} + +export default ResultTable diff --git a/ui/lib/apps/QueryEditor/editorThemes/oneHalfDark.js b/ui/lib/apps/QueryEditor/editorThemes/oneHalfDark.js new file mode 100644 index 0000000000..fd9d1022a5 --- /dev/null +++ b/ui/lib/apps/QueryEditor/editorThemes/oneHalfDark.js @@ -0,0 +1,118 @@ +/* eslint-disable no-multi-str */ + +const ace = require('ace-builds/src-noconflict/ace') + +ace.define( + 'ace/theme/oneHalfDark', + ['require', 'exports', 'module', 'ace/lib/dom'], + function (require, exports, module) { + exports.isDark = true + exports.cssClass = 'ace-one-half-dark' + exports.cssText = + '.ace-one-half-dark .ace_gutter {\ +background: #282c34;\ +color: rgb(130,134,140)\ +}\ +.ace-one-half-dark .ace_print-margin {\ +width: 1px;\ +background: #e8e8e8\ +}\ +.ace-one-half-dark {\ +background-color: #282c34;\ +color: #dcdfe4\ +}\ +.ace-one-half-dark .ace_cursor {\ +color: #a3b3cc\ +}\ +.ace-one-half-dark .ace_marker-layer .ace_selection {\ +background: #474e5d\ +}\ +.ace-one-half-dark.ace_multiselect .ace_selection.ace_start {\ +box-shadow: 0 0 3px 0px #282c34;\ +border-radius: 2px\ +}\ +.ace-one-half-dark .ace_marker-layer .ace_step {\ +background: rgb(198, 219, 174)\ +}\ +.ace-one-half-dark .ace_marker-layer .ace_bracket {\ +margin: -1px 0 0 -1px;\ +border: 1px solid #5c6370\ +}\ +.ace-one-half-dark .ace_marker-layer .ace_active-line {\ +background: #313640\ +}\ +.ace-one-half-dark .ace_gutter-active-line {\ +background-color: #313640\ +}\ +.ace-one-half-dark .ace_marker-layer .ace_selected-word {\ +border: 1px solid #474e5d\ +}\ +.ace-one-half-dark .ace_fold {\ +background-color: #61afef;\ +border-color: #dcdfe4\ +}\ +.ace-one-half-dark .ace_keyword {\ +color: #c678dd\ +}\ +.ace-one-half-dark .ace_constant {\ +color: #e5c07b\ +}\ +.ace-one-half-dark .ace_constant.ace_numeric {\ +color: #e5c07b\ +}\ +.ace-one-half-dark .ace_constant.ace_character.ace_escape {\ +color: #56b6c2\ +}\ +.ace-one-half-dark .ace_support.ace_function {\ +color: #61afef\ +}\ +.ace-one-half-dark .ace_support.ace_class {\ +color: #e5c07b\ +}\ +.ace-one-half-dark .ace_storage {\ +color: #c678dd\ +}\ +.ace-one-half-dark .ace_invalid.ace_illegal {\ +color: #dcdfe4;\ +background-color: #e06c75\ +}\ +.ace-one-half-dark .ace_invalid.ace_deprecated {\ +color: #dcdfe4;\ +background-color: #e5c07b\ +}\ +.ace-one-half-dark .ace_string {\ +color: #98c379\ +}\ +.ace-one-half-dark .ace_string.ace_regexp {\ +color: #98c379\ +}\ +.ace-one-half-dark .ace_comment {\ +color: #5c6370\ +}\ +.ace-one-half-dark .ace_variable {\ +color: #e06c75\ +}\ +.ace-one-half-dark .ace_meta.ace_selector {\ +color: #c678dd\ +}\ +.ace-one-half-dark .ace_entity.ace_other.ace_attribute-name {\ +color: #e5c07b\ +}\ +.ace-one-half-dark .ace_entity.ace_name.ace_function {\ +color: #61afef\ +}\ +.ace-one-half-dark .ace_entity.ace_name.ace_tag {\ +color: #e06c75\ +}' + + var dom = require('../lib/dom') + dom.importCssString(exports.cssText, exports.cssClass) + } +) +;(function () { + ace.require(['ace/theme/oneHalfDark'], function (m) { + if (typeof module == 'object' && typeof exports == 'object' && module) { + module.exports = m + } + }) +})() diff --git a/ui/lib/apps/QueryEditor/editorThemes/oneHalfLight.js b/ui/lib/apps/QueryEditor/editorThemes/oneHalfLight.js new file mode 100644 index 0000000000..3e831e2c0c --- /dev/null +++ b/ui/lib/apps/QueryEditor/editorThemes/oneHalfLight.js @@ -0,0 +1,102 @@ +/* eslint-disable no-multi-str */ + +const ace = require('ace-builds/src-noconflict/ace') + +ace.define( + 'ace/theme/oneHalfLight', + ['require', 'exports', 'module', 'ace/lib/dom'], + function (require, exports, module) { + exports.isDark = false + exports.cssClass = 'ace-one-half-light' + exports.cssText = + '.ace-one-half-light .ace_gutter {\ +background: #fafafa;\ +color: rgb(153,154,158)\ +}\ +.ace-one-half-light .ace_print-margin {\ +width: 1px;\ +background: #e8e8e8\ +}\ +.ace-one-half-light {\ +background-color: #fafafa;\ +color: #383a42\ +}\ +.ace-one-half-light .ace_cursor {\ +color: #383a42\ +}\ +.ace-one-half-light .ace_marker-layer .ace_selection {\ +background: #bfceff\ +}\ +.ace-one-half-light.ace_multiselect .ace_selection.ace_start {\ +box-shadow: 0 0 3px 0px #fafafa;\ +border-radius: 2px\ +}\ +.ace-one-half-light .ace_marker-layer .ace_step {\ +background: rgb(198, 219, 174)\ +}\ +.ace-one-half-light .ace_marker-layer .ace_bracket {\ +margin: -1px 0 0 -1px;\ +border: 1px solid #a0a1a7\ +}\ +.ace-one-half-light .ace_marker-layer .ace_active-line {\ +background: #f0f0f0\ +}\ +.ace-one-half-light .ace_gutter-active-line {\ +background-color: #f0f0f0\ +}\ +.ace-one-half-light .ace_marker-layer .ace_selected-word {\ +border: 1px solid #bfceff\ +}\ +.ace-one-half-light .ace_fold {\ +background-color: #0184bc;\ +border-color: #383a42\ +}\ +.ace-one-half-light .ace_keyword,\ +.ace-one-half-light .ace_meta.ace_selector,\ +.ace-one-half-light .ace_storage {\ +color: #a626a4\ +}\ +.ace-one-half-light .ace_constant,\ +.ace-one-half-light .ace_constant.ace_numeric,\ +.ace-one-half-light .ace_entity.ace_other.ace_attribute-name,\ +.ace-one-half-light .ace_support.ace_class {\ +color: #c18401\ +}\ +.ace-one-half-light .ace_constant.ace_character.ace_escape {\ +color: #0997b3\ +}\ +.ace-one-half-light .ace_entity.ace_name.ace_function,\ +.ace-one-half-light .ace_support.ace_function {\ +color: #0184bc\ +}\ +.ace-one-half-light .ace_invalid.ace_illegal {\ +color: #fafafa;\ +background-color: #e06c75\ +}\ +.ace-one-half-light .ace_invalid.ace_deprecated {\ +color: #fafafa;\ +background-color: #e5c07b\ +}\ +.ace-one-half-light .ace_string,\ +.ace-one-half-light .ace_string.ace_regexp {\ +color: #50a14f\ +}\ +.ace-one-half-light .ace_comment {\ +color: #a0a1a7\ +}\ +.ace-one-half-light .ace_entity.ace_name.ace_tag,\ +.ace-one-half-light .ace_variable {\ +color: #e45649\ +}' + + var dom = require('../lib/dom') + dom.importCssString(exports.cssText, exports.cssClass) + } +) +;(function () { + ace.require(['ace/theme/oneHalfLight'], function (m) { + if (typeof module == 'object' && typeof exports == 'object' && module) { + module.exports = m + } + }) +})() diff --git a/ui/lib/apps/QueryEditor/index.module.less b/ui/lib/apps/QueryEditor/index.module.less new file mode 100644 index 0000000000..c7049c7dda --- /dev/null +++ b/ui/lib/apps/QueryEditor/index.module.less @@ -0,0 +1,40 @@ +@import '~antd/es/style/themes/default.less'; + +.container { + height: 100vh; + display: flex; + flex-direction: column; + + &:before, + &:after { + // Handle margin collapse + content: ' '; + display: table; + } +} + +.contentContainer { + flex: 1; + min-height: 0; + + > :global(.gutter.gutter-vertical) { + background-color: @gray-3; + cursor: row-resize; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII='); + background-repeat: no-repeat; + background-position: center center; + margin: 0 @padding-page; + } + + &.isCollapsed > :global(.gutter) { + display: none; + } +} + +.successText { + color: @success-color; +} + +.resultTableContainer { + position: relative; +} diff --git a/ui/lib/apps/QueryEditor/index.tsx b/ui/lib/apps/QueryEditor/index.tsx index ec8a9658bc..74f313ba7f 100644 --- a/ui/lib/apps/QueryEditor/index.tsx +++ b/ui/lib/apps/QueryEditor/index.tsx @@ -1,8 +1,110 @@ -import React, { useCallback } from 'react' -import { Root } from '@lib/components' +import React, { useState, useCallback, useRef } from 'react' +import cx from 'classnames' +import { Root, Card } from '@lib/components' +import Split from 'react-split' +import { Button, Modal, Space, Typography } from 'antd' +import { + CaretRightOutlined, + LoadingOutlined, + WarningOutlined, + CheckOutlined, +} from '@ant-design/icons' + +import Editor from './Editor' +import ResultTable from './ResultTable' + +import styles from './index.module.less' +import client, { QueryeditorRunResponse } from '@lib/client' +import ReactAce from 'react-ace/lib/ace' +import { getValueFormat } from '@baurine/grafana-value-formats' + +const MAX_DISPLAY_ROWS = 1000 function App() { - return abc + const [results, setResults] = useState() + const [isRunning, setRunning] = useState(false) + const editor = useRef(null) + + const isResultsEmpty = + !results || + (!results.error_msg && (!results.column_names?.length || !results.rows)) + + const handleRun = useCallback(async () => { + setRunning(true) + setResults(undefined) + try { + const resp = await client.getInstance().queryEditorRun({ + max_rows: MAX_DISPLAY_ROWS, + statements: editor.current?.editor.getValue(), + }) + setResults(resp.data) + } catch (ex) { + Modal.error({ + content: ex.message, + }) + } + setRunning(false) + editor.current?.editor.focus() + }, []) + + return ( + +
+ + + + { + + {isRunning && } + {results && results.error_msg && ( + + Error ( + {getValueFormat('ms')(results.execution_ms || 0, 1)}) + + )} + {results && !results.error_msg && ( + + Success ( + {getValueFormat('ms')(results.execution_ms || 0, 1)}, + {(results.actual_rows || 0) > (results.rows?.length || 0) + ? `Displaying first ${results.rows?.length || 0} of ${ + results.actual_rows || 0 + } rows` + : `${results.rows?.length || 0} rows`} + ) + + )} + + } + + + + + + +
+ {!isResultsEmpty && } +
+
+
+
+ ) } export default App diff --git a/ui/lib/components/Card/index.module.less b/ui/lib/components/Card/index.module.less index 2ec351ff3f..e0b03268fc 100644 --- a/ui/lib/components/Card/index.module.less +++ b/ui/lib/components/Card/index.module.less @@ -20,6 +20,10 @@ margin-top: 0; } + &.noMarginBottom { + margin-bottom: 0; + } + &.noMarginLeft { margin-left: 0; } @@ -55,3 +59,15 @@ .hasTitle > .cardContent { margin-top: @padding-lg; } + +.cardContainer.flexGrow { + display: flex; + flex-grow: 1; + flex-direction: column; + + .cardInner, + .cardContent { + display: flex; + flex-grow: 1; + } +} diff --git a/ui/lib/components/Card/index.tsx b/ui/lib/components/Card/index.tsx index 61fe8553cc..13c0500026 100644 --- a/ui/lib/components/Card/index.tsx +++ b/ui/lib/components/Card/index.tsx @@ -9,8 +9,10 @@ export interface ICardProps extra?: ReactNode noMargin?: boolean noMarginTop?: boolean + noMarginBottom?: boolean noMarginLeft?: boolean noMarginRight?: boolean + flexGrow?: boolean } export default function Card({ @@ -20,17 +22,25 @@ export default function Card({ className, noMargin, noMarginTop, + noMarginBottom, noMarginLeft, noMarginRight, + flexGrow, children, ...rest }: ICardProps) { return ( -
+
Date: Mon, 3 Aug 2020 10:07:35 +0800 Subject: [PATCH 3/4] Basic ZH translation Signed-off-by: Breezewish --- ui/lib/apps/QueryEditor/translations/zh.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/lib/apps/QueryEditor/translations/zh.yaml b/ui/lib/apps/QueryEditor/translations/zh.yaml index f812e9e708..bfe81914c0 100644 --- a/ui/lib/apps/QueryEditor/translations/zh.yaml +++ b/ui/lib/apps/QueryEditor/translations/zh.yaml @@ -1,2 +1,2 @@ query_editor: - nav_title: Query Editor + nav_title: 查询编辑器 From 8315b854acfc1626d7d4f30daf30c27ec4d34e37 Mon Sep 17 00:00:00 2001 From: Breezewish Date: Mon, 3 Aug 2020 10:34:17 +0800 Subject: [PATCH 4/4] Fix warnings Signed-off-by: Breezewish --- ui/lib/apps/QueryEditor/ResultTable.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ui/lib/apps/QueryEditor/ResultTable.tsx b/ui/lib/apps/QueryEditor/ResultTable.tsx index 58e392d397..f668ab4b84 100644 --- a/ui/lib/apps/QueryEditor/ResultTable.tsx +++ b/ui/lib/apps/QueryEditor/ResultTable.tsx @@ -1,6 +1,6 @@ import React, { useMemo } from 'react' import { QueryeditorRunResponse } from '@lib/client' -import { CardTable, Card } from '@lib/components' +import { CardTable } from '@lib/components' import { IColumn } from 'office-ui-fabric-react/lib/DetailsList' import { ScrollablePane } from 'office-ui-fabric-react/lib/ScrollablePane' @@ -21,7 +21,6 @@ function ResultTable({ results }: IResultTableProps) { name: 'Error', key: 'error', minWidth: 100, - // maxWidth: 500, fieldName: 'error', isMultiline: true, }, @@ -35,7 +34,7 @@ function ResultTable({ results }: IResultTableProps) { fieldName: String(idx), })) } - }, [results, results?.error_msg, results?.column_names]) + }, [results]) const items = useMemo(() => { if (!results) { @@ -46,7 +45,7 @@ function ResultTable({ results }: IResultTableProps) { } else { return results.rows ?? [] } - }, [results, results?.error_msg, results?.rows]) + }, [results]) return (