Merge pull request #23 from lbaf23/feat/upload-resources

feat: upload resources
This commit is contained in:
lhf 2021-08-28 16:02:04 +08:00 committed by GitHub
commit c1a35f23b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 823 additions and 634 deletions

View File

@ -9,11 +9,6 @@ System of PBL.
`web/.env`
```dotenv
REACT_APP_OSS_REGION='oss-cn-hangzhou'
REACT_APP_OSS_ACCESSKEYID=
REACT_APP_OSS_ACCESSKEYSECRET=
REACT_APP_OSS_BUCKET=
REACT_APP_CASDOOR_ENDPOINT=
REACT_APP_CLIENT_ID=
@ -53,7 +48,7 @@ copyrequestbody = true
httpport = 5000
driverName = mysql
dataSourceName = root:123@tcp(localhost:3306)/
dbName = openpbl_db
dbName = openpbl
redisEndpoint =
jwtSecret = CasdoorSecret

View File

@ -11,7 +11,7 @@ runmode=dev
httpport = 5000
driverName = mysql
dataSourceName = root:123@tcp(localhost:3306)/
dbName = openpbl_db
dbName = openpbl
redisEndpoint =
jwtSecret = CasdoorSecret

View File

@ -2,22 +2,16 @@ package controllers
import (
"OpenPBL/models"
"github.com/astaxie/beego"
)
// ResourceController
// Operations about Projects
type ResourceController struct {
beego.Controller
}
// GetResource
// @Title
// @Description
// @Param id path string true ""
// @Success 200 {object} models.Resource
// @router /:id [get]
func (p *ResourceController) GetResource() {
// @router /:projectId/resource/:resourceId [get]
func (p *ProjectController) GetResource() {
var err error
rid := p.GetString(":id")
resource, err := models.GetResourceById(rid)
@ -35,14 +29,11 @@ func (p *ResourceController) GetResource() {
// @Param body body models.Resource true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router / [post]
func (p *ResourceController) CreateResource() {
s, err := p.GetInt64("SectionId")
// @router /:projectId/resource [post]
func (p *ProjectController) CreateResource() {
s, err := p.GetInt64("sectionId")
resource := &models.Resource{
SectionId: s,
FileTitle: p.GetString("fileTitle"),
FileIntroduce: p.GetString("fileIntroduce"),
FilePath: p.GetString("FilePath"),
Content: p.GetString("Content"),
}
err = resource.Create()
@ -67,16 +58,13 @@ func (p *ResourceController) CreateResource() {
// @Param body body models.Resource true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:id [post]
func (p *ResourceController) UpdateResource() {
// @router /:projectId/resource/:resourceId [post]
func (p *ProjectController) UpdateResource() {
s, err := p.GetInt64("sectionId")
id, err := p.GetInt64(":id")
id, err := p.GetInt64(":resourceId")
resource := &models.Resource{
Id: id,
SectionId: s,
FileTitle: p.GetString("fileTitle"),
FileIntroduce: p.GetString("fileIntroduce"),
FilePath: p.GetString("filePath"),
Content: p.GetString("content"),
}
err = resource.Update()
@ -101,9 +89,9 @@ func (p *ResourceController) UpdateResource() {
// @Param content body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:id/content [post]
func (p *ResourceController) UpdateResourceContent() {
id, err := p.GetInt64(":id")
// @router /:projectId/resource/:resourceId/content [post]
func (p *ProjectController) UpdateResourceContent() {
id, err := p.GetInt64(":resourceId")
resource := &models.Resource{
Id: id,
Content: p.GetString("content"),
@ -121,4 +109,4 @@ func (p *ResourceController) UpdateResourceContent() {
}
}
p.ServeJSON()
}
}

View File

@ -2,6 +2,7 @@ package controllers
import (
"OpenPBL/models"
"OpenPBL/util"
"encoding/json"
"strconv"
)
@ -41,6 +42,31 @@ func (p *ProjectController) GetSectionDetail() {
p.ServeJSON()
}
// GetSectionFiles
// @Title
// @Description
// @Param sectionId path string true ""
// @Param projectId path string true ""
// @Success 200 {object}
// @Failure 403 body is empty
// @router /:projectId/section/:sectionId/files [get]
func (p *ProjectController) GetSectionFiles() {
sid := p.GetString(":sectionId")
files, err := models.GetSectionFiles(sid)
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Data: files,
}
}
p.ServeJSON()
}
// GetChapterSections
// @Title
// @Description
@ -222,3 +248,124 @@ func (p *ProjectController) UpdateSectionsMinute() {
p.ServeJSON()
}
// UploadSectionFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/section/:sectionId/file [post]
func (p *ProjectController) UploadSectionFile() {
user := p.GetSessionUser()
if !util.IsTeacher(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
sid, err := p.GetInt64(":sectionId")
name := p.GetString("name")
url := p.GetString("url")
filePath := p.GetString("filePath")
r := &models.SectionFile{
SectionId: sid,
Name: name,
FilePath: filePath,
Url: url,
}
err = r.Create()
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "上传成功",
Data: r,
}
}
p.ServeJSON()
}
// UpdateSectionFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/section/:sectionId/file/:fileId/update [post]
func (p *ProjectController) UpdateSectionFile() {
user := p.GetSessionUser()
if !util.IsTeacher(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
sid, err := p.GetInt64(":sectionId")
fileId, err := p.GetInt64(":fileId")
name := p.GetString("name")
url := p.GetString("url")
filePath := p.GetString("filePath")
r := &models.SectionFile{
Id: fileId,
SectionId: sid,
Name: name,
FilePath: filePath,
Url: url,
}
err = r.Update()
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "上传成功",
Data: r,
}
}
p.ServeJSON()
}
// DeleteSectionFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/section/:sectionId/file/:fileId/delete [post]
func (p *ProjectController) DeleteSectionFile() {
user := p.GetSessionUser()
if !util.IsTeacher(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
fid := p.GetString(":fileId")
err := models.DeleteSectionFile(fid)
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "删除成功",
}
}
p.ServeJSON()
}

View File

@ -39,7 +39,6 @@ func (p *ProjectController) CreateSubmit() {
SubmitTitle: p.GetString("submitTitle"),
SubmitIntroduce: p.GetString("submitIntroduce"),
SubmitContent: p.GetString("submitContent"),
FilePath: p.GetString("filePath"),
CreateAt: time.Now(),
Scored: true,
Score: 100,
@ -68,6 +67,141 @@ func (p *ProjectController) CreateSubmit() {
p.ServeJSON()
}
// UploadSubmitFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/task/:taskId/submit/:submitId/file [post]
func (p *ProjectController) UploadSubmitFile() {
user := p.GetSessionUser()
if !util.IsStudent(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
uid := util.GetUserId(user)
tid, err := p.GetInt64(":taskId")
pid, err := p.GetInt64(":projectId")
url := p.GetString("url")
fileName := p.GetString("name")
filePath := p.GetString("filePath")
sid, err := p.GetInt64(":submitId")
if sid == 0 {
submit := &models.Submit{
ProjectId: pid,
StudentId: uid,
TaskId: tid,
SubmitType: "file",
CreateAt: time.Now(),
Scored: false,
Score: 0,
}
err = submit.Create(make([]models.Choice, 0))
sid = submit.Id
}
r := &models.SubmitFile{
SubmitId: sid,
Name: fileName,
FilePath: filePath,
Url: url,
}
err = r.Create()
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "上传成功",
}
}
p.ServeJSON()
}
// UpdateSubmitFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/task/:taskId/submit/:submitId/file/:fileId/update [post]
func (p *ProjectController) UpdateSubmitFile() {
user := p.GetSessionUser()
if !util.IsStudent(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
url := p.GetString("url")
fileName := p.GetString("name")
sid, err := p.GetInt64(":submitId")
fid, err := p.GetInt64(":fileId")
filePath := p.GetString("filePath")
r := &models.SubmitFile{
Id: fid,
SubmitId: sid,
Name: fileName,
FilePath: filePath,
Url: url,
}
err = r.Update()
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "上传成功",
}
}
p.ServeJSON()
}
// DeleteSubmitFile
// @Title
// @Description
// @Param filePath body string true ""
// @Success 200 {object} models.TeacherProject
// @Failure 400
// @router /:projectId/task/:taskId/submit/:submitId/file/:fileId/delete [post]
func (p *ProjectController) DeleteSubmitFile() {
user := p.GetSessionUser()
if !util.IsStudent(user) {
p.Data["json"] = Response{
Code: 403,
Msg: "非法用户",
}
p.ServeJSON()
return
}
fid := p.GetString(":fileId")
err := models.DeleteSubmitFile(fid)
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "删除成功",
}
}
p.ServeJSON()
}
// UpdateSubmit
// @Title
// @Description
@ -95,7 +229,6 @@ func (p *ProjectController) UpdateSubmit() {
SubmitTitle: p.GetString("submitTitle"),
SubmitIntroduce: p.GetString("submitIntroduce"),
SubmitContent: p.GetString("submitContent"),
FilePath: p.GetString("filePath"),
CreateAt: time.Now(),
Score: score,
Scored: scored,
@ -118,3 +251,29 @@ func (p *ProjectController) UpdateSubmit() {
}
p.ServeJSON()
}
// GetSubmitFiles
// @Title
// @Description
// @Param body body models.Submit true ""
// @Success 200 {object}
// @Failure 403 body is empty
// @router /:projectId/task/:taskId/submit/:submitId/files [get]
func (p *ProjectController) GetSubmitFiles() {
sid := p.GetString(":submitId")
files, err := models.GetSubmitFiles(sid)
if err != nil {
p.Data["json"] = Response{
Code: 400,
Msg: err.Error(),
}
} else {
p.Data["json"] = Response{
Code: 200,
Msg: "提交成功",
Data: files,
}
}
p.ServeJSON()
}

2
go.mod
View File

@ -8,7 +8,7 @@ require (
github.com/go-sql-driver/mysql v1.6.0
github.com/smartystreets/goconvey v1.6.4
github.com/stretchr/testify v1.6.1 // indirect
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914 // indirect
xorm.io/xorm v1.1.2
)

11
go.sum
View File

@ -337,8 +337,8 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -393,15 +393,16 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 h1:Bli41pIlzTzf3KEY06n+xnzK/BESIg2ze4Pgfh/aI8c=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

View File

@ -91,6 +91,9 @@ func (a *Adapter) createTable() {
new(Chapter),
new(Section),
new(SectionFile),
new(SubmitFile),
new(Resource),
new(Task),
new(Survey),

View File

@ -7,12 +7,7 @@ import (
type Resource struct {
Id int64 `json:"id" xorm:"not null pk autoincr"`
SectionId int64 `json:"sectionId" xorm:"not null index unique"`
Content string `json:"content" xorm:"longtext"`
FileTitle string `json:"fileTitle"`
FileIntroduce string `json:"fileIntroduce"`
FilePath string `json:"filePath"`
}
func (p *Resource) GetEngine() *xorm.Session {

View File

@ -15,6 +15,14 @@ type Section struct {
SectionMinute int `json:"sectionMinute" xorm:"default 1"`
}
type SectionFile struct {
Id int64 `json:"id" xorm:"not null pk autoincr"`
SectionId int64 `json:"sectionId" xorm:"not null index"`
FilePath string `json:"filePath"`
Name string `json:"name"`
Url string `json:"url"`
}
type SectionMinute struct {
Section `xorm:"extends"`
LearnSection `xorm:"extends"`
@ -33,6 +41,31 @@ type SectionOutline struct {
func (p *Section) GetEngine() *xorm.Session {
return adapter.Engine.Table(p)
}
func (p *SectionFile) GetEngine() *xorm.Session {
return adapter.Engine.Table(p)
}
func (p *SectionFile) Create() (err error) {
_, err = p.GetEngine().Insert(p)
return
}
func (p *SectionFile) Update() (err error) {
_, err = p.GetEngine().ID(p.Id).Update(p)
return
}
func GetSectionFiles(sid string) (files []SectionFile, err error) {
err = (&SectionFile{}).GetEngine().
Where("section_id = ?", sid).
Find(&files)
return
}
func DeleteSectionFile(fid string) (err error) {
_, err = (&SectionFile{}).GetEngine().ID(fid).Delete(&SectionFile{})
return
}
func (p *Section) Create() (err error) {
session := adapter.Engine.NewSession()

View File

@ -20,13 +20,20 @@ type Submit struct {
SubmitIntroduce string `json:"submitIntroduce" xorm:"text"`
SubmitContent string `json:"submitContent" xorm:"text"`
FilePath string `json:"filePath"`
CreateAt time.Time `json:"createAt"`
Score int `json:"score" xorm:"default 0"`
Scored bool `json:"scored" xorm:"default false"`
}
type SubmitFile struct {
Id int64 `json:"id" xorm:"not null pk autoincr"`
SubmitId int64 `json:"submitId" xorm:"not null index"`
FilePath string `json:"filePath"`
Name string `json:"name"`
Url string `json:"url"`
}
type Choice struct {
Id int64 `json:"id" xorm:"not null pk autoincr"`
SubmitId int64 `json:"submitId" xorm:"not null index"`
@ -44,6 +51,31 @@ type SubmitDetail struct {
func (p *Submit) GetEngine() *xorm.Session {
return adapter.Engine.Table(p)
}
func (p *SubmitFile) GetEngine() *xorm.Session {
return adapter.Engine.Table(p)
}
func (p *SubmitFile) Create() (err error) {
_, err = p.GetEngine().Insert(p)
return
}
func (p *SubmitFile) Update() (err error) {
_, err = p.GetEngine().ID(p.Id).Update(p)
return
}
func GetSubmitFiles(sid string) (files []SectionFile, err error) {
err = (&SubmitFile{}).GetEngine().
Where("submit_id = ?", sid).
Find(&files)
return
}
func DeleteSubmitFile(fid string) (err error) {
_, err = (&SubmitFile{}).GetEngine().ID(fid).Delete(&SubmitFile{})
return
}
func (c *Choice) GetEngine() *xorm.Session {
return adapter.Engine.Table(c)
}

View File

@ -13,7 +13,6 @@ func apiFilter(ctx *context.Context) {
if strings.HasPrefix(urlPath, "/api/project-list") ||
strings.HasPrefix(urlPath, "/api/project") ||
strings.HasPrefix(urlPath, "/api/message") ||
strings.HasPrefix(urlPath, "/api/resource") ||
strings.HasPrefix(urlPath, "/api/student") {
user := ctx.Input.Session("user")
if user == nil {

View File

@ -23,10 +23,6 @@ func init() {
beego.NSInclude(
&controllers.ProjectController{})),
beego.NSNamespace("/resource",
beego.NSInclude(
&controllers.ResourceController{})),
beego.NSNamespace("/project-list",
beego.NSInclude(
&controllers.ProjectListController{})),

View File

@ -1,8 +1,3 @@
REACT_APP_OSS_REGION='oss-cn-hangzhou'
REACT_APP_OSS_ACCESSKEYID=
REACT_APP_OSS_ACCESSKEYSECRET=
REACT_APP_OSS_BUCKET=
REACT_APP_CASDOOR_ENDPOINT=
REACT_APP_CLIENT_ID=

View File

@ -9,7 +9,6 @@
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"ali-oss": "^6.16.0",
"antd": "^4.16.6",
"antd-img-crop": "^3.14.2",
"axios": "^0.21.1",

25
web/src/api/FileApi.js Normal file
View File

@ -0,0 +1,25 @@
import qs from 'qs'
import {getCasdoorService} from "../pages/User/Auth/Auth";
const FileApi = {
uploadFile(owner, tag, parent, fullFilePath, file, provider="") {
let request = getCasdoorService()
let formData = new FormData();
formData.append("file", file);
return request({
url: `/api/upload-resource?owner=${owner}&tag=${tag}&parent=${parent}&fullFilePath=${encodeURIComponent(fullFilePath)}&provider=${provider}`,
method: 'post',
data: formData
})
},
deleteFile(data, provider="") {
let request = getCasdoorService()
return request({
url: `/api/delete-resource?provider=${provider}`,
method: 'post',
data: data
})
}
}
export default FileApi

View File

@ -2,29 +2,29 @@ import request from "./request";
import qs from 'qs'
const ResourceApi = {
getResource(id) {
getResource(pid, id) {
return request({
url: `/resource/${id}`,
url: `project/${pid}/resource/${id}`,
method: 'get',
})
},
createResource(q) {
createResource(pid, q) {
return request({
url: '/resource',
url: `/project/${pid}/resource`,
method: 'post',
data: qs.stringify(q)
})
},
updateResource(q) {
updateResource(pid, q) {
return request({
url: `/${q.id}/resource`,
url: `/project/${pid}/resource/${q.id}`,
method: 'post',
data: qs.stringify(q)
})
},
updateResourceContent(id, content) {
updateResourceContent(pid, id, content) {
return request({
url: `/resource/${id}`,
url: `/project/${pid}/resource/${id}/content`,
method: 'post',
data: qs.stringify({content: content})
})

View File

@ -47,12 +47,38 @@ const SectionApi = {
})
})
},
getSectionDetail(id, pid) {
getSectionDetail(sid, pid) {
return request({
url: `/project/${pid}/section/${id}`,
url: `/project/${pid}/section/${sid}`,
method: 'get',
})
},
getSectionFiles(sid, pid) {
return request({
url: `/project/${pid}/section/${sid}/files`,
method: 'get',
})
},
uploadSectionFile(sid, pid, data) {
return request({
url: `/project/${pid}/section/${sid}/file`,
method: 'post',
data: qs.stringify(data)
})
},
updateSectionFile(sid, pid, f) {
return request({
url: `/project/${pid}/section/${sid}/file/${f.id}/update`,
method: 'post',
data: qs.stringify(f)
})
},
deleteSectionFile(sid, pid, fid) {
return request({
url: `/project/${pid}/section/${sid}/file/${fid}/delete`,
method: 'post'
})
}
}
export default SectionApi

View File

@ -16,6 +16,32 @@ const SubmitApi = {
data: qs.stringify(data)
})
},
getSubmitFiles(pid, tid, sid) {
return request({
url: `/project/${pid}/task/${tid}/submit/${sid}/files`,
method: 'get',
})
},
uploadSubmitFile(pid, tid, sid, data) {
return request({
url: `/project/${pid}/task/${tid}/submit/${sid}/file`,
method: 'post',
data: qs.stringify(data)
})
},
updateSubmitFile(pid, tid, sid, file) {
return request({
url: `/project/${pid}/task/${tid}/submit/${sid}/file/${file.id}/update`,
method: 'post',
data: qs.stringify(file)
})
},
deleteSubmitFile(pid, tid, sid, fid) {
return request({
url: `/project/${pid}/task/${tid}/submit/${sid}/file/${fid}/delete`,
method: 'post'
})
}
}
export default SubmitApi

View File

@ -6,7 +6,7 @@ import {Link} from "react-router-dom";
import SectionApi from "../../../../api/SectionApi";
import RichWords from "./component/RichWords";
import FileResource from "../component/FileResource";
import FileResource from "./component/FileResource";
import StudentTask from "./component/StudentTask";
function SectionEditPage(obj) {
@ -44,9 +44,9 @@ function SectionEditPage(obj) {
<Card>
<h2 style={{fontWeight: 'bold'}}>{section.sectionName}</h2>
</Card>
<RichWords section={section}/>
<FileResource section={section}/>
<StudentTask section={section} pid={pid}/>
<RichWords section={section} pid={pid} sid={sid}/>
<FileResource section={section} pid={pid} sid={sid}/>
<StudentTask section={section} pid={pid} sid={sid}/>
</div>
<div style={{textAlign: 'center'}}>
<Link to={`/home/project/${pid}/section/${sid}/preview?back=/project/${pid}/section/${sid}/edit`}>

View File

@ -0,0 +1,134 @@
import React, {useEffect, useState} from "react";
import {Button, Card, Divider, Input, message, Upload} from "antd";
import {InboxOutlined} from "@ant-design/icons";
import "./section-edit.less"
import FileApi from "../../../../../api/FileApi";
import SectionApi from "../../../../../api/SectionApi";
const {Dragger} = Upload;
function FileResource(obj) {
const [fileList, setFileList] = useState([])
useEffect(() => {
getSectionFiles()
}, [])
const getSectionFiles = () => {
SectionApi.getSectionFiles(obj.sid, obj.pid)
.then(res=>{
if (res.data.code === 200) {
if (res.data.data !== null) {
setFileList(res.data.data)
} else {
setFileList([])
}
}
})
.catch(e=>{console.log(e)})
}
const removeFile = file => {
let data = {
objectKey: file.filePath,
}
FileApi.deleteFile(JSON.stringify(data))
.then(res=>{
if (res.data.status === 'ok') {
SectionApi.deleteSectionFile(obj.sid, obj.pid, file.id)
.then(res=>{
if (res.data.code === 200) {
getSectionFiles()
}
})
.catch(e=>{console.log(e)})
}
})
.catch(e=>{console.log(e)})
}
const onUploadFile = file => {
file = file.file
const index = file.name.lastIndexOf('.');
if (index === -1) {
message.error('不能识别文件类型');
return
}
if (file.size > 1024 * 1024 * 1024) {
message.error('文件不能大于1GB');
return
}
let filePath = `/openpbl/project/${obj.pid}/section/${obj.sid}/${file.name}`
FileApi.uploadFile("admin", "openpbl", "admin", filePath, file)
.then(res=>{
if (res.data.status === 'ok') {
let e = false
for (let i=0; i<fileList.length; i++) {
if (fileList[i].name === file.name) {
let f = fileList[i]
f.url = res.data.data
updateFile(f)
e = true
}
}
if (!e) {
uploadFile(filePath, file.name, res.data.data)
}
}
})
.catch(e=>{console.log(e)})
}
const uploadFile = (filePath, name, url) => {
let d = {
filePath: filePath,
name: name,
url: url
}
SectionApi.uploadSectionFile(obj.sid, obj.pid, d)
.then(res=>{
if (res.data.code === 200) {
message.success(res.data.msg)
getSectionFiles()
} else {
message.error(res.data.msg)
}
})
.catch(e=>{console.log(e)})
}
const updateFile = (f) => {
SectionApi.updateSectionFile(obj.sid, obj.pid, f)
.then(res=>{
if (res.data.code === 200) {
message.success(res.data.msg)
getSectionFiles()
}
})
.catch(e=>{console.log(e)})
}
const props = {
name: 'file',
multiple: false,
customRequest: onUploadFile,
fileList: fileList,
onRemove: removeFile,
};
return (
<Card className="resource-card">
<p className="card-title">上传文件资源</p>
<Divider/>
<Dragger {...props} style={{marginTop: '20px'}} >
<p className="ant-upload-drag-icon">
<InboxOutlined/>
</p>
<p className="ant-upload-text">点击或拖动文件上传</p>
<p className="ant-upload-hint">
多个文件打包上传
</p>
</Dragger>
</Card>
)
}
export default FileResource

View File

@ -4,24 +4,23 @@ import LzEditor from "react-lz-editor"
import uniqBy from 'lodash/uniqBy';
import findIndex from 'lodash/findIndex';
import OSSUploaderFile from "../../component/oss";
import ResourceApi from "../../../../../api/ResourceApi";
import "./section-edit.less"
import FileApi from "../../../../../api/FileApi";
import SectionApi from "../../../../../api/SectionApi";
function RichWords(obj) {
const sid = obj.section.id
const [fileList, setFileList] = useState([])
const [content, setContent] = useState(obj.content)
useEffect(() => {
}, [])
const receiveHtml = (content) => {
setContent(content)
}
const saveContent = e => {
ResourceApi.updateResourceContent(obj.section.resource.id, content)
const saveContent = () => {
ResourceApi.updateResourceContent(obj.pid, obj.section.resource.id, content)
.then(res => {
if (res.data.code === 200) {
obj.section.resource.content = content
@ -62,13 +61,42 @@ function RichWords(obj) {
}
};
const customRequest = ({
file,
onError,
onSuccess,
}) => {
OSSUploaderFile(file, '/openct/' + sid + '/content/', onSuccess, onError);
const customRequest = ({file, onError, onSuccess}) => {
const index = file.name.lastIndexOf('.');
if (index === -1) {
return onError('不能识别文件类型');
}
if (file.size > 1024 * 1024 * 6) {
return onError('文件不能大于6MB');
}
const postfix = file.name.substr(index);
const r = new FileReader();
r.addEventListener('load', () => upload(r.result, onSuccess, onError));
r.readAsDataURL(file);
// OSSUploaderFile(file, `/openpbl/${obj.pid}/`, onSuccess, onError);
};
const upload = (file, onSuccess, onError) => {
let data = new FormData()
let fileName = new Date().getTime()
data.append("fileName", fileName)
data.append("filePath", `/openpbl/project/${obj.pid}/resource/${fileName}`)
data.append("file", file)
FileApi.uploadFile(data)
.then(res=>{
if (res.data.code === 200) {
let url = res.data.data
onSuccess({url: url}, file);
} else {
message.error(res.data.msg)
onError(res.data.msg)
}
})
.catch(e=>{
onError(e)
})
}
const uploadProps = {
onChange: handleChange,

View File

@ -8,7 +8,7 @@ import "./section-edit.less"
function StudentTask(obj) {
const pid = obj.pid
const sid = obj.section.id
const sid = obj.sid
const [tasks, setTasks] = useState([])
useEffect(() => {
if (sid !== undefined) {

View File

@ -1,30 +0,0 @@
import OSS from 'ali-oss'
const ossclient = new OSS({
region: process.env.REACT_APP_OSS_REGION,
accessKeyId: process.env.REACT_APP_OSS_ACCESSKEYID,
accessKeySecret: process.env.REACT_APP_OSS_ACCESSKEYSECRET,
bucket: process.env.REACT_APP_OSS_BUCKET,
});
function buildFileName(path, postfix) {
return path + new Date().getTime() + postfix;
}
function OSSUploaderFile(file, path, onSucess, onError) {
console.error(file);
const index = file.name.lastIndexOf('.');
if (index === -1) {
return onError('file error.');
}
const postfix = file.name.substr(index);
ossclient.put(buildFileName(path, postfix), file)
.then((ret) => {
onSucess(ret, file);
})
.catch(onError);
}
export default OSSUploaderFile;

View File

@ -207,6 +207,7 @@ function StudentEvidence(obj) {
<TaskCard
pid={pid}
studentId={obj.studentId}
item={item}
index={index}
learning={learning}

View File

@ -20,6 +20,7 @@ class PreviewSection extends React.Component {
sid: this.props.match.params.sid,
pid: this.props.match.params.pid,
section: {resource: {}},
sectionFiles: [],
tasks: [],
learning: false,
editable: false,
@ -33,6 +34,7 @@ class PreviewSection extends React.Component {
componentDidMount() {
this.getSectionDetail()
this.getTasks()
this.getSectionFiles()
}
componentWillUnmount() {
@ -157,9 +159,22 @@ class PreviewSection extends React.Component {
tasks: [...this.state.tasks]
})
}
getSectionFiles = () => {
SectionApi.getSectionFiles(this.state.sid, this.state.pid)
.then(res=>{
if (res.data.code === 200) {
if (res.data.data !== null) {
this.setState({
sectionFiles: res.data.data
})
}
}
})
.catch(e=>{console.log(e)})
}
render() {
const {section, tasks, learning, pid, editable, showCount, minute, second} = this.state
const {section, tasks, learning, pid, editable, showCount, minute, second, sectionFiles} = this.state
return (
<DocumentTitle title="Project">
<div style={{backgroundColor: '#f2f4f5', minHeight: '100vh'}}>
@ -184,8 +199,13 @@ class PreviewSection extends React.Component {
</Card>
<Card className="resource-card">
<p className="card-title">文件资源</p>
<p>{section.resource.fileTitle}</p>
<p>{section.resource.fileIntroduce}</p>
{sectionFiles.map((item, index)=>(
<div>
<a href={item.url}>
{item.name}
</a>
</div>
))}
</Card>
{tasks.map((item, index) => (
<Card className="resource-card" key={index.toString()}>
@ -203,6 +223,7 @@ class PreviewSection extends React.Component {
<TaskCard
pid={pid}
studentId={this.props.account.name}
item={item}
index={index}
learning={learning}

View File

@ -1,11 +1,34 @@
import React from "react";
import React, {useEffect, useState} from "react";
import {Button, Input, message, Upload} from "antd";
import {InboxOutlined} from "@ant-design/icons";
import FillSurvey from "./FillSurvey";
import SubmitApi from "../../../../api/SubmitApi";
import FileApi from "../../../../api/FileApi";
import SectionApi from "../../../../api/SectionApi";
function TaskCard(obj) {
const [fileList, setFileList] = useState([])
useEffect(()=>{
if (obj.item.taskType === "file") {
getSubmitFiles()
}
}, [])
const getSubmitFiles = () => {
SubmitApi.getSubmitFiles(obj.pid, obj.item.id, obj.item.submit.id)
.then(res=>{
if (res.data.code === 200) {
if (res.data.data !== null) {
setFileList(res.data.data)
} else {
setFileList([])
}
}
})
.catch(e=>{console.log(e)})
}
const updateComment = (item, index) => {
SubmitApi.updateSubmit(obj.pid, item.id, item.submit.id, item.submit)
@ -41,24 +64,90 @@ function TaskCard(obj) {
obj.setTaskItem(obj.item, index)
}
const removeFile = file => {
let data = {
objectKey: file.filePath,
}
FileApi.deleteFile(JSON.stringify(data))
.then(res=>{
if (res.data.status === 'ok') {
SubmitApi.deleteSubmitFile(obj.pid, obj.item.id, obj.item.submit.id, file.id)
.then(res=>{
if (res.data.code === 200) {
getSubmitFiles()
}
})
.catch(e=>{console.log(e)})
}
})
.catch(e=>{console.log(e)})
}
const onUploadFile = file => {
file = file.file
const index = file.name.lastIndexOf('.');
if (index === -1) {
message.error('不能识别文件类型');
return
}
if (file.size > 1024 * 1024 * 1024) {
message.error('文件不能大于1GB');
return
}
let filePath = `/openpbl/project/${obj.pid}/task/${obj.item.id}/${obj.studentId}/${file.name}`
FileApi.uploadFile("admin", "openpbl", obj.studentId, filePath, file)
.then(res=>{
if (res.data.status === 'ok') {
let e = false
for (let i=0; i<fileList.length; i++) {
if (fileList[i].name === file.name) {
let f = fileList[i]
f.url = res.data.data
updateFile(f)
e = true
}
}
if (!e) {
uploadFile(filePath, file.name, res.data.data)
}
}
})
.catch(e=>{console.log(e)})
}
const uploadFile = (filePath, name, url) => {
let d = {
filePath: filePath,
name: name,
url: url
}
SubmitApi.uploadSubmitFile(obj.pid, obj.item.id, obj.item.submit.id, d)
.then(res=>{
if (res.data.code === 200) {
message.success(res.data.msg)
obj.getTasks()
getSubmitFiles()
} else {
message.error(res.data.msg)
}
})
.catch(e=>{console.log(e)})
}
const updateFile = (f) => {
SubmitApi.updateSubmitFile(obj.pid, obj.item.id, obj.item.submit.id, f)
.then(res=>{
if (res.data.code === 200) {
message.success(res.data.msg)
obj.getTasks()
getSubmitFiles()
}
})
.catch(e=>{console.log(e)})
}
const props = {
name: 'file',
multiple: true,
action: '',
onChange(info) {
const {status} = info.file;
if (status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (status === 'done') {
message.success(`${info.file.name} 上传成功`);
} else if (status === 'error') {
message.error(`${info.file.name} 上传失败`);
}
},
onDrop(e) {
console.log('Dropped files', e.dataTransfer.files);
},
multiple: false,
customRequest: onUploadFile,
fileList: fileList,
onRemove: removeFile,
};
return (

View File

@ -58,8 +58,6 @@ class HeaderLayout extends React.Component {
}
renderHomeIfLoggedIn(component) {
console.log(this.state.account)
if (this.state.account === null) {
message.warn('请先登录')
return <Redirect to={'/home'}/>

View File

@ -1849,11 +1849,6 @@
dependencies:
"@babel/runtime" "^7.12.5"
"@tootallnate/once@1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
@ -2386,7 +2381,7 @@ add-dom-event-listener@^1.1.0:
dependencies:
object-assign "4.x"
address@1.1.2, address@>=0.0.1, address@^1.0.0, address@^1.0.1:
address@1.1.2, address@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
@ -2399,20 +2394,6 @@ adjust-sourcemap-loader@3.0.0:
loader-utils "^2.0.0"
regex-parser "^2.2.11"
agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
dependencies:
debug "4"
agentkeepalive@^3.4.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67"
integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==
dependencies:
humanize-ms "^1.2.1"
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@ -2451,37 +2432,6 @@ ajv@^7.0.2:
require-from-string "^2.0.2"
uri-js "^4.2.2"
ali-oss@^6.16.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/ali-oss/-/ali-oss-6.16.0.tgz#3b7fbe10f13fbd535478fc31c7d05aaf4280269b"
integrity sha512-tK/+yEKtBBD+kMoHABxg6lCgC+Ad9HNjCln7qdL6LRYbUm+FFTKJubC4hT2FIooMBDb9tnI7My4MVreKnbJQRg==
dependencies:
address "^1.0.0"
agentkeepalive "^3.4.1"
bowser "^1.6.0"
co-defer "^1.0.0"
copy-to "^2.0.1"
dateformat "^2.0.0"
debug "^2.2.0"
destroy "^1.0.4"
end-or-error "^1.0.1"
get-ready "^1.0.0"
humanize-ms "^1.2.0"
is-type-of "^1.0.0"
js-base64 "^2.5.2"
jstoxml "^0.2.3"
merge-descriptors "^1.0.1"
mime "^2.4.5"
mz-modules "^2.1.0"
platform "^1.3.1"
pump "^3.0.0"
sdk-base "^2.0.1"
stream-http "2.8.2"
stream-wormhole "^1.0.4"
urllib "^2.33.1"
utility "^1.8.0"
xml2js "^0.4.16"
alphanum-sort@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@ -2654,11 +2604,6 @@ antd@^4.16.6:
scroll-into-view-if-needed "^2.2.25"
warning "^4.0.3"
any-promise@^1.0.0, any-promise@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
anymatch@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@ -2847,13 +2792,6 @@ ast-types-flow@^0.0.7:
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
ast-types@^0.13.2:
version "0.13.4"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
dependencies:
tslib "^2.0.1"
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
@ -3228,11 +3166,6 @@ boolbase@^1.0.0, boolbase@~1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
bowser@^1.6.0:
version "1.9.4"
resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a"
integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==
boxen@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
@ -3756,11 +3689,6 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
co-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/co-defer/-/co-defer-1.0.0.tgz#3e4a787a8eed6b0a21ee287c094f7e8de0d3c818"
integrity sha1-Pkp4eo7tawoh7ih8CU9+jeDTyBg=
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@ -3974,7 +3902,7 @@ content-disposition@0.5.3:
dependencies:
safe-buffer "5.1.2"
content-type@^1.0.2, content-type@~1.0.4:
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
@ -4032,11 +3960,6 @@ copy-to-clipboard@^3.2.0:
dependencies:
toggle-selection "^1.0.6"
copy-to@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5"
integrity sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=
core-js-compat@^3.6.2, core-js-compat@^3.8.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.0.tgz#29da39385f16b71e1915565aa0385c4e0963ad56"
@ -4065,7 +3988,7 @@ core-js@^3.6.5:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.0.tgz#790b1bb11553a2272b36e2625c7179db345492f8"
integrity sha512-PyFBJaLq93FlyYdsndE5VaueA9K5cNB7CGzeCj191YYLhkQM0gdZR2SKihM70oF0wdqKSKClv/tEBOpoRmdOVQ==
core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0:
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
@ -4453,11 +4376,6 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
data-uri-to-buffer@3:
version "3.0.1"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@ -4472,11 +4390,6 @@ date-fns@2.x:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4"
integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==
dateformat@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=
dayjs@1.x:
version "1.10.6"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.6.tgz#288b2aa82f2d8418a6c9d4df5898c0737ad02a63"
@ -4489,13 +4402,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
dependencies:
ms "2.0.0"
debug@4:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
dependencies:
ms "2.1.2"
debug@^3.1.1, debug@^3.2.6:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
@ -4565,13 +4471,6 @@ default-gateway@^4.2.0:
execa "^1.0.0"
ip-regex "^2.1.0"
default-user-agent@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6"
integrity sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=
dependencies:
os-name "~1.0.3"
define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@ -4601,15 +4500,6 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
degenerator@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254"
integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==
dependencies:
ast-types "^0.13.2"
escodegen "^1.8.1"
esprima "^4.0.0"
del@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
@ -4641,7 +4531,7 @@ des.js@^1.0.0:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
destroy@^1.0.4, destroy@~1.0.4:
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
@ -4678,13 +4568,6 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0"
randombytes "^2.0.0"
digest-header@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/digest-header/-/digest-header-0.0.1.tgz#11ccf6deec5766ac379744d901c12cba49514be6"
integrity sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=
dependencies:
utility "0.1.11"
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@ -4886,7 +4769,7 @@ echarts@^5.1.2:
tslib "2.0.3"
zrender "5.1.1"
ee-first@1.1.1, ee-first@~1.1.1:
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
@ -4963,11 +4846,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
end-or-error@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/end-or-error/-/end-or-error-1.0.1.tgz#dc7a6210fe78d372fee24a8b4899dbd155414dcb"
integrity sha1-3HpiEP5403L+4kqLSJnb0VVBTcs=
enhanced-resolve@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
@ -5104,7 +4982,7 @@ escalade@^3.0.2, escalade@^3.1.1:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-html@^1.0.3, escape-html@~1.0.3:
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
@ -5119,7 +4997,7 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escodegen@^1.14.1, escodegen@^1.8.1:
escodegen@^1.14.1:
version "1.14.3"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
@ -5678,11 +5556,6 @@ file-uri-to-path@1.0.0:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
file-uri-to-path@2:
version "2.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz#7b415aeba227d575851e0a5b0c640d7656403fba"
integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==
filesize@6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00"
@ -5826,15 +5699,6 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
formstream@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/formstream/-/formstream-1.1.1.tgz#17259d2440c35ca9736db9f45fb3ba3f8669c750"
integrity sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==
dependencies:
destroy "^1.0.4"
mime "^2.5.2"
pause-stream "~0.0.11"
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@ -5923,14 +5787,6 @@ fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.1:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
ftp@^0.3.10:
version "0.3.10"
resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
dependencies:
readable-stream "1.1.x"
xregexp "2.0.0"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@ -5970,11 +5826,6 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
get-ready@^1.0.0, get-ready@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782"
integrity sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@ -5994,18 +5845,6 @@ get-stream@^5.0.0:
dependencies:
pump "^3.0.0"
get-uri@3:
version "3.0.2"
resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-3.0.2.tgz#f0ef1356faabc70e1f9404fa3b66b2ba9bfc725c"
integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==
dependencies:
"@tootallnate/once" "1"
data-uri-to-buffer "3"
debug "4"
file-uri-to-path "2"
fs-extra "^8.1.0"
ftp "^0.3.10"
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@ -6384,17 +6223,6 @@ http-errors@1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@1.7.3, http-errors@~1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
dependencies:
depd "~1.1.2"
inherits "2.0.4"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
@ -6405,20 +6233,22 @@ http-errors@~1.6.2:
setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2"
http-errors@~1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
dependencies:
depd "~1.1.2"
inherits "2.0.4"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-parser-js@>=0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
dependencies:
"@tootallnate/once" "1"
agent-base "6"
debug "4"
http-proxy-middleware@0.19.1:
version "0.19.1"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
@ -6452,27 +6282,12 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
https-proxy-agent@5, https-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
dependencies:
agent-base "6"
debug "4"
human-signals@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
humanize-ms@^1.2.0, humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
dependencies:
ms "^2.0.0"
iconv-lite@0.4.24, iconv-lite@^0.4.15, iconv-lite@^0.4.4:
iconv-lite@0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@ -6738,11 +6553,6 @@ is-ci@^2.0.0:
dependencies:
ci-info "^2.0.0"
is-class-hotfix@~0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435"
integrity sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==
is-color-stop@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
@ -6975,15 +6785,6 @@ is-symbol@^1.0.2:
dependencies:
has-symbols "^1.0.1"
is-type-of@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/is-type-of/-/is-type-of-1.2.1.tgz#e263ec3857aceb4f28c47130ec78db09a920f8c5"
integrity sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==
dependencies:
core-util-is "^1.0.2"
is-class-hotfix "~0.0.6"
isstream "~0.1.2"
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@ -7527,7 +7328,7 @@ jest@26.6.0:
import-local "^3.0.2"
jest-cli "^26.6.0"
js-base64@^2.1.9, js-base64@^2.5.2:
js-base64@^2.1.9:
version "2.6.4"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
@ -7679,11 +7480,6 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jstoxml@^0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/jstoxml/-/jstoxml-0.2.4.tgz#ff3fb67856883a032953c7ce8ce7486210f48447"
integrity sha1-/z+2eFaIOgMpU8fOjOdIYhD0hEc=
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82"
@ -7738,13 +7534,6 @@ klona@^2.0.4:
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==
ko-sleep@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/ko-sleep/-/ko-sleep-1.0.3.tgz#28a2a0a1485e8b7f415ff488dee17d24788ab082"
integrity sha1-KKKgoUhei39BX/SI3uF9JHiKsII=
dependencies:
ms "^2.0.0"
language-subtag-registry@~0.3.2:
version "0.3.21"
resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
@ -8216,7 +8005,7 @@ merge-class-names@^1.1.1:
resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.0.tgz#02edcdd5ff677fbb03b47ecd4586df89d697b81b"
integrity sha512-xNdBM7s+6uD+vNZJEymqrFbMBCDGzoA8clZTcj2F1XIy1QQKF+wjFVv7iDZFfdCBnViTdt54A4Ye2lmBsXrBjQ==
merge-descriptors@1.0.1, merge-descriptors@^1.0.1:
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
@ -8310,7 +8099,7 @@ mime@1.6.0, mime@^1.4.1:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.4, mime@^2.4.5, mime@^2.5.2:
mime@^2.4.4:
version "2.5.2"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
@ -8360,7 +8149,7 @@ minimatch@3.0.4, minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@ -8469,7 +8258,7 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.0.0, ms@^2.1.1:
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@ -8487,26 +8276,6 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1"
thunky "^1.0.2"
mz-modules@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mz-modules/-/mz-modules-2.1.0.tgz#7f529877afd0d42f409a7463b96986d61cfbcf96"
integrity sha512-sjk8lcRW3vrVYnZ+W+67L/2rL+jbO5K/N6PFGIcLWTiYytNr22Ah9FDXFs+AQntTM1boZcoHi5qS+CV1seuPog==
dependencies:
glob "^7.1.2"
ko-sleep "^1.0.3"
mkdirp "^0.5.1"
pump "^3.0.0"
rimraf "^2.6.1"
mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
dependencies:
any-promise "^1.0.0"
object-assign "^4.0.1"
thenify-all "^1.0.0"
nan@^2.12.1:
version "2.14.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
@ -8565,11 +8334,6 @@ neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
netmask@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
next-tick@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
@ -8932,21 +8696,6 @@ os-browserify@^0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
os-name@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf"
integrity sha1-GzefZINa98Wn9JizV8uVIVwVnt8=
dependencies:
osx-release "^1.0.0"
win-release "^1.0.0"
osx-release@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c"
integrity sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=
dependencies:
minimist "^1.1.0"
p-each-series@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
@ -9028,30 +8777,6 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
pac-proxy-agent@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb"
integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==
dependencies:
"@tootallnate/once" "1"
agent-base "6"
debug "4"
get-uri "3"
http-proxy-agent "^4.0.1"
https-proxy-agent "5"
pac-resolver "^4.1.0"
raw-body "^2.2.0"
socks-proxy-agent "5"
pac-resolver@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd"
integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==
dependencies:
degenerator "^2.2.0"
ip "^1.1.5"
netmask "^2.0.1"
pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
@ -9219,13 +8944,6 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pause-stream@~0.0.11:
version "0.0.11"
resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
dependencies:
through "~2.3"
pbkdf2@^3.0.3:
version "3.1.1"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
@ -9309,11 +9027,6 @@ pkg-up@3.1.0:
dependencies:
find-up "^3.0.0"
platform@^1.3.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7"
integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==
pnp-webpack-plugin@1.6.4:
version "1.6.4"
resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149"
@ -10103,25 +9816,6 @@ proxy-addr@~2.0.5:
forwarded "~0.1.2"
ipaddr.js "1.9.1"
proxy-agent@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c"
integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==
dependencies:
agent-base "^6.0.0"
debug "4"
http-proxy-agent "^4.0.0"
https-proxy-agent "^5.0.0"
lru-cache "^5.1.1"
pac-proxy-agent "^4.1.0"
proxy-from-env "^1.0.0"
socks-proxy-agent "^5.0.0"
proxy-from-env@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@ -10199,7 +9893,7 @@ qs@6.7.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
qs@^6.10.1, qs@^6.4.0:
qs@^6.10.1:
version "6.10.1"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
@ -10286,16 +9980,6 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
raw-body@^2.2.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c"
integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==
dependencies:
bytes "3.1.0"
http-errors "1.7.3"
iconv-lite "0.4.24"
unpipe "1.0.0"
rc-align@2.x, rc-align@^2.4.0:
version "2.4.5"
resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.4.5.tgz#c941a586f59d1017f23a428f0b468663fb7102ab"
@ -11398,16 +11082,6 @@ read-pkg@^5.2.0:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@1.1.x:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
@ -11749,7 +11423,7 @@ rgba-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3:
rimraf@^2.5.4, rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@ -11878,7 +11552,7 @@ sass-loader@^10.0.5:
schema-utils "^3.0.0"
semver "^7.3.2"
sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
sax@^1.2.4, 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==
@ -11932,13 +11606,6 @@ scroll-into-view-if-needed@^2.2.25:
dependencies:
compute-scroll-into-view "^1.0.17"
sdk-base@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/sdk-base/-/sdk-base-2.0.1.tgz#ba40289e8bdf272ed11dd9ea97eaf98e036d24c6"
integrity sha1-ukAonovfJy7RHdnql+r5jgNtJMY=
dependencies:
get-ready "~1.0.0"
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@ -11951,7 +11618,7 @@ selfsigned@^1.10.8:
dependencies:
node-forge "^0.10.0"
"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@ -12202,11 +11869,6 @@ slick-carousel@^1.6.0:
resolved "https://registry.yarnpkg.com/slick-carousel/-/slick-carousel-1.8.1.tgz#a4bfb29014887bb66ce528b90bd0cda262cc8f8d"
integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==
smart-buffer@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba"
integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==
snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@ -12258,23 +11920,6 @@ sockjs@^0.3.21:
uuid "^3.4.0"
websocket-driver "^0.7.4"
socks-proxy-agent@5, socks-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e"
integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==
dependencies:
agent-base "^6.0.2"
debug "4"
socks "^2.3.3"
socks@^2.3.3:
version "2.6.1"
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==
dependencies:
ip "^1.1.5"
smart-buffer "^4.1.0"
sort-keys@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
@ -12454,7 +12099,7 @@ static-extend@^0.1.1:
define-property "^0.2.5"
object-copy "^0.1.0"
"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.3.1, statuses@~1.5.0:
"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
@ -12480,17 +12125,6 @@ stream-each@^1.1.0:
end-of-stream "^1.1.0"
stream-shift "^1.0.0"
stream-http@2.8.2:
version "2.8.2"
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87"
integrity sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==
dependencies:
builtin-status-codes "^3.0.0"
inherits "^2.0.1"
readable-stream "^2.3.6"
to-arraybuffer "^1.0.0"
xtend "^4.0.0"
stream-http@^2.7.2:
version "2.8.3"
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
@ -12507,11 +12141,6 @@ stream-shift@^1.0.0:
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
stream-wormhole@^1.0.4:
version "1.1.0"
resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d"
integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@ -12597,11 +12226,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@ -12894,20 +12518,6 @@ text-table@0.2.0, text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
dependencies:
thenify ">= 3.1.0 < 4"
"thenify@>= 3.1.0 < 4":
version "3.3.1"
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
dependencies:
any-promise "^1.0.0"
throat@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
@ -12921,11 +12531,6 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
through@~2.3:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
@ -13069,11 +12674,6 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
tslib@^2.0.3:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a"
@ -13182,13 +12782,6 @@ ua-parser-js@^0.7.18:
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31"
integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==
unescape@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96"
integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==
dependencies:
extend-shallow "^2.0.1"
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@ -13331,27 +12924,6 @@ url@^0.11.0:
punycode "1.3.2"
querystring "0.2.0"
urllib@^2.33.1:
version "2.37.3"
resolved "https://registry.yarnpkg.com/urllib/-/urllib-2.37.3.tgz#e5044a54947fbe9fe006188bbe73041970334111"
integrity sha512-jGfi6qi23KvN3u3WizRxeU/yWVoh0Ml7c4yfmeRKVfGESMXYfNcQCPgeHRC1w1OMstVa9MXyIUYz3OLj+pWAMA==
dependencies:
any-promise "^1.3.0"
content-type "^1.0.2"
debug "^2.6.9"
default-user-agent "^1.0.0"
digest-header "^0.0.1"
ee-first "~1.1.1"
formstream "^1.1.0"
humanize-ms "^1.2.0"
iconv-lite "^0.4.15"
ip "^1.1.5"
proxy-agent "^4.0.1"
pump "^3.0.0"
qs "^6.4.0"
statuses "^1.3.1"
utility "^1.16.1"
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
@ -13399,24 +12971,6 @@ utila@~0.4:
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
utility@0.1.11:
version "0.1.11"
resolved "https://registry.yarnpkg.com/utility/-/utility-0.1.11.tgz#fde60cf9b4e4751947a0cf5d104ce29367226715"
integrity sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=
dependencies:
address ">=0.0.1"
utility@^1.16.1, utility@^1.8.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/utility/-/utility-1.17.0.tgz#60819f712a6e0ce774f52fb1d691992a5f59d362"
integrity sha512-KdVkF9An/0239BJ4+dqOa7NPrPIOeQE9AGfx0XS16O9DBiHNHRJMoeU5nL6pRGAkgJOqdOu8R4gBRcXnAocJKw==
dependencies:
copy-to "^2.0.1"
escape-html "^1.0.3"
mkdirp "^0.5.1"
mz "^2.7.0"
unescape "^1.0.1"
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@ -13748,13 +13302,6 @@ widest-line@^2.0.0:
dependencies:
string-width "^2.1.1"
win-release@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209"
integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=
dependencies:
semver "^5.0.1"
word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@ -13977,29 +13524,11 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
xml2js@^0.4.16:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
dependencies:
sax ">=0.6.0"
xmlbuilder "~11.0.0"
xmlbuilder@~11.0.0:
version "11.0.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xregexp@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"