Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
VisualDL
提交
33dbf151
V
VisualDL
项目概览
PaddlePaddle
/
VisualDL
大约 2 年 前同步成功
通知
89
Star
4655
Fork
642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
5
Wiki
分析
仓库
DevOps
项目成员
Pages
V
VisualDL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
5
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
33dbf151
编写于
3月 06, 2020
作者:
P
Peter Pan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
plenty of improvment and bug fix
上级
265bc79a
变更
45
显示空白变更内容
内联
并排
Showing
45 changed file
with
753 addition
and
213 deletion
+753
-213
frontend/README.md
frontend/README.md
+1
-1
frontend/README_cn.md
frontend/README_cn.md
+1
-1
frontend/babel.config.js
frontend/babel.config.js
+2
-1
frontend/components/ChartPage.tsx
frontend/components/ChartPage.tsx
+23
-7
frontend/components/Checkbox.tsx
frontend/components/Checkbox.tsx
+3
-1
frontend/components/Content.tsx
frontend/components/Content.tsx
+25
-2
frontend/components/Image.tsx
frontend/components/Image.tsx
+13
-26
frontend/components/LineChart.tsx
frontend/components/LineChart.tsx
+10
-17
frontend/components/Preloader.tsx
frontend/components/Preloader.tsx
+14
-0
frontend/components/SampleChart.tsx
frontend/components/SampleChart.tsx
+4
-6
frontend/components/ScalarChart.tsx
frontend/components/ScalarChart.tsx
+3
-3
frontend/components/ScatterChart.tsx
frontend/components/ScatterChart.tsx
+4
-9
frontend/components/Select.tsx
frontend/components/Select.tsx
+5
-0
frontend/components/StepSlider.tsx
frontend/components/StepSlider.tsx
+1
-1
frontend/hooks/useDebounce.ts
frontend/hooks/useDebounce.ts
+16
-0
frontend/hooks/useECharts.ts
frontend/hooks/useECharts.ts
+39
-22
frontend/hooks/useSearchValue.ts
frontend/hooks/useSearchValue.ts
+19
-0
frontend/hooks/useTagFilter.ts
frontend/hooks/useTagFilter.ts
+4
-2
frontend/mock/embeddings/embedding.ts
frontend/mock/embeddings/embedding.ts
+4
-3
frontend/next.config.js
frontend/next.config.js
+1
-0
frontend/package.json
frontend/package.json
+6
-2
frontend/pages/graphs.tsx
frontend/pages/graphs.tsx
+5
-3
frontend/pages/high-dimensional.tsx
frontend/pages/high-dimensional.tsx
+11
-2
frontend/pages/samples.tsx
frontend/pages/samples.tsx
+8
-3
frontend/pages/scalars.tsx
frontend/pages/scalars.tsx
+11
-3
frontend/public/locales/en/moment.json
frontend/public/locales/en/moment.json
+10
-0
frontend/public/locales/en/scalars.json
frontend/public/locales/en/scalars.json
+2
-0
frontend/public/locales/zh/moment.json
frontend/public/locales/zh/moment.json
+10
-0
frontend/public/locales/zh/scalars.json
frontend/public/locales/zh/scalars.json
+2
-0
frontend/server/index.ts
frontend/server/index.ts
+10
-4
frontend/types/i18n.d.ts
frontend/types/i18n.d.ts
+1
-1
frontend/utils/fetch.ts
frontend/utils/fetch.ts
+10
-4
frontend/utils/i18n.ts
frontend/utils/i18n.ts
+5
-0
frontend/utils/i18next/components/Link.tsx
frontend/utils/i18next/components/Link.tsx
+1
-0
frontend/utils/i18next/config/create-config.ts
frontend/utils/i18next/config/create-config.ts
+26
-24
frontend/utils/i18next/index.ts
frontend/utils/i18next/index.ts
+0
-3
frontend/utils/i18next/middlewares/next-i18next-middleware.ts
...tend/utils/i18next/middlewares/next-i18next-middleware.ts
+19
-19
frontend/utils/i18next/router/wrap-router.ts
frontend/utils/i18next/router/wrap-router.ts
+3
-0
frontend/utils/i18next/types.ts
frontend/utils/i18next/types.ts
+2
-1
frontend/utils/i18next/utils/lng-path-corrector.ts
frontend/utils/i18next/utils/lng-path-corrector.ts
+5
-3
frontend/utils/i18next/utils/lngs-to-load.ts
frontend/utils/i18next/utils/lngs-to-load.ts
+1
-0
frontend/utils/mock.ts
frontend/utils/mock.ts
+4
-2
frontend/utils/scalars.ts
frontend/utils/scalars.ts
+20
-6
frontend/utils/style.ts
frontend/utils/style.ts
+1
-0
frontend/yarn.lock
frontend/yarn.lock
+388
-31
未找到文件。
frontend/README.md
浏览文件 @
33dbf151
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
English |
[
简体中文
](
https://github.com/PaddlePaddle/VisualDL/blob/develop/frontend/README_cn.md
)
English |
[
简体中文
](
https://github.com/PaddlePaddle/VisualDL/blob/develop/frontend/README_cn.md
)
**🚧UNDER
CONSTRUCTION
🚧**
**🚧UNDER
DEVELOPMENT
🚧**
**🚧SOME FEATURE MAY NOT WORK PROPERLY🚧**
**🚧SOME FEATURE MAY NOT WORK PROPERLY🚧**
...
...
frontend/README_cn.md
浏览文件 @
33dbf151
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
[
English
](
https://github.com/PaddlePaddle/VisualDL/blob/develop/frontend/README.md
)
| 简体中文
[
English
](
https://github.com/PaddlePaddle/VisualDL/blob/develop/frontend/README.md
)
| 简体中文
**🚧
仍在建设
中🚧**
**🚧
开发
中🚧**
**🚧某些功能可能不能正常工作🚧**
**🚧某些功能可能不能正常工作🚧**
...
...
frontend/babel.config.js
浏览文件 @
33dbf151
...
@@ -9,6 +9,7 @@ module.exports = {
...
@@ -9,6 +9,7 @@ module.exports = {
preprocess
:
false
preprocess
:
false
}
}
],
],
...(
process
.
env
.
NODE_ENV
!==
'
production
'
?
[
'
babel-plugin-typescript-to-proptypes
'
]
:
[])
[
'
emotion
'
],
...(
process
.
env
.
NODE_ENV
!==
'
production
'
?
[
'
typescript-to-proptypes
'
]
:
[])
]
]
};
};
frontend/components/ChartPage.tsx
浏览文件 @
33dbf151
import
React
,
{
FunctionComponent
,
useState
}
from
'
react
'
;
import
React
,
{
FunctionComponent
,
useState
}
from
'
react
'
;
import
styled
from
'
styled-components
'
;
import
styled
from
'
styled-components
'
;
import
{
WithStyled
,
rem
}
from
'
~/utils/style
'
;
import
{
WithStyled
,
rem
,
primaryColor
}
from
'
~/utils/style
'
;
import
BarLoader
from
'
react-spinners/BarLoader
'
;
import
Chart
from
'
~/components/Chart
'
;
import
Chart
from
'
~/components/Chart
'
;
import
Pagination
from
'
~/components/Pagination
'
;
import
Pagination
from
'
~/components/Pagination
'
;
...
@@ -18,14 +19,23 @@ const Wrapper = styled.div`
...
@@ -18,14 +19,23 @@ const Wrapper = styled.div`
}
}
`
;
`
;
const
Loading
=
styled
.
div
`
display: flex;
justify-content: center;
align-items: center;
min-height:
${
rem
(
200
)}
;
padding:
${
rem
(
40
)}
0;
`
;
// TODO: add types
// TODO: add types
// eslint-disable-next-line
// eslint-disable-next-line
type
ChartPageProps
<
T
=
any
>
=
{
type
ChartPageProps
<
T
=
any
>
=
{
items
?:
T
[];
items
?:
T
[];
loading
?:
boolean
;
withChart
?:
(
item
:
T
)
=>
React
.
ReactNode
;
withChart
?:
(
item
:
T
)
=>
React
.
ReactNode
;
};
};
const
ChartPage
:
FunctionComponent
<
ChartPageProps
&
WithStyled
>
=
({
items
,
withChart
,
className
})
=>
{
const
ChartPage
:
FunctionComponent
<
ChartPageProps
&
WithStyled
>
=
({
items
,
loading
,
withChart
,
className
})
=>
{
const
pageSize
=
12
;
const
pageSize
=
12
;
const
total
=
Math
.
ceil
((
items
?.
length
??
0
)
/
pageSize
);
const
total
=
Math
.
ceil
((
items
?.
length
??
0
)
/
pageSize
);
...
@@ -35,11 +45,17 @@ const ChartPage: FunctionComponent<ChartPageProps & WithStyled> = ({items, withC
...
@@ -35,11 +45,17 @@ const ChartPage: FunctionComponent<ChartPageProps & WithStyled> = ({items, withC
return
(
return
(
<
div
className
=
{
className
}
>
<
div
className
=
{
className
}
>
{
loading
?
(
<
Loading
>
<
BarLoader
color
=
{
primaryColor
}
width
=
"20%"
height
=
"4px"
/>
</
Loading
>
)
:
(
<
Wrapper
>
<
Wrapper
>
{
pageItems
.
map
((
item
,
index
)
=>
(
{
pageItems
.
map
((
item
,
index
)
=>
(
<
Chart
key
=
{
index
}
>
{
withChart
?.(
item
)
}
</
Chart
>
<
Chart
key
=
{
index
}
>
{
withChart
?.(
item
)
}
</
Chart
>
))
}
))
}
</
Wrapper
>
</
Wrapper
>
)
}
<
Pagination
page
=
{
page
}
total
=
{
total
}
onChange
=
{
setPage
}
/>
<
Pagination
page
=
{
page
}
total
=
{
total
}
onChange
=
{
setPage
}
/>
</
div
>
</
div
>
);
);
...
...
frontend/components/Checkbox.tsx
浏览文件 @
33dbf151
...
@@ -81,6 +81,7 @@ type CheckboxProps = {
...
@@ -81,6 +81,7 @@ type CheckboxProps = {
value
?:
boolean
;
value
?:
boolean
;
onChange
?:
(
value
:
boolean
)
=>
unknown
;
onChange
?:
(
value
:
boolean
)
=>
unknown
;
size
?:
'
small
'
;
size
?:
'
small
'
;
title
?:
string
;
disabled
?:
boolean
;
disabled
?:
boolean
;
};
};
...
@@ -90,6 +91,7 @@ const Checkbox: FunctionComponent<CheckboxProps & WithStyled> = ({
...
@@ -90,6 +91,7 @@ const Checkbox: FunctionComponent<CheckboxProps & WithStyled> = ({
size
,
size
,
disabled
,
disabled
,
className
,
className
,
title
,
onChange
onChange
})
=>
{
})
=>
{
const
[
checked
,
setChecked
]
=
useState
(
!!
value
);
const
[
checked
,
setChecked
]
=
useState
(
!!
value
);
...
@@ -103,7 +105,7 @@ const Checkbox: FunctionComponent<CheckboxProps & WithStyled> = ({
...
@@ -103,7 +105,7 @@ const Checkbox: FunctionComponent<CheckboxProps & WithStyled> = ({
};
};
return
(
return
(
<
Wrapper
disabled
=
{
disabled
}
className
=
{
className
}
>
<
Wrapper
disabled
=
{
disabled
}
className
=
{
className
}
title
=
{
title
}
>
<
Input
onChange
=
{
onChangeInput
}
checked
=
{
checked
}
disabled
=
{
disabled
}
/>
<
Input
onChange
=
{
onChangeInput
}
checked
=
{
checked
}
disabled
=
{
disabled
}
/>
<
Inner
checked
=
{
checked
}
size
=
{
size
}
disabled
=
{
disabled
}
/>
<
Inner
checked
=
{
checked
}
size
=
{
size
}
disabled
=
{
disabled
}
/>
<
Content
disabled
=
{
disabled
}
>
{
children
}
</
Content
>
<
Content
disabled
=
{
disabled
}
>
{
children
}
</
Content
>
...
...
frontend/components/Content.tsx
浏览文件 @
33dbf151
import
React
,
{
FunctionComponent
}
from
'
react
'
;
import
React
,
{
FunctionComponent
}
from
'
react
'
;
import
styled
from
'
styled-components
'
;
import
styled
from
'
styled-components
'
;
import
{
rem
,
math
,
headerHeight
,
asideWidth
,
backgroundColor
}
from
'
~/utils/style
'
;
import
HashLoader
from
'
react-spinners/HashLoader
'
;
import
{
rem
,
math
,
headerHeight
,
asideWidth
,
backgroundColor
,
primaryColor
}
from
'
~/utils/style
'
;
const
margin
=
rem
(
20
);
const
margin
=
rem
(
20
);
const
padding
=
rem
(
20
);
const
padding
=
rem
(
20
);
...
@@ -30,14 +31,36 @@ const Aside = styled.aside`
...
@@ -30,14 +31,36 @@ const Aside = styled.aside`
overflow-y: auto;
overflow-y: auto;
`
;
`
;
const
Loading
=
styled
.
div
`
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255, 255, 255, 0.8);
display: flex;
justify-content: center;
align-items: center;
overscroll-behavior: none;
cursor: progress;
`
;
type
ContentProps
=
{
type
ContentProps
=
{
aside
?:
React
.
ReactNode
;
aside
?:
React
.
ReactNode
;
loading
?:
boolean
;
};
};
const
Content
:
FunctionComponent
<
ContentProps
>
=
({
children
,
aside
})
=>
(
const
Content
:
FunctionComponent
<
ContentProps
>
=
({
children
,
aside
,
loading
})
=>
(
<
Section
>
<
Section
>
<
Article
aside
=
{
!!
aside
}
>
{
children
}
</
Article
>
<
Article
aside
=
{
!!
aside
}
>
{
children
}
</
Article
>
{
aside
&&
<
Aside
>
{
aside
}
</
Aside
>
}
{
aside
&&
<
Aside
>
{
aside
}
</
Aside
>
}
{
loading
&&
(
<
Loading
>
<
HashLoader
size
=
"60px"
color
=
{
primaryColor
}
/>
</
Loading
>
)
}
</
Section
>
</
Section
>
);
);
...
...
frontend/components/Image.tsx
浏览文件 @
33dbf151
import
React
,
{
FunctionComponent
,
useEffect
,
useState
,
useRef
}
from
'
react
'
;
import
React
,
{
FunctionComponent
,
useLayoutEffect
,
useState
}
from
'
react
'
;
import
fetch
from
'
isomorphic-unfetch
'
;
import
useSWR
from
'
swr
'
;
import
{
useTranslation
}
from
'
~/utils/i18n
'
;
import
{
primaryColor
}
from
'
~/utils/style
'
;
import
{
blobFetcher
}
from
'
~/utils/fetch
'
;
import
GridLoader
from
'
react-spinners/GridLoader
'
;
type
ImageProps
=
{
type
ImageProps
=
{
src
?:
string
;
src
?:
string
;
};
};
const
Image
:
FunctionComponent
<
ImageProps
>
=
({
src
})
=>
{
const
Image
:
FunctionComponent
<
ImageProps
>
=
({
src
})
=>
{
const
{
t
}
=
useTranslation
(
'
common
'
);
const
[
url
,
setUrl
]
=
useState
(
''
);
const
[
url
,
setUrl
]
=
useState
(
''
);
const
[
loading
,
setLoading
]
=
useState
(
false
);
const
controller
=
useRef
(
null
as
AbortController
|
null
);
const
{
data
}
=
useSWR
(
src
??
null
,
blobFetcher
);
useEffect
(()
=>
{
// use useLayoutEffect hook to prevent image render after url revoked
if
(
process
.
browser
)
{
useLayoutEffect
(()
=>
{
if
(
process
.
browser
&&
data
)
{
let
objectUrl
:
string
|
null
=
null
;
let
objectUrl
:
string
|
null
=
null
;
(
async
()
=>
{
objectUrl
=
URL
.
createObjectURL
(
data
);
setLoading
(
true
);
controller
.
current
?.
abort
();
controller
.
current
=
new
AbortController
();
try
{
const
result
=
await
fetch
(
src
??
''
,
{
signal
:
controller
.
current
.
signal
});
const
blob
=
await
result
.
blob
();
objectUrl
=
URL
.
createObjectURL
(
blob
);
setUrl
(
objectUrl
);
setUrl
(
objectUrl
);
}
catch
{
// ignore abort error
}
finally
{
setLoading
(
false
);
}
})();
return
()
=>
{
return
()
=>
{
objectUrl
&&
URL
.
revokeObjectURL
(
objectUrl
);
objectUrl
&&
URL
.
revokeObjectURL
(
objectUrl
);
};
};
}
}
},
[
src
]);
},
[
data
]);
return
loading
?
<
span
>
{
t
(
'
loading
'
)
}
</
span
>
:
<
img
src
=
{
url
}
/>;
return
!
data
?
<
GridLoader
color
=
{
primaryColor
}
size
=
"10px"
/
>
:
<
img
src
=
{
url
}
/>;
};
};
export
default
Image
;
export
default
Image
;
frontend/components/LineChart.tsx
浏览文件 @
33dbf151
import
React
,
{
FunctionComponent
,
useEffect
,
useCallback
}
from
'
react
'
;
import
React
,
{
FunctionComponent
,
useEffect
,
useCallback
}
from
'
react
'
;
import
{
EChartOption
}
from
'
echarts
'
;
import
{
EChartOption
}
from
'
echarts
'
;
import
{
WithStyled
}
from
'
~/utils/style
'
;
import
{
WithStyled
}
from
'
~/utils/style
'
;
import
{
useTranslation
}
from
'
~/utils/i18n
'
;
import
useECharts
from
'
~/hooks/useECharts
'
;
import
useECharts
from
'
~/hooks/useECharts
'
;
import
*
as
chart
from
'
~/utils/chart
'
;
import
*
as
chart
from
'
~/utils/chart
'
;
import
{
formatTime
}
from
'
~/utils/scalars
'
;
type
LineChartProps
=
{
type
LineChartProps
=
{
title
?:
string
;
title
?:
string
;
...
@@ -29,18 +31,21 @@ const LineChart: FunctionComponent<LineChartProps & WithStyled> = ({
...
@@ -29,18 +31,21 @@ const LineChart: FunctionComponent<LineChartProps & WithStyled> = ({
loading
,
loading
,
className
className
})
=>
{
})
=>
{
const
[
ref
,
echart
]
=
useECharts
<
HTMLDivElement
>
({
const
{
i18n
}
=
useTranslation
();
loading
:
!!
loading
const
{
ref
,
echart
}
=
useECharts
<
HTMLDivElement
>
({
loading
:
!!
loading
,
zoom
:
true
});
});
const
xAxisFormatter
=
useCallback
(
const
xAxisFormatter
=
useCallback
(
(
value
:
number
)
=>
(
type
===
'
time
'
?
new
Date
(
value
).
toLocaleTimeString
(
)
:
value
),
(
value
:
number
)
=>
(
type
===
'
time
'
?
formatTime
(
value
,
i18n
.
language
,
'
LTS
'
)
:
value
),
[
type
]
[
type
,
i18n
.
language
]
);
);
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
process
.
browser
)
{
if
(
process
.
browser
)
{
echart
.
current
?.
setOption
(
echart
?
.
current
?.
setOption
(
{
{
color
:
chart
.
color
,
color
:
chart
.
color
,
title
:
{
title
:
{
...
@@ -84,18 +89,6 @@ const LineChart: FunctionComponent<LineChartProps & WithStyled> = ({
...
@@ -84,18 +89,6 @@ const LineChart: FunctionComponent<LineChartProps & WithStyled> = ({
}
}
},
[
data
,
title
,
legend
,
xAxis
,
type
,
xAxisFormatter
,
yRange
,
tooltip
,
echart
]);
},
[
data
,
title
,
legend
,
xAxis
,
type
,
xAxisFormatter
,
yRange
,
tooltip
,
echart
]);
useEffect
(()
=>
{
if
(
process
.
browser
)
{
setTimeout
(()
=>
{
echart
.
current
?.
dispatchAction
({
type
:
'
takeGlobalCursor
'
,
key
:
'
dataZoomSelect
'
,
dataZoomSelectActive
:
true
});
},
0
);
}
},
[
echart
]);
return
<
div
className
=
{
className
}
ref
=
{
ref
}
></
div
>;
return
<
div
className
=
{
className
}
ref
=
{
ref
}
></
div
>;
};
};
...
...
frontend/components/Preloader.tsx
0 → 100644
浏览文件 @
33dbf151
import
React
,
{
FunctionComponent
}
from
'
react
'
;
import
Head
from
'
next/head
'
;
type
PreloaderProps
=
{
url
:
string
;
};
const
Preloader
:
FunctionComponent
<
PreloaderProps
>
=
({
url
})
=>
(
<
Head
>
<
link
rel
=
"preload"
href
=
{
process
.
env
.
API_URL
+
url
}
as
=
"fetch"
crossOrigin
=
"anonymous"
/>
</
Head
>
);
export
default
Preloader
;
frontend/components/SampleChart.tsx
浏览文件 @
33dbf151
...
@@ -2,8 +2,8 @@ import React, {FunctionComponent, useState} from 'react';
...
@@ -2,8 +2,8 @@ import React, {FunctionComponent, useState} from 'react';
import
styled
from
'
styled-components
'
;
import
styled
from
'
styled-components
'
;
import
useSWR
from
'
swr
'
;
import
useSWR
from
'
swr
'
;
import
queryString
from
'
query-string
'
;
import
queryString
from
'
query-string
'
;
import
{
useTranslation
}
from
'
~/utils/i18n
'
;
import
{
em
,
size
,
ellipsis
,
primaryColor
,
textLightColor
}
from
'
~/utils/style
'
;
import
{
em
,
size
,
ellipsis
,
textLightColor
}
from
'
~/utils/style
'
;
import
GridLoader
from
'
react-spinners/GridLoader
'
;
import
StepSlider
from
'
~/components/StepSlider
'
;
import
StepSlider
from
'
~/components/StepSlider
'
;
import
Image
from
'
~/components/Image
'
;
import
Image
from
'
~/components/Image
'
;
...
@@ -78,11 +78,9 @@ type SampleChartProps = {
...
@@ -78,11 +78,9 @@ type SampleChartProps = {
};
};
const
getImageUrl
=
(
index
:
number
,
run
:
string
,
tag
:
string
,
wallTime
:
number
):
string
=>
const
getImageUrl
=
(
index
:
number
,
run
:
string
,
tag
:
string
,
wallTime
:
number
):
string
=>
`
${
process
.
env
.
API_URL
}
/images/image?
${
queryString
.
stringify
({
index
,
ts
:
wallTime
,
run
,
tag
})}
`
;
`/images/image?
${
queryString
.
stringify
({
index
,
ts
:
wallTime
,
run
,
tag
})}
`
;
const
SampleChart
:
FunctionComponent
<
SampleChartProps
>
=
({
run
,
tag
,
fit
,
running
})
=>
{
const
SampleChart
:
FunctionComponent
<
SampleChartProps
>
=
({
run
,
tag
,
fit
,
running
})
=>
{
const
{
t
}
=
useTranslation
(
'
common
'
);
const
{
data
,
error
}
=
useSWR
<
ImageData
[]
>
(
`/images/list?
${
queryString
.
stringify
({
run
,
tag
})}
`
,
{
const
{
data
,
error
}
=
useSWR
<
ImageData
[]
>
(
`/images/list?
${
queryString
.
stringify
({
run
,
tag
})}
`
,
{
refreshInterval
:
running
?
15
*
1000
:
0
refreshInterval
:
running
?
15
*
1000
:
0
});
});
...
@@ -97,7 +95,7 @@ const SampleChart: FunctionComponent<SampleChartProps> = ({run, tag, fit, runnin
...
@@ -97,7 +95,7 @@ const SampleChart: FunctionComponent<SampleChartProps> = ({run, tag, fit, runnin
</
Title
>
</
Title
>
<
StepSlider
value
=
{
step
}
steps
=
{
data
?.
map
(
item
=>
item
.
step
)
??
[]
}
onChange
=
{
setStep
}
/>
<
StepSlider
value
=
{
step
}
steps
=
{
data
?.
map
(
item
=>
item
.
step
)
??
[]
}
onChange
=
{
setStep
}
/>
<
Container
fit
=
{
fit
}
>
<
Container
fit
=
{
fit
}
>
{
!
data
&&
!
error
&&
<
span
>
{
t
(
'
loading
'
)
}
</
span
>
}
{
!
data
&&
!
error
&&
<
GridLoader
color
=
{
primaryColor
}
size
=
"10px"
/
>
}
{
data
&&
!
error
&&
<
Image
src
=
{
getImageUrl
(
step
,
run
,
tag
,
data
[
step
].
wallTime
)
}
/>
}
{
data
&&
!
error
&&
<
Image
src
=
{
getImageUrl
(
step
,
run
,
tag
,
data
[
step
].
wallTime
)
}
/>
}
</
Container
>
</
Container
>
</
Wrapper
>
</
Wrapper
>
...
...
frontend/components/ScalarChart.tsx
浏览文件 @
33dbf151
...
@@ -56,7 +56,7 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
...
@@ -56,7 +56,7 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
outlier
,
outlier
,
running
running
})
=>
{
})
=>
{
const
{
t
}
=
useTranslation
(
'
scalars
'
);
const
{
t
,
i18n
}
=
useTranslation
([
'
scalars
'
,
'
common
'
]
);
// TODO: maybe we can create a custom hook here
// TODO: maybe we can create a custom hook here
const
{
data
:
datasets
,
error
}
=
useSWR
<
DataSet
[]
>
(
const
{
data
:
datasets
,
error
}
=
useSWR
<
DataSet
[]
>
(
...
@@ -161,9 +161,9 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
...
@@ -161,9 +161,9 @@ const ScalarChart: FunctionComponent<ScalarChartProps> = ({
};
};
})
??
[];
})
??
[];
const
sort
=
sortingMethodMap
[
sortingMethod
];
const
sort
=
sortingMethodMap
[
sortingMethod
];
return
tooltip
(
sort
?
sort
(
points
,
data
)
:
points
);
return
tooltip
(
sort
?
sort
(
points
,
data
)
:
points
,
i18n
);
},
},
[
smoothedDatasets
,
runs
,
sortingMethod
]
[
smoothedDatasets
,
runs
,
sortingMethod
,
i18n
]
);
);
return
(
return
(
...
...
frontend/components/ScatterChart.tsx
浏览文件 @
33dbf151
...
@@ -112,9 +112,9 @@ const ScatterChart: FunctionComponent<ScatterChartProps & WithStyled> = ({
...
@@ -112,9 +112,9 @@ const ScatterChart: FunctionComponent<ScatterChartProps & WithStyled> = ({
dimension
,
dimension
,
className
className
})
=>
{
})
=>
{
const
[
ref
,
echart
]
=
useECharts
<
HTMLDivElement
>
({
const
{
ref
,
echart
}
=
useECharts
<
HTMLDivElement
>
({
loading
,
loading
,
gl
:
true
gl
:
dimension
===
'
3d
'
});
});
const
[
highlighted
,
others
]
=
useMemo
(()
=>
dividePoints
(
points
,
keyword
),
[
points
,
keyword
]);
const
[
highlighted
,
others
]
=
useMemo
(()
=>
dividePoints
(
points
,
keyword
),
[
points
,
keyword
]);
const
chartOptions
=
useMemo
(
const
chartOptions
=
useMemo
(
...
@@ -130,14 +130,9 @@ const ScatterChart: FunctionComponent<ScatterChartProps & WithStyled> = ({
...
@@ -130,14 +130,9 @@ const ScatterChart: FunctionComponent<ScatterChartProps & WithStyled> = ({
);
);
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
!
process
.
browser
)
{
if
(
process
.
browser
)
{
return
;
echart
?.
current
?.
setOption
(
chartOptions
,
{
notMerge
:
true
})
;
}
}
echart
.
current
?.
setOption
(
chartOptions
,
true
// not merged
);
},
[
chartOptions
,
echart
]);
},
[
chartOptions
,
echart
]);
return
<
div
className
=
{
className
}
ref
=
{
ref
}
></
div
>;
return
<
div
className
=
{
className
}
ref
=
{
ref
}
></
div
>;
...
...
frontend/components/Select.tsx
浏览文件 @
33dbf151
...
@@ -31,6 +31,7 @@ const Wrapper = styled.div<{opened?: boolean}>`
...
@@ -31,6 +31,7 @@ const Wrapper = styled.div<{opened?: boolean}>`
height:
${
height
}
;
height:
${
height
}
;
line-height: calc(
${
height
}
- 2px);
line-height: calc(
${
height
}
- 2px);
min-width:
${
minWidth
}
;
min-width:
${
minWidth
}
;
max-width: 100%;
display: inline-block;
display: inline-block;
position: relative;
position: relative;
border: 1px solid
${
borderColor
}
;
border: 1px solid
${
borderColor
}
;
...
@@ -67,6 +68,8 @@ const TriggerIcon = styled(Icon)<{opened?: boolean}>`
...
@@ -67,6 +68,8 @@ const TriggerIcon = styled(Icon)<{opened?: boolean}>`
const
Label
=
styled
.
span
`
const
Label
=
styled
.
span
`
flex-grow: 1;
flex-grow: 1;
padding-right:
${
em
(
10
)}
;
${
ellipsis
()}
`
;
`
;
const
List
=
styled
.
div
<
{
opened
?:
boolean
;
empty
?:
boolean
}
>
`
const
List
=
styled
.
div
<
{
opened
?:
boolean
;
empty
?:
boolean
}
>
`
...
@@ -204,6 +207,7 @@ const Select: FunctionComponent<SelectProps<SelectValueType> & WithStyled> = ({
...
@@ -204,6 +207,7 @@ const Select: FunctionComponent<SelectProps<SelectValueType> & WithStyled> = ({
<
MultipleListItem
<
MultipleListItem
value
=
{
(
value
as
SelectValueType
[]).
includes
(
item
.
value
)
}
value
=
{
(
value
as
SelectValueType
[]).
includes
(
item
.
value
)
}
key
=
{
index
}
key
=
{
index
}
title
=
{
item
.
label
}
size
=
"small"
size
=
"small"
onChange
=
{
checked
=>
changeValue
(
item
.
value
,
checked
)
}
onChange
=
{
checked
=>
changeValue
(
item
.
value
,
checked
)
}
>
>
...
@@ -215,6 +219,7 @@ const Select: FunctionComponent<SelectProps<SelectValueType> & WithStyled> = ({
...
@@ -215,6 +219,7 @@ const Select: FunctionComponent<SelectProps<SelectValueType> & WithStyled> = ({
<
ListItem
<
ListItem
selected
=
{
item
.
value
===
value
}
selected
=
{
item
.
value
===
value
}
key
=
{
index
}
key
=
{
index
}
title
=
{
item
.
label
}
onClick
=
{
()
=>
changeValue
(
item
.
value
)
}
onClick
=
{
()
=>
changeValue
(
item
.
value
)
}
>
>
{
item
.
label
}
{
item
.
label
}
...
...
frontend/components/StepSlider.tsx
浏览文件 @
33dbf151
...
@@ -27,7 +27,7 @@ const StepSlider: FunctionComponent<StepSliderProps> = ({onChange, value, steps}
...
@@ -27,7 +27,7 @@ const StepSlider: FunctionComponent<StepSliderProps> = ({onChange, value, steps}
return
(
return
(
<>
<>
<
Label
>
{
`
${
t
(
'
step
'
)}
:
${
steps
[
step
]}
`
}
</
Label
>
<
Label
>
{
`
${
t
(
'
step
'
)}
:
${
steps
[
step
]
??
'
...
'
}
`
}
</
Label
>
<
FullWidthRangeSlider
<
FullWidthRangeSlider
min
=
{
0
}
min
=
{
0
}
max
=
{
steps
.
length
?
steps
.
length
-
1
:
0
}
max
=
{
steps
.
length
?
steps
.
length
-
1
:
0
}
...
...
frontend/hooks/useDebounce.ts
0 → 100644
浏览文件 @
33dbf151
import
{
useState
,
useEffect
}
from
'
react
'
;
const
useDebounce
=
<
T
>
(
value
:
T
,
delay
:
number
):
T
=>
{
const
[
debouncedValue
,
setDebouncedValue
]
=
useState
(
value
);
useEffect
(()
=>
{
const
handler
=
setTimeout
(()
=>
{
setDebouncedValue
(
value
);
},
delay
);
return
()
=>
clearTimeout
(
handler
);
},
[
value
,
delay
]);
return
debouncedValue
;
};
export
default
useDebounce
;
frontend/hooks/useECharts.ts
浏览文件 @
33dbf151
import
{
useRef
,
useEffect
,
useCallback
,
MutableRefObject
}
from
'
react
'
;
import
{
useRef
,
useEffect
,
useCallback
,
useState
,
MutableRefObject
}
from
'
react
'
;
import
echarts
,
{
ECharts
}
from
'
echarts
'
;
import
echarts
,
{
ECharts
}
from
'
echarts
'
;
import
{
useTranslation
}
from
'
~/utils/i18n
'
;
import
{
primaryColor
,
textColor
,
maskColor
}
from
'
~/utils/style
'
;
const
useECharts
=
<
T
extends
HTMLElement
>
(
options
:
{
const
useECharts
=
<
T
extends
HTMLElement
>
(
options
:
{
loading
:
boolean
;
loading
?
:
boolean
;
gl
?:
boolean
;
gl
?:
boolean
;
}):
[
MutableRefObject
<
T
|
null
>
,
MutableRefObject
<
ECharts
|
null
>
]
=>
{
zoom
?:
boolean
;
const
{
t
}
=
useTranslation
(
'
common
'
);
}):
{
const
ref
=
useRef
(
null
);
ref
:
MutableRefObject
<
T
|
null
>
;
const
echart
=
useRef
(
null
as
ECharts
|
null
);
echart
:
MutableRefObject
<
ECharts
|
null
>
|
null
;
}
=>
{
const
ref
=
useRef
(
null
as
T
|
null
);
const
echartInstance
=
useRef
(
null
as
ECharts
|
null
);
const
[
echart
,
setEchart
]
=
useState
(
null
as
typeof
echartInstance
|
null
);
const
createChart
=
useCallback
(()
=>
{
const
createChart
=
useCallback
(()
=>
{
const
loadExtension
=
options
.
gl
?
import
(
'
echarts-gl
'
)
:
Promise
.
resolve
();
(
async
()
=>
{
loadExtension
.
then
(()
=>
{
if
(
options
.
gl
)
{
echart
.
current
=
echarts
.
init
((
ref
.
current
as
unknown
)
as
HTMLDivElement
);
await
import
(
'
echarts-gl
'
);
}
echartInstance
.
current
=
echarts
.
init
((
ref
.
current
as
unknown
)
as
HTMLDivElement
);
if
(
options
.
zoom
)
{
setTimeout
(()
=>
{
echartInstance
.
current
?.
dispatchAction
({
type
:
'
takeGlobalCursor
'
,
key
:
'
dataZoomSelect
'
,
dataZoomSelectActive
:
true
});
});
},
[
options
.
gl
]);
},
0
);
}
setEchart
(
echartInstance
);
})();
},
[
options
.
gl
,
options
.
zoom
]);
const
destroyChart
=
useCallback
(()
=>
{
const
destroyChart
=
useCallback
(()
=>
{
echart
.
current
?.
dispose
();
echartInstance
.
current
?.
dispose
();
setEchart
(
null
);
},
[]);
},
[]);
useEffect
(()
=>
{
useEffect
(()
=>
{
...
@@ -29,22 +46,22 @@ const useECharts = <T extends HTMLElement>(options: {
...
@@ -29,22 +46,22 @@ const useECharts = <T extends HTMLElement>(options: {
},
[
createChart
,
destroyChart
]);
},
[
createChart
,
destroyChart
]);
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
process
.
browser
)
{
if
(
process
.
browser
&&
echart
)
{
if
(
options
.
loading
)
{
if
(
options
.
loading
)
{
echart
.
current
?.
showLoading
(
'
default
'
,
{
echart
Instance
.
current
?.
showLoading
(
'
default
'
,
{
text
:
t
(
'
loading
'
)
,
text
:
''
,
color
:
'
#c23531
'
,
color
:
primaryColor
,
textColor
:
'
#000
'
,
textColor
,
maskColor
:
'
rgba(255, 255, 255, 0.8)
'
,
maskColor
,
zlevel
:
0
zlevel
:
0
});
});
}
else
{
}
else
{
echart
.
current
?.
hideLoading
();
echart
Instance
.
current
?.
hideLoading
();
}
}
}
}
},
[
t
,
options
.
loading
]);
},
[
options
.
loading
,
echart
]);
return
[
ref
,
echart
]
;
return
{
ref
,
echart
}
;
};
};
export
default
useECharts
;
export
default
useECharts
;
frontend/hooks/useSearchValue.ts
0 → 100644
浏览文件 @
33dbf151
import
useDebounce
from
'
~/hooks/useDebounce
'
;
const
isEmptyValue
=
(
value
:
unknown
):
boolean
=>
(
Array
.
isArray
(
value
)
&&
!
value
.
length
)
||
(
'
string
'
===
typeof
value
&&
value
===
''
);
const
useSearchValue
=
<
T
>
(
value
:
T
,
delay
=
275
):
T
=>
{
const
debounced
=
useDebounce
(
value
,
delay
);
// return empty value immediately
if
(
isEmptyValue
(
value
))
{
return
value
;
}
// if debounced value is empty, return non-empty value immediately
if
(
isEmptyValue
(
debounced
))
{
return
value
;
}
return
debounced
;
};
export
default
useSearchValue
;
frontend/hooks/useTagFilter.ts
浏览文件 @
33dbf151
import
{
useReducer
,
useEffect
,
useCallback
,
useMemo
}
from
'
react
'
;
import
{
useReducer
,
useEffect
,
useCallback
,
useMemo
}
from
'
react
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
useSWR
from
'
swr
'
;
import
useSWR
from
'
swr
'
;
import
groupBy
from
'
lodash/groupBy
'
;
import
groupBy
from
'
lodash/groupBy
'
;
import
uniq
from
'
lodash/uniq
'
;
import
uniq
from
'
lodash/uniq
'
;
import
intersection
from
'
lodash/intersection
'
;
import
intersection
from
'
lodash/intersection
'
;
import
{
Tag
}
from
'
~/types
'
;
import
{
Tag
}
from
'
~/types
'
;
import
{
useRouter
}
from
'
next/router
'
;
type
Runs
=
string
[];
type
Runs
=
string
[];
type
Tags
=
Record
<
string
,
string
[]
>
;
type
Tags
=
Record
<
string
,
string
[]
>
;
...
@@ -143,7 +143,9 @@ const useTagFilters = (type: string) => {
...
@@ -143,7 +143,9 @@ const useTagFilters = (type: string) => {
selectedRuns
:
state
.
runs
,
selectedRuns
:
state
.
runs
,
selectedTags
:
state
.
filteredTags
,
selectedTags
:
state
.
filteredTags
,
onChangeRuns
,
onChangeRuns
,
onFilterTags
onFilterTags
,
loadingRuns
:
!
runs
,
loadingTags
:
!
tags
};
};
};
};
...
...
frontend/mock/embeddings/embedding.ts
浏览文件 @
33dbf151
import
{
Request
}
from
'
express
'
;
import
{
Request
}
from
'
express
'
;
export
default
(
req
:
Request
)
=>
{
export
default
(
req
:
Request
)
=>
{
if
(
req
.
query
.
dimension
===
'
3
'
)
{
const
{
dimension
,
run
}
=
req
.
query
;
if
(
dimension
===
'
3
'
)
{
return
{
return
{
embedding
:
[
embedding
:
[
[
10.0
,
8.04
,
3
],
[
10.0
,
8.04
,
3
],
...
@@ -16,7 +17,7 @@ export default (req: Request) => {
...
@@ -16,7 +17,7 @@ export default (req: Request) => {
[
7.0
,
4.8
,
3
],
[
7.0
,
4.8
,
3
],
[
5.0
,
5.68
,
3
]
[
5.0
,
5.68
,
3
]
],
],
labels
:
[
'
yellow
'
,
'
blue
'
,
'
red
'
,
'
king
'
,
'
queen
'
,
'
man
'
,
'
women
'
,
'
kid
'
,
'
adult
'
,
'
light
'
,
'
dark
'
]
labels
:
[
`
${
run
}
-yellow`
,
'
blue
'
,
'
red
'
,
'
king
'
,
'
queen
'
,
'
man
'
,
'
women
'
,
'
kid
'
,
'
adult
'
,
'
light
'
,
'
dark
'
]
};
};
}
}
return
{
return
{
...
@@ -33,6 +34,6 @@ export default (req: Request) => {
...
@@ -33,6 +34,6 @@ export default (req: Request) => {
[
7.0
,
4.8
],
[
7.0
,
4.8
],
[
5.0
,
5.68
]
[
5.0
,
5.68
]
],
],
labels
:
[
'
yellow
'
,
'
blue
'
,
'
red
'
,
'
king
'
,
'
queen
'
,
'
man
'
,
'
women
'
,
'
kid
'
,
'
adult
'
,
'
light
'
,
'
dark
'
]
labels
:
[
`
${
run
}
-yellow`
,
'
blue
'
,
'
red
'
,
'
king
'
,
'
queen
'
,
'
man
'
,
'
women
'
,
'
kid
'
,
'
adult
'
,
'
light
'
,
'
dark
'
]
};
};
};
};
frontend/next.config.js
浏览文件 @
33dbf151
...
@@ -27,6 +27,7 @@ module.exports = {
...
@@ -27,6 +27,7 @@ module.exports = {
poweredByHeader
:
false
,
poweredByHeader
:
false
,
env
:
{
env
:
{
...
APP
,
...
APP
,
BUILD_ID
:
''
,
DEFAULT_LANGUAGE
,
DEFAULT_LANGUAGE
,
LOCALE_PATH
,
LOCALE_PATH
,
LANGUAGES
,
LANGUAGES
,
...
...
frontend/package.json
浏览文件 @
33dbf151
...
@@ -61,10 +61,12 @@
...
@@ -61,10 +61,12 @@
"react-i18next"
:
"11.3.3"
,
"react-i18next"
:
"11.3.3"
,
"react-input-range"
:
"1.3.0"
,
"react-input-range"
:
"1.3.0"
,
"react-is"
:
"16.13.0"
,
"react-is"
:
"16.13.0"
,
"react-spinners"
:
"0.8.0"
,
"save-svg-as-png"
:
"1.4.17"
,
"save-svg-as-png"
:
"1.4.17"
,
"styled-components"
:
"5.0.1"
,
"styled-components"
:
"5.0.1"
,
"swr"
:
"0.1.18"
,
"swr"
:
"0.1.18"
,
"url"
:
"0.11.0"
"url"
:
"0.11.0"
,
"yargs"
:
"15.1.0"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"@babel/core"
:
"7.8.7"
,
"@babel/core"
:
"7.8.7"
,
...
@@ -80,11 +82,13 @@
...
@@ -80,11 +82,13 @@
"@types/react-dom"
:
"16.9.5"
,
"@types/react-dom"
:
"16.9.5"
,
"@types/styled-components"
:
"5.0.1"
,
"@types/styled-components"
:
"5.0.1"
,
"@types/webpack"
:
"4.41.7"
,
"@types/webpack"
:
"4.41.7"
,
"@types/yargs"
:
"15.0.4"
,
"@typescript-eslint/eslint-plugin"
:
"2.22.0"
,
"@typescript-eslint/eslint-plugin"
:
"2.22.0"
,
"@typescript-eslint/parser"
:
"2.22.0"
,
"@typescript-eslint/parser"
:
"2.22.0"
,
"babel-plugin-emotion"
:
"10.0.29"
,
"babel-plugin-styled-components"
:
"1.10.7"
,
"babel-plugin-styled-components"
:
"1.10.7"
,
"babel-plugin-typescript-to-proptypes"
:
"1.3.0"
,
"babel-plugin-typescript-to-proptypes"
:
"1.3.0"
,
"cross-env"
:
"7.0.
1
"
,
"cross-env"
:
"7.0.
2
"
,
"eslint"
:
"6.8.0"
,
"eslint"
:
"6.8.0"
,
"eslint-config-prettier"
:
"6.10.0"
,
"eslint-config-prettier"
:
"6.10.0"
,
"eslint-plugin-prettier"
:
"3.1.2"
,
"eslint-plugin-prettier"
:
"3.1.2"
,
...
...
frontend/pages/graphs.tsx
浏览文件 @
33dbf151
import
React
,
{
useState
,
useEffect
,
useMemo
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
,
useMemo
}
from
'
react
'
;
import
useSWR
from
'
swr
'
;
import
useSWR
from
'
swr
'
;
import
styled
from
'
styled-components
'
;
import
styled
from
'
styled-components
'
;
import
{
saveSvgAsPng
}
from
'
save-svg-as-png
'
;
import
{
rem
}
from
'
~/utils/style
'
;
import
RawButton
from
'
~/components/Button
'
;
import
RawButton
from
'
~/components/Button
'
;
import
RawRangeSlider
from
'
~/components/RangeSlider
'
;
import
RawRangeSlider
from
'
~/components/RangeSlider
'
;
import
Content
from
'
~/components/Content
'
;
import
Content
from
'
~/components/Content
'
;
import
Title
from
'
~/components/Title
'
;
import
Title
from
'
~/components/Title
'
;
import
Field
from
'
~/components/Field
'
;
import
Field
from
'
~/components/Field
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
{
rem
}
from
'
~/utils/style
'
;
import
NodeInfo
,
{
NodeInfoProps
}
from
'
~/components/GraphPage/NodeInfo
'
;
import
NodeInfo
,
{
NodeInfoProps
}
from
'
~/components/GraphPage/NodeInfo
'
;
import
Preloader
from
'
~/components/Preloader
'
;
import
{
Graph
,
collectDagFacts
}
from
'
~/resource/graph
'
;
import
{
Graph
,
collectDagFacts
}
from
'
~/resource/graph
'
;
import
{
saveSvgAsPng
}
from
'
save-svg-as-png
'
;
// eslint-disable-next-line @typescript-eslint/no-empty-function
// eslint-disable-next-line @typescript-eslint/no-empty-function
const
dumbFn
=
()
=>
{};
const
dumbFn
=
()
=>
{};
...
@@ -269,9 +270,10 @@ const Graphs: NextI18NextPage = () => {
...
@@ -269,9 +270,10 @@ const Graphs: NextI18NextPage = () => {
return
(
return
(
<>
<>
<
Preloader
url
=
"/graphs/graph"
/>
<
Title
>
{
t
(
'
common:graphs
'
)
}
</
Title
>
<
Title
>
{
t
(
'
common:graphs
'
)
}
</
Title
>
<
Content
aside
=
{
aside
}
>
<
Content
aside
=
{
aside
}
loading
=
{
!
graph
}
>
<
GraphSvg
>
<
GraphSvg
>
<
g
></
g
>
<
g
></
g
>
</
GraphSvg
>
</
GraphSvg
>
...
...
frontend/pages/high-dimensional.tsx
浏览文件 @
33dbf151
...
@@ -3,6 +3,7 @@ import styled from 'styled-components';
...
@@ -3,6 +3,7 @@ import styled from 'styled-components';
import
useSWR
from
'
swr
'
;
import
useSWR
from
'
swr
'
;
import
queryString
from
'
query-string
'
;
import
queryString
from
'
query-string
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
useSearchValue
from
'
~/hooks/useSearchValue
'
;
import
{
rem
,
em
}
from
'
~/utils/style
'
;
import
{
rem
,
em
}
from
'
~/utils/style
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
Title
from
'
~/components/Title
'
;
import
Title
from
'
~/components/Title
'
;
...
@@ -17,6 +18,7 @@ import RunningToggle from '~/components/RunningToggle';
...
@@ -17,6 +18,7 @@ import RunningToggle from '~/components/RunningToggle';
import
ScatterChart
from
'
~/components/ScatterChart
'
;
import
ScatterChart
from
'
~/components/ScatterChart
'
;
import
Select
,
{
SelectValueType
}
from
'
~/components/Select
'
;
import
Select
,
{
SelectValueType
}
from
'
~/components/Select
'
;
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
Preloader
from
'
~/components/Preloader
'
;
import
{
Dimension
}
from
'
~/types
'
;
import
{
Dimension
}
from
'
~/types
'
;
const
dimensions
=
[
'
2d
'
,
'
3d
'
];
const
dimensions
=
[
'
2d
'
,
'
3d
'
];
...
@@ -55,6 +57,7 @@ const HighDimensional: NextI18NextPage = () => {
...
@@ -55,6 +57,7 @@ const HighDimensional: NextI18NextPage = () => {
useEffect
(()
=>
setRun
(
selectedRun
),
[
setRun
,
selectedRun
]);
useEffect
(()
=>
setRun
(
selectedRun
),
[
setRun
,
selectedRun
]);
const
[
search
,
setSearch
]
=
useState
(
''
);
const
[
search
,
setSearch
]
=
useState
(
''
);
const
debouncedSearch
=
useSearchValue
(
search
);
const
[
dimension
,
setDimension
]
=
useState
(
dimensions
[
0
]
as
Dimension
);
const
[
dimension
,
setDimension
]
=
useState
(
dimensions
[
0
]
as
Dimension
);
const
[
reduction
,
setReduction
]
=
useState
(
reductions
[
0
]);
const
[
reduction
,
setReduction
]
=
useState
(
reductions
[
0
]);
const
[
running
,
setRunning
]
=
useState
(
true
);
const
[
running
,
setRunning
]
=
useState
(
true
);
...
@@ -137,9 +140,15 @@ const HighDimensional: NextI18NextPage = () => {
...
@@ -137,9 +140,15 @@ const HighDimensional: NextI18NextPage = () => {
return
(
return
(
<>
<>
<
Preloader
url
=
"/runs"
/>
<
Title
>
{
t
(
'
common:high-dimensional
'
)
}
</
Title
>
<
Title
>
{
t
(
'
common:high-dimensional
'
)
}
</
Title
>
<
Content
aside
=
{
aside
}
>
<
Content
aside
=
{
aside
}
loading
=
{
!
runs
}
>
<
StyledScatterChart
points
=
{
points
}
dimension
=
{
dimension
}
loading
=
{
!
data
&&
!
error
}
keyword
=
{
search
}
/>
<
StyledScatterChart
points
=
{
points
}
dimension
=
{
dimension
}
loading
=
{
!
data
&&
!
error
}
keyword
=
{
debouncedSearch
}
/>
</
Content
>
</
Content
>
</>
</>
);
);
...
...
frontend/pages/samples.tsx
浏览文件 @
33dbf151
...
@@ -14,6 +14,7 @@ import RunningToggle from '~/components/RunningToggle';
...
@@ -14,6 +14,7 @@ import RunningToggle from '~/components/RunningToggle';
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
ChartPage
from
'
~/components/ChartPage
'
;
import
ChartPage
from
'
~/components/ChartPage
'
;
import
SampleChart
from
'
~/components/SampleChart
'
;
import
SampleChart
from
'
~/components/SampleChart
'
;
import
Preloader
from
'
~/components/Preloader
'
;
const
StyledIcon
=
styled
(
Icon
)
`
const
StyledIcon
=
styled
(
Icon
)
`
font-size:
${
rem
(
16
)}
;
font-size:
${
rem
(
16
)}
;
...
@@ -40,7 +41,9 @@ type Item = {
...
@@ -40,7 +41,9 @@ type Item = {
const
Samples
:
NextI18NextPage
=
()
=>
{
const
Samples
:
NextI18NextPage
=
()
=>
{
const
{
t
}
=
useTranslation
([
'
samples
'
,
'
common
'
]);
const
{
t
}
=
useTranslation
([
'
samples
'
,
'
common
'
]);
const
{
runs
,
tags
,
selectedRuns
,
selectedTags
,
onChangeRuns
,
onFilterTags
}
=
useTagFilter
(
'
images
'
);
const
{
runs
,
tags
,
selectedRuns
,
selectedTags
,
onChangeRuns
,
onFilterTags
,
loadingRuns
,
loadingTags
}
=
useTagFilter
(
'
images
'
);
const
ungroupedSelectedTags
=
useMemo
(
const
ungroupedSelectedTags
=
useMemo
(
()
=>
()
=>
selectedTags
.
reduce
((
prev
,
{
runs
,
...
item
})
=>
{
selectedTags
.
reduce
((
prev
,
{
runs
,
...
item
})
=>
{
...
@@ -103,10 +106,12 @@ const Samples: NextI18NextPage = () => {
...
@@ -103,10 +106,12 @@ const Samples: NextI18NextPage = () => {
return
(
return
(
<>
<>
<
Preloader
url
=
"/runs"
/>
<
Preloader
url
=
"/images/tags"
/>
<
Title
>
{
t
(
'
common:samples
'
)
}
</
Title
>
<
Title
>
{
t
(
'
common:samples
'
)
}
</
Title
>
<
Content
aside
=
{
aside
}
>
<
Content
aside
=
{
aside
}
loading
=
{
loadingRuns
}
>
<
TagFilter
tags
=
{
tags
}
onChange
=
{
onFilterTags
}
/>
<
TagFilter
tags
=
{
tags
}
onChange
=
{
onFilterTags
}
/>
<
ChartPage
items
=
{
ungroupedSelectedTags
}
withChart
=
{
withChart
}
/>
<
ChartPage
items
=
{
ungroupedSelectedTags
}
withChart
=
{
withChart
}
loading
=
{
loadingRuns
||
loadingTags
}
/>
</
Content
>
</
Content
>
</>
</>
);
);
...
...
frontend/pages/scalars.tsx
浏览文件 @
33dbf151
import
React
,
{
useState
,
useCallback
}
from
'
react
'
;
import
React
,
{
useState
,
useCallback
}
from
'
react
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
{
useTranslation
,
NextI18NextPage
}
from
'
~/utils/i18n
'
;
import
useTagFilter
from
'
~/hooks/useTagFilter
'
;
import
useTagFilter
from
'
~/hooks/useTagFilter
'
;
import
useSearchValue
from
'
~/hooks/useSearchValue
'
;
import
Title
from
'
~/components/Title
'
;
import
Title
from
'
~/components/Title
'
;
import
Content
from
'
~/components/Content
'
;
import
Content
from
'
~/components/Content
'
;
import
RunSelect
from
'
~/components/RunSelect
'
;
import
RunSelect
from
'
~/components/RunSelect
'
;
...
@@ -13,6 +14,7 @@ import RunningToggle from '~/components/RunningToggle';
...
@@ -13,6 +14,7 @@ import RunningToggle from '~/components/RunningToggle';
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
AsideDivider
from
'
~/components/AsideDivider
'
;
import
ChartPage
from
'
~/components/ChartPage
'
;
import
ChartPage
from
'
~/components/ChartPage
'
;
import
ScalarChart
,
{
xAxisMap
,
sortingMethodMap
}
from
'
~/components/ScalarChart
'
;
import
ScalarChart
,
{
xAxisMap
,
sortingMethodMap
}
from
'
~/components/ScalarChart
'
;
import
Preloader
from
'
~/components/Preloader
'
;
import
{
Tag
}
from
'
~/types
'
;
import
{
Tag
}
from
'
~/types
'
;
type
XAxis
=
keyof
typeof
xAxisMap
;
type
XAxis
=
keyof
typeof
xAxisMap
;
...
@@ -23,7 +25,11 @@ const toolTipSortingValues = ['default', 'descending', 'ascending', 'nearest'];
...
@@ -23,7 +25,11 @@ const toolTipSortingValues = ['default', 'descending', 'ascending', 'nearest'];
const
Scalars
:
NextI18NextPage
=
()
=>
{
const
Scalars
:
NextI18NextPage
=
()
=>
{
const
{
t
}
=
useTranslation
([
'
scalars
'
,
'
common
'
]);
const
{
t
}
=
useTranslation
([
'
scalars
'
,
'
common
'
]);
const
{
runs
,
tags
,
selectedRuns
,
selectedTags
,
onChangeRuns
,
onFilterTags
}
=
useTagFilter
(
'
scalars
'
);
const
{
runs
,
tags
,
selectedRuns
,
selectedTags
,
onChangeRuns
,
onFilterTags
,
loadingRuns
,
loadingTags
}
=
useTagFilter
(
'
scalars
'
);
const
debouncedTags
=
useSearchValue
(
selectedTags
);
const
[
smoothing
,
setSmoothing
]
=
useState
(
0.6
);
const
[
smoothing
,
setSmoothing
]
=
useState
(
0.6
);
...
@@ -83,10 +89,12 @@ const Scalars: NextI18NextPage = () => {
...
@@ -83,10 +89,12 @@ const Scalars: NextI18NextPage = () => {
return
(
return
(
<>
<>
<
Preloader
url
=
"/runs"
/>
<
Preloader
url
=
"/scalars/tags"
/>
<
Title
>
{
t
(
'
common:scalars
'
)
}
</
Title
>
<
Title
>
{
t
(
'
common:scalars
'
)
}
</
Title
>
<
Content
aside
=
{
aside
}
>
<
Content
aside
=
{
aside
}
loading
=
{
loadingRuns
}
>
<
TagFilter
tags
=
{
tags
}
onChange
=
{
onFilterTags
}
/>
<
TagFilter
tags
=
{
tags
}
onChange
=
{
onFilterTags
}
/>
<
ChartPage
items
=
{
selectedTags
}
withChart
=
{
withChart
}
/>
<
ChartPage
items
=
{
debouncedTags
}
withChart
=
{
withChart
}
loading
=
{
loadingRuns
||
loadingTags
}
/>
</
Content
>
</
Content
>
</>
</>
);
);
...
...
frontend/public/locales/en/moment.json
0 → 100644
浏览文件 @
33dbf151
{
"longDateFormat"
:
{
"LT"
:
"h:mm A"
,
"LTS"
:
"h:mm:ss A"
,
"L"
:
"MM/DD/YYYY"
,
"LL"
:
"MMMM Do YYYY"
,
"LLL"
:
"MMMM Do YYYY LT"
,
"LLLL"
:
"dddd, MMMM Do YYYY LT"
}
}
frontend/public/locales/en/scalars.json
浏览文件 @
33dbf151
{
{
"smoothing"
:
"Smoothing"
,
"smoothing"
:
"Smoothing"
,
"value"
:
"Value"
,
"smoothed"
:
"Smoothed"
,
"x-axis"
:
"X-Axis"
,
"x-axis"
:
"X-Axis"
,
"x-axis-value"
:
{
"x-axis-value"
:
{
"step"
:
"Step"
,
"step"
:
"Step"
,
...
...
frontend/public/locales/zh/moment.json
0 → 100644
浏览文件 @
33dbf151
{
"longDateFormat"
:
{
"LT"
:
"HH:mm"
,
"LTS"
:
"HH:mm:ss"
,
"L"
:
"YYYY-MM-DD"
,
"LL"
:
"YYYY MM Do"
,
"LLL"
:
"YYYY MMMM Do LT"
,
"LLLL"
:
"YYYY MMMM Do dddd LT"
}
}
frontend/public/locales/zh/scalars.json
浏览文件 @
33dbf151
{
{
"smoothing"
:
"平滑度"
,
"smoothing"
:
"平滑度"
,
"value"
:
"值"
,
"smoothed"
:
"平滑值"
,
"x-axis"
:
"X轴"
,
"x-axis"
:
"X轴"
,
"x-axis-value"
:
{
"x-axis-value"
:
{
"step"
:
"步"
,
"step"
:
"步"
,
...
...
frontend/server/index.ts
浏览文件 @
33dbf151
...
@@ -2,6 +2,7 @@ import path from 'path';
...
@@ -2,6 +2,7 @@ import path from 'path';
import
express
from
'
express
'
;
import
express
from
'
express
'
;
import
next
from
'
next
'
;
import
next
from
'
next
'
;
import
{
setConfig
}
from
'
next/config
'
;
import
{
setConfig
}
from
'
next/config
'
;
import
{
argv
}
from
'
yargs
'
;
import
{
nextI18NextMiddleware
}
from
'
../utils/i18next/middlewares
'
;
import
{
nextI18NextMiddleware
}
from
'
../utils/i18next/middlewares
'
;
import
nextI18next
from
'
../utils/i18n
'
;
import
nextI18next
from
'
../utils/i18n
'
;
import
config
from
'
../next.config
'
;
import
config
from
'
../next.config
'
;
...
@@ -10,9 +11,11 @@ const isDev = process.env.NODE_ENV !== 'production';
...
@@ -10,9 +11,11 @@ const isDev = process.env.NODE_ENV !== 'production';
setConfig
(
config
);
setConfig
(
config
);
const
host
=
process
.
env
.
HOST
||
'
localhost
'
;
const
host
=
(
argv
.
host
as
string
)
||
process
.
env
.
HOST
||
'
localhost
'
;
const
port
=
process
.
env
.
PORT
||
8999
;
const
port
:
string
|
number
=
Number
.
parseInt
(
argv
.
port
as
string
,
10
)
||
process
.
env
.
PORT
||
8999
;
const
proxy
=
process
.
env
.
PROXY
;
const
proxy
=
(
argv
.
proxy
as
string
)
||
process
.
env
.
PROXY
;
const
delay
=
Number
.
parseInt
(
argv
.
delay
as
string
,
10
);
const
app
=
next
({
dev
:
isDev
,
conf
:
config
});
const
app
=
next
({
dev
:
isDev
,
conf
:
config
});
const
handle
=
app
.
getRequestHandler
();
const
handle
=
app
.
getRequestHandler
();
...
@@ -25,7 +28,10 @@ const handle = app.getRequestHandler();
...
@@ -25,7 +28,10 @@ const handle = app.getRequestHandler();
server
.
use
(
config
.
env
.
API_URL
,
createProxyMiddleware
({
target
:
proxy
,
changeOrigin
:
true
}));
server
.
use
(
config
.
env
.
API_URL
,
createProxyMiddleware
({
target
:
proxy
,
changeOrigin
:
true
}));
}
else
if
(
isDev
)
{
}
else
if
(
isDev
)
{
const
{
default
:
mock
}
=
await
import
(
'
../utils/mock
'
);
const
{
default
:
mock
}
=
await
import
(
'
../utils/mock
'
);
server
.
use
(
config
.
env
.
API_URL
,
mock
({
path
:
path
.
resolve
(
__dirname
,
'
../mock
'
)}));
server
.
use
(
config
.
env
.
API_URL
,
mock
({
path
:
path
.
resolve
(
__dirname
,
'
../mock
'
),
delay
:
delay
?
()
=>
Math
.
random
()
*
delay
:
0
})
);
}
}
await
nextI18next
.
initPromise
;
await
nextI18next
.
initPromise
;
...
...
frontend/types/i18n.d.ts
浏览文件 @
33dbf151
declare
module
'
path-match
'
;
declare
module
'
detect-node
'
;
declare
module
'
detect-node
'
;
declare
module
'
path-match
'
;
frontend/utils/fetch.ts
浏览文件 @
33dbf151
...
@@ -3,13 +3,19 @@
...
@@ -3,13 +3,19 @@
import
fetch
from
'
isomorphic-unfetch
'
;
import
fetch
from
'
isomorphic-unfetch
'
;
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-explicit-any */
export
const
fetcher
=
async
(
url
:
string
,
options
?:
any
,
baseUrl
=
''
):
Promise
<
any
>
=>
{
const
res
=
await
fetch
(
baseUrl
+
process
.
env
.
API_URL
+
url
,
options
);
export
const
fetcher
=
async
<
T
=
any
>
(
url
:
string
,
options
?:
any
):
Promise
<
T
>
=>
{
const
res
=
await
fetch
(
process
.
env
.
API_URL
+
url
,
options
);
const
response
=
await
res
.
json
();
const
response
=
await
res
.
json
();
return
response
&&
'
data
'
in
response
?
response
.
data
:
response
;
return
response
&&
'
data
'
in
response
?
response
.
data
:
response
;
};
};
export
const
cycleFetcher
=
async
(
urls
:
string
[],
options
?:
any
,
baseUrl
=
''
):
Promise
<
any
>
=>
{
export
const
blobFetcher
=
async
(
url
:
string
,
options
?:
any
):
Promise
<
Blob
>
=>
{
return
await
Promise
.
all
(
urls
.
map
(
url
=>
fetcher
(
url
,
options
,
baseUrl
)));
const
res
=
await
fetch
(
process
.
env
.
API_URL
+
url
,
options
);
return
await
res
.
blob
();
};
export
const
cycleFetcher
=
async
<
T
=
any
>
(
urls
:
string
[],
options
?:
any
):
Promise
<
T
[]
>
=>
{
return
await
Promise
.
all
(
urls
.
map
(
url
=>
fetcher
<
T
>
(
url
,
options
)));
};
};
frontend/utils/i18n.ts
浏览文件 @
33dbf151
import
{
NextComponentType
,
NextPageContext
}
from
'
next
'
;
import
{
NextComponentType
,
NextPageContext
}
from
'
next
'
;
import
moment
from
'
moment
'
;
import
NextI18Next
from
'
./i18next
'
;
import
NextI18Next
from
'
./i18next
'
;
import
{
env
}
from
'
../next.config
'
;
import
{
env
}
from
'
../next.config
'
;
...
@@ -8,6 +9,10 @@ const otherLanguages = allLanguages.filter(lang => lang !== defaultLanguage);
...
@@ -8,6 +9,10 @@ const otherLanguages = allLanguages.filter(lang => lang !== defaultLanguage);
const
isDev
=
process
.
env
.
NODE_ENV
===
'
development
'
;
const
isDev
=
process
.
env
.
NODE_ENV
===
'
development
'
;
allLanguages
.
forEach
(
async
(
lang
:
string
)
=>
{
moment
.
updateLocale
(
lang
,
await
import
(
`../public/locales/
${
lang
}
/moment.json`
));
});
const
nextI18Next
=
new
NextI18Next
({
const
nextI18Next
=
new
NextI18Next
({
localePath
:
env
.
LOCALE_PATH
,
localePath
:
env
.
LOCALE_PATH
,
browserLanguageDetection
:
!
isDev
,
browserLanguageDetection
:
!
isDev
,
...
...
frontend/utils/i18next/components/Link.tsx
浏览文件 @
33dbf151
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
*/
*/
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-explicit-any */
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
PropTypes
from
'
prop-types
'
;
import
PropTypes
from
'
prop-types
'
;
import
NextLink
,
{
LinkProps
}
from
'
next/link
'
;
import
NextLink
,
{
LinkProps
}
from
'
next/link
'
;
...
...
frontend/utils/i18next/config/create-config.ts
浏览文件 @
33dbf151
/* eslint-disable @typescript-eslint/no-explicit-any */
import
{
defaultConfig
}
from
'
./default-config
'
;
import
{
defaultConfig
}
from
'
./default-config
'
;
import
{
consoleMessage
,
isServer
}
from
'
../utils
'
;
import
{
consoleMessage
,
isServer
}
from
'
../utils
'
;
import
{
InitConfig
,
Config
}
from
'
../types
'
;
import
{
Config
}
from
'
../types
'
;
const
deepMergeObjects
=
[
'
backend
'
,
'
detection
'
];
const
deepMergeObjects
=
[
'
backend
'
,
'
detection
'
];
const
dedupe
=
(
names
:
string
[])
=>
names
.
filter
((
v
,
i
)
=>
names
.
indexOf
(
v
)
===
i
);
const
dedupe
=
(
names
:
string
[])
=>
names
.
filter
((
v
,
i
)
=>
names
.
indexOf
(
v
)
===
i
);
...
@@ -29,7 +31,7 @@ export const createConfig = (userConfig: Config): Config => {
...
@@ -29,7 +31,7 @@ export const createConfig = (userConfig: Config): Config => {
if
(
isServer
())
{
if
(
isServer
())
{
const
fs
=
eval
(
"
require('fs')
"
);
const
fs
=
eval
(
"
require('fs')
"
);
const
path
=
require
(
'
path
'
);
const
path
=
require
(
'
path
'
);
// eslint-disable-line @typescript-eslint/no-var-requires
let
serverLocalePath
=
localePath
;
let
serverLocalePath
=
localePath
;
/*
/*
...
...
frontend/utils/i18next/index.ts
浏览文件 @
33dbf151
import
{
withTranslation
,
useTranslation
,
Trans
}
from
'
react-i18next
'
;
import
{
withTranslation
,
useTranslation
,
Trans
}
from
'
react-i18next
'
;
import
hoistNonReactStatics
from
'
hoist-non-react-statics
'
;
import
hoistNonReactStatics
from
'
hoist-non-react-statics
'
;
import
{
createConfig
}
from
'
./config/create-config
'
;
import
{
createConfig
}
from
'
./config/create-config
'
;
import
createI18NextClient
from
'
./create-i18next-client
'
;
import
createI18NextClient
from
'
./create-i18next-client
'
;
import
{
appWithTranslation
,
withInternals
}
from
'
./hocs
'
;
import
{
appWithTranslation
,
withInternals
}
from
'
./hocs
'
;
import
{
consoleMessage
}
from
'
./utils
'
;
import
{
consoleMessage
}
from
'
./utils
'
;
import
{
Link
}
from
'
./components
'
;
import
{
Link
}
from
'
./components
'
;
import
{
wrapRouter
}
from
'
./router
'
;
import
{
wrapRouter
}
from
'
./router
'
;
import
{
import
{
AppWithTranslation
,
AppWithTranslation
,
Config
,
Config
,
...
...
frontend/utils/i18next/middlewares/next-i18next-middleware.ts
浏览文件 @
33dbf151
frontend/utils/i18next/router/wrap-router.ts
浏览文件 @
33dbf151
...
@@ -9,6 +9,9 @@
...
@@ -9,6 +9,9 @@
Very important: if you import `Router` from NextJs directly,
Very important: if you import `Router` from NextJs directly,
and not this file, your lang subpath routing will break.
and not this file, your lang subpath routing will break.
*/
*/
/* eslint-disable @typescript-eslint/no-explicit-any */
import
NextRouter
,
{
SingletonRouter
}
from
'
next/router
'
;
import
NextRouter
,
{
SingletonRouter
}
from
'
next/router
'
;
import
{
lngPathCorrector
,
subpathIsRequired
}
from
'
../utils
'
;
import
{
lngPathCorrector
,
subpathIsRequired
}
from
'
../utils
'
;
...
...
frontend/utils/i18next/types.ts
浏览文件 @
33dbf151
/*
tslint:disable
no-explicit-any */
/*
eslint-disable @typescript-eslint/
no-explicit-any */
import
*
as
React
from
'
react
'
;
import
*
as
React
from
'
react
'
;
import
{
import
{
...
@@ -64,6 +64,7 @@ declare class NextI18Next {
...
@@ -64,6 +64,7 @@ declare class NextI18Next {
}
}
declare
global
{
declare
global
{
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace
Express
{
namespace
Express
{
interface
Request
{
interface
Request
{
lng
?:
string
;
lng
?:
string
;
...
...
frontend/utils/i18next/utils/lng-path-corrector.ts
浏览文件 @
33dbf151
/* eslint-disable @typescript-eslint/no-explicit-any */
import
{
format
as
formatUrl
,
parse
as
parseUrl
}
from
'
url
'
;
import
{
format
as
formatUrl
,
parse
as
parseUrl
}
from
'
url
'
;
import
{
Config
}
from
'
../types
'
;
import
{
Config
}
from
'
../types
'
;
...
@@ -42,7 +44,7 @@ export const lngPathCorrector = (config: Config, currentRoute: any, currentLangu
...
@@ -42,7 +44,7 @@ export const lngPathCorrector = (config: Config, currentRoute: any, currentLangu
throw
new
Error
(
'
Invalid configuration: Current language is not included in all languages array
'
);
throw
new
Error
(
'
Invalid configuration: Current language is not included in all languages array
'
);
}
}
le
t
href
=
parseHref
(
originalHref
);
cons
t
href
=
parseHref
(
originalHref
);
let
as
=
parseAs
(
originalAs
,
href
);
let
as
=
parseAs
(
originalAs
,
href
);
/*
/*
...
@@ -56,8 +58,8 @@ export const lngPathCorrector = (config: Config, currentRoute: any, currentLangu
...
@@ -56,8 +58,8 @@ export const lngPathCorrector = (config: Config, currentRoute: any, currentLangu
Strip any/all subpaths from the `as` value
Strip any/all subpaths from the `as` value
*/
*/
Object
.
values
(
localeSubpaths
||
{}).
forEach
((
subpath
:
string
)
=>
{
Object
.
values
(
localeSubpaths
||
{}).
forEach
((
subpath
:
string
)
=>
{
if
(
subpathIsPresent
(
as
,
subpath
))
{
if
(
subpathIsPresent
(
as
as
string
,
subpath
))
{
as
=
removeSubpath
(
as
,
subpath
);
as
=
removeSubpath
(
as
as
string
,
subpath
);
}
}
});
});
...
...
frontend/utils/i18next/utils/lngs-to-load.ts
浏览文件 @
33dbf151
import
{
FallbackLng
}
from
'
i18next
'
;
import
{
FallbackLng
}
from
'
i18next
'
;
export
const
lngsToLoad
=
(
initialLng
:
string
|
null
,
fallbackLng
:
FallbackLng
|
false
,
otherLanguages
?:
string
[])
=>
{
export
const
lngsToLoad
=
(
initialLng
:
string
|
null
,
fallbackLng
:
FallbackLng
|
false
,
otherLanguages
?:
string
[])
=>
{
const
languages
=
[];
const
languages
=
[];
...
...
frontend/utils/mock.ts
浏览文件 @
33dbf151
...
@@ -27,14 +27,16 @@ export default (options: Options) => {
...
@@ -27,14 +27,16 @@ export default (options: Options) => {
mock
=
await
mock
(
req
,
res
);
mock
=
await
mock
(
req
,
res
);
}
}
// sleep
let
delay
=
0
;
let
delay
=
0
;
if
(
'
function
'
===
typeof
options
.
delay
)
{
if
(
'
function
'
===
typeof
options
.
delay
)
{
delay
=
options
.
delay
(
method
);
delay
=
options
.
delay
(
method
);
}
else
if
(
options
.
delay
)
{
}
else
if
(
options
.
delay
)
{
delay
=
options
.
delay
;
delay
=
options
.
delay
;
}
}
if
(
delay
)
{
await
sleep
(
delay
);
await
sleep
(
delay
);
}
if
(
mock
instanceof
ArrayBuffer
)
{
if
(
mock
instanceof
ArrayBuffer
)
{
res
.
send
(
Buffer
.
from
(
mock
));
res
.
send
(
Buffer
.
from
(
mock
));
...
...
frontend/utils/scalars.ts
浏览文件 @
33dbf151
...
@@ -3,6 +3,7 @@ import minBy from 'lodash/minBy';
...
@@ -3,6 +3,7 @@ import minBy from 'lodash/minBy';
import
maxBy
from
'
lodash/maxBy
'
;
import
maxBy
from
'
lodash/maxBy
'
;
import
sortBy
from
'
lodash/sortBy
'
;
import
sortBy
from
'
lodash/sortBy
'
;
import
moment
from
'
moment
'
;
import
moment
from
'
moment
'
;
import
{
I18n
}
from
'
~/utils/i18next/types
'
;
// https://en.wikipedia.org/wiki/Moving_average
// https://en.wikipedia.org/wiki/Moving_average
export
const
transform
=
(
seriesData
:
number
[][],
smoothingWeight
:
number
)
=>
{
export
const
transform
=
(
seriesData
:
number
[][],
smoothingWeight
:
number
)
=>
{
...
@@ -79,8 +80,13 @@ export type TooltipData = {
...
@@ -79,8 +80,13 @@ export type TooltipData = {
item
:
number
[];
item
:
number
[];
};
};
export
const
formatTime
=
(
value
:
number
,
language
:
string
,
formatter
=
'
L LTS
'
)
=>
moment
(
Math
.
floor
(
value
),
'
x
'
)
.
locale
(
language
)
.
format
(
formatter
);
// TODO: make it better, don't concat html
// TODO: make it better, don't concat html
export
const
tooltip
=
(
data
:
TooltipData
[])
=>
{
export
const
tooltip
=
(
data
:
TooltipData
[]
,
i18n
:
I18n
)
=>
{
const
indexPropMap
=
{
const
indexPropMap
=
{
Time
:
0
,
Time
:
0
,
Step
:
1
,
Step
:
1
,
...
@@ -96,6 +102,14 @@ export const tooltip = (data: TooltipData[]) => {
...
@@ -96,6 +102,14 @@ export const tooltip = (data: TooltipData[]) => {
Smoothed
:
60
,
Smoothed
:
60
,
Relative
:
60
Relative
:
60
};
};
const
translatePropMap
=
{
Run
:
'
common:runs
'
,
Time
:
'
scalars:x-axis-value.wall
'
,
Step
:
'
scalars:x-axis-value.step
'
,
Value
:
'
scalars:value
'
,
Smoothed
:
'
scalars:smoothed
'
,
Relative
:
'
scalars:x-axis-value.relative
'
};
const
transformedData
=
data
.
map
(
item
=>
{
const
transformedData
=
data
.
map
(
item
=>
{
const
data
=
item
.
item
;
const
data
=
item
.
item
;
return
{
return
{
...
@@ -104,7 +118,7 @@ export const tooltip = (data: TooltipData[]) => {
...
@@ -104,7 +118,7 @@ export const tooltip = (data: TooltipData[]) => {
Smoothed
:
data
[
indexPropMap
.
Smoothed
].
toString
().
slice
(
0
,
6
),
Smoothed
:
data
[
indexPropMap
.
Smoothed
].
toString
().
slice
(
0
,
6
),
Value
:
data
[
indexPropMap
.
Value
].
toString
().
slice
(
0
,
6
),
Value
:
data
[
indexPropMap
.
Value
].
toString
().
slice
(
0
,
6
),
Step
:
data
[
indexPropMap
.
Step
],
Step
:
data
[
indexPropMap
.
Step
],
Time
:
moment
(
Math
.
floor
(
data
[
indexPropMap
.
Time
]),
'
x
'
).
format
(
'
YYYY-MM-DD HH:mm:ss
'
),
Time
:
formatTime
(
data
[
indexPropMap
.
Time
],
i18n
.
language
),
// Relative display value should take easy-read into consideration.
// Relative display value should take easy-read into consideration.
// Better to tranform data to 'day:hour', 'hour:minutes', 'minute: seconds' and second only.
// Better to tranform data to 'day:hour', 'hour:minutes', 'minute: seconds' and second only.
Relative
:
Math
.
floor
(
data
[
indexPropMap
.
Relative
]
*
60
*
60
)
+
'
s
'
Relative
:
Math
.
floor
(
data
[
indexPropMap
.
Relative
]
*
60
*
60
)
+
'
s
'
...
@@ -112,11 +126,11 @@ export const tooltip = (data: TooltipData[]) => {
...
@@ -112,11 +126,11 @@ export const tooltip = (data: TooltipData[]) => {
});
});
let
headerHtml
=
'
<tr style="font-size:14px;">
'
;
let
headerHtml
=
'
<tr style="font-size:14px;">
'
;
headerHtml
+=
Object
.
keys
(
transformedData
[
0
])
headerHtml
+=
(
Object
.
keys
(
transformedData
[
0
])
as
(
keyof
typeof
transformedData
[
0
])[
])
.
map
(
key
=>
{
.
map
(
key
=>
{
return
`<td style="padding: 0 4px; font-weight: bold; width:
${
return
`<td style="padding: 0 4px; font-weight: bold; width:
${
widthPropMap
[
key
]}
px;">
${
i18n
.
t
(
widthPropMap
[
key
as
keyof
typeof
transformedData
[
0
]
]
translatePropMap
[
key
]
}
px;">
${
key
}
</td>`
;
)
}
</td>`
;
})
})
.
join
(
''
);
.
join
(
''
);
headerHtml
+=
'
</tr>
'
;
headerHtml
+=
'
</tr>
'
;
...
...
frontend/utils/style.ts
浏览文件 @
33dbf151
...
@@ -35,6 +35,7 @@ export const backgroundFocusedColor = '#F6F6F6';
...
@@ -35,6 +35,7 @@ export const backgroundFocusedColor = '#F6F6F6';
export
const
borderColor
=
'
#DDD
'
;
export
const
borderColor
=
'
#DDD
'
;
export
const
borderFocusedColor
=
darken
(
0.15
,
borderColor
);
export
const
borderFocusedColor
=
darken
(
0.15
,
borderColor
);
export
const
progressBarColor
=
'
#FFF
'
;
export
const
progressBarColor
=
'
#FFF
'
;
export
const
maskColor
=
'
rgba(255, 255, 255, 0.8)
'
;
// transitions
// transitions
export
const
duration
=
'
75ms
'
;
export
const
duration
=
'
75ms
'
;
...
...
frontend/yarn.lock
浏览文件 @
33dbf151
...
@@ -883,7 +883,7 @@
...
@@ -883,7 +883,7 @@
dependencies:
dependencies:
regenerator-runtime "^0.13.2"
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4":
"@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.
7.2", "@babel/runtime@^7.
8.4":
version "7.8.7"
version "7.8.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.7.tgz#8fefce9802db54881ba59f90bb28719b4996324d"
integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==
integrity sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==
...
@@ -928,6 +928,42 @@
...
@@ -928,6 +928,42 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
"@emotion/cache@^10.0.27":
version "10.0.29"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0"
integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==
dependencies:
"@emotion/sheet" "0.9.4"
"@emotion/stylis" "0.8.5"
"@emotion/utils" "0.11.3"
"@emotion/weak-memoize" "0.2.5"
"@emotion/core@^10.0.15":
version "10.0.28"
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.28.tgz#bb65af7262a234593a9e952c041d0f1c9b9bef3d"
integrity sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==
dependencies:
"@babel/runtime" "^7.5.5"
"@emotion/cache" "^10.0.27"
"@emotion/css" "^10.0.27"
"@emotion/serialize" "^0.11.15"
"@emotion/sheet" "0.9.4"
"@emotion/utils" "0.11.3"
"@emotion/css@^10.0.27":
version "10.0.27"
resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
dependencies:
"@emotion/serialize" "^0.11.15"
"@emotion/utils" "0.11.3"
babel-plugin-emotion "^10.0.27"
"@emotion/hash@0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
"@emotion/is-prop-valid@^0.8.3":
"@emotion/is-prop-valid@^0.8.3":
version "0.8.7"
version "0.8.7"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.7.tgz#803449993f436f9a6c67752251ea3fc492a1044c"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.7.tgz#803449993f436f9a6c67752251ea3fc492a1044c"
...
@@ -940,16 +976,42 @@
...
@@ -940,16 +976,42 @@
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
"@emotion/stylis@^0.8.4":
"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16":
version "0.11.16"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad"
integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==
dependencies:
"@emotion/hash" "0.8.0"
"@emotion/memoize" "0.7.4"
"@emotion/unitless" "0.7.5"
"@emotion/utils" "0.11.3"
csstype "^2.5.7"
"@emotion/sheet@0.9.4":
version "0.9.4"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
"@emotion/stylis@0.8.5", "@emotion/stylis@^0.8.4":
version "0.8.5"
version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
"@emotion/unitless@^0.7.4":
"@emotion/unitless@
0.7.5", "@emotion/unitless@
^0.7.4":
version "0.7.5"
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
"@emotion/utils@0.11.3":
version "0.11.3"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
"@emotion/weak-memoize@0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
"@next/polyfill-nomodule@9.2.2":
"@next/polyfill-nomodule@9.2.2":
version "9.2.2"
version "9.2.2"
resolved "https://registry.yarnpkg.com/@next/polyfill-nomodule/-/polyfill-nomodule-9.2.2.tgz#2687d5b64ba053b247700f057f083dfd392ee52e"
resolved "https://registry.yarnpkg.com/@next/polyfill-nomodule/-/polyfill-nomodule-9.2.2.tgz#2687d5b64ba053b247700f057f083dfd392ee52e"
...
@@ -1118,9 +1180,9 @@
...
@@ -1118,9 +1180,9 @@
integrity sha512-Ny3rLbV5tnmqgW7w/poCcef4kXP8mHPo/p8EjTS5d9OUk8MlqAeRaM8eF7Vyv7QMLiIXNE94Pa1cMLSPkXQBoQ==
integrity sha512-Ny3rLbV5tnmqgW7w/poCcef4kXP8mHPo/p8EjTS5d9OUk8MlqAeRaM8eF7Vyv7QMLiIXNE94Pa1cMLSPkXQBoQ==
"@types/d3-scale@*":
"@types/d3-scale@*":
version "2.
1.1
"
version "2.
2.0
"
resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-2.
1.1.tgz#405e58771ec6ae7b8f7b4178ee1887620759e8f7
"
resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-2.
2.0.tgz#e5987a2857365823eb26ed5eb21bc566c4dcf1c0
"
integrity sha512-
kNTkbZQ+N/Ip8oX9PByXfDLoCSaZYm+VUOasbmsa6KD850/ziMdYepg/8kLg2plHzoLANdMqPoYQbvExevLUHg
==
integrity sha512-
oQFanN0/PiR2oySHfj+zAAkK1/p4LD32Nt1TMVmzk+bYHk7vgIg/iTXQWitp1cIkDw4LMdcgvO63wL+mNs47YA
==
dependencies:
dependencies:
"@types/d3-time" "*"
"@types/d3-time" "*"
...
@@ -1385,6 +1447,18 @@
...
@@ -1385,6 +1447,18 @@
"@types/webpack-sources" "*"
"@types/webpack-sources" "*"
source-map "^0.6.0"
source-map "^0.6.0"
"@types/yargs-parser@*":
version "15.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@15.0.4":
version "15.0.4"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==
dependencies:
"@types/yargs-parser" "*"
"@types/zrender@*":
"@types/zrender@*":
version "4.0.0"
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/zrender/-/zrender-4.0.0.tgz#a6806f12ec4eccaaebd9b0d816f049aca6188fbd"
resolved "https://registry.yarnpkg.com/@types/zrender/-/zrender-4.0.0.tgz#a6806f12ec4eccaaebd9b0d816f049aca6188fbd"
...
@@ -1718,7 +1792,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
...
@@ -1718,7 +1792,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
dependencies:
color-convert "^1.9.0"
color-convert "^1.9.0"
ansi-styles@^4.1.0:
ansi-styles@^4.
0.0, ansi-styles@^4.
1.0:
version "4.2.1"
version "4.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
...
@@ -1747,11 +1821,19 @@ anymatch@~3.1.1:
...
@@ -1747,11 +1821,19 @@ anymatch@~3.1.1:
normalize-path "^3.0.0"
normalize-path "^3.0.0"
picomatch "^2.0.4"
picomatch "^2.0.4"
aproba@^1.1.1:
aproba@^1.
0.3, aproba@^1.
1.1:
version "1.2.0"
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
are-we-there-yet@~1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
arg@^4.1.0:
arg@^4.1.0:
version "4.1.3"
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
...
@@ -1946,6 +2028,31 @@ babel-plugin-dynamic-import-node@^2.3.0:
...
@@ -1946,6 +2028,31 @@ babel-plugin-dynamic-import-node@^2.3.0:
dependencies:
dependencies:
object.assign "^4.1.0"
object.assign "^4.1.0"
babel-plugin-emotion@10.0.29, babel-plugin-emotion@^10.0.27:
version "10.0.29"
resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz#89d8e497091fcd3d10331f097f1471e4cc3f35b4"
integrity sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@emotion/hash" "0.8.0"
"@emotion/memoize" "0.7.4"
"@emotion/serialize" "^0.11.16"
babel-plugin-macros "^2.0.0"
babel-plugin-syntax-jsx "^6.18.0"
convert-source-map "^1.5.0"
escape-string-regexp "^1.0.5"
find-root "^1.1.0"
source-map "^0.5.7"
babel-plugin-macros@^2.0.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
dependencies:
"@babel/runtime" "^7.7.2"
cosmiconfig "^6.0.0"
resolve "^1.12.0"
babel-plugin-styled-components@1.10.7, "babel-plugin-styled-components@>= 1":
babel-plugin-styled-components@1.10.7, "babel-plugin-styled-components@>= 1":
version "1.10.7"
version "1.10.7"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz#3494e77914e9989b33cc2d7b3b29527a949d635c"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.7.tgz#3494e77914e9989b33cc2d7b3b29527a949d635c"
...
@@ -2319,7 +2426,7 @@ camelcase@5.0.0:
...
@@ -2319,7 +2426,7 @@ camelcase@5.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
camelcase@5.3.1, camelcase@^5.3.1:
camelcase@5.3.1, camelcase@^5.
0.0, camelcase@^5.
3.1:
version "5.3.1"
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
...
@@ -2493,6 +2600,15 @@ cli-width@^2.0.0:
...
@@ -2493,6 +2600,15 @@ cli-width@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
cliui@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
dependencies:
string-width "^4.2.0"
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
clone-deep@^4.0.1:
clone-deep@^4.0.1:
version "4.0.1"
version "4.0.1"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
...
@@ -2653,6 +2769,11 @@ console-browserify@^1.1.0:
...
@@ -2653,6 +2769,11 @@ console-browserify@^1.1.0:
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
constants-browserify@^1.0.0:
constants-browserify@^1.0.0:
version "1.0.0"
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
...
@@ -2670,7 +2791,7 @@ content-type@1.0.4, content-type@~1.0.4:
...
@@ -2670,7 +2791,7 @@ content-type@1.0.4, content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
convert-source-map@1.7.0, convert-source-map@^1.7.0:
convert-source-map@1.7.0, convert-source-map@^1.
5.0, convert-source-map@^1.
7.0:
version "1.7.0"
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
...
@@ -2794,10 +2915,10 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
...
@@ -2794,10 +2915,10 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
safe-buffer "^5.0.1"
sha.js "^2.4.8"
sha.js "^2.4.8"
cross-env@7.0.
1
:
cross-env@7.0.
2
:
version "7.0.
1
"
version "7.0.
2
"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.
1.tgz#c8e03412ea0e1370fe3f0066929a70b8e1e90c3
9"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.
2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f
9"
integrity sha512-
1+DmLosu38kC4s1H4HzNkcolwdANifu9+5bE6uKQCV4L6jvVdV9qdRAk8vV3GoWRe0x4z+K2fFhgoDMqwNsPqQ
==
integrity sha512-
KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw
==
dependencies:
dependencies:
cross-spawn "^7.0.1"
cross-spawn "^7.0.1"
...
@@ -2954,7 +3075,7 @@ cssnano-simple@1.0.0:
...
@@ -2954,7 +3075,7 @@ cssnano-simple@1.0.0:
cssnano-preset-simple "^1.0.0"
cssnano-preset-simple "^1.0.0"
postcss "^7.0.18"
postcss "^7.0.18"
csstype@^2.2.0:
csstype@^2.2.0
, csstype@^2.5.7
:
version "2.6.9"
version "2.6.9"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098"
integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==
integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==
...
@@ -3264,6 +3385,11 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
...
@@ -3264,6 +3385,11 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
dependencies:
dependencies:
ms "^2.1.1"
ms "^2.1.1"
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decode-uri-component@^0.2.0:
decode-uri-component@^0.2.0:
version "0.2.0"
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
...
@@ -3332,6 +3458,11 @@ del@^3.0.0:
...
@@ -3332,6 +3458,11 @@ del@^3.0.0:
pify "^3.0.0"
pify "^3.0.0"
rimraf "^2.2.8"
rimraf "^2.2.8"
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
depd@~1.1.1, depd@~1.1.2:
depd@~1.1.1, depd@~1.1.2:
version "1.1.2"
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
...
@@ -3350,6 +3481,11 @@ destroy@~1.0.4:
...
@@ -3350,6 +3481,11 @@ destroy@~1.0.4:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
detect-node@2.0.4:
detect-node@2.0.4:
version "2.0.4"
version "2.0.4"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
...
@@ -3484,9 +3620,9 @@ ee-first@1.1.1:
...
@@ -3484,9 +3620,9 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.363:
electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.363:
version "1.3.3
68
"
version "1.3.3
70
"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.3
68.tgz#d7597e04339f7ca70762031ec473d38eb2df6acb
"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.3
70.tgz#420fba483d30ba3f7965b30ecf850fdb5f08a0bc
"
integrity sha512-
fqzDipW3p+uDkHUHFPrdW3wINRKcJsbnJwBD7hgaQEQwcuLSvNLw6SeUp5gKDpTbmTl7zri7IZfhsdTUTnygJg
==
integrity sha512-
399cXDE9C7qoVF2CUgCA/MLflfvxbo1F0kB/pkB94426freL/JgZ0HNaloomsOfnE+VC/qgTFZqzmivSdaNfPQ
==
elegant-spinner@^1.0.1:
elegant-spinner@^1.0.1:
version "1.0.1"
version "1.0.1"
...
@@ -4067,6 +4203,11 @@ find-cache-dir@^3.0.0:
...
@@ -4067,6 +4203,11 @@ find-cache-dir@^3.0.0:
make-dir "^3.0.2"
make-dir "^3.0.2"
pkg-dir "^4.1.0"
pkg-dir "^4.1.0"
find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
find-up@4.0.0:
find-up@4.0.0:
version "4.0.0"
version "4.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a"
...
@@ -4088,7 +4229,7 @@ find-up@^3.0.0:
...
@@ -4088,7 +4229,7 @@ find-up@^3.0.0:
dependencies:
dependencies:
locate-path "^3.0.0"
locate-path "^3.0.0"
find-up@^4.0.0:
find-up@^4.0.0
, find-up@^4.1.0
:
version "4.1.0"
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
...
@@ -4181,6 +4322,13 @@ from2@^2.1.0:
...
@@ -4181,6 +4322,13 @@ from2@^2.1.0:
inherits "^2.0.1"
inherits "^2.0.1"
readable-stream "^2.0.0"
readable-stream "^2.0.0"
fs-minipass@^1.2.5:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"
fs-write-stream-atomic@^1.0.8:
fs-write-stream-atomic@^1.0.8:
version "1.0.10"
version "1.0.10"
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
...
@@ -4219,11 +4367,30 @@ functional-red-black-tree@^1.0.1:
...
@@ -4219,11 +4367,30 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
has-unicode "^2.0.0"
object-assign "^4.1.0"
signal-exit "^3.0.0"
string-width "^1.0.1"
strip-ansi "^3.0.1"
wide-align "^1.1.0"
gensync@^1.0.0-beta.1:
gensync@^1.0.0-beta.1:
version "1.0.0-beta.1"
version "1.0.0-beta.1"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
get-caller-file@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-own-enumerable-property-symbols@^3.0.0:
get-own-enumerable-property-symbols@^3.0.0:
version "3.0.2"
version "3.0.2"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
...
@@ -4377,6 +4544,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1:
...
@@ -4377,6 +4544,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
has-value@^0.3.1:
has-value@^0.3.1:
version "0.3.1"
version "0.3.1"
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
...
@@ -4586,7 +4758,7 @@ i18next@19.3.2:
...
@@ -4586,7 +4758,7 @@ i18next@19.3.2:
dependencies:
dependencies:
"@babel/runtime" "^7.3.1"
"@babel/runtime" "^7.3.1"
iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24:
iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24
, iconv-lite@^0.4.4
:
version "0.4.24"
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
...
@@ -4620,6 +4792,13 @@ ignore-loader@0.1.2:
...
@@ -4620,6 +4792,13 @@ ignore-loader@0.1.2:
resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463"
resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463"
integrity sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM=
integrity sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM=
ignore-walk@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
dependencies:
minimatch "^3.0.4"
ignore@^4.0.6:
ignore@^4.0.6:
version "4.0.6"
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
...
@@ -5689,6 +5868,21 @@ minimist@^1.2.0:
...
@@ -5689,6 +5868,21 @@ minimist@^1.2.0:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
minizlib@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"
mississippi@^3.0.0:
mississippi@^3.0.0:
version "3.0.0"
version "3.0.0"
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
...
@@ -5713,7 +5907,7 @@ mixin-deep@^1.2.0:
...
@@ -5713,7 +5907,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
for-in "^1.0.2"
is-extendable "^1.0.1"
is-extendable "^1.0.1"
mkdirp@0.5.1, mkdirp@^0.5.1:
mkdirp@0.5.1, mkdirp@^0.5.
0, mkdirp@^0.5.
1:
version "0.5.1"
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
...
@@ -5784,6 +5978,15 @@ natural-compare@^1.4.0:
...
@@ -5784,6 +5978,15 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.2.1:
version "2.3.3"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117"
integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.2:
negotiator@0.6.2:
version "0.6.2"
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
...
@@ -5936,6 +6139,22 @@ node-libs-browser@^2.2.1:
...
@@ -5936,6 +6139,22 @@ node-libs-browser@^2.2.1:
util "^0.11.0"
util "^0.11.0"
vm-browserify "^1.0.1"
vm-browserify "^1.0.1"
node-pre-gyp@*:
version "0.14.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
needle "^2.2.1"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
rc "^1.2.7"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^4.4.2"
node-releases@^1.1.44, node-releases@^1.1.50:
node-releases@^1.1.44, node-releases@^1.1.50:
version "1.1.50"
version "1.1.50"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.50.tgz#803c40d2c45db172d0410e4efec83aa8c6ad0592"
...
@@ -5959,6 +6178,14 @@ nodemon@2.0.2:
...
@@ -5959,6 +6178,14 @@ nodemon@2.0.2:
undefsafe "^2.0.2"
undefsafe "^2.0.2"
update-notifier "^2.5.0"
update-notifier "^2.5.0"
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
dependencies:
abbrev "1"
osenv "^0.1.4"
nopt@~1.0.10:
nopt@~1.0.10:
version "1.0.10"
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
...
@@ -6008,6 +6235,27 @@ normalize-url@1.9.1:
...
@@ -6008,6 +6235,27 @@ normalize-url@1.9.1:
query-string "^4.1.0"
query-string "^4.1.0"
sort-keys "^1.0.0"
sort-keys "^1.0.0"
npm-bundled@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
npm-packlist@^1.1.6:
version "1.4.8"
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
npm-normalize-package-bin "^1.0.1"
npm-run-path@^2.0.0:
npm-run-path@^2.0.0:
version "2.0.2"
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
...
@@ -6022,6 +6270,16 @@ npm-run-path@^4.0.0:
...
@@ -6022,6 +6270,16 @@ npm-run-path@^4.0.0:
dependencies:
dependencies:
path-key "^3.0.0"
path-key "^3.0.0"
npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.3"
set-blocking "~2.0.0"
nprogress@0.2.0:
nprogress@0.2.0:
version "0.2.0"
version "0.2.0"
resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
...
@@ -6187,11 +6445,24 @@ os-browserify@^0.3.0:
...
@@ -6187,11 +6445,24 @@ os-browserify@^0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
os-tmpdir@~1.0.2:
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2"
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-finally@^1.0.0:
p-finally@^1.0.0:
version "1.0.0"
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
...
@@ -7098,7 +7369,7 @@ raw-body@2.4.0:
...
@@ -7098,7 +7369,7 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
iconv-lite "0.4.24"
unpipe "1.0.0"
unpipe "1.0.0"
rc@^1.0.1, rc@^1.1.6:
rc@^1.0.1, rc@^1.1.6
, rc@^1.2.7
:
version "1.2.8"
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
...
@@ -7149,6 +7420,13 @@ react-is@16.8.6:
...
@@ -7149,6 +7420,13 @@ react-is@16.8.6:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
react-spinners@0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/react-spinners/-/react-spinners-0.8.0.tgz#a64f5bc4c301f463841cf75ed67d6f64a365997c"
integrity sha512-xeoRNn4YlsqKaqBm0SgCrRt3sI99CGFraZbw9noD9RLKwumEJ55e9dkXjdEbZgJUmPymQCDrsazQe79DoFd9IQ==
dependencies:
"@emotion/core" "^10.0.15"
react@16.13.0:
react@16.13.0:
version "16.13.0"
version "16.13.0"
resolved "https://registry.yarnpkg.com/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7"
resolved "https://registry.yarnpkg.com/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7"
...
@@ -7167,7 +7445,7 @@ read-pkg@^2.0.0:
...
@@ -7167,7 +7445,7 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
normalize-package-data "^2.3.2"
path-type "^2.0.0"
path-type "^2.0.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.
0.6, readable-stream@^2.
1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
...
@@ -7331,6 +7609,16 @@ repeat-string@^1.6.1:
...
@@ -7331,6 +7609,16 @@ repeat-string@^1.6.1:
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-main-filename@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
requires-port@^1.0.0:
requires-port@^1.0.0:
version "1.0.0"
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
...
@@ -7367,7 +7655,7 @@ resolve-url@^0.2.1:
...
@@ -7367,7 +7655,7 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@^1.10.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.8.1:
resolve@^1.10.0, resolve@^1.1
2.0, resolve@^1.1
4.2, resolve@^1.3.2, resolve@^1.8.1:
version "1.15.1"
version "1.15.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
...
@@ -7420,7 +7708,7 @@ rimraf@2.6.3:
...
@@ -7420,7 +7708,7 @@ rimraf@2.6.3:
dependencies:
dependencies:
glob "^7.1.3"
glob "^7.1.3"
rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3:
rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.
1, rimraf@^2.6.
3:
version "2.7.1"
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
...
@@ -7499,6 +7787,11 @@ save-svg-as-png@1.4.17:
...
@@ -7499,6 +7787,11 @@ save-svg-as-png@1.4.17:
resolved "https://registry.yarnpkg.com/save-svg-as-png/-/save-svg-as-png-1.4.17.tgz#294442002772a24f1db1bf8a2aaf7df4ab0cdc55"
resolved "https://registry.yarnpkg.com/save-svg-as-png/-/save-svg-as-png-1.4.17.tgz#294442002772a24f1db1bf8a2aaf7df4ab0cdc55"
integrity sha512-7QDaqJsVhdFPwviCxkgHiGm9omeaMBe1VKbHySWU6oFB2LtnGCcYS13eVoslUgq6VZC6Tjq/HddBd1K6p2PGpA==
integrity sha512-7QDaqJsVhdFPwviCxkgHiGm9omeaMBe1VKbHySWU6oFB2LtnGCcYS13eVoslUgq6VZC6Tjq/HddBd1K6p2PGpA==
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.19.0:
scheduler@^0.19.0:
version "0.19.0"
version "0.19.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d"
...
@@ -7541,7 +7834,7 @@ semver-regex@^2.0.0:
...
@@ -7541,7 +7834,7 @@ semver-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.
3.0, semver@^5.
4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
...
@@ -7590,6 +7883,11 @@ serve-static@1.14.1:
...
@@ -7590,6 +7883,11 @@ serve-static@1.14.1:
parseurl "~1.3.3"
parseurl "~1.3.3"
send "0.17.1"
send "0.17.1"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
set-value@^2.0.0, set-value@^2.0.1:
set-value@^2.0.0, set-value@^2.0.1:
version "2.0.1"
version "2.0.1"
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
...
@@ -7767,7 +8065,7 @@ source-map@0.7.3:
...
@@ -7767,7 +8065,7 @@ source-map@0.7.3:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
source-map@^0.5.0, source-map@^0.5.6:
source-map@^0.5.0, source-map@^0.5.6
, source-map@^0.5.7
:
version "0.5.7"
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
...
@@ -7896,7 +8194,7 @@ string-width@^1.0.1:
...
@@ -7896,7 +8194,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
strip-ansi "^3.0.0"
string-width@^2.0.0, string-width@^2.1.1:
"string-width@^1.0.2 || 2",
string-width@^2.0.0, string-width@^2.1.1:
version "2.1.1"
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
...
@@ -7913,7 +8211,7 @@ string-width@^3.0.0:
...
@@ -7913,7 +8211,7 @@ string-width@^3.0.0:
is-fullwidth-code-point "^2.0.0"
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
strip-ansi "^5.1.0"
string-width@^4.1.0:
string-width@^4.1.0
, string-width@^4.2.0
:
version "4.2.0"
version "4.2.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
...
@@ -8127,6 +8425,19 @@ tapable@^1.0.0, tapable@^1.1.3:
...
@@ -8127,6 +8425,19 @@ tapable@^1.0.0, tapable@^1.1.3:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
tar@^4.4.2:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"
term-size@^1.2.0:
term-size@^1.2.0:
version "1.2.0"
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
...
@@ -8682,6 +8993,11 @@ whatwg-fetch@3.0.0:
...
@@ -8682,6 +8993,11 @@ whatwg-fetch@3.0.0:
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which-pm-runs@^1.0.0:
which-pm-runs@^1.0.0:
version "1.0.0"
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
...
@@ -8701,6 +9017,13 @@ which@^2.0.1:
...
@@ -8701,6 +9017,13 @@ which@^2.0.1:
dependencies:
dependencies:
isexe "^2.0.0"
isexe "^2.0.0"
wide-align@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
string-width "^1.0.2 || 2"
widest-line@^2.0.0:
widest-line@^2.0.0:
version "2.0.1"
version "2.0.1"
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
...
@@ -8735,6 +9058,15 @@ wrap-ansi@^3.0.1:
...
@@ -8735,6 +9058,15 @@ wrap-ansi@^3.0.1:
string-width "^2.1.1"
string-width "^2.1.1"
strip-ansi "^4.0.0"
strip-ansi "^4.0.0"
wrap-ansi@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
dependencies:
ansi-styles "^4.0.0"
string-width "^4.1.0"
strip-ansi "^6.0.0"
wrappy@1:
wrappy@1:
version "1.0.2"
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
...
@@ -8786,7 +9118,7 @@ yallist@^2.1.2:
...
@@ -8786,7 +9118,7 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
yallist@^3.0.
2
:
yallist@^3.0.
0, yallist@^3.0.2, yallist@^3.0.3
:
version "3.1.1"
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
...
@@ -8798,6 +9130,31 @@ yaml@^1.7.2:
...
@@ -8798,6 +9130,31 @@ yaml@^1.7.2:
dependencies:
dependencies:
"@babel/runtime" "^7.6.3"
"@babel/runtime" "^7.6.3"
yargs-parser@^16.1.0:
version "16.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1"
integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs@15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219"
integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==
dependencies:
cliui "^6.0.0"
decamelize "^1.2.0"
find-up "^4.1.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
string-width "^4.2.0"
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^16.1.0"
yarn@1.22.0:
yarn@1.22.0:
version "1.22.0"
version "1.22.0"
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.0.tgz#acf82906e36bcccd1ccab1cfb73b87509667c881"
resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.0.tgz#acf82906e36bcccd1ccab1cfb73b87509667c881"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录