From 0ddf15b88433baca730cc60c4b2883703d4d37b5 Mon Sep 17 00:00:00 2001
From: Sebastian Arellanes <80025691+KapStorm@users.noreply.github.com>
Date: Tue, 29 Aug 2023 09:16:19 -0700
Subject: [PATCH 1/3] Remove admin projects (#209)
---
.../api/AdminDataExplorerApiClient.scala | 178 -
.../utils/api/models/AdminCreateTable.scala | 16 -
.../utils/api/models/AdminDeleteTable.scala | 10 -
.../utils/api/models/AdminGetTables.scala | 23 -
.../utils/api/models/AdminUpdateTable.scala | 14 -
.../utils/api/models/PlayErrorResponse.scala | 14 -
.../webapp/utils/api/models/package.scala | 21 -
.../webapp/utils/admin/AppRouter.scala | 61 -
.../admin/config/DataExplorerSettings.scala | 9 -
.../utils/admin/config/TableSettings.scala | 47 -
.../admin/controllers/AdminController.scala | 87 -
.../admin/controllers/ImagesController.scala | 23 -
.../utils/admin/controllers/package.scala | 50 -
.../executors/DatabaseExecutionContext.scala | 17 -
.../utils/admin/modules/AdminModule.scala | 7 -
.../utils/admin/modules/ExecutorsModule.scala | 11 -
.../DatabaseTablesRepository.scala | 139 -
.../repositories/daos/DatabaseTablesDAO.scala | 318 --
.../admin/repositories/daos/package.scala | 45 -
.../admin/repositories/models/Cell.scala | 5 -
.../repositories/models/DatabaseTable.scala | 5 -
.../repositories/models/ForeignKey.scala | 3 -
.../repositories/models/TableColumn.scala | 6 -
.../admin/repositories/models/TableData.scala | 3 -
.../admin/repositories/models/TableRow.scala | 13 -
.../utils/admin/services/AdminService.scala | 265 -
.../DataExplorerConfigValidatorTask.scala | 93 -
.../utils/admin/utils/QueryBuilder.scala | 49 -
.../utils/admin/utils/StringRegex.scala | 7 -
.../admin/utils/models/FilterParameter.scala | 16 -
.../utils/models/PaginationParameter.scala | 17 -
.../admin/utils/models/QueryParameters.scala | 8 -
.../admin/utils/models/SortParameter.scala | 16 -
.../webapp/utils/admin/utils/package.scala | 29 -
.../src/test/resources/application.conf | 77 -
.../test/resources/evolutions/default/1.sql | 30 -
.../test/resources/evolutions/default/2.sql | 35 -
.../src/test/resources/logback.xml | 61 -
.../src/test/resources/messages | 1 -
.../src/test/resources/routes | 17 -
.../controllers/AdminControllerSpec.scala | 774 ---
.../controllers/common/PlayAPISpec.scala | 115 -
.../controllers/common/PlayPostgresSpec.scala | 65 -
.../webapp/utils/admin/QueryBuilderSpec.scala | 84 -
.../webapp/utils/admin/StringRegexSpec.scala | 43 -
.../webapp/utils/admin/UtilsSpec.scala | 32 -
.../admin/models/FilterParameterSpec.scala | 29 -
.../models/PaginationParameterSpec.scala | 24 -
.../admin/models/SortParameterSpec.scala | 17 -
.../modules/DataExplorerTestModule.scala | 37 -
.../wiringbits/webapp/utils/ui/web/API.scala | 5 -
.../webapp/utils/ui/web/AdminView.scala | 37 -
.../utils/ui/web/components/EditGuesser.scala | 73 -
.../utils/ui/web/components/ListGuesser.scala | 57 -
.../web/facades/reactadmin/DataProvider.scala | 6 -
.../web/facades/reactadmin/ReactAdmin.scala | 17 -
.../web/facades/reactadmin/components.scala | 126 -
.../facades/reactadmin/fieldComponents.scala | 108 -
.../ui/web/facades/reactadmin/package.scala | 11 -
.../utils/ui/web/models/ButtonAction.scala | 10 -
.../webapp/utils/ui/web/models/Column.scala | 3 -
.../utils/ui/web/models/ColumnType.scala | 35 -
.../ui/web/models/DataExplorerSettings.scala | 3 -
.../utils/ui/web/models/TableAction.scala | 3 -
.../utils/ui/web/utils/ResponseGuesser.scala | 13 -
admin-data-explorer-web/yarn.lock | 4467 -----------------
build.sbt | 183 +-
67 files changed, 1 insertion(+), 8222 deletions(-)
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/AdminDataExplorerApiClient.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminCreateTable.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminDeleteTable.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminGetTables.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminUpdateTable.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/PlayErrorResponse.scala
delete mode 100644 admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/package.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/AppRouter.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/DataExplorerSettings.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/TableSettings.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/AdminController.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/ImagesController.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/package.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/executors/DatabaseExecutionContext.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/AdminModule.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/ExecutorsModule.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/DatabaseTablesRepository.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/DatabaseTablesDAO.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/package.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/Cell.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/DatabaseTable.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/ForeignKey.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableColumn.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableData.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableRow.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/services/AdminService.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/tasks/DataExplorerConfigValidatorTask.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/QueryBuilder.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/StringRegex.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/FilterParameter.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/PaginationParameter.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/QueryParameters.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/SortParameter.scala
delete mode 100644 admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/package.scala
delete mode 100644 admin-data-explorer-play-server/src/test/resources/application.conf
delete mode 100644 admin-data-explorer-play-server/src/test/resources/evolutions/default/1.sql
delete mode 100644 admin-data-explorer-play-server/src/test/resources/evolutions/default/2.sql
delete mode 100644 admin-data-explorer-play-server/src/test/resources/logback.xml
delete mode 100644 admin-data-explorer-play-server/src/test/resources/messages
delete mode 100644 admin-data-explorer-play-server/src/test/resources/routes
delete mode 100644 admin-data-explorer-play-server/src/test/scala/controllers/AdminControllerSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/controllers/common/PlayAPISpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/controllers/common/PlayPostgresSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/QueryBuilderSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/StringRegexSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/UtilsSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/FilterParameterSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/PaginationParameterSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/SortParameterSpec.scala
delete mode 100644 admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/modules/DataExplorerTestModule.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/API.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/AdminView.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/EditGuesser.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/ListGuesser.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/DataProvider.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/ReactAdmin.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/components.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/fieldComponents.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/package.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ButtonAction.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/Column.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ColumnType.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/DataExplorerSettings.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/TableAction.scala
delete mode 100644 admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/utils/ResponseGuesser.scala
delete mode 100644 admin-data-explorer-web/yarn.lock
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/AdminDataExplorerApiClient.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/AdminDataExplorerApiClient.scala
deleted file mode 100644
index 1dcdee3..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/AdminDataExplorerApiClient.scala
+++ /dev/null
@@ -1,178 +0,0 @@
-package net.wiringbits.webapp.utils.api
-
-import net.wiringbits.webapp.utils.api.models._
-import play.api.libs.json._
-import sttp.client3._
-import sttp.model._
-
-import scala.concurrent.{ExecutionContext, Future}
-import scala.util.{Failure, Success, Try}
-
-trait AdminDataExplorerApiClient {
- def getTables: Future[AdminGetTables.Response]
-
- def getTableMetadata(
- tableName: String,
- sort: List[String],
- range: List[Int],
- filters: String
- ): Future[List[Map[String, String]]]
-
- def viewItem(tableName: String, id: String): Future[Map[String, String]]
-
- def viewItems(tableName: String, ids: List[String]): Future[List[Map[String, String]]]
-
- def createItem(tableName: String, request: AdminCreateTable.Request): Future[AdminCreateTable.Response]
-
- def updateItem(tableName: String, id: String, request: Map[String, String]): Future[AdminUpdateTable.Response]
-
- def deleteItem(tableName: String, id: String): Future[AdminDeleteTable.Response]
-}
-
-object AdminDataExplorerApiClient {
- case class Config(serverUrl: String)
-
- private def asJson[R: Reads] = {
- asString
- .map {
- case Right(response) =>
- // handles 2xx responses
- Success(response)
- case Left(response) =>
- // handles non 2xx responses
- Try {
- val json = Json.parse(response)
- // TODO: Unify responses to match the play error format
- json
- .asOpt[ErrorResponse]
- .orElse {
- json
- .asOpt[PlayErrorResponse]
- .map(model => ErrorResponse(model.error.message))
- }
- .getOrElse(throw new RuntimeException(s"Unexpected JSON response: $response"))
- } match {
- case Failure(exception) =>
- println(s"Unexpected response: ${exception.getMessage}")
- exception.printStackTrace()
- Failure(new RuntimeException(s"Unexpected response, please try again in a minute"))
- case Success(value) =>
- Failure(new RuntimeException(value.error))
- }
- }
- .map { t =>
- t.map(Json.parse).map(_.as[R])
- }
- }
-
- class DefaultImpl(config: Config)(implicit
- backend: SttpBackend[Future, _],
- ec: ExecutionContext
- ) extends AdminDataExplorerApiClient {
-
- private val ServerAPI = sttp.model.Uri
- .parse(config.serverUrl)
- .getOrElse(throw new RuntimeException("Invalid server url"))
-
- private def prepareRequest[R: Reads] = {
- basicRequest
- .contentType(MediaType.ApplicationJson)
- .response(asJson[R])
- }
-
- override def getTables: Future[AdminGetTables.Response] = {
- val path = ServerAPI.path :+ "admin" :+ "tables"
- val uri = ServerAPI.withPath(path)
-
- prepareRequest[AdminGetTables.Response]
- .get(uri)
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def getTableMetadata(
- tableName: String,
- sort: List[String],
- range: List[Int],
- filters: String
- ): Future[List[Map[String, String]]] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName
- val parameters: Map[String, String] = Map(
- "sort" -> sort.mkString("[", ",", "]"),
- "range" -> range.mkString("[", ",", "]"),
- "filters" -> filters
- )
- val uri = ServerAPI
- .withPath(path)
- .addParams(parameters)
-
- prepareRequest[List[Map[String, String]]]
- .get(uri)
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def viewItem(tableName: String, id: String): Future[Map[String, String]] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName :+ id
- val uri = ServerAPI.withPath(path)
-
- prepareRequest[Map[String, String]]
- .get(uri)
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def viewItems(tableName: String, id: List[String]): Future[List[Map[String, String]]] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName
- val primaryKeyParam = Json.toJson(Map("id" -> id)).toString()
- val uri = ServerAPI.withPath(path).withParams(Map("filter" -> primaryKeyParam))
- prepareRequest[List[Map[String, String]]]
- .get(uri)
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def createItem(tableName: String, request: AdminCreateTable.Request): Future[AdminCreateTable.Response] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName
- val uri = ServerAPI.withPath(path)
-
- prepareRequest[AdminCreateTable.Response]
- .post(uri)
- .body(Json.toJson(request).toString())
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def updateItem(
- tableName: String,
- id: String,
- request: Map[String, String]
- ): Future[AdminUpdateTable.Response] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName :+ id
- val uri = ServerAPI.withPath(path)
-
- prepareRequest[AdminUpdateTable.Response]
- .put(uri)
- .body(Json.toJson(request).toString())
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
-
- override def deleteItem(tableName: String, id: String): Future[AdminDeleteTable.Response] = {
- val path = ServerAPI.path :+ "admin" :+ "tables" :+ tableName :+ id
- val uri = ServerAPI.withPath(path)
-
- prepareRequest[AdminDeleteTable.Response]
- .delete(uri)
- .send(backend)
- .map(_.body)
- .flatMap(Future.fromTry)
- }
- }
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminCreateTable.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminCreateTable.scala
deleted file mode 100644
index f6eef7c..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminCreateTable.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.wiringbits.webapp.utils.api.models
-
-import play.api.libs.json.{Format, Json}
-
-object AdminCreateTable {
- case class Request(data: Map[String, String])
-
- case class Response(noData: String = "")
-
- implicit val adminCreateTableRequestFormat: Format[Request] =
- Json.format[Request]
-
- implicit val adminCreateTableResponseFormat: Format[Response] =
- Json.format[Response]
-
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminDeleteTable.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminDeleteTable.scala
deleted file mode 100644
index 23872dd..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminDeleteTable.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.wiringbits.webapp.utils.api.models
-
-import play.api.libs.json.{Format, Json}
-
-object AdminDeleteTable {
- case class Response(noData: String = "")
-
- implicit val adminDeleteTableResponseFormat: Format[Response] =
- Json.format[Response]
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminGetTables.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminGetTables.scala
deleted file mode 100644
index 5803f25..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminGetTables.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package net.wiringbits.webapp.utils.api.models
-
-import play.api.libs.json.{Format, Json}
-
-object AdminGetTables {
- case class Response(data: List[Response.DatabaseTable])
- object Response {
- case class DatabaseTable(name: String, columns: List[TableColumn], primaryKeyName: String, canBeDeleted: Boolean)
- case class TableColumn(
- name: String,
- `type`: String,
- editable: Boolean,
- reference: Option[TableReference],
- filterable: Boolean
- )
- case class TableReference(referencedTable: String, referenceField: String)
-
- implicit val adminTableReferenceResponseFormat: Format[TableReference] = Json.format[TableReference]
- implicit val adminTableColumnResponseFormat: Format[TableColumn] = Json.format[TableColumn]
- implicit val adminDatabaseTableResponseFormat: Format[DatabaseTable] = Json.format[DatabaseTable]
- }
- implicit val adminGetTablesResponseFormat: Format[Response] = Json.format[Response]
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminUpdateTable.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminUpdateTable.scala
deleted file mode 100644
index 7d91430..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/AdminUpdateTable.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.wiringbits.webapp.utils.api.models
-
-import play.api.libs.json.{Format, Json}
-
-object AdminUpdateTable {
- case class Request(data: Map[String, String])
- case class Response(id: String)
-
- implicit val adminUpdateTableRequestFormat: Format[Request] =
- Json.format[Request]
-
- implicit val adminUpdateTableResponseFormat: Format[Response] =
- Json.format[Response]
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/PlayErrorResponse.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/PlayErrorResponse.scala
deleted file mode 100644
index d608945..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/PlayErrorResponse.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.wiringbits.webapp.utils.api.models
-
-import play.api.libs.json.{Format, Json}
-
-// play json errors are like:
-// {"error":{"requestId":2,"message":"Invalid Json: ..."}}
-case class PlayErrorResponse(error: PlayErrorResponse.PlayError)
-
-object PlayErrorResponse {
- case class PlayError(message: String)
-
- implicit val playErrorResponseErrorFormat: Format[PlayError] = Json.format[PlayError]
- implicit val playErrorResponseFormat: Format[PlayErrorResponse] = Json.format[PlayErrorResponse]
-}
diff --git a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/package.scala b/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/package.scala
deleted file mode 100644
index 361a1ee..0000000
--- a/admin-data-explorer-api/shared/src/main/scala/net/wiringbits/webapp/utils/api/models/package.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package net.wiringbits.webapp.utils.api
-
-import play.api.libs.json._
-
-import java.time.Instant
-
-package object models {
-
- /** For some reason, play-json doesn't provide support for Instant in the scalajs version, grabbing the jvm values
- * seems to work:
- * - https://github.com/playframework/play-json/blob/master/play-json/jvm/src/main/scala/play/api/libs/json/EnvReads.scala
- * - https://github.com/playframework/play-json/blob/master/play-json/jvm/src/main/scala/play/api/libs/json/EnvWrites.scala
- */
- implicit val instantFormat: Format[Instant] = Format[Instant](
- fjs = implicitly[Reads[String]].map(string => Instant.parse(string)),
- tjs = Writes[Instant](i => JsString(i.toString))
- )
-
- case class ErrorResponse(error: String)
- implicit val errorResponseFormat: Format[ErrorResponse] = Json.format[ErrorResponse]
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/AppRouter.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/AppRouter.scala
deleted file mode 100644
index 02fd1ac..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/AppRouter.scala
+++ /dev/null
@@ -1,61 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.admin.controllers.{AdminController, ImagesController}
-import net.wiringbits.webapp.utils.admin.utils.StringToDataTypesExt
-import net.wiringbits.webapp.utils.admin.utils.models.{
- FilterParameter,
- PaginationParameter,
- QueryParameters,
- SortParameter
-}
-import play.api.routing.Router.Routes
-import play.api.routing.SimpleRouter
-import play.api.routing.sird.*
-
-import javax.inject.Inject
-
-class AppRouter @Inject() (adminController: AdminController, imagesController: ImagesController) extends SimpleRouter {
-
- override def routes: Routes = {
- // get database tables
- case GET(p"/admin/tables") =>
- adminController.getTables()
-
- // get database table fields
- // example: GET http://localhost:9000/admin/tables/users?filters={}&range=[0, 9]&sort=["id", "ASC"]
- case GET(p"/admin/tables/$tableName" ? q"filters=$filters" & q"range=$range" & q"sort=$sort") =>
- val queryParams =
- QueryParameters(
- sort = SortParameter.fromString(sort),
- pagination = PaginationParameter.fromString(range),
- filters = FilterParameter.fromString(filters)
- )
- adminController.getTableMetadata(tableName, queryParams)
-
- // get table resource by id (depends on IDFieldName on AdminConfig)
- case GET(p"/admin/tables/$tableName/$primaryKeyValue") =>
- adminController.find(tableName, primaryKeyValue)
-
- // get table resources by ids
- case GET(p"/admin/tables/$tableName" ? q"filter=$fieldStr") =>
- // fieldStr is a string like: "List(..., ..., ...)" that's why we substring it
- val filter = fieldStr.substring(6, fieldStr.length - 1).toStringList
- adminController.find(tableName, filter)
-
- // create table resource
- case POST(p"/admin/tables/$tableName") =>
- adminController.create(tableName)
-
- // update table resource
- case PUT(p"/admin/tables/$tableName/$primaryKeyValue") =>
- adminController.update(tableName, primaryKeyValue)
-
- // delete table resource
- case DELETE(p"/admin/tables/$tableName/$id") =>
- adminController.delete(tableName, id)
-
- // get a image
- case GET(p"/admin/images/$tableName/$columnName/$primaryKeyValue") =>
- imagesController.find(tableName, columnName, primaryKeyValue)
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/DataExplorerSettings.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/DataExplorerSettings.scala
deleted file mode 100644
index ac1d8c9..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/DataExplorerSettings.scala
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.wiringbits.webapp.utils.admin.config
-
-case class DataExplorerSettings(baseUrl: String, tables: List[TableSettings]) {
- def unsafeFindByName(tableName: String): TableSettings = {
- tables
- .find(_.tableName == tableName)
- .getOrElse(throw new RuntimeException(s"Cannot find settings for table: $tableName"))
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/TableSettings.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/TableSettings.scala
deleted file mode 100644
index 2745664..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/config/TableSettings.scala
+++ /dev/null
@@ -1,47 +0,0 @@
-package net.wiringbits.webapp.utils.admin.config
-
-/** @param tableName
- * name of table in database
- * @param primaryKeyField
- * primary key identifier of table
- * @param referenceField
- * field that react-admin shows for foreign key references instead of primary key
- * @param hiddenColumns
- * columns that the API won't return when the data is queried (for example: user password)
- * @param nonEditableColumns
- * columns that aren't editable (disabled) via react-admin
- * @param canBeDeleted
- * indicates if resources from this table can be deleted
- * @param primaryKeyDataType
- * UUID, Serial, or BigSerial primary keys
- * @param columnTypeOverrides
- * overrides the data type and converts it, it requires a column name and Text, BinaryImage, Binary
- * @param filterableColumns
- * columns that are filterable via react-admin
- */
-
-case class TableSettings(
- tableName: String,
- primaryKeyField: String,
- referenceField: Option[String] = None,
- hiddenColumns: List[String] = List.empty,
- nonEditableColumns: List[String] = List.empty,
- canBeDeleted: Boolean = true,
- primaryKeyDataType: PrimaryKeyDataType = PrimaryKeyDataType.UUID,
- columnTypeOverrides: Map[String, CustomDataType] = Map.empty,
- filterableColumns: List[String] = List.empty
-)
-
-sealed trait PrimaryKeyDataType extends Product with Serializable
-object PrimaryKeyDataType {
- final case object UUID extends PrimaryKeyDataType
- final case object Serial extends PrimaryKeyDataType
- final case object BigSerial extends PrimaryKeyDataType
-}
-
-sealed trait CustomDataType extends Product with Serializable
-object CustomDataType {
- final case object BinaryImage extends CustomDataType
- // TODO: add support to binary files
- final case object Binary extends CustomDataType
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/AdminController.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/AdminController.scala
deleted file mode 100644
index 9b6251b..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/AdminController.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.wiringbits.webapp.utils.admin.controllers
-
-import net.wiringbits.webapp.utils.admin.config.DataExplorerSettings
-import net.wiringbits.webapp.utils.admin.services.AdminService
-import net.wiringbits.webapp.utils.admin.utils.models.QueryParameters
-import net.wiringbits.webapp.utils.api.models.*
-import org.slf4j.LoggerFactory
-import play.api.libs.json.Json
-import play.api.mvc.{AbstractController, ControllerComponents}
-
-import javax.inject.Inject
-import scala.concurrent.ExecutionContext
-
-// TODO: Remove authentication, which should be provided by each app
-class AdminController @Inject() (
- adminService: AdminService,
- settings: DataExplorerSettings
-)(implicit cc: ControllerComponents, ec: ExecutionContext)
- extends AbstractController(cc) {
- private val logger = LoggerFactory.getLogger(this.getClass)
-
- def getTables() = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Get database tables")
- response <- adminService.tables()
- } yield Ok(Json.toJson(response))
- }
-
- def getTableMetadata(tableName: String, queryParams: QueryParameters) = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Get metadata for $tableName, parameters: $queryParams")
- (response, contentRange) <- adminService.tableMetadata(tableName, queryParams)
- } yield Ok(Json.toJson(response))
- .withHeaders(("Access-Control-Expose-Headers", "Content-Range"), ("Content-Range", contentRange))
- }
-
- def find(tableName: String, primaryKeyValue: String) = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Get data from $tableName where primaryKey = $primaryKeyValue")
- response <- adminService.find(tableName, primaryKeyValue)
- } yield Ok(Json.toJson(response))
- }
-
- def find(tableName: String, primaryKeyValues: List[String]) = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Get data from $tableName where primaryKeys = ${primaryKeyValues.mkString(",")}")
- response <- adminService.find(tableName, primaryKeyValues)
- } yield Ok(Json.toJson(response))
- }
-
- def create(tableName: String) = handleJsonBody[AdminCreateTable.Request] { request =>
- val body = request.body
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Create row in $tableName: ${body.data}")
- _ <- adminService.create(tableName, body)
- response = AdminCreateTable.Response()
- } yield Ok(Json.toJson(response))
- }
-
- def update(tableName: String, primaryKeyValue: String) = handleJsonBody[Map[String, String]] { request =>
- val primaryKeyFieldName = settings.unsafeFindByName(tableName).primaryKeyField
- val body = request.body.map {
- case ("id", value) => primaryKeyFieldName -> value
- case x => x
- }
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Update row from $tableName where primaryKey = $primaryKeyValue, body = $body")
- _ <- adminService.update(tableName, primaryKeyValue, body)
- response = AdminUpdateTable.Response(id = primaryKeyValue)
- } yield Ok(Json.toJson(response))
- }
-
- def delete(tableName: String, id: String) = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Delete row from $tableName, id = $id")
- _ <- adminService.delete(tableName, id)
- response = AdminDeleteTable.Response()
- } yield Ok(Json.toJson(response))
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/ImagesController.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/ImagesController.scala
deleted file mode 100644
index c0889b2..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/ImagesController.scala
+++ /dev/null
@@ -1,23 +0,0 @@
-package net.wiringbits.webapp.utils.admin.controllers
-
-import net.wiringbits.webapp.utils.admin.services.AdminService
-import org.slf4j.LoggerFactory
-import play.api.mvc.{AbstractController, ControllerComponents}
-
-import javax.inject.Inject
-import scala.concurrent.ExecutionContext
-
-class ImagesController @Inject() (
- adminService: AdminService
-)(implicit cc: ControllerComponents, ec: ExecutionContext)
- extends AbstractController(cc) {
- private val logger = LoggerFactory.getLogger(this.getClass)
-
- def find(tableName: String, columnName: String, imageId: String) = handleGET { request =>
- for {
- _ <- adminUser(request)
- _ = logger.info(s"Get image for $tableName, id = $imageId")
- image <- adminService.findImage(tableName, columnName, imageId)
- } yield Ok.sendFile(image).withHeaders(("Content-Type", "image/png"))
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/package.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/package.scala
deleted file mode 100644
index e371a7e..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/controllers/package.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.api.models.ErrorResponse
-import org.slf4j.LoggerFactory
-import play.api.libs.json.{JsValue, Json, Reads}
-import play.api.mvc.Results.InternalServerError
-import play.api.mvc.*
-
-import scala.concurrent.{ExecutionContext, Future}
-import scala.util.control.NonFatal
-
-package object controllers {
- private val logger = LoggerFactory.getLogger(this.getClass)
-
- def adminUser(request: Request[_]): Future[String] = {
- // nginx forwards the user while using basic-authentication, which is unknown in the local environment
- val user = request.headers.get("X-Forwarded-User").getOrElse("Unknown")
- Future.successful(user)
- }
-
- def handleJsonBody[T: Reads](
- block: Request[T] => Future[Result]
- )(implicit cc: ControllerComponents, ec: ExecutionContext): Action[T] = {
- cc.actionBuilder
- .async(cc.parsers.tolerantJson[T]) { request =>
- block(request).recover(errorHandler)
- }
- }
-
- def handleGET(
- block: Request[AnyContent] => Future[Result]
- )(implicit cc: ControllerComponents, ec: ExecutionContext): Action[AnyContent] = {
- cc.actionBuilder
- .async { request =>
- block(request).recover(errorHandler)
- }
- }
-
- def renderError(msg: String): JsValue = {
- Json.toJson(ErrorResponse(msg))
- }
-
- def errorHandler: PartialFunction[Throwable, Result] = {
- // rendering any error this way should be enough for a while
- case NonFatal(ex) =>
- // debug level used because this includes any validation error as well as server errors
- logger.debug(s"Error response while handling a request: ${ex.getMessage}", ex)
- InternalServerError(renderError(ex.getMessage))
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/executors/DatabaseExecutionContext.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/executors/DatabaseExecutionContext.scala
deleted file mode 100644
index 2fb8734..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/executors/DatabaseExecutionContext.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.wiringbits.webapp.utils.admin.executors
-
-import akka.actor.ActorSystem
-import play.api.libs.concurrent.CustomExecutionContext
-
-import javax.inject.{Inject, Singleton}
-import scala.concurrent.ExecutionContext
-
-trait DatabaseExecutionContext extends ExecutionContext
-
-object DatabaseExecutionContext {
-
- @Singleton
- class AkkaBased @Inject() (system: ActorSystem)
- extends CustomExecutionContext(system, "database.dispatcher")
- with DatabaseExecutionContext
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/AdminModule.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/AdminModule.scala
deleted file mode 100644
index 831f382..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/AdminModule.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package net.wiringbits.webapp.utils.admin.modules
-
-import net.wiringbits.webapp.utils.admin.tasks.DataExplorerConfigValidatorTask
-import play.api.inject
-import play.api.inject.SimpleModule
-
-class AdminModule extends SimpleModule(inject.bind[DataExplorerConfigValidatorTask].toSelf.eagerly())
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/ExecutorsModule.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/ExecutorsModule.scala
deleted file mode 100644
index e9d3470..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/modules/ExecutorsModule.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package net.wiringbits.webapp.utils.admin.modules
-
-import com.google.inject.AbstractModule
-import net.wiringbits.webapp.utils.admin.executors.DatabaseExecutionContext
-
-class ExecutorsModule extends AbstractModule {
-
- override def configure(): Unit = {
- val _ = bind(classOf[DatabaseExecutionContext]).to(classOf[DatabaseExecutionContext.AkkaBased]).asEagerSingleton()
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/DatabaseTablesRepository.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/DatabaseTablesRepository.scala
deleted file mode 100644
index 7a8d5d8..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/DatabaseTablesRepository.scala
+++ /dev/null
@@ -1,139 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories
-
-import net.wiringbits.webapp.utils.admin.config.{DataExplorerSettings, TableSettings}
-import net.wiringbits.webapp.utils.admin.executors.DatabaseExecutionContext
-import net.wiringbits.webapp.utils.admin.repositories.daos.DatabaseTablesDAO
-import net.wiringbits.webapp.utils.admin.repositories.models.{DatabaseTable, ForeignKey, TableColumn, TableData}
-import net.wiringbits.webapp.utils.admin.utils.models.QueryParameters
-import play.api.db.Database
-
-import javax.inject.Inject
-import scala.concurrent.Future
-
-class DatabaseTablesRepository @Inject() (database: Database)(implicit
- ec: DatabaseExecutionContext,
- tableSettings: DataExplorerSettings
-) {
- def all(): Future[List[DatabaseTable]] = Future {
- database.withConnection { implicit conn =>
- DatabaseTablesDAO.all()
- }
- }
-
- def getTableColumns(tableName: String): Future[List[TableColumn]] = Future {
- database.withConnection { implicit conn =>
- DatabaseTablesDAO.getTableColumns(tableName)
- }
- }
-
- def getForeignKeys(tableName: String): Future[List[ForeignKey]] = Future {
- database.withConnection { implicit conn =>
- DatabaseTablesDAO.getForeignKeys(tableName)
- }
- }
-
- def getMandatoryFields(tableName: String): Future[List[TableColumn]] = Future {
- database.withConnection { implicit conn =>
- val primaryKeyField = tableSettings.unsafeFindByName(tableName).primaryKeyField
- DatabaseTablesDAO.getMandatoryFields(tableName, primaryKeyField)
- }
- }
-
- def getTableMetadata(settings: TableSettings, queryParameters: QueryParameters): Future[List[TableData]] = Future {
- database.withTransaction { implicit conn =>
- val columns = DatabaseTablesDAO.getTableColumns(settings.tableName)
- val rows = DatabaseTablesDAO.getTableData(settings, columns, queryParameters, tableSettings.baseUrl)
- val columnNames = getColumnNames(columns, settings.primaryKeyField)
- rows.map { row =>
- val tableRow = row.convertToMap(columnNames)
- TableData(tableRow)
- }
- }
- }
-
- private def getColumnNames(columns: List[TableColumn], primaryKeyField: String) = {
- val columnNames = columns.map(_.name)
- // react-admin looks for an "id" field instead of "user_id", "user_log_id", etc..
- columnNames.updated(columnNames.indexOf(primaryKeyField), "id")
- }
-
- def find(tableName: String, primaryKeyValue: String): Future[Option[TableData]] = Future {
- database.withTransaction { implicit conn =>
- val settings = tableSettings.unsafeFindByName(tableName)
- val columns = DatabaseTablesDAO.getTableColumns(tableName)
- val maybe = DatabaseTablesDAO.find(settings, columns, primaryKeyValue, tableSettings.baseUrl)
- val columnNames = getColumnNames(columns, settings.primaryKeyField)
- maybe.map(x => TableData(x.convertToMap(columnNames)))
- }
- }
-
- def create(tableName: String, body: Map[String, String]): Future[Unit] = Future {
- database.withConnection { implicit conn =>
- val primaryKeyField = tableSettings.unsafeFindByName(tableName).primaryKeyField
- val primaryKeyType = tableSettings.unsafeFindByName(tableName).primaryKeyDataType
- DatabaseTablesDAO.create(
- tableName = tableName,
- body = body,
- primaryKeyField = primaryKeyField,
- primaryKeyType = primaryKeyType
- )
- }
- }
-
- def update(tableName: String, primaryKeyValue: String, body: Map[String, String]): Future[Unit] =
- Future {
- database.withTransaction { implicit conn =>
- val settings = tableSettings.unsafeFindByName(tableName)
- val columns = DatabaseTablesDAO.getTableColumns(tableName)
- // hide non editable fields in case somebody edit it
- val bodyWithoutNonEditableColumns = body.filterNot { case (key, _) =>
- settings.nonEditableColumns.contains(key)
- }
- // transforms Map[String, String] to Map[TableColumn, String]
- // this is necessary because we want the column type to cast the data
- val fieldsAndValues = bodyWithoutNonEditableColumns.map { case (key, value) =>
- val field =
- columns.find(_.name == key).getOrElse(throw new RuntimeException(s"Invalid property in body request: $key"))
- (field, value)
- }
- val primaryKeyType = settings.primaryKeyDataType
- DatabaseTablesDAO.update(
- tableName = tableName,
- fieldsAndValues = fieldsAndValues,
- primaryKeyField = settings.primaryKeyField,
- primaryKeyValue = primaryKeyValue,
- primaryKeyType = primaryKeyType
- )
- }
- }
-
- def delete(tableName: String, primaryKeyValue: String): Future[Unit] =
- Future {
- database.withConnection { implicit conn =>
- val primaryKeyField = tableSettings.unsafeFindByName(tableName).primaryKeyField
- val primaryKeyType = tableSettings.unsafeFindByName(tableName).primaryKeyDataType
- DatabaseTablesDAO.delete(
- tableName = tableName,
- primaryKeyField = primaryKeyField,
- primaryKeyValue = primaryKeyValue,
- primaryKeyType = primaryKeyType
- )
- }
- }
-
- def numberOfRecords(tableName: String): Future[Int] = Future {
- database.withConnection { implicit conn =>
- DatabaseTablesDAO.countRecordsOnTable(tableName)
- }
- }
-
- def getImageData(
- settings: TableSettings,
- columnName: String,
- imageId: String
- ): Future[Option[Array[Byte]]] = Future {
- database.withConnection { implicit conn =>
- DatabaseTablesDAO.getImageData(settings, columnName, imageId)
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/DatabaseTablesDAO.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/DatabaseTablesDAO.scala
deleted file mode 100644
index 7e9929d..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/DatabaseTablesDAO.scala
+++ /dev/null
@@ -1,318 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.daos
-
-import anorm.{SqlParser, SqlStringInterpolation}
-import net.wiringbits.webapp.utils.admin.config.{CustomDataType, PrimaryKeyDataType, TableSettings}
-import net.wiringbits.webapp.utils.admin.repositories.models.*
-import net.wiringbits.webapp.utils.admin.utils.models.{FilterParameter, QueryParameters}
-import net.wiringbits.webapp.utils.admin.utils.{QueryBuilder, StringRegex}
-
-import java.sql.{Connection, Date, PreparedStatement, ResultSet}
-import java.time.LocalDate
-import java.util.UUID
-import scala.collection.mutable.ListBuffer
-import scala.util.Try
-
-object DatabaseTablesDAO {
-
- def all(schema: String = "public")(implicit conn: Connection): List[DatabaseTable] = {
- SQL"""
- SELECT table_name
- FROM information_schema.tables
- WHERE table_schema = $schema
- AND table_type = 'BASE TABLE'
- ORDER BY table_name
- """.as(tableParser.*)
- }
-
- def getTableColumns(
- tableName: String
- )(implicit conn: Connection): List[TableColumn] = {
- val sql = s"SELECT * FROM $tableName LIMIT 0"
- val preparedStatement = conn.prepareStatement(sql)
-
- try {
- val resultSet = preparedStatement.executeQuery()
- val metadata = resultSet.getMetaData
- val numberOfColumns = metadata.getColumnCount
- try {
- val fields = for {
- columnNumber <- 1 to numberOfColumns
- columnName = metadata.getColumnName(columnNumber)
- columnType = metadata.getColumnTypeName(columnNumber)
- } yield TableColumn(columnName, columnType)
- fields.toList
- } finally {
- resultSet.close()
- }
- } finally {
- preparedStatement.close()
- }
- }
-
- def getForeignKeys(
- tableName: String
- )(implicit conn: Connection): List[ForeignKey] = {
- SQL"""
- SELECT kcu.table_name AS foreign_table,
- rel_tco.table_name AS primary_table,
- kcu.column_name AS fk_column
- FROM information_schema.table_constraints tco
- JOIN information_schema.key_column_usage kcu
- ON tco.constraint_schema = kcu.constraint_schema
- AND tco.constraint_name = kcu.constraint_name
- JOIN information_schema.referential_constraints rco
- ON tco.constraint_schema = rco.constraint_schema
- AND tco.constraint_name = rco.constraint_name
- JOIN information_schema.table_constraints rel_tco
- ON rco.unique_constraint_schema = rel_tco.constraint_schema
- AND rco.unique_constraint_name = rel_tco.constraint_name
- WHERE tco.constraint_type = 'FOREIGN KEY'
- AND kcu.table_name = $tableName
- GROUP BY kcu.table_schema, kcu.table_name, kcu.column_name, rel_tco.table_name, rel_tco.table_schema
- ORDER BY kcu.table_schema, kcu.table_name
- """.as(foreignKeyParser.*)
- }
-
- def getTableData(
- settings: TableSettings,
- columns: List[TableColumn],
- queryParameters: QueryParameters,
- baseUrl: String
- )(implicit conn: Connection): List[TableRow] = {
- val dateRegex = StringRegex.dateRegex
- val limit = queryParameters.pagination.end - queryParameters.pagination.start
- val offset = queryParameters.pagination.start
- val tableName = settings.tableName
- // react-admin gives us a "id" field instead of the primary key of the actual column so we need to replace it
- val sortBy = if (queryParameters.sort.field == "id") settings.primaryKeyField else queryParameters.sort.field
-
- val conditionsSql = queryParameters.filters
- .map { case FilterParameter(filterField, filterValue) =>
- filterValue match {
- case dateRegex(_, _, _) =>
- s"DATE($filterField) = ?"
-
- case _ =>
- if (filterValue.toIntOption.isDefined || filterValue.toDoubleOption.isDefined)
- s"$filterField = ?"
- else
- s"$filterField LIKE ?"
- }
- }
- .mkString("WHERE ", " AND ", " ")
-
- val sql =
- s"""
- SELECT * FROM $tableName
- ${if (queryParameters.filters.nonEmpty) conditionsSql else ""}
- ORDER BY $sortBy ${queryParameters.sort.ordering}
- LIMIT $limit OFFSET $offset
- """
- val preparedStatement = conn.prepareStatement(sql)
-
- queryParameters.filters.zipWithIndex
- .foreach { case (FilterParameter(_, filterValue), index) =>
- // We have to increment index by 1 because SQL parameterIndex starts in 1
- val sqlIndex = index + 1
-
- filterValue match {
- case dateRegex(year, month, day) =>
- val parsedDate = LocalDate.of(year.toInt, month.toInt, day.toInt)
- preparedStatement.setDate(sqlIndex, Date.valueOf(parsedDate))
-
- case _ =>
- if (filterValue.toIntOption.isDefined)
- preparedStatement.setInt(sqlIndex, filterValue.toInt)
- else if (filterValue.toDoubleOption.isDefined)
- preparedStatement.setDouble(sqlIndex, filterValue.toDouble)
- else
- preparedStatement.setString(sqlIndex, s"%$filterValue%")
- }
- }
-
- val resultSet = preparedStatement.executeQuery()
- val tableData = new ListBuffer[TableRow]()
- try {
- while (resultSet.next) {
- val rowData = for {
- column <- columns
- columnName = column.name
- stringData = getStringFromColumnName(
- settings = settings,
- resultSet = resultSet,
- columnName = columnName,
- baseUrl = baseUrl
- )
- } yield Cell(stringData)
- tableData += TableRow(rowData)
- }
- tableData.toList
- } finally {
- resultSet.close()
- preparedStatement.close()
- }
- }
-
- private def getStringFromColumnName(
- settings: TableSettings,
- resultSet: ResultSet,
- columnName: String,
- baseUrl: String
- ) = {
- val maybe = settings.columnTypeOverrides.get(columnName)
- val data = maybe
- .map {
- case CustomDataType.BinaryImage =>
- val rowId = resultSet.getString(settings.primaryKeyField)
- s"$baseUrl/admin/images/${settings.tableName}/$columnName/$rowId"
- // TODO: handle binary file
- case CustomDataType.Binary => resultSet.getString(columnName)
- }
- .getOrElse(resultSet.getString(columnName))
- Option(data).getOrElse("")
- }
-
- def getMandatoryFields(tableName: String, primaryKeyField: String)(implicit conn: Connection): List[TableColumn] = {
- SQL"""
- SELECT column_name, data_type
- FROM information_schema.columns
- WHERE table_schema = 'public'
- AND is_nullable = 'NO'
- AND column_default IS NULL
- AND table_name = $tableName
- AND column_name != $primaryKeyField
- ORDER BY column_name
- """.as(tableColumnParser.*)
- }
-
- def find(settings: TableSettings, columns: List[TableColumn], primaryKeyValue: String, baseUrl: String)(implicit
- conn: Connection
- ): Option[TableRow] = {
- val sql = s"""
- SELECT *
- FROM ${settings.tableName}
- WHERE ${settings.primaryKeyField} = ?
- """
- val preparedStatement = conn.prepareStatement(sql)
-
- setPreparedStatementKey(preparedStatement, primaryKeyValue, settings.primaryKeyDataType)
- val resultSet = preparedStatement.executeQuery()
- Try {
- resultSet.next()
- val row = for {
- column <- columns
- columnName = column.name
- stringData = getStringFromColumnName(
- settings = settings,
- resultSet = resultSet,
- columnName = columnName,
- baseUrl = baseUrl
- )
- } yield Cell(stringData)
- TableRow(row.toList)
- }.toOption
- }
-
- private def setPreparedStatementKey(
- preparedStatement: PreparedStatement,
- primaryKeyValue: String,
- primaryKeyType: PrimaryKeyDataType,
- parameterIndex: Int = 1
- ): Unit = {
- primaryKeyType match { // regular string unless UUID
- case PrimaryKeyDataType.UUID => preparedStatement.setObject(parameterIndex, UUID.fromString(primaryKeyValue))
- // TODO: Handle errors when the value is not an integer
- case PrimaryKeyDataType.Serial =>
- preparedStatement.setInt(parameterIndex, primaryKeyValue.toInt) // use setInt instead of setObject
- case PrimaryKeyDataType.BigSerial =>
- preparedStatement.setLong(parameterIndex, primaryKeyValue.toLong) // use setLong instead of setObject
- }
- }
- def create(
- tableName: String,
- body: Map[String, String],
- primaryKeyField: String,
- primaryKeyType: PrimaryKeyDataType = PrimaryKeyDataType.UUID
- )(implicit
- conn: Connection
- ): Unit = {
- val sql = QueryBuilder.create(tableName, body, primaryKeyField, primaryKeyType)
- val preparedStatement = conn.prepareStatement(sql)
-
- var i = 0
- if (primaryKeyType == PrimaryKeyDataType.UUID) {
- i = i + 1
- preparedStatement.setObject(i, UUID.randomUUID())
- }
- // NOTE: QueryBuilder.create needs primaryKeyType parameter because it seems there is no way to pass DEFAULT
- // into prepared statement parameter. Must be set literally in QueryBuilder.create
- // eg. NULL can be used in MySQL to generate default value in an autoincrement column, but not Postgres unfortunately
- // Postgres: INSERT INTO test_serial (id) VALUES(DEFAULT); MySQL: INSERT INTO table (id) VALUES(NULL)
-
- for (j <- i + 1 to body.size + i) {
- val value = body(body.keys.toList(j - i - 1))
- preparedStatement.setObject(j, value)
- }
- val _ = preparedStatement.executeUpdate()
- }
-
- def update(
- tableName: String,
- fieldsAndValues: Map[TableColumn, String],
- primaryKeyField: String,
- primaryKeyValue: String,
- primaryKeyType: PrimaryKeyDataType = PrimaryKeyDataType.UUID
- )(implicit conn: Connection): Unit = {
- val sql = QueryBuilder.update(tableName, fieldsAndValues, primaryKeyField)
- val preparedStatement = conn.prepareStatement(sql)
-
- val notNullData = fieldsAndValues.filterNot { case (_, value) => value == "null" }
- notNullData.zipWithIndex.foreach { case ((_, value), i) =>
- preparedStatement.setObject(i + 1, value)
- }
- // where ... = ?
- setPreparedStatementKey(preparedStatement, primaryKeyValue, primaryKeyType, notNullData.size + 1)
- val _ = preparedStatement.executeUpdate()
- }
-
- def delete(
- tableName: String,
- primaryKeyField: String,
- primaryKeyValue: String,
- primaryKeyType: PrimaryKeyDataType = PrimaryKeyDataType.UUID
- )(implicit
- conn: Connection
- ): Unit = {
- val sql = s"""
- DELETE FROM $tableName
- WHERE $primaryKeyField = ?
- """
- val preparedStatement = conn.prepareStatement(sql)
- setPreparedStatementKey(preparedStatement, primaryKeyValue, primaryKeyType)
- val _ = preparedStatement.executeUpdate()
- }
-
- def countRecordsOnTable(tableName: String)(implicit conn: Connection): Int = {
- SQL"""
- SELECT COUNT(*)
- FROM #$tableName
- """.as(SqlParser.int("count").single)
- }
-
- def getImageData(settings: TableSettings, columnName: String, imageId: String)(implicit
- conn: Connection
- ): Option[Array[Byte]] = {
- val sql = s"""
- SELECT $columnName
- FROM ${settings.tableName}
- WHERE ${settings.primaryKeyField} = ?
- """
- val preparedStatement = conn.prepareStatement(sql)
- setPreparedStatementKey(preparedStatement, imageId, settings.primaryKeyDataType)
- val resultSet = preparedStatement.executeQuery()
- Try {
- resultSet.next()
- resultSet.getBytes(columnName)
- }.toOption
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/package.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/package.scala
deleted file mode 100644
index 9bf8cb8..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/daos/package.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories
-
-import anorm.*
-import net.wiringbits.webapp.utils.admin.repositories.models.{DatabaseTable, ForeignKey, TableColumn}
-
-package object daos {
- import anorm.{Column, MetaDataItem, TypeDoesNotMatch}
- import org.postgresql.util.PGobject
-
- implicit val citextToString: Column[String] = Column.nonNull { case (value, meta) =>
- val MetaDataItem(qualified, _, clazz) = meta
- value match {
- case str: String => Right(str)
- case obj: PGobject if "citext" equalsIgnoreCase obj.getType => Right(obj.getValue)
- case _ =>
- Left(
- TypeDoesNotMatch(
- s"Cannot convert $value: ${value.asInstanceOf[AnyRef].getClass} to String for column $qualified, class = $clazz"
- )
- )
- }
- }
-
- val tableParser: RowParser[DatabaseTable] = {
- Macro.parser[DatabaseTable](
- "table_name"
- )
- }
-
- val tableColumnParser: RowParser[TableColumn] = {
- Macro.parser[TableColumn](
- "column_name",
- "data_type"
- )
- }
-
- val foreignKeyParser: RowParser[ForeignKey] = {
- Macro.parser[ForeignKey](
- "foreign_table",
- "primary_table",
- "fk_column"
- )
- }
-
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/Cell.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/Cell.scala
deleted file mode 100644
index 3efcfd0..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/Cell.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-case class Cell(
- value: String
-)
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/DatabaseTable.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/DatabaseTable.scala
deleted file mode 100644
index 98a1d83..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/DatabaseTable.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-case class DatabaseTable(
- name: String
-)
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/ForeignKey.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/ForeignKey.scala
deleted file mode 100644
index d515b5f..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/ForeignKey.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-case class ForeignKey(foreignTable: String, primaryTable: String, foreignColumnName: String)
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableColumn.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableColumn.scala
deleted file mode 100644
index 994e087..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableColumn.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-case class TableColumn(
- name: String,
- `type`: String
-)
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableData.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableData.scala
deleted file mode 100644
index bdc3d75..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableData.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-case class TableData(data: Map[String, String])
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableRow.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableRow.scala
deleted file mode 100644
index 33dd2af..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/repositories/models/TableRow.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.wiringbits.webapp.utils.admin.repositories.models
-
-import scala.collection.immutable.ListMap
-
-case class TableRow(
- data: List[Cell]
-) {
- def convertToMap(fieldNames: List[String]): Map[String, String] = {
- val rowData = data.map(_.value)
- val test = fieldNames.zip(rowData)
- ListMap.from(test)
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/services/AdminService.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/services/AdminService.scala
deleted file mode 100644
index c6e9b59..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/services/AdminService.scala
+++ /dev/null
@@ -1,265 +0,0 @@
-package net.wiringbits.webapp.utils.admin.services
-
-import net.wiringbits.webapp.utils.admin.config.{CustomDataType, DataExplorerSettings, TableSettings}
-import net.wiringbits.webapp.utils.admin.repositories.DatabaseTablesRepository
-import net.wiringbits.webapp.utils.admin.repositories.models.{ForeignKey, TableData}
-import net.wiringbits.webapp.utils.admin.utils.models.QueryParameters
-import net.wiringbits.webapp.utils.admin.utils.{MapStringHideExt, contentRangeHeader}
-import net.wiringbits.webapp.utils.api.models.*
-
-import java.awt.image.BufferedImage
-import java.io.{ByteArrayInputStream, File}
-import java.util.UUID
-import javax.imageio.ImageIO
-import javax.inject.Inject
-import scala.concurrent.{ExecutionContext, Future}
-import scala.util.Try
-
-class AdminService @Inject() (
- databaseTablesRepository: DatabaseTablesRepository,
- tableSettings: DataExplorerSettings
-)(implicit
- ec: ExecutionContext
-) {
-
- private def getColumnReference(
- foreignKeys: List[ForeignKey],
- columnName: String
- ): Option[AdminGetTables.Response.TableReference] = {
- val filteredForeignKeys = foreignKeys.filter(_.foreignColumnName == columnName)
- val maybe = filteredForeignKeys.map(_.primaryTable).headOption
-
- maybe.map { tableName =>
- val maybe = tableSettings.unsafeFindByName(tableName).referenceField
- val referenceField = maybe.getOrElse("id")
- AdminGetTables.Response.TableReference(referencedTable = tableName, referenceField = referenceField)
- }
- }
-
- def tables(): Future[AdminGetTables.Response] = {
- def getColumnName(fieldName: String, primaryKeyField: String) = {
- val isPrimaryField = fieldName == primaryKeyField
- // NOTE: react-admin requires the id field to be available
- if (isPrimaryField) "id" else fieldName
- }
-
- for {
- items <- Future.sequence {
- tableSettings.tables.map { settings =>
- val hiddenColumns = settings.hiddenColumns
- for {
- tableColumns <- databaseTablesRepository.getTableColumns(settings.tableName)
- foreignKeys <- databaseTablesRepository.getForeignKeys(settings.tableName)
-
- visibleColumns = tableColumns.filterNot(column => hiddenColumns.contains(column.name))
- columns = visibleColumns.map { column =>
- val fieldName = getColumnName(column.name, settings.primaryKeyField)
- val isEditable = !settings.nonEditableColumns.contains(column.name)
- val reference = getColumnReference(foreignKeys, column.name)
- val isFilterable = settings.filterableColumns.contains(column.name)
- AdminGetTables.Response.TableColumn(
- name = fieldName,
- `type` = column.`type`,
- editable = isEditable,
- reference = reference,
- filterable = isFilterable
- )
- }
- } yield AdminGetTables.Response.DatabaseTable(
- name = settings.tableName,
- columns = columns,
- primaryKeyName = settings.primaryKeyField,
- canBeDeleted = settings.canBeDeleted
- )
- }
- }
- } yield AdminGetTables.Response(items)
- }
-
- private def hideData(tableData: TableData, hiddenColumns: List[String]) = {
- tableData.data.hideData(hiddenColumns)
- }
-
- def tableMetadata(tableName: String, queryParams: QueryParameters): Future[(List[Map[String, String]], String)] = {
- val validations = {
- for {
- _ <- Future(validateTableName(tableName))
- } yield ()
- }
-
- for {
- _ <- validations
- settings = tableSettings.unsafeFindByName(tableName)
- _ <- validateQueryParameters(tableName, queryParams)
- tableRows <- databaseTablesRepository.getTableMetadata(settings, queryParams)
- numberOfRecords <- databaseTablesRepository.numberOfRecords(tableName)
- hiddenTableData = tableRows.map(data => hideData(data, settings.hiddenColumns))
- contentRange = contentRangeHeader(tableName, queryParams, numberOfRecords)
- } yield (hiddenTableData, contentRange)
- }
-
- private def validateQueryParameters(tableName: String, params: QueryParameters): Future[Unit] = {
- val validOrdering = List("ASC", "DESC")
- if (!validOrdering.contains(params.sort.ordering))
- throw new RuntimeException("Invalid ordering parameter")
- if (params.pagination.start < 0)
- throw new RuntimeException("You can't query a table using negative numbers")
- if (params.pagination.start > params.pagination.end)
- throw new RuntimeException("The start parameter can't be bigger than the end")
- for {
- _ <- validateColumnName(tableName, params.sort.field)
- } yield ()
- }
-
- def find(tableName: String, primaryKeyValue: String): Future[Map[String, String]] = {
- val validations = Future {
- validateTableName(tableName)
- }
-
- for {
- _ <- validations
- maybe <- databaseTablesRepository.find(tableName, primaryKeyValue)
- tableRow = maybe.getOrElse(throw new RuntimeException(s"Cannot find item in $tableName with id $primaryKeyValue"))
- settings = tableSettings.unsafeFindByName(tableName)
- hiddenData = hideData(tableRow, settings.hiddenColumns)
- } yield hiddenData
- }
-
- def find(tableName: String, primaryKeyValues: List[String]): Future[List[Map[String, String]]] = {
- val validations = Future {
- validateTableName(tableName)
- }
-
- for {
- _ <- validations
- settings = tableSettings.unsafeFindByName(tableName)
- tableRows <- Future.sequence {
- primaryKeyValues.map { primaryKeyValue =>
- for {
- maybe <- databaseTablesRepository.find(tableName, primaryKeyValue)
- tableData = maybe.getOrElse(
- throw new RuntimeException(s"Cannot find item in $tableName with id $primaryKeyValue")
- )
- } yield tableData
- }
- }
- maskedTableData = tableRows.map(x => hideData(x, settings.hiddenColumns))
- } yield maskedTableData
- }
-
- def create(tableName: String, request: AdminCreateTable.Request): Future[Unit] = {
- val body = request.data
- val validations = {
- validateTableName(tableName)
- for {
- _ <- validateRequestData(tableName, body)
- _ <- validateMissingFields(tableName, body)
- } yield ()
- }
-
- for {
- _ <- validations
- _ <- databaseTablesRepository.create(tableName, body)
- } yield ()
- }
-
- private def validateMissingFields(tableName: String, data: Map[String, String]): Future[Unit] = {
- for {
- mandatoryFields <- databaseTablesRepository.getMandatoryFields(tableName)
- mandatoryFieldNames = mandatoryFields.map(_.name)
- missingFields = mandatoryFieldNames.forall(data.contains)
- } yield
- if (missingFields) ()
- else
- throw new RuntimeException(
- s"There are missing fields: ${mandatoryFieldNames.filterNot(data.contains).mkString(", ")}"
- )
- }
-
- def update(tableName: String, primaryKeyValue: String, body: Map[String, String]): Future[Unit] = {
- val validations = {
- if (body.isEmpty) throw new RuntimeException(s"You need to send data") else ()
- validateTableName(tableName)
- for {
- _ <- validateRequestData(tableName, body)
- } yield ()
- }
-
- for {
- _ <- validations
- _ <- databaseTablesRepository.update(tableName, primaryKeyValue, body)
- } yield ()
- }
-
- def delete(tableName: String, primaryKeyValue: String): Future[Unit] = {
- val validations = for {
- _ <- Future(validateTableName(tableName))
- settings = tableSettings.unsafeFindByName(tableName)
- _ = if (settings.canBeDeleted) () else throw new RuntimeException(s"Table $tableName resources cannot be deleted")
- } yield ()
-
- for {
- _ <- validations
-
- _ <- databaseTablesRepository.delete(tableName, primaryKeyValue)
- } yield ()
- }
-
- private def validateTableName(tableName: String): Unit = {
- val exists = tableSettings.tables.exists(_.tableName == tableName)
- if (exists) () else throw new RuntimeException(s"Unexpected error because the DB table wasn't found: $tableName")
- }
-
- private def validateRequestData(tableName: String, body: Map[String, String]): Future[Unit] = {
- for {
- tableColumns <- databaseTablesRepository.getTableColumns(tableName)
- columnNames = tableColumns.map(_.name)
- requestFields = body.keys
- exists = requestFields.forall(columnNames.contains)
- } yield if (exists) () else throw new RuntimeException(s"A field doesn't correspond to this table schema")
- }
-
- private def validateColumnName(tableName: String, columnName: String): Future[Unit] = {
- for {
- tableColumns <- databaseTablesRepository.getTableColumns(tableName)
- columnNames = tableColumns.map(_.name)
- exists = columnNames.contains(columnName) || columnName == "id"
- } yield if (exists) () else throw new RuntimeException(s"Column $columnName doesn't exists in $tableName")
- }
-
- def findImage(tableName: String, columnName: String, imageId: String): Future[File] = {
- val validations = {
- for {
- _ <- validateColumnName(tableName, columnName)
- _ <- Future(validateResourceId(imageId))
- } yield ()
- }
- for {
- _ <- validations
- settings = tableSettings.unsafeFindByName(tableName)
- _ = validateImageColumn(settings, columnName)
- maybe <- databaseTablesRepository.getImageData(settings, columnName, imageId)
- imageData = maybe.getOrElse(throw new RuntimeException(s"Image with id $imageId on $tableName doesn't exists"))
- image = createImage(imageData)
- } yield createFile(imageId, image)
- }
-
- private def validateResourceId(resourceId: String): Unit = {
- val isValid = Try(BigInt(resourceId)).isSuccess || Try(UUID.fromString(resourceId)).isSuccess
- if (isValid) () else throw new RuntimeException(s"Resource id $resourceId is not valid")
- }
-
- private def validateImageColumn(settings: TableSettings, columnName: String): Unit = {
- val maybe = settings.columnTypeOverrides.find(x => x._1 == columnName && x._2 == CustomDataType.BinaryImage)
- if (maybe.isDefined) () else throw new RuntimeException("This column can't be used as a binary image")
- }
-
- private def createImage(data: Array[Byte]) = ImageIO.read(new ByteArrayInputStream(data))
-
- // TODO: avoid assuming that every DB image is on png format
- private def createFile(imageId: String, buffImage: BufferedImage) = {
- val outputFile = File.createTempFile(imageId, ".png")
- ImageIO.write(buffImage, "png", outputFile)
- outputFile
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/tasks/DataExplorerConfigValidatorTask.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/tasks/DataExplorerConfigValidatorTask.scala
deleted file mode 100644
index 9e66c1f..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/tasks/DataExplorerConfigValidatorTask.scala
+++ /dev/null
@@ -1,93 +0,0 @@
-package net.wiringbits.webapp.utils.admin.tasks
-
-import net.wiringbits.webapp.utils.admin.config.{DataExplorerSettings, TableSettings}
-import net.wiringbits.webapp.utils.admin.repositories.daos.DatabaseTablesDAO
-import net.wiringbits.webapp.utils.admin.repositories.models.{DatabaseTable, TableColumn}
-import org.slf4j.LoggerFactory
-import play.api.db.Database
-
-import javax.inject.Inject
-import scala.util.{Failure, Success, Try}
-
-/** Given that the use provides the tables used by the data explorer, it is important to make sure those tables exist in
- * the database.
- *
- * This task loads the available tables from the database and compares those to the ones provided by the user-defined
- * config, failing when there is a mismatch.
- *
- * @param database
- * @param settings
- */
-class DataExplorerConfigValidatorTask @Inject() (
- database: Database,
- settings: DataExplorerSettings
-) {
- private val logger = LoggerFactory.getLogger(this.getClass)
-
- start()
-
- def start(): Unit = {
- logger.info("Running task")
- Try(run()) match {
- case Failure(exception) => logger.error("Data explorer settings validation failed", exception)
- case Success(_) => logger.info("Data explorer settings validated")
- }
- }
-
- private def run(): Unit = {
- database.withConnection { implicit conn =>
- val tables = DatabaseTablesDAO.all()
- for (settingsTable <- settings.tables) {
- logger.info(s"Verifying ${settingsTable.tableName}")
- val fields = DatabaseTablesDAO.getTableColumns(settingsTable.tableName)
- validateSettings(settingsTable)
- validateTableName(settingsTable.tableName, tables)
- validatePrimaryKeyFieldName(settingsTable.primaryKeyField, fields)
- validateHiddenColumns(settingsTable.hiddenColumns, fields)
- validateNonEditableColumns(settingsTable.nonEditableColumns, fields)
- validateReferenceField(settingsTable.referenceField, fields)
- }
- }
- }
-
- private def validateTableName(tableName: String, tablesInDB: List[DatabaseTable]): Unit = {
- if (tablesInDB.exists(_.name == tableName)) ()
- else throw new RuntimeException(s"$tableName not found, available tables = ${tablesInDB.mkString(", ")}")
- }
-
- private def validatePrimaryKeyFieldName(idFieldName: String, fields: List[TableColumn]): Unit = {
- val exists = fields.exists(_.name == idFieldName)
- if (exists) ()
- else throw new RuntimeException(s"The provided id on DataExplorer settings doesn't exists: $idFieldName")
- }
-
- private def validateHiddenColumns(columns: List[String], fields: List[TableColumn]): Unit = {
- val fieldNames = fields.map(_.name)
- val isValid = columns.forall(fieldNames.contains)
- if (isValid) ()
- else throw new RuntimeException(s"The provided hidden columns on DataExplorer settings doesn't exists: $columns")
- }
-
- private def validateReferenceField(maybe: Option[String], fields: List[TableColumn]): Unit = {
- maybe.foreach { field =>
- val isValid = fields.exists(_.name == field)
- if (isValid) ()
- else
- throw new RuntimeException(
- s"The provided reference field column on DataExplorer settings doesn't exists: $field"
- )
- }
- }
-
- private def validateNonEditableColumns(columns: List[String], tableFields: List[TableColumn]): Unit = {
- val fieldNames = tableFields.map(_.name)
- val isValid = columns.forall(fieldNames.contains)
- if (isValid) ()
- else throw new RuntimeException(s"The provided disabled columns on DataExplorer settings doesn't exists: $columns")
- }
-
- private def validateSettings(settings: TableSettings): Unit = {
- if (settings.referenceField.exists(settings.hiddenColumns.contains))
- throw new RuntimeException("Hidden columns cannot contain the reference field")
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/QueryBuilder.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/QueryBuilder.scala
deleted file mode 100644
index 89e2495..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/QueryBuilder.scala
+++ /dev/null
@@ -1,49 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils
-
-import net.wiringbits.webapp.utils.admin.config.PrimaryKeyDataType
-import net.wiringbits.webapp.utils.admin.repositories.models.TableColumn
-
-import scala.collection.mutable
-
-object QueryBuilder {
- def create(
- tableName: String,
- body: Map[String, String],
- primaryKeyField: String,
- primaryKeyType: PrimaryKeyDataType = PrimaryKeyDataType.UUID
- ): String = {
- val sqlFields = new mutable.StringBuilder(primaryKeyField)
- val sqlValues = primaryKeyType match {
- case PrimaryKeyDataType.UUID => new mutable.StringBuilder("?")
- case PrimaryKeyDataType.Serial => new mutable.StringBuilder("DEFAULT")
- case PrimaryKeyDataType.BigSerial => new mutable.StringBuilder("DEFAULT")
- }
- for ((key, _) <- body) {
- sqlFields.append(s", $key")
- sqlValues.append(s", ?")
- }
-
- s"""
- |INSERT INTO $tableName
- | ($sqlFields)
- |VALUES (
- | ${sqlValues.toString()}
- |)
- |""".stripMargin
- }
-
- def update(tableName: String, body: Map[TableColumn, String], primaryKeyField: String): String = {
- val updateStatement = new mutable.StringBuilder("SET")
- for ((tableField, value) <- body) {
- val resultStatement = if (value == "null") "NULL" else s"?::${tableField.`type`}"
- val statement = s" ${tableField.name} = $resultStatement,"
- updateStatement.append(statement)
- }
- updateStatement.deleteCharAt(updateStatement.length - 1)
- s"""
- |UPDATE $tableName
- |$updateStatement
- |WHERE $primaryKeyField = ?
- |""".stripMargin
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/StringRegex.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/StringRegex.scala
deleted file mode 100644
index 449a954..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/StringRegex.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils
-
-import scala.util.matching.Regex
-
-object StringRegex {
- val dateRegex: Regex = "([12]\\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])".r
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/FilterParameter.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/FilterParameter.scala
deleted file mode 100644
index f3a5bec..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/FilterParameter.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils.models
-
-import net.wiringbits.webapp.utils.admin.utils.StringToDataTypesExt
-
-case class FilterParameter(field: String, value: String) {
- override def toString: String = s"$field=$value"
-}
-
-object FilterParameter {
- def fromString(str: String): List[FilterParameter] = {
- val filters = str.toStringMap
- filters.map { case (field, value) =>
- FilterParameter(field, value)
- }.toList
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/PaginationParameter.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/PaginationParameter.scala
deleted file mode 100644
index 8a9aca3..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/PaginationParameter.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils.models
-
-import net.wiringbits.webapp.utils.admin.utils.StringToDataTypesExt
-
-import scala.util.Try
-
-case class PaginationParameter(start: Int, end: Int)
-
-object PaginationParameter {
- // transforms a string like: "[0,9]" into this model
- def fromString(str: String): PaginationParameter = {
- val range = str.toStringList.map(Integer.parseInt)
- val start = range.headOption.getOrElse(0)
- val end = Try(range(1)).getOrElse(9)
- PaginationParameter(start = start, end = end)
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/QueryParameters.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/QueryParameters.scala
deleted file mode 100644
index 558dd71..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/QueryParameters.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils.models
-
-case class QueryParameters(sort: SortParameter, pagination: PaginationParameter, filters: List[FilterParameter]) {
- override def toString: String = {
- s"sort = ${sort.field} ${sort.ordering}, pagination = ${pagination.start} to ${pagination.end}, filters = ${filters
- .mkString("{", ", ", "}")}"
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/SortParameter.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/SortParameter.scala
deleted file mode 100644
index b5ba128..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/models/SortParameter.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.wiringbits.webapp.utils.admin.utils.models
-
-import net.wiringbits.webapp.utils.admin.utils.StringToDataTypesExt
-
-import scala.util.Try
-
-case class SortParameter(field: String, ordering: String)
-
-object SortParameter {
- def fromString(str: String): SortParameter = {
- val sort = str.toStringList
- val field = sort.headOption.getOrElse("")
- val ordering = Try(sort(1)).getOrElse("")
- SortParameter(field = field, ordering = ordering)
- }
-}
diff --git a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/package.scala b/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/package.scala
deleted file mode 100644
index 9b4b3ce..0000000
--- a/admin-data-explorer-play-server/src/main/scala/net/wiringbits/webapp/utils/admin/utils/package.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.admin.utils.models.QueryParameters
-import play.api.libs.json.Json
-
-package object utils {
- implicit class StringToDataTypesExt(val str: String) extends AnyVal {
- // convert ["id", "ASC"] string to List("id", "ASC")
- implicit def toStringList: List[String] = {
- str.substring(1, str.length - 1).filterNot(x => x == '"').split(",").toList
- }
-
- // convert json object string (for example: "{}") to Map
- implicit def toStringMap: Map[String, String] = {
- val maybe = Json.parse(str).validate[Map[String, String]]
- maybe.getOrElse(Map.empty)
- }
- }
-
- implicit class MapStringHideExt(val data: Map[String, String]) extends AnyVal {
- def hideData(columnsToHide: List[String]): Map[String, String] = {
- data.filterNot { case (key, _) => columnsToHide.contains(key) }
- }
- }
-
- def contentRangeHeader(tableName: String, queryParameters: QueryParameters, numberOfRecords: Int): String = {
- s"$tableName ${queryParameters.pagination.start}-${queryParameters.pagination.end}/$numberOfRecords"
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/resources/application.conf b/admin-data-explorer-play-server/src/test/resources/application.conf
deleted file mode 100644
index 39c0bfe..0000000
--- a/admin-data-explorer-play-server/src/test/resources/application.conf
+++ /dev/null
@@ -1,77 +0,0 @@
-# https://www.playframework.com/documentation/latest/Configuration
-
-play.i18n.langs = ["en"]
-
-play.filters.hosts {
- allowed = ["localhost", "localhost:9000", "127.0.0.1:9000"]
- allowed += ${?APP_ALLOWED_HOST_1}
- allowed += ${?APP_ALLOWED_HOST_2}
-}
-
-play.http {
- secret.key="this doesn't matter no sessions are being used"
- secret.key=${?PLAY_APPLICATION_SECRET}
-
- errorHandler = "play.api.http.JsonHttpErrorHandler"
-}
-
-play.filters.disabled += "play.filters.csrf.CSRFFilter"
-
-db.default {
- driver = "org.postgresql.Driver"
- host = "localhost:5432"
- database = "wiringbits_db"
- username = "postgres"
- password = "postgres"
-
- host = ${?POSTGRES_HOST}
- database = ${?POSTGRES_DATABASE}
- username = ${?POSTGRES_USERNAME}
- password = ${?POSTGRES_PASSWORD}
-
- url = "jdbc:postgresql://"${db.default.host}"/"${db.default.database}
-}
-
-play.evolutions {
- autoApply = true
-
- db.default {
- enabled = true
- # Important because when this is false, failed migrations won't get to the play_evolutions table
- # preventing us to fix them manually
- autocommit = true
- }
-}
-
-# Number of database connections
-# See https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
-fixedConnectionPool = 9
-
-play.db {
- prototype {
- hikaricp.minimumIdle = ${fixedConnectionPool}
- hikaricp.maximumPoolSize = ${fixedConnectionPool}
- }
-}
-
-# Job queue sized to HikariCP connection pool
-database.dispatcher {
- executor = "thread-pool-executor"
- throughput = 1
- thread-pool-executor {
- fixed-pool-size = ${fixedConnectionPool}
- }
-}
-
-blocking.dispatcher {
- executor = "thread-pool-executor"
- throughput = 1
- thread-pool-executor {
- // very high bound to process lots of blocking operations concurrently
- fixed-pool-size = 5000
- }
-}
-
-play.modules.enabled += "net.wiringbits.webapp.utils.admin.modules.ExecutorsModule"
-play.modules.enabled += "net.wiringbits.webapp.utils.admin.modules.AdminModule"
-play.modules.enabled += "net.wiringbits.webapp.utils.admin.modules.DataExplorerTestModule"
diff --git a/admin-data-explorer-play-server/src/test/resources/evolutions/default/1.sql b/admin-data-explorer-play-server/src/test/resources/evolutions/default/1.sql
deleted file mode 100644
index 7c76a6d..0000000
--- a/admin-data-explorer-play-server/src/test/resources/evolutions/default/1.sql
+++ /dev/null
@@ -1,30 +0,0 @@
-
--- !Ups
-
-CREATE EXTENSION IF NOT EXISTS CITEXT;
-
--- The users table has the minimum necessary data
-CREATE TABLE users(
- user_id UUID NOT NULL,
- name TEXT NOT NULL,
- last_name TEXT NULL,
- email CITEXT NOT NULL,
- password TEXT NOT NULL,
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
- CONSTRAINT users_user_id_pk PRIMARY KEY (user_id),
- CONSTRAINT users_email_unique UNIQUE (email)
-);
-
-CREATE INDEX users_email_index ON users USING BTREE (email);
-
--- create the table to store the user logs
-CREATE TABLE user_logs (
- user_log_id UUID NOT NULL,
- user_id UUID NOT NULL,
- message TEXT NOT NULL,
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
- CONSTRAINT user_logs_pk PRIMARY KEY (user_log_id),
- CONSTRAINT user_logs_users_fk FOREIGN KEY (user_id) REFERENCES users(user_id)
-);
-
-CREATE INDEX user_logs_user_id_index ON user_logs USING BTREE (user_id);
diff --git a/admin-data-explorer-play-server/src/test/resources/evolutions/default/2.sql b/admin-data-explorer-play-server/src/test/resources/evolutions/default/2.sql
deleted file mode 100644
index 3af7030..0000000
--- a/admin-data-explorer-play-server/src/test/resources/evolutions/default/2.sql
+++ /dev/null
@@ -1,35 +0,0 @@
-
--- !Ups
-
-CREATE TABLE uuid_table (
- id UUID NOT NULL PRIMARY KEY,
- name TEXT NOT NULL
-);
-
-CREATE TABLE serial_table (
- id SERIAL NOT NULL PRIMARY KEY,
- name TEXT NOT NULL
-);
-
-CREATE TABLE big_serial_table (
- id BIGSERIAL NOT NULL PRIMARY KEY,
- name TEXT NOT NULL
-);
-
--- start at max value. first insert will be at max, second should fail.
--- ERROR: integer out of range
-CREATE SEQUENCE serial_table_overflow_seq START 2147483647;
-CREATE TABLE serial_table_overflow (
- id integer NOT NULL DEFAULT nextval('serial_table_overflow_seq') PRIMARY KEY,
- name TEXT NOT NULL
-);
-ALTER SEQUENCE serial_table_overflow_seq OWNED BY serial_table_overflow.id;
-
--- start at max value. first insert will be at max, second should fail.
--- ERROR: nextval: reached maximum value of sequence "big_serial_table_overflow_seq" (9223372036854775807)
-CREATE SEQUENCE big_serial_table_overflow_seq START 9223372036854775807;
-CREATE TABLE big_serial_table_overflow (
- id bigint NOT NULL DEFAULT nextval('big_serial_table_overflow_seq') PRIMARY KEY,
- name TEXT NOT NULL
-);
-ALTER SEQUENCE big_serial_table_overflow_seq OWNED BY big_serial_table_overflow.id;
diff --git a/admin-data-explorer-play-server/src/test/resources/logback.xml b/admin-data-explorer-play-server/src/test/resources/logback.xml
deleted file mode 100644
index 8df13b1..0000000
--- a/admin-data-explorer-play-server/src/test/resources/logback.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
- ${user.home:-.}/logs/application.log
-
-
-
- ${user.home:-.}/logs/application.%d{yyyy-MM-dd}.log
-
-
- 30
- 3GB
-
-
-
- %date [%level] from %logger in %thread - %message%n%rEx%xException
-
-
-
-
-
- %coloredLevel %logger{15} - %message%n%rEx%xException{10}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/admin-data-explorer-play-server/src/test/resources/messages b/admin-data-explorer-play-server/src/test/resources/messages
deleted file mode 100644
index 0226738..0000000
--- a/admin-data-explorer-play-server/src/test/resources/messages
+++ /dev/null
@@ -1 +0,0 @@
-# https://www.playframework.com/documentation/latest/ScalaI18N
diff --git a/admin-data-explorer-play-server/src/test/resources/routes b/admin-data-explorer-play-server/src/test/resources/routes
deleted file mode 100644
index 9a31b0d..0000000
--- a/admin-data-explorer-play-server/src/test/resources/routes
+++ /dev/null
@@ -1,17 +0,0 @@
-# get database tables
-GET /admin/tables net.wiringbits.webapp.utils.admin.controllers.AdminController.getTables()
-
-# get database table fields
-GET /admin/tables/:tableName net.wiringbits.webapp.utils.admin.controllers.AdminController.getTableMetadata(tableName, offset: Int ?= 0, limit: Int ?= 10)
-
-# get table resource by id (depends on IDFieldName on AdminConfig)
-GET /admin/tables/:tableName/:ID net.wiringbits.webapp.utils.admin.controllers.AdminController.find(tableName, ID)
-
-# create table resource
-POST /admin/tables/:tableName net.wiringbits.webapp.utils.admin.controllers.AdminController.create(tableName)
-
-# update table resource
-PUT /admin/tables/:tableName/:ID net.wiringbits.webapp.utils.admin.controllers.AdminController.update(tableName, ID)
-
-# delete table resource
-DELETE /admin/tables/:tableName/:ID net.wiringbits.webapp.utils.admin.controllers.AdminController.delete(tableName, ID)
diff --git a/admin-data-explorer-play-server/src/test/scala/controllers/AdminControllerSpec.scala b/admin-data-explorer-play-server/src/test/scala/controllers/AdminControllerSpec.scala
deleted file mode 100644
index 544c3a5..0000000
--- a/admin-data-explorer-play-server/src/test/scala/controllers/AdminControllerSpec.scala
+++ /dev/null
@@ -1,774 +0,0 @@
-package controllers
-
-import com.dimafeng.testcontainers.PostgreSQLContainer
-import controllers.common.PlayPostgresSpec
-import net.wiringbits.webapp.utils.admin.AppRouter
-import net.wiringbits.webapp.utils.admin.config.{DataExplorerSettings, TableSettings}
-import net.wiringbits.webapp.utils.admin.controllers.{AdminController, ImagesController}
-import net.wiringbits.webapp.utils.api.models.AdminCreateTable
-import org.apache.commons.lang3.StringUtils
-import play.api.inject.guice.GuiceApplicationBuilder
-
-import java.util.UUID
-import java.util.regex.Pattern
-import scala.util.Random
-
-class AdminControllerSpec extends PlayPostgresSpec {
- def dataExplorerSettings: DataExplorerSettings = app.injector.instanceOf(classOf[DataExplorerSettings])
- def usersSettings: TableSettings = dataExplorerSettings.tables.headOption.value
- // TODO: loop through dataExplorerSettings for each table instead of defining usersSettings, uuidSettings
- def uuidSettings: TableSettings = dataExplorerSettings.tables(1)
- def serialSettings: TableSettings = dataExplorerSettings.tables(2)
- def bigSerialSettings: TableSettings = dataExplorerSettings.tables(3)
- def serialOverflowSettings: TableSettings = dataExplorerSettings.tables(4)
- def bigSerialOverflowSettings: TableSettings = dataExplorerSettings.tables(5)
-
- def isValidUUID(str: String): Boolean = {
- if (str == null) return false
- Pattern.compile("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$").matcher(str).matches()
- }
-
- override def guiceApplicationBuilder(container: PostgreSQLContainer): GuiceApplicationBuilder = {
- val appBuilder = super.guiceApplicationBuilder(container)
- val adminController = appBuilder.injector().instanceOf[AdminController]
- val imagesController = appBuilder.injector().instanceOf[ImagesController]
- val appRouter = new AppRouter(adminController, imagesController)
- appBuilder.router(appRouter)
- }
-
- "GET /admin/tables" should {
- "return tables from modules" in withApiClient { client =>
- val response = client.getTables.futureValue
- val tableName = response.data.map(_.name).headOption.value // users
- tableName must be(usersSettings.tableName)
- val uuidTable = response.data.map(_.name)(1) // table 2
- uuidTable must be(uuidSettings.tableName)
- val serialTable = response.data.map(_.name)(2) // table 3
- serialTable must be(serialSettings.tableName)
- val bigSerialTable = response.data.map(_.name)(3) // table 4
- bigSerialTable must be(bigSerialSettings.tableName)
- }
-
- "return extra config from module" in withApiClient { client =>
- val response = client.getTables.futureValue
- val head = response.data.headOption.value
- head.primaryKeyName must be(usersSettings.primaryKeyField)
- usersSettings.referenceField must be(None)
- usersSettings.hiddenColumns must be(List.empty)
- usersSettings.nonEditableColumns must be(List.empty)
-
- val head2 = response.data(1)
- head2.primaryKeyName must be(uuidSettings.primaryKeyField)
- uuidSettings.referenceField must be(None)
- uuidSettings.hiddenColumns must be(List.empty)
- uuidSettings.nonEditableColumns must be(List.empty)
-
- val head3 = response.data(2)
- head3.primaryKeyName must be(serialSettings.primaryKeyField)
- serialSettings.referenceField must be(None)
- serialSettings.hiddenColumns must be(List.empty)
- serialSettings.nonEditableColumns must be(List.empty)
-
- val head4 = response.data(3)
- head4.primaryKeyName must be(bigSerialSettings.primaryKeyField)
- bigSerialSettings.referenceField must be(None)
- bigSerialSettings.hiddenColumns must be(List.empty)
- bigSerialSettings.nonEditableColumns must be(List.empty)
- }
- }
-
- "GET /admin/tables/:tableName" should {
- "return data" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val request = AdminCreateTable.Request(
- Map("name" -> name, "email" -> email, "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val head = response.headOption.value
- // TODO: Find a better way to do this
- val nameValue = head.find(_._1 == "name").value._2
- val emailValue = head.find(_._1 == "email").value._2
- response.size must be(1)
- name must be(nameValue)
- email must be(emailValue)
- }
-
- "return data from uuid table" in withApiClient { client =>
- val name = "wiringbits"
- // val uuid_id = UUID.randomUUID().toString
- val request = AdminCreateTable.Request(
- Map("name" -> name)
- )
- client.createItem(uuidSettings.tableName, request).futureValue
-
- val response = client.getTableMetadata(uuidSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val head = response.headOption.value
- // TODO: Find a better way to do this
- val uuidValue = head.find(_._1 == "id").value._2
- val nameValue = head.find(_._1 == "name").value._2
- response.size must be(1)
- name must be(nameValue)
- isValidUUID(uuidValue) must be(true)
- }
-
- "return data from serial table" in withApiClient { client =>
- val name = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name))
- client.createItem(serialSettings.tableName, request).futureValue
-
- val response =
- client.getTableMetadata(serialSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val head = response.headOption.value
- // TODO: Find a better way to do this
- val intValue = head.find(_._1 == "id").value._2
- val nameValue = head.find(_._1 == "name").value._2
- response.size must be(1)
- intValue must be("1")
- name must be(nameValue)
- }
- "return data from big serial table" in withApiClient { client =>
- val name = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name))
- client.createItem(bigSerialSettings.tableName, request).futureValue
-
- val response =
- client.getTableMetadata(bigSerialSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val head = response.headOption.value
- // TODO: Find a better way to do this
- val intValue = head.find(_._1 == "id").value._2
- val nameValue = head.find(_._1 == "name").value._2
- response.size must be(1)
- intValue must be("1")
- name must be(nameValue)
- }
-
- "return a empty map if there isn't any user" in withApiClient { client =>
- val response = client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- response.size must be(0)
- }
-
- "return an empty map if tables are empty" in withApiClient { client =>
- val response = client.getTableMetadata(uuidSettings.tableName, List("id", "ASC"), List(0, 9), "{}").futureValue
- response.size must be(0)
- val response2 = client.getTableMetadata(serialSettings.tableName, List("id", "ASC"), List(0, 9), "{}").futureValue
- response2.size must be(0)
- val response3 =
- client.getTableMetadata(bigSerialSettings.tableName, List("id", "ASC"), List(0, 9), "{}").futureValue
- response3.size must be(0)
- }
-
- "return a empty map if start and end is the same" in withApiClient { client =>
- val request = AdminCreateTable.Request(
- Map("name" -> "wiringbits", "email" -> "test@wiringbits.net", "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 0), "{}").futureValue
- response.size must be(0)
- }
-
- "return an empty map for range of zero length" in withApiClient { client =>
- val name = "wiringbits"
- val request = AdminCreateTable.Request(
- Map("name" -> name)
- ) // can use this for all 3 of the simple tables UUID, SERIAL, BIGSERIAL
-
- client.createItem(uuidSettings.tableName, request).futureValue // 1
- val response1 = client.getTableMetadata(uuidSettings.tableName, List("id", "ASC"), List(0, 0), "{}").futureValue
- response1.size must be(0)
-
- client.createItem(serialSettings.tableName, request).futureValue // 2
- val response2 = client.getTableMetadata(serialSettings.tableName, List("id", "ASC"), List(0, 0), "{}").futureValue
- response2.size must be(0)
-
- client.createItem(bigSerialSettings.tableName, request).futureValue // 2
- val response3 =
- client.getTableMetadata(bigSerialSettings.tableName, List("id", "ASC"), List(0, 0), "{}").futureValue
- response3.size must be(0)
-
- }
-
- "only return the end minus start elements" in withApiClient { client =>
- Range.apply(0, 4).foreach { i =>
- val data = Map("name" -> "wiringbits", "email" -> s"test@wiringbits$i.net", "password" -> "wiringbits")
- val request = AdminCreateTable.Request(data)
- client.createItem(usersSettings.tableName, request).futureValue
- }
- val end = 2
- val start = 1
- val returnedElements = end - start
- val response =
- client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(start, end), "{}").futureValue
- response.size must be(returnedElements)
- }
-
- "only return the range size of elements" in withApiClient { client =>
- val end = 2
- val start = 1
- val returnedElements = end - start
- // val data = Map() // data for these tables is always nothing. BIG/SERIAL autogenerated.
- val name = "wiringbits"
-
- val tables = List(uuidSettings, serialSettings, bigSerialSettings)
- // this could just be a for loop instead of for comprehension
- for (table <- tables)
- yield {
- Range.apply(0, 4).foreach { _ =>
- val request = AdminCreateTable.Request(
- Map("name" -> name)
- ) // tried using data and got error. I thought val data was in scope but perhaps not
- client.createItem(table.tableName, request).futureValue
- }
- }
-
- for (table <- tables)
- yield {
- val response = client.getTableMetadata(table.tableName, List("id", "ASC"), List(start, end), "{}").futureValue
- response.size must be(returnedElements)
- }
- }
-
- "return the elements in ascending order" in withApiClient { client =>
- // should really be 5, since 5 users are created. Or Range.apply should start at 1.
- val createdUsers = 4
- val nameLength = 7
- Range.apply(0, createdUsers).foreach { i =>
- val letter = Character.valueOf(('A' + i).toChar)
- val name = StringUtils.repeat(letter, nameLength)
- val data = Map("name" -> name, "email" -> s"test@wiringbits$i.net", "password" -> "wiringbits")
- val request = AdminCreateTable.Request(data)
- client.createItem(usersSettings.tableName, request).futureValue
- }
- val response =
- client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, createdUsers), "{}").futureValue
- val head = response.headOption.value
- val name = head.find(_._1 == "name").value._2
- response.size must be(createdUsers)
- name must be(StringUtils.repeat('A', nameLength))
- }
-
- // TODO: add uuidSettings table to tests below
- "return the elements of all tables in ascending order" in withApiClient { client =>
- val createdRows = 4
- val tables = List(serialSettings, bigSerialSettings)
- val name = "wiringbits"
- val expectedName = name + "0"
-
- // insert rows
- for (table <- tables)
- yield {
- Range.apply(0, createdRows).foreach { i =>
- val request = AdminCreateTable.Request(Map("name" -> s"$name$i"))
- client.createItem(table.tableName, request).futureValue
- }
- }
-
- for (table <- tables)
- yield {
- val response =
- client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, createdRows), "{}").futureValue
- val head = response.headOption.value
- val id = head.find(_._1 == "id").value._2 // id from response
- val nameValue = head.find(_._1 == "name").value._2 // name from response
- response.size must be(createdRows)
- id must be("1")
- nameValue must be(expectedName)
- }
- }
-
- "return the elements in descending order" in withApiClient { client =>
- val createdUsers = 4
- val nameLength = 7
- Range.apply(0, createdUsers).foreach { i =>
- val letter = Character.valueOf(('A' + i).toChar)
- val name = StringUtils.repeat(letter, nameLength);
- val data = Map("name" -> name, "email" -> s"test@wiringbits$i.net", "password" -> "wiringbits")
- val request = AdminCreateTable.Request(data)
- client.createItem(usersSettings.tableName, request).futureValue
- }
- val response =
- client.getTableMetadata(usersSettings.tableName, List("name", "DESC"), List(0, createdUsers), "{}").futureValue
- val head = response.headOption.value
- val name = head.find(_._1 == "name").value._2
- response.size must be(createdUsers)
- name must be(StringUtils.repeat('D', nameLength))
- }
- "return the elements of all tables in descending order" in withApiClient { client =>
- val createdRows = 4
- // removed uuidSettings because ordering is random
- val tables = List(serialSettings, bigSerialSettings)
- val name = "Johnny"
- val expectedNameValue = name + (createdRows - 1).toString
- // insert rows
- for (table <- tables)
- yield {
- Range.apply(0, createdRows).foreach { i =>
- val request = AdminCreateTable.Request(Map("name" -> s"$name$i"))
- client.createItem(table.tableName, request).futureValue
- }
- }
-
- for (table <- tables)
- yield {
- val response =
- client.getTableMetadata(table.tableName, List("name", "DESC"), List(0, createdRows), "{}").futureValue
- val head = response.headOption.value
- val id = head.find(_._1 == "id").value._2 // id from response
- val nameValue = head.find(_._1 == "name").value._2 // name from response
- response.size must be(createdRows)
- id must be(createdRows.toString) // toString
- expectedNameValue must be(nameValue)
- }
- }
-
- "return filtered elements" in withApiClient { client =>
- val createdUsers = 4
- Range.apply(0, createdUsers).foreach { i =>
- val data = Map("name" -> "wiringbits", "email" -> s"test@wiringbits$i.net", "password" -> "wiringbits")
- val request = AdminCreateTable.Request(data)
- client.createItem(usersSettings.tableName, request).futureValue
- }
- val expectedEmail = "test@wiringbits0.net"
- val response =
- client
- .getTableMetadata(
- usersSettings.tableName,
- List("name", "ASC"),
- List(0, createdUsers),
- s"""{"email":"$expectedEmail"}"""
- )
- .futureValue
-
- val head = response.headOption.value
- val email = head.find(_._1 == "email").value._2
- response.size must be(1)
- email must be(expectedEmail)
- }
-
- "return filtered elements for all tables" in withApiClient { client =>
- val createdRows = 4
- val tables = List(serialSettings, bigSerialSettings)
-
- for (table <- tables) {
- Range.apply(0, createdRows).foreach { i =>
- val data = Map("name" -> s"wiringbits$i")
- val request = AdminCreateTable.Request(data)
- client.createItem(table.tableName, request).futureValue
- }
- }
- val expectedName = "wiringbits0"
-
- for (table <- tables) {
- val response =
- client
- .getTableMetadata(
- table.tableName,
- List("name", "ASC"),
- List(0, createdRows),
- s"""{"name":"$expectedName"}"""
- )
- .futureValue
-
- val head = response.headOption.value
- val name = head.find(_._1 == "name").value._2
- response.size must be(1)
- name must be(expectedName)
- }
- }
-
- "fail when table doesn't exists" in withApiClient { client =>
- val invalidTableName = "aaaaaaaaaaa"
- val error = client.getTableMetadata(invalidTableName, List("name", "ASC"), List(0, 9), "{}").expectError
- error must be(s"Unexpected error because the DB table wasn't found: $invalidTableName")
- }
-
- "return data with partial match" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val request = AdminCreateTable.Request(
- Map("name" -> name, "email" -> email, "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client
- .getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), """{"name":"irin"}""")
- .futureValue
- val head = response.headOption.value
- val nameValue = head.find(_._1 == "name").value._2
- val emailValue = head.find(_._1 == "email").value._2
- response.size must be(1)
- name must be(nameValue)
- email must be(emailValue)
- }
-
- "not return data due to partial match" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val request = AdminCreateTable.Request(
- Map("name" -> name, "email" -> email, "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client
- .getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), """{"name":"yyy"}""")
- .futureValue
- response.headOption.isEmpty must be(true)
- }
-
- "return data with two filters" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val request = AdminCreateTable.Request(
- Map("name" -> name, "email" -> email, "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client
- .getTableMetadata(
- usersSettings.tableName,
- List("name", "ASC"),
- List(0, 9),
- """{"name":"irin","email":"test"}"""
- )
- .futureValue
- val head = response.headOption.value
- val nameValue = head.find(_._1 == "name").value._2
- val emailValue = head.find(_._1 == "email").value._2
- response.size must be(1)
- name must be(nameValue)
- email must be(emailValue)
- }
-
- "not return with a valid filter and a non valid filter" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val request = AdminCreateTable.Request(
- Map("name" -> name, "email" -> email, "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client
- .getTableMetadata(
- usersSettings.tableName,
- List("name", "ASC"),
- List(0, 9),
- """{"name":"irin","email":"yyyy"}"""
- )
- .futureValue
- response.headOption.isEmpty must be(true)
- }
- }
-
- "GET /admin/tables/:tableName/:primaryKey" should {
- "return table row" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val password = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name, "email" -> email, "password" -> password))
- client.createItem(usersSettings.tableName, request).futureValue
-
- val users = client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val userId = users.headOption.value.find(_._1 == "id").value._2
-
- val response = client.viewItem(usersSettings.tableName, userId).futureValue
- response.find(_._1 == "name").value._2 must be(name)
- response.find(_._1 == "email").value._2 must be(email)
- response.find(_._1 == "password").value._2 must be(password)
- response.find(_._1 == "id").value._2 must be(userId)
- }
-
- "return table row for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val name = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name))
-
- for (table <- tables) {
- client.createItem(table.tableName, request).futureValue
-
- val rows = client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val rowId = rows.headOption.value.find(_._1 == "id").value._2
-
- val response = client.viewItem(table.tableName, rowId).futureValue
- response.find(_._1 == "name").value._2 must be(name)
- response.find(_._1 == "id").value._2 must be(rowId)
- }
- }
-
- "fail if the table row doesn't exists" in withApiClient { client =>
- val userId = UUID.randomUUID().toString
- val error = client.viewItem(usersSettings.tableName, userId).expectError
- error must be(s"Cannot find item in users with id $userId")
- }
-
- "fail if the table row doesn't exists for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val rand = new Random()
- val id = rand.nextInt(1000) + 100
- for (table <- tables) {
- val tableName = table.tableName
- val error = client.viewItem(table.tableName, id.toString).expectError
- error must be(s"Cannot find item in $tableName with id $id")
- }
- }
- }
-
- "GET /admin/tables/:tableName/:primaryKeys" should {
- "return table rows" in withApiClient { client =>
- val tableName = "users"
- val numOfCreatedUsers = 3
- Range.apply(0, numOfCreatedUsers).foreach { i =>
- val request = AdminCreateTable
- .Request(Map("name" -> "wiringbits", "email" -> s"test@wiringbits$i.net", "password" -> "wiringbits"))
- client.createItem(tableName, request).futureValue
- }
- val users = client.getTableMetadata(tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val userIds = users.map(_.find(_._1 == "id").value._2)
- val response = client.viewItems(tableName, userIds).futureValue
- val sameName = response.flatMap(_.find(_._1 == "name")).forall(_._2 == "wiringbits")
- val samePassword = response.flatMap(_.find(_._1 == "password")).forall(_._2 == "wiringbits")
-
- response.size must be(userIds.length)
- response.size must be(numOfCreatedUsers)
- sameName must be(true)
- samePassword must be(true)
- }
-
- "return table rows for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val numOfCreatedRows = 3
- for (table <- tables) {
- Range.apply(0, numOfCreatedRows).foreach { i =>
- val request = AdminCreateTable
- .Request(Map("name" -> s"wiringbits$i"))
- client.createItem(table.tableName, request).futureValue
- }
- val rows = client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val ids = rows.map(_.find(_._1 == "id").value._2)
- val response = client.viewItems(table.tableName, ids).futureValue
- // TODO: check the names
- // val sameName = response.flatMap(_.find(_._1 == "name")).forall(_._2 == "wiringbits")
-
- response.size must be(ids.length)
- response.size must be(numOfCreatedRows)
- /*sameName must be(true)
- samePassword must be(true)*/
- }
- }
-
- "fail if the table row doesn't exists" in withApiClient { client =>
- val userIds = List(UUID.randomUUID().toString)
- val error = client.viewItems("users", userIds).expectError
- error must be(s"Cannot find item in users with id ${userIds.headOption.value}")
- }
-
- "fail if the table row doesn't exists for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val rand = new Random()
- val ids = List((rand.nextInt(1000) + 100).toString)
- for (table <- tables) {
- val tableName = table.tableName
- val error = client.viewItems(tableName, ids).expectError
- error must be(s"Cannot find item in $tableName with id ${ids.headOption.value}")
- }
- }
- }
-
- "POST /admin/tables/:tableName" should {
- "create a new user" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val password = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name, "email" -> email, "password" -> password))
- val response = client.createItem("users", request).futureValue
- response.noData must be(empty)
- }
-
- "create a new row for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val name = "wiringbits"
-
- for (table <- tables) {
- val request = AdminCreateTable.Request(Map("name" -> name))
- val response = client.createItem(table.tableName, request).futureValue
- response.noData must be(empty)
- }
- }
-
- "fail when a mandatory field is not sent" in withApiClient { client =>
- val name = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name))
-
- val error = client.createItem("users", request).expectError
- error must be(s"There are missing fields: email, password")
- }
-
- "fail when a mandatory field is not sent for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- // val name = "wiringbits"
- for (table <- tables) {
- val request = AdminCreateTable.Request(Map())
- val error = client.createItem(table.tableName, request).expectError
- error must be(s"There are missing fields: name")
- }
- }
-
- "fail when overlow max int value" in withApiClient { client =>
- val name = "wiringbits"
- val table = serialOverflowSettings
- val request = AdminCreateTable.Request(Map("name" -> name))
- val ignore = client.createItem(table.tableName, request).futureValue
- ignore.noData must be(empty)
- val request2 = AdminCreateTable.Request(Map("name" -> s"asdf"))
- val error = client.createItem(table.tableName, request2).expectError
- error must be(s"ERROR: integer out of range")
- }
- "fail when overlow max bigint value" in withApiClient { client =>
- val name = "wiringbits"
- val table = bigSerialOverflowSettings
- val request = AdminCreateTable.Request(Map("name" -> name))
- val ignore = client.createItem(table.tableName, request).futureValue
- ignore.noData must be(empty)
- val request2 = AdminCreateTable.Request(Map("name" -> s"asdf"))
- val error = client.createItem(table.tableName, request2).expectError
- error must be(
- s"ERROR: nextval: reached maximum value of sequence \"big_serial_table_overflow_seq\" (9223372036854775807)"
- )
- }
- }
-
- "fail when field in request doesn't exists" in withApiClient { client =>
- val name = "wiringbits"
- val nonExistentField = "nonExistentField"
- val request = AdminCreateTable.Request(Map("name" -> name, "nonExistentField" -> nonExistentField))
-
- val error = client.createItem("users", request).expectError
- error must be(s"A field doesn't correspond to this table schema")
- }
- "fail when field in request doesn't exists for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val name = "wiringbits"
- val nonExistentField = "nonExistentField"
- for (table <- tables) {
- val request = AdminCreateTable.Request(Map("name" -> name, "nonExistentField" -> nonExistentField))
-
- val error = client.createItem(table.tableName, request).expectError
- error must be(s"A field doesn't correspond to this table schema")
- }
- }
-
- "PUT /admin/tables/:tableName" should {
- "update a new user" in withApiClient { client =>
- val request = AdminCreateTable.Request(
- Map("name" -> "wiringbits", "email" -> "test@wiringbits.net", "password" -> "wiringbits")
- )
- client.createItem(usersSettings.tableName, request).futureValue
-
- val response = client.getTableMetadata(usersSettings.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val userId = response.headOption.value.find(_._1 == "id").value._2
-
- val email = "wiringbits@wiringbits.net"
- val updateRequest = Map("email" -> email)
- val updateResponse = client.updateItem(usersSettings.tableName, userId, updateRequest).futureValue
-
- val newResponse = client.viewItem(usersSettings.tableName, userId).futureValue
- val emailResponse = newResponse.find(_._1 == "email").value._2
- updateResponse.id must be(userId)
- emailResponse must be(email)
- }
-
- "update a new row for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- for (table <- tables) {
- val request = AdminCreateTable.Request(
- Map("name" -> "wiringbits")
- )
- client.createItem(table.tableName, request).futureValue
- val response = client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val id = response.headOption.value.find(_._1 == "id").value._2
-
- val name = "wiringbitsbitsbits"
- val updateRequest = Map("name" -> name)
- val updateResponse = client.updateItem(table.tableName, id, updateRequest).futureValue
-
- val newResponse = client.viewItem(table.tableName, id).futureValue
- val nameResponse = newResponse.find(_._1 == "name").value._2
- updateResponse.id must be(id)
- nameResponse must be(name)
- }
- }
-
- "fail if the field in body doesn't exists" in withApiClient { client =>
- val request = AdminCreateTable.Request(
- Map("name" -> "wiringbits", "email" -> "test@wiringbits.net", "password" -> "wiringbits")
- )
- client.createItem("users", request).futureValue
-
- val response = client.getTableMetadata("users", List("user_id", "ASC"), List(0, 9), "{}").futureValue
- val userId = response.headOption.value.find(_._1 == "id").value._2
-
- val email = "wiringbits@wiringbits.net"
- val updateRequest = Map("nonExistentField" -> email)
- val error = client.updateItem("users", userId, updateRequest).expectError
- error must be("A field doesn't correspond to this table schema")
- }
-
- "fail if the field in body doesn't exists for all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- for (table <- tables) {
- val request = AdminCreateTable.Request(
- Map("name" -> "test")
- )
- client.createItem(table.tableName, request).futureValue
-
- val response = client.getTableMetadata(table.tableName, List("id", "ASC"), List(0, 9), "{}").futureValue
- val id = response.headOption.value.find(_._1 == "id").value._2
-
- val name = "wiringbits"
- val updateRequest = Map("nonExistentField" -> name)
- val error = client.updateItem(table.tableName, id, updateRequest).expectError
- error must be("A field doesn't correspond to this table schema")
- }
- }
- }
-
- "DELETE /admin/tables/users" should {
- "delete a new user" in withApiClient { client =>
- val name = "wiringbits"
- val email = "test@wiringbits.net"
- val password = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name, "email" -> email, "password" -> password))
- client.createItem("users", request).futureValue
-
- val response = client.getTableMetadata("users", List("name", "ASC"), List(0, 9), "{}").futureValue
- val userId = response.headOption.value.find(_._1 == "id").value._2
-
- client.deleteItem("users", userId).futureValue
-
- val newResponse = client.getTableMetadata("users", List("name", "ASC"), List(0, 9), "{}").futureValue
- newResponse.isEmpty must be(true)
- }
- }
-
- "DELETE /admin/tables/:tableName" should {
- "delete a new row in all tables" in withApiClient { client =>
- val tables = List(serialSettings, bigSerialSettings)
- val name = "wiringbits"
- val request = AdminCreateTable.Request(Map("name" -> name))
-
- for (table <- tables) {
- client.createItem(table.tableName, request).futureValue
-
- val response = client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- val id = response.headOption.value.find(_._1 == "id").value._2
-
- client.deleteItem(table.tableName, id).futureValue
-
- val newResponse = client.getTableMetadata(table.tableName, List("name", "ASC"), List(0, 9), "{}").futureValue
- newResponse.isEmpty must be(true)
- }
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayAPISpec.scala b/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayAPISpec.scala
deleted file mode 100644
index 441d2e5..0000000
--- a/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayAPISpec.scala
+++ /dev/null
@@ -1,115 +0,0 @@
-package controllers.common
-
-import org.scalatest.concurrent.ScalaFutures
-import org.scalatestplus.play.PlaySpec
-import org.slf4j.LoggerFactory
-import play.api.inject.guice.GuiceApplicationBuilder
-import play.api.mvc.Result
-import play.api.test.FakeRequest
-import play.api.test.Helpers._
-import play.api.{Application, Mode}
-
-import java.net.URLEncoder
-import scala.concurrent.Future
-
-/** A PlayAPISpec allow us to write tests for the API calls.
- */
-trait PlayAPISpec extends PlaySpec with ScalaFutures {
-
- protected def defaultGuiceApplicationBuilder: GuiceApplicationBuilder =
- GuiceApplicationBuilder()
- .in(Mode.Test)
-
- private val JsonHeader = CONTENT_TYPE -> "application/json"
- private val EmptyJson = "{}"
-
- protected val logger = LoggerFactory.getLogger(this.getClass)
-
- def log[T](request: FakeRequest[T], response: Future[Result]): Unit = {
- logger.info(
- s"REQUEST > $request, headers = ${request.headers}; RESPONSE < status = ${status(response)}, body = ${contentAsString(response)}"
- )
- }
-
- /** Syntactic sugar for calling APIs * */
- def GET(url: String, extraHeaders: (String, String)*)(implicit application: Application): Future[Result] = {
- val headers = JsonHeader :: extraHeaders.toList
- val request = FakeRequest("GET", url)
- .withHeaders(headers: _*)
-
- val response = route(application, request).value
- log(request, response)
- response
- }
-
- def POST(url: String, extraHeaders: (String, String)*)(implicit application: Application): Future[Result] = {
- POST(url, EmptyJson, extraHeaders: _*)
- }
-
- def POST(url: String, jsonBody: String, extraHeaders: (String, String)*)(implicit
- application: Application
- ): Future[Result] = {
- val headers = JsonHeader :: extraHeaders.toList
- val request = FakeRequest("POST", url)
- .withHeaders(headers: _*)
- .withBody(jsonBody)
-
- val response = route(application, request).value
- log(request, response)
- response
- }
-
- def PUT(url: String, extraHeaders: (String, String)*)(implicit application: Application): Future[Result] = {
- PUT(url, EmptyJson, extraHeaders: _*)
- }
-
- def PUT(url: String, jsonBody: String, extraHeaders: (String, String)*)(implicit
- application: Application
- ): Future[Result] = {
- val headers = JsonHeader :: extraHeaders.toList
- val request = FakeRequest("PUT", url)
- .withHeaders(headers: _*)
- .withBody(jsonBody)
-
- val response = route(application, request).value
- log(request, response)
- response
- }
-
- def DELETE(url: String, extraHeaders: (String, String)*)(implicit application: Application): Future[Result] = {
- val headers = JsonHeader :: extraHeaders.toList
- val request = FakeRequest("DELETE", url)
- .withHeaders(headers: _*)
-
- val response = route(application, request).value
- log(request, response)
-
- response
- }
-}
-
-object PlayAPISpec {
-
- object Implicits {
-
- implicit class HttpExt(val params: List[(String, String)]) extends AnyVal {
-
- def toQueryString: String = {
- params
- .map { case (key, value) =>
- val encodedKey = URLEncoder.encode(key, "UTF-8")
- val encodedValue = URLEncoder.encode(value, "UTF-8")
- List(encodedKey, encodedValue).mkString("=")
- }
- .mkString("&")
- }
- }
-
- implicit class StringUrlExt(val url: String) extends AnyVal {
-
- def withQueryParams(params: (String, String)*): String = {
- List(url, params.toList.toQueryString).mkString("?")
- }
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayPostgresSpec.scala b/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayPostgresSpec.scala
deleted file mode 100644
index 5ef2a71..0000000
--- a/admin-data-explorer-play-server/src/test/scala/controllers/common/PlayPostgresSpec.scala
+++ /dev/null
@@ -1,65 +0,0 @@
-package controllers.common
-
-import com.dimafeng.testcontainers.PostgreSQLContainer
-import com.dimafeng.testcontainers.scalatest.TestContainerForEach
-import net.wiringbits.webapp.utils.api.AdminDataExplorerApiClient
-import org.scalatest.TestData
-import org.scalatest.time.SpanSugar.convertIntToGrainOfTime
-import org.scalatestplus.play.guice.GuiceOneServerPerTest
-import org.testcontainers.utility.DockerImageName
-import play.api.inject.guice.GuiceApplicationBuilder
-import play.api.{Application, Configuration, Environment, Mode}
-
-import scala.concurrent.{ExecutionContext, Future}
-import scala.util.control.NonFatal
-
-trait PlayPostgresSpec extends PlayAPISpec with TestContainerForEach with GuiceOneServerPerTest {
- implicit val executionContext: ExecutionContext = ExecutionContext.Implicits.global
- override implicit val patienceConfig: PatienceConfig = PatienceConfig(30.seconds, 1.second)
-
- private val postgresImage = DockerImageName.parse("postgres:13")
- override val containerDef: PostgreSQLContainer.Def = PostgreSQLContainer.Def(dockerImageName = postgresImage)
-
- /** Loads configuration disabling evolutions on default database.
- *
- * This allows to not write a custom application.conf for testing and ensure play evolutions are disabled.
- */
- private def loadConfigWithoutEvolutions(env: Environment, container: PostgreSQLContainer): Configuration = {
- val map = Map(
- "db.default.username" -> container.username,
- "db.default.password" -> container.password,
- "db.default.url" -> container.jdbcUrl
- )
-
- Configuration.from(map).withFallback(Configuration.load(env))
- }
-
- def guiceApplicationBuilder(container: PostgreSQLContainer): GuiceApplicationBuilder =
- GuiceApplicationBuilder(loadConfiguration = env => loadConfigWithoutEvolutions(env, container))
- .in(Mode.Test)
-
- override def newAppForTest(testData: TestData): Application = {
- withContainers { postgres =>
- guiceApplicationBuilder(postgres).build()
- }
- }
-
- def withApiClient[A](runTest: AdminDataExplorerApiClient => A): A = {
- import sttp.client3.asynchttpclient.future.AsyncHttpClientFutureBackend
-
- implicit val sttpBackend = AsyncHttpClientFutureBackend()
-
- val config = AdminDataExplorerApiClient.Config(s"http://localhost:$port")
- val client = new AdminDataExplorerApiClient.DefaultImpl(config)
- runTest(client)
- }
-
- implicit class RichFutureExt[T](val future: Future[T]) {
- def expectError: String = future
- .map(_ => "Success when failure expected")
- .recover { case NonFatal(ex) =>
- ex.getMessage
- }
- .futureValue
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/QueryBuilderSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/QueryBuilderSpec.scala
deleted file mode 100644
index ecb2989..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/QueryBuilderSpec.scala
+++ /dev/null
@@ -1,84 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.admin.repositories.models.TableColumn
-import net.wiringbits.webapp.utils.admin.utils.QueryBuilder
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-class QueryBuilderSpec extends AnyWordSpec {
-
- "create" should {
- "create a complete SQL query" in {
- val expected =
- """
- |INSERT INTO users
- | (user_id, email, name)
- |VALUES (
- | ?, ?, ?
- |)
- |""".stripMargin
- val tableName = "users"
- val body = Map("email" -> "wiringbits@wiringbits.net", "name" -> "wiringbits")
- val primaryKeyField = "user_id"
-
- val response = QueryBuilder.create(tableName, body, primaryKeyField)
- response must be(expected)
- }
-
- "insert a empty body" in {
- val expected =
- """
- |INSERT INTO users
- | (user_id)
- |VALUES (
- | ?
- |)
- |""".stripMargin
- val tableName = "users"
- val body = Map.empty[String, String]
- val primaryKeyField = "user_id"
-
- val response = QueryBuilder.create(tableName, body, primaryKeyField)
- response must be(expected)
- }
- }
-
- "update" should {
- "build a SQL query" in {
- val expected =
- s"""
- |UPDATE users
- |SET email = ?::citext, name = ?::text
- |WHERE user_id = ?
- |""".stripMargin
- val tableName = "users"
- val body = Map(
- TableColumn("email", "citext") -> "wiringbits@wiringbits.net",
- TableColumn("name", "text") -> "wiringbits@wiringbits.net"
- )
- val primaryKeyField = "user_id"
-
- val response = QueryBuilder.update(tableName, body, primaryKeyField)
- response must be(expected)
- }
-
- "build a SQL query with null fields" in {
- val expected =
- s"""
- |UPDATE users
- |SET email = ?::citext, name = ?::text, phone_number = NULL
- |WHERE user_id = ?
- |""".stripMargin
- val tableName = "users"
- val body = Map(
- TableColumn("email", "citext") -> "wiringbits@wiringbits.net",
- TableColumn("name", "text") -> "wiringbits@wiringbits.net",
- TableColumn("phone_number", "text") -> "null"
- )
- val primaryKeyField = "user_id"
-
- val response = QueryBuilder.update(tableName, body, primaryKeyField)
- response must be(expected)
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/StringRegexSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/StringRegexSpec.scala
deleted file mode 100644
index 56426cd..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/StringRegexSpec.scala
+++ /dev/null
@@ -1,43 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.admin.utils.StringRegex
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-class StringRegexSpec extends AnyWordSpec {
- "dateRegex" should {
- val dateRegex = StringRegex.dateRegex
-
- val valid = List(
- "2023-01-20",
- "2012-03-01",
- "2020-09-19",
- "2024-12-31",
- "2002-02-23"
- )
-
- val invalid = List(
- "aaaa-bb-cc",
- "2022-a3-23",
- "20e1-03-23",
- "2004-01-c4",
- "2012-01-23-a",
- "20230223",
- "??????????",
- "asdfghjkl",
- "ABCDEFGHI"
- )
-
- valid.foreach { value =>
- s"accept valid value: $value" in {
- dateRegex.matches(value) must be(true)
- }
- }
-
- invalid.foreach { value =>
- s"reject invalid value: $value" in {
- dateRegex.matches(value) must be(false)
- }
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/UtilsSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/UtilsSpec.scala
deleted file mode 100644
index 1aa5d57..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/UtilsSpec.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package net.wiringbits.webapp.utils.admin
-
-import net.wiringbits.webapp.utils.admin.utils.StringToDataTypesExt
-import org.scalatest.OptionValues.convertOptionToValuable
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-class UtilsSpec extends AnyWordSpec {
- "toStringList" should {
- "create a list" in {
- val response = """["a","b"]""".toStringList
- response.length must be(2)
- response.contains("a") must be(true)
- response.contains("b") must be(true)
- }
- }
-
- "toStringMap" should {
- "create a empty map" in {
- val response = "{}".toStringMap
- response.size must be(0)
- }
-
- "create a new map from str" in {
- val response = """{"a":"b"}""".toStringMap
- val head = response.headOption.value
- response.size must be(1)
- head._1 must be("a")
- head._2 must be("b")
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/FilterParameterSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/FilterParameterSpec.scala
deleted file mode 100644
index a23f131..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/FilterParameterSpec.scala
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.wiringbits.webapp.utils.admin.models
-
-import net.wiringbits.webapp.utils.admin.utils.models.FilterParameter
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-class FilterParameterSpec extends AnyWordSpec {
- "fromString" should {
- "create a valid filter parameter" in {
- val str = """{"name": "wiringbits@wiringbits.net"}"""
- val response = FilterParameter.fromString(str)
- response.head.field must be("name")
- response.head.value must be("wiringbits@wiringbits.net")
- }
-
- "create a empty model if str is a empty json" in {
- val str = "{}"
- val response = FilterParameter.fromString(str)
- response.isEmpty must be(true)
- }
-
- "create a valid filter parameter with two items" in {
- val str = """{"name": "wiringbits@wiringbits.net", "password": "wiringbits"}"""
- val response = FilterParameter.fromString(str)
- response.exists(item => item.field == "name" && item.value == "wiringbits@wiringbits.net") must be(true)
- response.exists(item => item.field == "password" && item.value == "wiringbits") must be(true)
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/PaginationParameterSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/PaginationParameterSpec.scala
deleted file mode 100644
index 162a0ee..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/PaginationParameterSpec.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-package net.wiringbits.webapp.utils.admin.models
-
-import net.wiringbits.webapp.utils.admin.utils.models.PaginationParameter
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-import scala.util.Try
-
-class PaginationParameterSpec extends AnyWordSpec {
- "fromString" should {
- "create a valid pagination parameter" in {
- val str = "[0,9]"
- val response = PaginationParameter.fromString(str)
- response.start must be(0)
- response.end must be(9)
- }
-
- "fail if the start or end of array isn't a number" in {
- val str = """["a","b"]"""
- val response = Try { PaginationParameter.fromString(str) }
- response.isFailure must be(true)
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/SortParameterSpec.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/SortParameterSpec.scala
deleted file mode 100644
index 520da63..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/models/SortParameterSpec.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.wiringbits.webapp.utils.admin.models
-
-import net.wiringbits.webapp.utils.admin.utils.models.SortParameter
-import org.scalatest.matchers.must.Matchers.{be, convertToAnyMustWrapper}
-import org.scalatest.wordspec.AnyWordSpec
-
-class SortParameterSpec extends AnyWordSpec {
- "fromString" should {
- "create a valid sort parameter" in {
- val str = """["name","ASC"]"""
- // val primaryKeyField = "user_id"
- val response = SortParameter.fromString(str)
- response.field must be("name")
- response.ordering must be("ASC")
- }
- }
-}
diff --git a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/modules/DataExplorerTestModule.scala b/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/modules/DataExplorerTestModule.scala
deleted file mode 100644
index 7dbbe35..0000000
--- a/admin-data-explorer-play-server/src/test/scala/net/wiringbits/webapp/utils/admin/modules/DataExplorerTestModule.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.wiringbits.webapp.utils.admin.modules
-
-import com.google.inject.{AbstractModule, Provides}
-import net.wiringbits.webapp.utils.admin.config.{DataExplorerSettings, TableSettings, PrimaryKeyDataType}
-
-class DataExplorerTestModule extends AbstractModule {
-
- @Provides()
- def dataExplorerSettings: DataExplorerSettings = {
- DataExplorerSettings("http://localhost:9000", settings)
- }
-
- val settings: List[TableSettings] = List(
- TableSettings("users", "user_id"), // "UUID" default
- TableSettings(
- tableName = "uuid_table",
- primaryKeyField = "id",
- primaryKeyDataType = PrimaryKeyDataType.UUID
- ), // explicit default
- TableSettings(tableName = "serial_table", primaryKeyField = "id", primaryKeyDataType = PrimaryKeyDataType.Serial),
- TableSettings(
- tableName = "big_serial_table",
- primaryKeyField = "id",
- primaryKeyDataType = PrimaryKeyDataType.BigSerial
- ),
- TableSettings(
- tableName = "serial_table_overflow",
- primaryKeyField = "id",
- primaryKeyDataType = PrimaryKeyDataType.Serial
- ),
- TableSettings(
- tableName = "big_serial_table_overflow",
- primaryKeyField = "id",
- primaryKeyDataType = PrimaryKeyDataType.BigSerial
- )
- )
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/API.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/API.scala
deleted file mode 100644
index 4ef910c..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/API.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web
-
-import net.wiringbits.webapp.utils.api.AdminDataExplorerApiClient
-
-case class API(client: AdminDataExplorerApiClient, url: String)
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/AdminView.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/AdminView.scala
deleted file mode 100644
index 17425f3..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/AdminView.scala
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web
-
-import io.github.nafg.simplefacade.Factory
-import japgolly.scalajs.react.vdom.VdomNode
-import net.wiringbits.webapp.utils.api.models.AdminGetTables
-import net.wiringbits.webapp.utils.ui.web.components.{EditGuesser, ListGuesser}
-import net.wiringbits.webapp.utils.ui.web.facades.reactadmin._
-import net.wiringbits.webapp.utils.ui.web.models.DataExplorerSettings
-import org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global
-
-import scala.concurrent.Future
-
-object AdminView {
- private def AdminTables(api: API, response: AdminGetTables.Response, dataExplorerSettings: DataExplorerSettings) = {
- val tablesUrl = s"${api.url}/admin/tables"
-
- def buildResources: List[VdomNode] = {
- response.data.map { table =>
- Resource(
- _.name := table.name,
- _.list := ListGuesser(table),
- _.edit := EditGuesser(table, dataExplorerSettings)
- )
- }
- }
-
- val resources = buildResources
- Admin(_.dataProvider := simpleRestProvider(tablesUrl))(resources: _*)
- }
-
- def apply(
- api: API,
- dataExplorerSettings: DataExplorerSettings = DataExplorerSettings()
- ): Future[Factory[Admin.Props]] = {
- api.client.getTables.map { AdminTables(api, _, dataExplorerSettings) }
- }
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/EditGuesser.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/EditGuesser.scala
deleted file mode 100644
index 6eb7cfb..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/EditGuesser.scala
+++ /dev/null
@@ -1,73 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.components
-
-import japgolly.scalajs.react.React.Fragment
-import japgolly.scalajs.react.ScalaFnComponent
-import japgolly.scalajs.react.vdom.html_<^._
-import net.wiringbits.webapp.utils.api.models.AdminGetTables
-import net.wiringbits.webapp.utils.ui.web.facades.reactadmin.ReactAdmin.useEditContext
-import net.wiringbits.webapp.utils.ui.web.facades.reactadmin._
-import net.wiringbits.webapp.utils.ui.web.models.{ButtonAction, ColumnType, DataExplorerSettings}
-import net.wiringbits.webapp.utils.ui.web.utils.ResponseGuesser
-import org.scalajs.dom
-import org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.global
-
-import scala.scalajs.js
-import scala.util.{Failure, Success}
-
-object EditGuesser {
-
- def apply(response: AdminGetTables.Response.DatabaseTable, dataExplorerSettings: DataExplorerSettings) = {
- val fields = ResponseGuesser.getTypesFromResponse(response)
- val inputs: List[VdomNode] = fields
- .map { fieldType =>
- fieldType.`type` match {
- case ColumnType.Date => DateTimeInput(_.source := fieldType.name, _.disabled := fieldType.disabled)
- case ColumnType.Text => TextInput(_.source := fieldType.name, _.disabled := fieldType.disabled)
- case ColumnType.Email => TextInput(_.source := fieldType.name, _.disabled := fieldType.disabled)
- case ColumnType.Image => ImageField(_.source := fieldType.name)
- case ColumnType.Number => NumberInput(_.source := fieldType.name, _.disabled := fieldType.disabled)
- case ColumnType.Reference(reference, source) =>
- ReferenceInput(_.source := fieldType.name, _.reference := reference)(
- SelectInput(_.optionText := source, _.disabled := fieldType.disabled)
- )
- }
- }
-
- def onClick(action: ButtonAction, ctx: js.Dictionary[js.Any]): Unit = {
- val primaryKey = dom.window.location.hash.split("/").lastOption.getOrElse("")
- action.onClick(primaryKey).onComplete {
- case Failure(ex) => ex.printStackTrace()
- case Success(_) => refetch(ctx)
- }
- }
-
- def refetch(ctx: js.Dictionary[js.Any]): Unit = {
- val _ = ctx.get("refetch").map(_.asInstanceOf[js.Dynamic].apply())
- }
-
- val tableAction = dataExplorerSettings.actions.find(_.tableName == response.name)
- def buttons(ctx: js.Dictionary[js.Any]) = tableAction
- .map { x =>
- x.actions.map { action =>
- Button(_.onClick := (() => onClick(action, ctx)))(action.text)
- }: List[VdomNode]
- }
- .getOrElse(List.empty)
-
- val actions = ScalaFnComponent.withHooks[Unit].unchecked(useEditContext()).render { (_, ctx) =>
- {
- TopToolbar()(buttons(ctx): _*)
- }: VdomNode
- }
-
- val deleteButton: VdomNode = if (response.canBeDeleted) DeleteButton() else Fragment()
- val toolbar: VdomNode = Toolbar()(
- SaveButton(),
- deleteButton
- )
-
- Edit(_.actions := actions())(
- SimpleForm(_.toolbar := toolbar)(inputs: _*)
- )
- }
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/ListGuesser.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/ListGuesser.scala
deleted file mode 100644
index dd4a46d..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/components/ListGuesser.scala
+++ /dev/null
@@ -1,57 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.components
-
-import io.github.nafg.simplefacade.Factory
-import japgolly.scalajs.react.vdom.all.div
-import japgolly.scalajs.react.vdom.html_<^._
-import net.wiringbits.webapp.utils.api.models.AdminGetTables
-import net.wiringbits.webapp.utils.ui.web.facades.reactadmin._
-import net.wiringbits.webapp.utils.ui.web.models.ColumnType
-import net.wiringbits.webapp.utils.ui.web.utils.ResponseGuesser
-
-import scala.scalajs.js
-
-object ListGuesser {
- def apply(response: AdminGetTables.Response.DatabaseTable): Factory[ComponentList.Props] = {
- val fields = ResponseGuesser.getTypesFromResponse(response)
-
- val widgetFields: List[VdomNode] = fields.map { field =>
- val imageStyles = js.Dynamic.literal("width" -> "100px")
- val styles = js.Dynamic.literal("& img" -> imageStyles)
- field.`type` match {
- case ColumnType.Date => DateField(_.source := field.name, _.showTime := true)
- case ColumnType.Text => TextField(_.source := field.name)
- case ColumnType.Email => EmailField(_.source := field.name)
- case ColumnType.Image => ImageField(_.source := field.name, _.sx := styles)
- case ColumnType.Number => NumberField(_.source := field.name)
- case ColumnType.Reference(reference, source) =>
- ReferenceField(_.reference := reference, _.source := field.name)(
- TextField(_.source := source)
- )
- }
- }
-
- val filterList: List[VdomNode] = fields.filter(_.filterable).map { field =>
- field.`type` match {
- case ColumnType.Date => DateInput(_.source := field.name)
- case ColumnType.Text | ColumnType.Email => TextInput(_.source := field.name)
- case ColumnType.Image => div()
- case ColumnType.Number => NumberInput(_.source := field.name)
- case ColumnType.Reference(reference, source) =>
- ReferenceField(_.reference := reference, _.source := field.name)(
- TextField(_.source := source)
- )
- }
- }
-
- val listToolbar: VdomNode = TopToolbar()(
- FilterButton(
- _.filters := filterList
- ),
- ExportButton()
- )
-
- ComponentList(_.actions := listToolbar, _.filters := filterList)(
- Datagrid(_.rowClick := "edit", _.bulkActionButtons := response.canBeDeleted)(widgetFields: _*)
- )
- }
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/DataProvider.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/DataProvider.scala
deleted file mode 100644
index d3dc396..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/DataProvider.scala
+++ /dev/null
@@ -1,6 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.facades.reactadmin
-
-import scala.scalajs.js
-
-@js.native
-trait DataProvider extends js.Object
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/ReactAdmin.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/ReactAdmin.scala
deleted file mode 100644
index 07bdae3..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/ReactAdmin.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.facades.reactadmin
-
-import scala.scalajs.js
-import scala.scalajs.js.annotation.JSImport
-
-@js.native
-@JSImport("react-admin", JSImport.Namespace)
-object ReactAdmin extends js.Any {
- def useRecordContext(): js.Dictionary[js.Any] = js.native
-
- def useEditContext(): js.Dictionary[js.Any] = js.native
-
- val Admin, Create, Datagrid, Edit, EditButton, EmailField, ImageField, List, ReferenceField, ReferenceInput, Resource,
- SelectInput, SimpleForm, TextField, DateField, DateTimeInput, TextInput, Button, SaveButton, DeleteButton,
- Toolbar, TopToolbar, UrlField, DateInput, FilterButton, ExportButton, NumberInput, NumberField: js.Object =
- js.native
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/components.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/components.scala
deleted file mode 100644
index 52cdb25..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/components.scala
+++ /dev/null
@@ -1,126 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.facades.reactadmin
-
-import io.github.nafg.simplefacade.Implicits._
-import io.github.nafg.simplefacade.{FacadeModule, PropTypes}
-import japgolly.scalajs.react.vdom.html_<^.VdomNode
-
-object Admin extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.Admin
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val dataProvider = of[DataProvider]
- }
-}
-
-object Create extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.Create
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- }
-}
-
-object Datagrid extends FacadeModule.ArrayChildren.Simple {
- override def raw = ReactAdmin.Datagrid
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val rowClick = of[String]
- val bulkActionButtons = of[Boolean]
- }
-}
-
-object Edit extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.Edit
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val actions = of[VdomNode]
- }
-}
-
-object EditButton extends FacadeModule.Simple {
- override def raw = ReactAdmin.EditButton
- override def mkProps = new Props
- class Props extends PropTypes
-}
-
-object SaveButton extends FacadeModule.Simple {
- override def raw = ReactAdmin.SaveButton
- override def mkProps = new Props
- class Props extends PropTypes
-}
-
-object DeleteButton extends FacadeModule.Simple {
- override def raw = ReactAdmin.DeleteButton
- override def mkProps = new Props
- class Props extends PropTypes
-}
-
-object Button extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.Button
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val onClick = of[() => Unit]
- }
- override def mkProps = new Props
-}
-
-object Toolbar extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.Toolbar
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- }
- override def mkProps = new Props
-}
-
-object TopToolbar extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.TopToolbar
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- }
- override def mkProps = new Props
-}
-
-object ComponentList extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.List
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val actions: PropTypes.Prop[VdomNode] = of[VdomNode]
- val filters: PropTypes.Prop[List[VdomNode]] = of[List[VdomNode]]
- }
-}
-
-object Resource extends FacadeModule.Simple {
- override def raw = ReactAdmin.Resource
- override def mkProps = new Props
- class Props extends PropTypes {
- val name = of[String]
- val create, edit, list = of[VdomNode]
- }
-}
-
-object SimpleForm extends FacadeModule.NodeChildren.Simple {
- override def raw = ReactAdmin.SimpleForm
- override def mkProps = new Props
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val toolbar = of[VdomNode]
- }
-}
-
-object FilterButton extends FacadeModule.Simple {
- override def raw = ReactAdmin.FilterButton
- class Props extends PropTypes {
- val filters: PropTypes.Prop[List[VdomNode]] = of[List[VdomNode]]
- }
- override def mkProps = new Props
-}
-
-object ExportButton extends FacadeModule.Simple {
- override def raw = ReactAdmin.ExportButton
- override def mkProps = new Props
- class Props extends PropTypes
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/fieldComponents.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/fieldComponents.scala
deleted file mode 100644
index dfdabc7..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/fieldComponents.scala
+++ /dev/null
@@ -1,108 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.facades.reactadmin
-
-import io.github.nafg.simplefacade.Implicits._
-import io.github.nafg.simplefacade.{FacadeModule, PropTypes}
-import japgolly.scalajs.react.vdom.VdomNode
-
-import scala.scalajs.js
-
-trait FieldProps extends PropTypes {
- val source = of[String]
- val disabled = of[Boolean]
-}
-
-object EmailField extends FacadeModule.Simple {
- override def raw = ReactAdmin.EmailField
- class Props extends FieldProps
- override def mkProps = new Props
-}
-
-object ImageField extends FacadeModule.Simple {
- override def raw = ReactAdmin.ImageField
- class Props extends FieldProps {
- val sx = of[js.Object]
- }
- override def mkProps = new Props
-}
-
-trait ReferenceBase extends FacadeModule.NodeChildren.Simple {
- class Props extends PropTypes.WithChildren[VdomNode] {
- val children = of[VdomNode]
- val source = of[String]
- val reference = of[String]
- }
- override def mkProps = new Props
-}
-
-object ReferenceField extends ReferenceBase {
- override def raw = ReactAdmin.ReferenceField
-}
-
-object ReferenceInput extends ReferenceBase {
- override def raw = ReactAdmin.ReferenceInput
-}
-
-object SelectInput extends FacadeModule.Simple {
- override def raw = ReactAdmin.SelectInput
- class Props extends PropTypes {
- val optionText = of[String]
- val disabled = of[Boolean]
- }
- override def mkProps = new Props
-}
-
-object TextField extends FacadeModule.Simple {
- override def raw = ReactAdmin.TextField
- class Props extends FieldProps
- override def mkProps = new Props
-}
-
-object DateField extends FacadeModule.Simple {
- override def raw = ReactAdmin.DateField
- class Props extends FieldProps {
- val showTime = of[Boolean]
- }
- override def mkProps = new Props
-}
-
-object DateTimeInput extends FacadeModule.Simple {
- override def raw = ReactAdmin.DateTimeInput
- class Props extends FieldProps
- override def mkProps = new Props
-}
-
-object TextInput extends FacadeModule.Simple {
- override def raw = ReactAdmin.TextInput
- class Props extends FieldProps {
- val multiline = of[Boolean]
- }
- override def mkProps = new Props
-}
-
-object UrlField extends FacadeModule.Simple {
- override def raw = ReactAdmin.UrlField
- class Props extends FieldProps
- override def mkProps = new Props
-}
-
-object DateInput extends FacadeModule.Simple {
- override def raw = ReactAdmin.DateInput
- class Props extends FieldProps
- override def mkProps = new Props
-}
-
-object NumberInput extends FacadeModule.Simple {
- override def raw = ReactAdmin.NumberInput
- class Props extends FieldProps {
- val max = of[Double]
- val min = of[Double]
- val step = of[Double]
- }
- override def mkProps: Props = new Props
-}
-
-object NumberField extends FacadeModule.Simple {
- override def raw = ReactAdmin.NumberField
- class Props extends FieldProps
- override def mkProps = new Props
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/package.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/package.scala
deleted file mode 100644
index efc1264..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/facades/reactadmin/package.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.facades
-
-import scala.annotation.unused
-import scala.scalajs.js
-import scala.scalajs.js.annotation.JSImport
-
-package object reactadmin {
- @js.native
- @JSImport("ra-data-simple-rest", JSImport.Default)
- def simpleRestProvider(@unused url: String): DataProvider = js.native
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ButtonAction.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ButtonAction.scala
deleted file mode 100644
index dc334f1..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ButtonAction.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.models
-
-import scala.concurrent.Future
-
-/** @param text
- * button label that's going to be displayed in react-admin
- * @param onClick
- * this callback has the resource ID of the clicked element
- */
-case class ButtonAction(text: String, onClick: String => Future[_])
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/Column.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/Column.scala
deleted file mode 100644
index 64f663a..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/Column.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.models
-
-case class Column(name: String, `type`: ColumnType, disabled: Boolean, filterable: Boolean)
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ColumnType.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ColumnType.scala
deleted file mode 100644
index ce02e95..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/ColumnType.scala
+++ /dev/null
@@ -1,35 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.models
-
-import net.wiringbits.webapp.utils.api.models.AdminGetTables.Response.TableColumn
-
-sealed trait ColumnType extends Product with Serializable
-
-object ColumnType {
- case object Date extends ColumnType
- case object Text extends ColumnType
- case object Email extends ColumnType
- case object Image extends ColumnType
- case object Number extends ColumnType
- case class Reference(referencedTable: String, source: String) extends ColumnType
-
- def fromTableField(column: TableColumn): ColumnType = {
- val isEmail = column.name.contains("email")
- val isDate = column.`type`.equalsIgnoreCase("timestamptz")
- val isImage = column.`type`.equalsIgnoreCase("bytea")
- val isInt = column.`type`.equalsIgnoreCase("integer")
- val isNumeric = column.`type`.toLowerCase.contains("numeric")
- val default = column.reference
- .map { reference => ColumnType.Reference(reference.referencedTable, reference.referenceField) }
- .getOrElse(ColumnType.Text)
-
- if (isEmail)
- ColumnType.Email
- else if (isDate)
- ColumnType.Date
- else if (isImage)
- ColumnType.Image
- else if (isInt || isNumeric)
- ColumnType.Number
- else default
- }
-}
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/DataExplorerSettings.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/DataExplorerSettings.scala
deleted file mode 100644
index d35569e..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/DataExplorerSettings.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.models
-
-case class DataExplorerSettings(actions: List[TableAction] = List.empty)
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/TableAction.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/TableAction.scala
deleted file mode 100644
index 443a06a..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/models/TableAction.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.models
-
-case class TableAction(tableName: String, actions: List[ButtonAction])
diff --git a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/utils/ResponseGuesser.scala b/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/utils/ResponseGuesser.scala
deleted file mode 100644
index 22111be..0000000
--- a/admin-data-explorer-web/src/main/scala/net/wiringbits/webapp/utils/ui/web/utils/ResponseGuesser.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.wiringbits.webapp.utils.ui.web.utils
-
-import net.wiringbits.webapp.utils.api.models.AdminGetTables
-import net.wiringbits.webapp.utils.ui.web.models.{Column, ColumnType}
-
-object ResponseGuesser {
- def getTypesFromResponse(response: AdminGetTables.Response.DatabaseTable): List[Column] = {
- response.columns.map { column =>
- val fieldType = ColumnType.fromTableField(column)
- Column(name = column.name, `type` = fieldType, disabled = !column.editable, filterable = column.filterable)
- }
- }
-}
diff --git a/admin-data-explorer-web/yarn.lock b/admin-data-explorer-web/yarn.lock
deleted file mode 100644
index 199caf1..0000000
--- a/admin-data-explorer-web/yarn.lock
+++ /dev/null
@@ -1,4467 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3":
- version "7.16.3"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
- integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
- dependencies:
- regenerator-runtime "^0.13.4"
-
-"@emotion/hash@^0.7.1":
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831"
- integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==
-
-"@material-ui/core@3.9.4":
- version "3.9.4"
- resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.4.tgz#5297fd4ad9e739a87da4a6d34fc4af5396886e13"
- integrity sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw==
- dependencies:
- "@babel/runtime" "^7.2.0"
- "@material-ui/system" "^3.0.0-alpha.0"
- "@material-ui/utils" "^3.0.0-alpha.2"
- "@types/jss" "^9.5.6"
- "@types/react-transition-group" "^2.0.8"
- brcast "^3.0.1"
- classnames "^2.2.5"
- csstype "^2.5.2"
- debounce "^1.1.0"
- deepmerge "^3.0.0"
- dom-helpers "^3.2.1"
- hoist-non-react-statics "^3.2.1"
- is-plain-object "^2.0.4"
- jss "^9.8.7"
- jss-camel-case "^6.0.0"
- jss-default-unit "^8.0.2"
- jss-global "^3.0.0"
- jss-nested "^6.0.1"
- jss-props-sort "^6.0.0"
- jss-vendor-prefixer "^7.0.0"
- normalize-scroll-left "^0.1.2"
- popper.js "^1.14.1"
- prop-types "^15.6.0"
- react-event-listener "^0.6.2"
- react-transition-group "^2.2.1"
- recompose "0.28.0 - 0.30.0"
- warning "^4.0.1"
-
-"@material-ui/icons@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10"
- integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==
- dependencies:
- "@babel/runtime" "^7.2.0"
- recompose "0.28.0 - 0.30.0"
-
-"@material-ui/styles@3.0.0-alpha.10":
- version "3.0.0-alpha.10"
- resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-3.0.0-alpha.10.tgz#4c28a6d6dacb1fb71aff4642f92b63232a3f298d"
- integrity sha512-qJ5eiupBPRCNlMCDZ2G5h8auBtBtm8uT/oCUAJ/FqhO5oC7POLmmvDN1Cq1cgAmqQnaL6uN5mAM1Gc90GpKr9A==
- dependencies:
- "@babel/runtime" "^7.2.0"
- "@emotion/hash" "^0.7.1"
- "@material-ui/utils" "^3.0.0-alpha.2"
- classnames "^2.2.5"
- deepmerge "^3.0.0"
- hoist-non-react-statics "^3.2.1"
- jss "^10.0.0-alpha.7"
- jss-plugin-camel-case "^10.0.0-alpha.7"
- jss-plugin-default-unit "^10.0.0-alpha.7"
- jss-plugin-global "^10.0.0-alpha.7"
- jss-plugin-nested "^10.0.0-alpha.7"
- jss-plugin-props-sort "^10.0.0-alpha.7"
- jss-plugin-rule-value-function "^10.0.0-alpha.7"
- jss-plugin-vendor-prefixer "^10.0.0-alpha.7"
- prop-types "^15.6.0"
- warning "^4.0.1"
-
-"@material-ui/system@^3.0.0-alpha.0":
- version "3.0.0-alpha.2"
- resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-3.0.0-alpha.2.tgz#096e80c8bb0f70aea435b9e38ea7749ee77b4e46"
- integrity sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==
- dependencies:
- "@babel/runtime" "^7.2.0"
- deepmerge "^3.0.0"
- prop-types "^15.6.0"
- warning "^4.0.1"
-
-"@material-ui/utils@^3.0.0-alpha.2":
- version "3.0.0-alpha.3"
- resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1"
- integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==
- dependencies:
- "@babel/runtime" "^7.2.0"
- prop-types "^15.6.0"
- react-is "^16.6.3"
-
-"@types/classnames@2.2.10":
- version "2.2.10"
- resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999"
- integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==
-
-"@types/glob@^7.1.1":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
- integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
- dependencies:
- "@types/minimatch" "*"
- "@types/node" "*"
-
-"@types/history@*":
- version "4.7.9"
- resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724"
- integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==
-
-"@types/jss@^9.5.6":
- version "9.5.8"
- resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b"
- integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==
- dependencies:
- csstype "^2.0.0"
- indefinite-observable "^1.0.1"
-
-"@types/minimatch@*":
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
- integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
-
-"@types/node@*":
- version "16.11.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.10.tgz#2e3ad0a680d96367103d3e670d41c2fed3da61ae"
- integrity sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==
-
-"@types/prop-types@*":
- version "15.7.4"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
- integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
-
-"@types/react-router-dom@5.1.2":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.2.tgz#853f229f1f297513c0be84f7c914a08b778cfdf5"
- integrity sha512-kRx8hoBflE4Dp7uus+j/0uMHR5uGTAvQtc4A3vOTWKS+epe0leCuxEx7HNT7XGUd1lH53/moWM51MV2YUyhzAg==
- dependencies:
- "@types/history" "*"
- "@types/react" "*"
- "@types/react-router" "*"
-
-"@types/react-router@*":
- version "5.1.17"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.17.tgz#087091006213b11042f39570e5cd414863693968"
- integrity sha512-RNSXOyb3VyRs/EOGmjBhhGKTbnN6fHWvy5FNLzWfOWOGjgVUKqJZXfpKzLmgoU8h6Hj8mpALj/mbXQASOb92wQ==
- dependencies:
- "@types/history" "*"
- "@types/react" "*"
-
-"@types/react-router@5.1.2":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.2.tgz#41e5e6aa333a7b9a2bfdac753c04e1ca4b3e0d21"
- integrity sha512-euC3SiwDg3NcjFdNmFL8uVuAFTpZJm0WMFUw+4eXMUnxa7M9RGFEG0szt0z+/Zgk4G2k9JBFhaEnY64RBiFmuw==
- dependencies:
- "@types/history" "*"
- "@types/react" "*"
-
-"@types/react-transition-group@^2.0.8":
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.2.tgz#c48cf2a11977c8b4ff539a1c91d259eaa627028d"
- integrity sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==
- dependencies:
- "@types/react" "*"
-
-"@types/react@*":
- version "17.0.37"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959"
- integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==
- dependencies:
- "@types/prop-types" "*"
- "@types/scheduler" "*"
- csstype "^3.0.2"
-
-"@types/scheduler@*":
- version "0.16.2"
- resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
- integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
-
-"@webassemblyjs/ast@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
- integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
- dependencies:
- "@webassemblyjs/helper-module-context" "1.8.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
- "@webassemblyjs/wast-parser" "1.8.5"
-
-"@webassemblyjs/floating-point-hex-parser@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
- integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
-
-"@webassemblyjs/helper-api-error@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
- integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
-
-"@webassemblyjs/helper-buffer@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
- integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
-
-"@webassemblyjs/helper-code-frame@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
- integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
- dependencies:
- "@webassemblyjs/wast-printer" "1.8.5"
-
-"@webassemblyjs/helper-fsm@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
- integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
-
-"@webassemblyjs/helper-module-context@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
- integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- mamacro "^0.0.3"
-
-"@webassemblyjs/helper-wasm-bytecode@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
- integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
-
-"@webassemblyjs/helper-wasm-section@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
- integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-buffer" "1.8.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
- "@webassemblyjs/wasm-gen" "1.8.5"
-
-"@webassemblyjs/ieee754@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
- integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
- dependencies:
- "@xtuc/ieee754" "^1.2.0"
-
-"@webassemblyjs/leb128@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
- integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
- dependencies:
- "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/utf8@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
- integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
-
-"@webassemblyjs/wasm-edit@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
- integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-buffer" "1.8.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
- "@webassemblyjs/helper-wasm-section" "1.8.5"
- "@webassemblyjs/wasm-gen" "1.8.5"
- "@webassemblyjs/wasm-opt" "1.8.5"
- "@webassemblyjs/wasm-parser" "1.8.5"
- "@webassemblyjs/wast-printer" "1.8.5"
-
-"@webassemblyjs/wasm-gen@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
- integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
- "@webassemblyjs/ieee754" "1.8.5"
- "@webassemblyjs/leb128" "1.8.5"
- "@webassemblyjs/utf8" "1.8.5"
-
-"@webassemblyjs/wasm-opt@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
- integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-buffer" "1.8.5"
- "@webassemblyjs/wasm-gen" "1.8.5"
- "@webassemblyjs/wasm-parser" "1.8.5"
-
-"@webassemblyjs/wasm-parser@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
- integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-api-error" "1.8.5"
- "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
- "@webassemblyjs/ieee754" "1.8.5"
- "@webassemblyjs/leb128" "1.8.5"
- "@webassemblyjs/utf8" "1.8.5"
-
-"@webassemblyjs/wast-parser@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
- integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/floating-point-hex-parser" "1.8.5"
- "@webassemblyjs/helper-api-error" "1.8.5"
- "@webassemblyjs/helper-code-frame" "1.8.5"
- "@webassemblyjs/helper-fsm" "1.8.5"
- "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/wast-printer@1.8.5":
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
- integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/wast-parser" "1.8.5"
- "@xtuc/long" "4.2.2"
-
-"@xtuc/ieee754@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
- integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
-
-"@xtuc/long@4.2.2":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
- integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-
-accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
- version "1.3.7"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
- integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
- dependencies:
- mime-types "~2.1.24"
- negotiator "0.6.2"
-
-acorn-dynamic-import@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
- integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
-
-acorn@^6.0.5:
- version "6.4.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
- integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
-
-ajv-errors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
- integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-
-ajv-keywords@^3.1.0:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
- integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-
-ajv@^6.1.0:
- version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ansi-colors@^3.0.0:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
- integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
-
-ansi-html@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
- integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
- integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
- integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-anymatch@~3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
- integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-aproba@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
- integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-
-array-flatten@^2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
- integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
- integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
- integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
- integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
-
-asn1.js@^5.2.0:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
- integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- safer-buffer "^2.1.0"
-
-assert@^1.1.1:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
- integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
- dependencies:
- object-assign "^4.1.1"
- util "0.10.3"
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-async-each@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
- integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
-
-async@^2.5.0, async@^2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
- integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
- dependencies:
- lodash "^4.17.14"
-
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base64-js@^1.0.2:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-batch@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
- integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
-
-big.js@^3.1.3:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
- integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
-
-big.js@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
- integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-binary-extensions@^1.0.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
- integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
-
-binary-extensions@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-bindings@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
- integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
- dependencies:
- file-uri-to-path "1.0.0"
-
-bluebird@^3.5.5:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
- integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
-
-bn.js@^5.0.0, bn.js@^5.1.1:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
- integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
-
-body-parser@1.19.0:
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
- integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
- dependencies:
- bytes "3.1.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.2"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- on-finished "~2.3.0"
- qs "6.7.0"
- raw-body "2.4.0"
- type-is "~1.6.17"
-
-bonjour@^3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
- integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
- dependencies:
- array-flatten "^2.1.0"
- deep-equal "^1.0.1"
- dns-equal "^1.0.0"
- dns-txt "^2.0.2"
- multicast-dns "^6.0.1"
- multicast-dns-service-types "^1.1.0"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^2.3.1, braces@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-brcast@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.2.tgz#55c41a7a077ff4e7ac784c2060e544d4c39ad477"
- integrity sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA==
-
-brorand@^1.0.1, brorand@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
- integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
- integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
- integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
- dependencies:
- bn.js "^5.0.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
- integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
- dependencies:
- bn.js "^5.1.1"
- browserify-rsa "^4.0.1"
- create-hash "^1.2.0"
- create-hmac "^1.1.7"
- elliptic "^6.5.3"
- inherits "^2.0.4"
- parse-asn1 "^5.1.5"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-browserify-zlib@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
- integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
- dependencies:
- pako "~1.0.5"
-
-buffer-from@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
- integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-
-buffer-indexof@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
- integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@^4.3.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
- integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
- integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-
-bytes@3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
- integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
-
-cacache@^12.0.2:
- version "12.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
- integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
- dependencies:
- bluebird "^3.5.5"
- chownr "^1.1.1"
- figgy-pudding "^3.5.1"
- glob "^7.1.4"
- graceful-fs "^4.1.15"
- infer-owner "^1.0.3"
- lru-cache "^5.1.1"
- mississippi "^3.0.0"
- mkdirp "^0.5.1"
- move-concurrently "^1.0.1"
- promise-inflight "^1.0.1"
- rimraf "^2.6.3"
- ssri "^6.0.1"
- unique-filename "^1.1.1"
- y18n "^4.0.0"
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-call-bind@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
- dependencies:
- function-bind "^1.1.1"
- get-intrinsic "^1.0.2"
-
-camelcase@^5.0.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-chalk@^2.4.1:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-change-emitter@^0.1.2:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
- integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
-
-chokidar@^2.1.6, chokidar@^2.1.8:
- version "2.1.8"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
- integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.1"
- braces "^2.3.2"
- glob-parent "^3.1.0"
- inherits "^2.0.3"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^3.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.2.1"
- upath "^1.1.1"
- optionalDependencies:
- fsevents "^1.2.7"
-
-chokidar@^3.4.1:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
- integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
- dependencies:
- anymatch "~3.1.2"
- braces "~3.0.2"
- glob-parent "~5.1.2"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.6.0"
- optionalDependencies:
- fsevents "~2.3.2"
-
-chownr@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-chrome-trace-event@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
- integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-classnames@^2.2.5:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
- integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
-
-cliui@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
- integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
- dependencies:
- string-width "^2.1.1"
- strip-ansi "^4.0.0"
- wrap-ansi "^2.0.0"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
- integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-commander@^2.20.0:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-
-component-emitter@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
- integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-compressible@~2.0.16:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
- integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
- dependencies:
- mime-db ">= 1.43.0 < 2"
-
-compression@^1.7.4:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
- integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
- dependencies:
- accepts "~1.3.5"
- bytes "3.0.0"
- compressible "~2.0.16"
- debug "2.6.9"
- on-headers "~1.0.2"
- safe-buffer "5.1.2"
- vary "~1.1.2"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-concat-stream@^1.5.0:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-concat-with-sourcemaps@1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.7.tgz#9420e100fb984cbde11a78dca2d818306bc8f0d2"
- integrity sha512-5i4Spc9NNvVXzkR77x2kjcYCDZMNPLzP7ZBzJMNKZjXzk+E6tRVL/lPlYw60VM3hb7gf+iBQn2x1T8TpMN0SEw==
- dependencies:
- source-map "^0.6.1"
-
-connect-history-api-fallback@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
- integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
-
-console-browserify@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
- integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
- integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-
-content-disposition@0.5.3:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
- integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
- dependencies:
- safe-buffer "5.1.2"
-
-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==
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
- integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
-
-cookie@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
- integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
-
-copy-concurrently@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
- integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
- dependencies:
- aproba "^1.1.1"
- fs-write-stream-atomic "^1.0.8"
- iferr "^0.1.5"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.0"
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
- integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-js@^1.0.0:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
- integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-
-core-util-is@~1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-
-create-ecdh@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
- integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.5.3"
-
-create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
- dependencies:
- nice-try "^1.0.4"
- path-key "^2.0.1"
- semver "^5.5.0"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-crypto-browserify@^3.11.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-css-vendor@^0.3.8:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa"
- integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=
- dependencies:
- is-in-browser "^1.0.2"
-
-css-vendor@^2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
- integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
- dependencies:
- "@babel/runtime" "^7.8.3"
- is-in-browser "^1.0.2"
-
-csstype@^2.0.0, csstype@^2.5.2:
- version "2.6.19"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
- integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
-
-csstype@^3.0.2:
- version "3.0.10"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
- integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
-
-cyclist@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
- integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-
-debounce@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
- integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
-
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-debug@^3.1.1, debug@^3.2.5:
- version "3.2.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
- integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
- dependencies:
- ms "^2.1.1"
-
-debug@^4.1.0, debug@^4.1.1:
- 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"
-
-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:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-deep-equal@^1.0.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
- integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
- dependencies:
- is-arguments "^1.0.4"
- is-date-object "^1.0.1"
- is-regex "^1.0.4"
- object-is "^1.0.1"
- object-keys "^1.1.1"
- regexp.prototype.flags "^1.2.0"
-
-deepmerge@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7"
- integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==
-
-default-gateway@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
- integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
- dependencies:
- execa "^1.0.0"
- ip-regex "^2.1.0"
-
-define-properties@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
-del@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
- integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
- dependencies:
- "@types/glob" "^7.1.1"
- globby "^6.1.0"
- is-path-cwd "^2.0.0"
- is-path-in-cwd "^2.0.0"
- p-map "^2.0.0"
- pify "^4.0.1"
- rimraf "^2.6.3"
-
-depd@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
- integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
-
-des.js@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
- integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-destroy@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
- integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
-
-detect-file@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
- integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
-
-detect-node@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
-diffie-hellman@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
- integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-dns-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
- integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-
-dns-packet@^1.3.1:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
- integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
- dependencies:
- ip "^1.1.0"
- safe-buffer "^5.0.1"
-
-dns-txt@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
- integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
- dependencies:
- buffer-indexof "^1.0.0"
-
-dom-helpers@^3.2.1, dom-helpers@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
- integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
- dependencies:
- "@babel/runtime" "^7.1.2"
-
-domain-browser@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
- integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-
-duplexify@^3.4.2, duplexify@^3.6.0:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
- integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
- dependencies:
- end-of-stream "^1.0.0"
- inherits "^2.0.1"
- readable-stream "^2.0.0"
- stream-shift "^1.0.0"
-
-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=
-
-elliptic@^6.5.3:
- version "6.5.4"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
- integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
- dependencies:
- bn.js "^4.11.9"
- brorand "^1.1.0"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.1"
- inherits "^2.0.4"
- minimalistic-assert "^1.0.1"
- minimalistic-crypto-utils "^1.0.1"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
- integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-emojis-list@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
- integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
-
-encodeurl@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
- integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-
-encoding@^0.1.11:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
- integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
- dependencies:
- iconv-lite "^0.6.2"
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-enhanced-resolve@^4.1.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
- integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.5.0"
- tapable "^1.0.0"
-
-errno@^0.1.3, errno@~0.1.7:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
- integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
- dependencies:
- prr "~1.0.1"
-
-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=
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-eslint-scope@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
- integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-esrecurse@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
- integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
- dependencies:
- estraverse "^5.2.0"
-
-estraverse@^4.1.1:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
- integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
-estraverse@^5.2.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
- integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
- integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
-
-eventemitter3@^4.0.0:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
- integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-
-events@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
- integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-
-eventsource@^1.0.7:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf"
- integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==
- dependencies:
- original "^1.0.0"
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expand-tilde@^2.0.0, expand-tilde@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
- integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
- dependencies:
- homedir-polyfill "^1.0.1"
-
-express@^4.17.0:
- version "4.17.1"
- resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
- integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
- dependencies:
- accepts "~1.3.7"
- array-flatten "1.1.1"
- body-parser "1.19.0"
- content-disposition "0.5.3"
- content-type "~1.0.4"
- cookie "0.4.0"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.2"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "~1.1.2"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.5"
- qs "6.7.0"
- range-parser "~1.2.1"
- safe-buffer "5.1.2"
- send "0.17.1"
- serve-static "1.14.1"
- setprototypeof "1.1.1"
- statuses "~1.5.0"
- type-is "~1.6.18"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-fast-deep-equal@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-faye-websocket@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
- integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
- dependencies:
- websocket-driver ">=0.5.1"
-
-faye-websocket@~0.11.1:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
- integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
- dependencies:
- websocket-driver ">=0.5.1"
-
-fbjs@^0.8.1:
- version "0.8.18"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a"
- integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==
- dependencies:
- core-js "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^0.7.30"
-
-figgy-pudding@^3.5.1:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
- integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
-
-file-uri-to-path@1.0.0:
- version "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==
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-finalhandler@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
- integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.3"
- statuses "~1.5.0"
- unpipe "~1.0.0"
-
-find-cache-dir@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
- integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^2.0.0"
- pkg-dir "^3.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-findup-sync@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
- integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=
- dependencies:
- detect-file "^1.0.0"
- is-glob "^3.1.0"
- micromatch "^3.0.4"
- resolve-dir "^1.0.1"
-
-flush-write-stream@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
- integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.3.6"
-
-follow-redirects@^1.0.0:
- version "1.14.5"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381"
- integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==
-
-for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
-forwarded@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
- integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
- dependencies:
- map-cache "^0.2.2"
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
- integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-
-from2@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
- integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.0"
-
-fs-write-stream-atomic@^1.0.8:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
- integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
- dependencies:
- graceful-fs "^4.1.2"
- iferr "^0.1.5"
- imurmurhash "^0.1.4"
- readable-stream "1 || 2"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@^1.2.7:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
- integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
- dependencies:
- bindings "^1.5.0"
- nan "^2.12.1"
-
-fsevents@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-get-caller-file@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
- integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
-
-get-intrinsic@^1.0.2:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
- integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
- dependencies:
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.1"
-
-get-stream@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
- integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
- dependencies:
- pump "^3.0.0"
-
-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"
- integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-glob-parent@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
- integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
- dependencies:
- is-glob "^3.1.0"
- path-dirname "^1.0.0"
-
-glob-parent@~5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
- integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
- dependencies:
- is-glob "^4.0.1"
-
-glob@^7.0.3, glob@^7.1.3, glob@^7.1.4:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
- integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global-modules@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
- integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
- dependencies:
- global-prefix "^1.0.1"
- is-windows "^1.0.1"
- resolve-dir "^1.0.0"
-
-global-prefix@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
- integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
- dependencies:
- expand-tilde "^2.0.2"
- homedir-polyfill "^1.0.1"
- ini "^1.3.4"
- is-windows "^1.0.1"
- which "^1.2.14"
-
-globby@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
- integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
- dependencies:
- array-union "^1.0.1"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
- integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
-
-handle-thing@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
- integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-symbols@^1.0.1, has-symbols@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
- integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
-
-has-tostringtag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
- integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
- dependencies:
- has-symbols "^1.0.2"
-
-has-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
- integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hash-base@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
- integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-history@^4.9.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
- integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
- dependencies:
- "@babel/runtime" "^7.1.2"
- loose-envify "^1.2.0"
- resolve-pathname "^3.0.0"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
- value-equal "^1.0.1"
-
-hmac-drbg@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-hoist-non-react-statics@^2.3.1:
- version "2.5.5"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
- integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
-
-hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
- integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
- dependencies:
- react-is "^16.7.0"
-
-homedir-polyfill@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
- integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
- dependencies:
- parse-passwd "^1.0.0"
-
-hpack.js@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
- integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
- dependencies:
- inherits "^2.0.1"
- obuf "^1.0.0"
- readable-stream "^2.0.1"
- wbuf "^1.1.0"
-
-html-entities@^1.2.1:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc"
- integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==
-
-http-deceiver@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
- integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
-
-http-errors@1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
- integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- 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"
- integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
- dependencies:
- depd "~1.1.2"
- inherits "2.0.3"
- 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.4"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.4.tgz#d1f3e45f31973de8393af2c725da5d42919ab2bb"
- integrity sha512-Qn1yyi10ipcylSSqlTFsj7bhimACWbFm5w5JNMxhLKfcJAeWFBc+/VBv4mu5qlWSKr0cjXqtwM6HISZkESUILA==
-
-http-proxy-middleware@^0.19.1:
- version "0.19.2"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz#ee73dcc8348165afefe8de2ff717751d181608ee"
- integrity sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==
- dependencies:
- http-proxy "^1.18.1"
- is-glob "^4.0.0"
- lodash "^4.17.11"
- micromatch "^3.1.10"
-
-http-proxy@^1.18.1:
- version "1.18.1"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
- integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
- dependencies:
- eventemitter3 "^4.0.0"
- follow-redirects "^1.0.0"
- requires-port "^1.0.0"
-
-https-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
- integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-
-hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
- integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-
-iconv-lite@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
- integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
-
-iconv-lite@^0.6.2:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
-ieee754@^1.1.4:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-iferr@^0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
- integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
-
-import-local@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
- integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
- dependencies:
- pkg-dir "^3.0.0"
- resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-indefinite-observable@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8"
- integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==
- dependencies:
- symbol-observable "1.2.0"
-
-infer-owner@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
- integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
- integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@^1.3.4:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-internal-ip@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
- integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
- dependencies:
- default-gateway "^4.2.0"
- ipaddr.js "^1.9.0"
-
-interpret@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
- integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
-
-invert-kv@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
- integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
-
-ip-regex@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
- integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
-
-ip@^1.1.0, ip@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
- integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-
-ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
- integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-arguments@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
- integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
- dependencies:
- binary-extensions "^1.0.0"
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
- integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
- integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
- dependencies:
- is-extglob "^2.1.0"
-
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
- integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-in-browser@^1.0.2, is-in-browser@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
- integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-path-cwd@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
- integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
-
-is-path-in-cwd@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
- integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
- dependencies:
- is-path-inside "^2.1.0"
-
-is-path-inside@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
- integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
- dependencies:
- path-is-inside "^1.0.2"
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-regex@^1.0.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
- integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-stream@^1.0.1, is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
- integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-
-is-windows@^1.0.1, is-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
- integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
- integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-isomorphic-fetch@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
-"js-tokens@^3.0.0 || ^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-
-json-parse-better-errors@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
- integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json3@^3.3.2:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
- integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
-
-json5@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
- integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-
-json5@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
- integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
- dependencies:
- minimist "^1.2.0"
-
-jss-camel-case@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44"
- integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==
- dependencies:
- hyphenate-style-name "^1.0.2"
-
-jss-default-unit@^8.0.2:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6"
- integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==
-
-jss-global@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2"
- integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==
-
-jss-nested@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca"
- integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==
- dependencies:
- warning "^3.0.0"
-
-jss-plugin-camel-case@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.2.tgz#8d7f915c8115afaff8cbde08faf610ec9892fba6"
- integrity sha512-2INyxR+1UdNuKf4v9It3tNfPvf7IPrtkiwzofeKuMd5D58/dxDJVUQYRVg/n460rTlHUfsEQx43hDrcxi9dSPA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- hyphenate-style-name "^1.0.3"
- jss "10.8.2"
-
-jss-plugin-default-unit@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.2.tgz#c66f12e02e0815d911b85c02c2a979ee7b4ce69a"
- integrity sha512-UZ7cwT9NFYSG+SEy7noRU50s4zifulFdjkUNKE+u6mW7vFP960+RglWjTgMfh79G6OENZmaYnjHV/gcKV4nSxg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-global@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.8.2.tgz#1a35632a693cf50113bcc5ffe6b51969df79c4ec"
- integrity sha512-UaYMSPsYZ7s/ECGoj4KoHC2jwQd5iQ7K+FFGnCAILdQrv7hPmvM2Ydg45ThT/sH46DqktCRV2SqjRuxeBH8nRA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-nested@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.8.2.tgz#79f3c7f75ea6a36ae72fe52e777035bb24d230c7"
- integrity sha512-acRvuPJOb930fuYmhkJaa994EADpt8TxI63Iyg96C8FJ9T2xRyU5T6R1IYKRwUiqZo+2Sr7fdGzRTDD4uBZaMA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
- tiny-warning "^1.0.2"
-
-jss-plugin-props-sort@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.2.tgz#e25a7471868652c394562b6dc5433dcaea7dff6f"
- integrity sha512-wqdcjayKRWBZnNpLUrXvsWqh+5J5YToAQ+8HNBNw0kZxVvCDwzhK2Nx6AKs7p+5/MbAh2PLgNW5Ym/ysbVAuqQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-rule-value-function@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.2.tgz#55354b55f1b2968a15976729968f767f02d64049"
- integrity sha512-bW0EKAs+0HXpb6BKJhrn94IDdiWb0CnSluTkh0rGEgyzY/nmD1uV/Wf6KGlesGOZ9gmJzQy+9FFdxIUID1c9Ug==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
- tiny-warning "^1.0.2"
-
-jss-plugin-vendor-prefixer@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.2.tgz#ebb4a482642f34091e454901e21176441dd5f475"
- integrity sha512-DeGv18QsSiYLSVIEB2+l0af6OToUe0JB+trpzUxyqD2QRC/5AzzDrCrYffO5AHZ81QbffYvSN/pkfZaTWpRXlg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- css-vendor "^2.0.8"
- jss "10.8.2"
-
-jss-props-sort@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323"
- integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==
-
-jss-vendor-prefixer@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71"
- integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==
- dependencies:
- css-vendor "^0.3.8"
-
-jss@10.8.2, jss@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss/-/jss-10.8.2.tgz#4b2a30b094b924629a64928236017a52c7c97505"
- integrity sha512-FkoUNxI329CKQ9OQC8L72MBF9KPf5q8mIupAJ5twU7G7XREW7ahb+7jFfrjZ4iy1qvhx1HwIWUIvkZBDnKkEdQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- csstype "^3.0.2"
- is-in-browser "^1.1.3"
- tiny-warning "^1.0.2"
-
-jss@^9.8.7:
- version "9.8.7"
- resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05"
- integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==
- dependencies:
- is-in-browser "^1.1.3"
- symbol-observable "^1.1.0"
- warning "^3.0.0"
-
-killable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
- integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
- integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-lcid@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
- integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
- dependencies:
- invert-kv "^2.0.0"
-
-loader-runner@^2.3.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
- integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
-
-loader-utils@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
- integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^3.0.0"
- json5 "^1.0.1"
-
-loader-utils@~0.2.2:
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
- integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
- object-assign "^4.0.1"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-lodash@^4.17.11, lodash@^4.17.14:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-loglevel@^1.6.1:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
- integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
-
-loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
-make-dir@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
- integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
- dependencies:
- pify "^4.0.1"
- semver "^5.6.0"
-
-mamacro@^0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
- integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
-
-map-age-cleaner@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
- integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
- dependencies:
- p-defer "^1.0.0"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
- integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
- dependencies:
- object-visit "^1.0.0"
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
- integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-
-mem@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
- integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
- dependencies:
- map-age-cleaner "^0.1.1"
- mimic-fn "^2.0.0"
- p-is-promise "^2.0.0"
-
-memory-fs@^0.4.1, memory-fs@~0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
- integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-memory-fs@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
- integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.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=
-
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
- integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
-
-micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-mime-db@1.51.0, "mime-db@>= 1.43.0 < 2":
- version "1.51.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
- integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
-
-mime-types@~2.1.17, mime-types@~2.1.24:
- version "2.1.34"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
- integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
- dependencies:
- mime-db "1.51.0"
-
-mime@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mime@^2.4.4:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
- integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
-
-mimic-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-mini-create-react-context@^0.3.0:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.3.tgz#b1b2bc6604d3a6c5d9752bad7692615410ebb38e"
- integrity sha512-TtF6hZE59SGmS4U8529qB+jJFeW6asTLDIpPgvPLSCsooAwJS7QprHIFTqv9/Qh3NdLwQxFYgiHX5lqb6jqzPA==
- dependencies:
- "@babel/runtime" "^7.12.1"
- tiny-warning "^1.0.3"
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-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==
-
-mississippi@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
- integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
- dependencies:
- concat-stream "^1.5.0"
- duplexify "^3.4.2"
- end-of-stream "^1.1.0"
- flush-write-stream "^1.0.0"
- from2 "^2.1.0"
- parallel-transform "^1.1.0"
- pump "^3.0.0"
- pumpify "^1.3.3"
- stream-each "^1.1.0"
- through2 "^2.0.0"
-
-mixin-deep@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
-move-concurrently@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
- integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
- dependencies:
- aproba "^1.1.1"
- copy-concurrently "^1.0.0"
- fs-write-stream-atomic "^1.0.8"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.3"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
- integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-multicast-dns-service-types@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
- integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
-
-multicast-dns@^6.0.1:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
- integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
- dependencies:
- dns-packet "^1.3.1"
- thunky "^1.0.2"
-
-nan@^2.12.1:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
- integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
-
-nanomatch@^1.2.9:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-negotiator@0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
- integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-
-neo-async@^2.5.0:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
- integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
-
-nice-try@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
- integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-
-node-fetch@^1.0.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-forge@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
- integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
-
-node-libs-browser@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
- integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.2.0"
- buffer "^4.3.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "^3.11.0"
- domain-browser "^1.1.1"
- events "^3.0.0"
- https-browserify "^1.0.0"
- os-browserify "^0.3.0"
- path-browserify "0.0.1"
- process "^0.11.10"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.3.3"
- stream-browserify "^2.0.1"
- stream-http "^2.7.2"
- string_decoder "^1.0.0"
- timers-browserify "^2.0.4"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.11.0"
- vm-browserify "^1.0.1"
-
-normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-scroll-left@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa"
- integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
- dependencies:
- path-key "^2.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
- integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-is@^1.0.1:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
- integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
-
-object-keys@^1.0.12, object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
- dependencies:
- isobject "^3.0.0"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
- dependencies:
- isobject "^3.0.1"
-
-obuf@^1.0.0, obuf@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
- integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
- integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-opn@^5.5.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
- integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
- dependencies:
- is-wsl "^1.1.0"
-
-original@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
- integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
- dependencies:
- url-parse "^1.4.3"
-
-os-browserify@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
- integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-
-os-locale@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
- integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
- dependencies:
- execa "^1.0.0"
- lcid "^2.0.0"
- mem "^4.0.0"
-
-p-defer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
- integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
- integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-
-p-is-promise@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
- integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
-
-p-limit@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-map@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
- integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-pako@~1.0.5:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-
-parallel-transform@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
- integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
- dependencies:
- cyclist "^1.0.1"
- inherits "^2.0.3"
- readable-stream "^2.1.5"
-
-parse-asn1@^5.0.0, parse-asn1@^5.1.5:
- version "5.1.6"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
- integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
- dependencies:
- asn1.js "^5.2.0"
- browserify-aes "^1.0.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
- safe-buffer "^5.1.1"
-
-parse-passwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
- integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
-
-parseurl@~1.3.2, parseurl@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
- integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
- integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
- integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
-
-path-dirname@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
- integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-is-inside@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
- integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-
-path-key@^2.0.0, path-key@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
- integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
-
-path-to-regexp@^1.7.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
- integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
- dependencies:
- isarray "0.0.1"
-
-pbkdf2@^3.0.3:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
- integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-picomatch@^2.0.4, picomatch@^2.2.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
- integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
-
-pify@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
- integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
- integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-
-pkg-dir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
- integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
- dependencies:
- find-up "^3.0.0"
-
-popper.js@^1.14.1:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
- integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
-
-portfinder@^1.0.20:
- version "1.0.28"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
- integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==
- dependencies:
- async "^2.6.2"
- debug "^3.1.1"
- mkdirp "^0.5.5"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
- integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-promise-inflight@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
- integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-
-promise@^7.1.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
- dependencies:
- asap "~2.0.3"
-
-prop-types@^15.6.0, prop-types@^15.6.2:
- version "15.7.2"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
- integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.8.1"
-
-proxy-addr@~2.0.5:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
- integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
- dependencies:
- forwarded "0.2.0"
- ipaddr.js "1.9.1"
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-public-encrypt@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
- integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
- safe-buffer "^5.1.2"
-
-pump@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
- integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-pumpify@^1.3.3:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
- integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
- dependencies:
- duplexify "^3.6.0"
- inherits "^2.0.3"
- pump "^2.0.0"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
-punycode@^1.2.4:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@6.7.0:
- version "6.7.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
- integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
- integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
-querystringify@^2.1.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
- integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
- integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-range-parser@^1.2.1, range-parser@~1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
- integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
-
-raw-body@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
- integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
- dependencies:
- bytes "3.1.0"
- http-errors "1.7.2"
- iconv-lite "0.4.24"
- unpipe "1.0.0"
-
-react-event-listener@^0.6.2:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a"
- integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==
- dependencies:
- "@babel/runtime" "^7.2.0"
- prop-types "^15.6.0"
- warning "^4.0.1"
-
-react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
- integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
-
-react-router-dom@5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18"
- integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==
- dependencies:
- "@babel/runtime" "^7.1.2"
- history "^4.9.0"
- loose-envify "^1.3.1"
- prop-types "^15.6.2"
- react-router "5.1.2"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
-
-react-router@5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"
- integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==
- dependencies:
- "@babel/runtime" "^7.1.2"
- history "^4.9.0"
- hoist-non-react-statics "^3.1.0"
- loose-envify "^1.3.1"
- mini-create-react-context "^0.3.0"
- path-to-regexp "^1.7.0"
- prop-types "^15.6.2"
- react-is "^16.6.0"
- tiny-invariant "^1.0.2"
- tiny-warning "^1.0.0"
-
-react-transition-group@^2.2.1:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
- integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
- dependencies:
- dom-helpers "^3.4.0"
- loose-envify "^1.4.0"
- prop-types "^15.6.2"
- react-lifecycles-compat "^3.0.4"
-
-"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:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^3.0.6, readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readdirp@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
- integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
- dependencies:
- graceful-fs "^4.1.11"
- micromatch "^3.1.10"
- readable-stream "^2.0.2"
-
-readdirp@~3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
- integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
- dependencies:
- picomatch "^2.2.1"
-
-"recompose@0.28.0 - 0.30.0":
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
- integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
- dependencies:
- "@babel/runtime" "^7.0.0"
- change-emitter "^0.1.2"
- fbjs "^0.8.1"
- hoist-non-react-statics "^2.3.1"
- react-lifecycles-compat "^3.0.2"
- symbol-observable "^1.0.4"
-
-regenerator-runtime@^0.13.4:
- version "0.13.9"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
- integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-regexp.prototype.flags@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
- integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.3"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
- integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
-
-repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- 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@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
- integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
-
-requires-port@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
- integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
-
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
- dependencies:
- resolve-from "^3.0.0"
-
-resolve-dir@^1.0.0, resolve-dir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
- integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
- dependencies:
- expand-tilde "^2.0.0"
- global-modules "^1.0.0"
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha1-six699nWiBvItuZTM17rywoYh0g=
-
-resolve-pathname@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
- integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-ret@~0.1.10:
- version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
- integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-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==
- dependencies:
- glob "^7.1.3"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-run-queue@^1.0.0, run-queue@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
- integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
- dependencies:
- aproba "^1.1.1"
-
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
- dependencies:
- ret "~0.1.10"
-
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-schema-utils@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
- integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
- dependencies:
- ajv "^6.1.0"
- ajv-errors "^1.0.0"
- ajv-keywords "^3.1.0"
-
-select-hose@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
- integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-
-selfsigned@^1.10.4:
- version "1.10.11"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9"
- integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==
- dependencies:
- node-forge "^0.10.0"
-
-semver@^5.5.0, semver@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@^6.0.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-send@0.17.1:
- version "0.17.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
- integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
- dependencies:
- debug "2.6.9"
- depd "~1.1.2"
- destroy "~1.0.4"
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "~1.7.2"
- mime "1.6.0"
- ms "2.1.1"
- on-finished "~2.3.0"
- range-parser "~1.2.1"
- statuses "~1.5.0"
-
-serialize-javascript@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
- integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
- dependencies:
- randombytes "^2.1.0"
-
-serve-index@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
- integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
- dependencies:
- accepts "~1.3.4"
- batch "0.6.1"
- debug "2.6.9"
- escape-html "~1.0.3"
- http-errors "~1.6.2"
- mime-types "~2.1.17"
- parseurl "~1.3.2"
-
-serve-static@1.14.1:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
- integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.17.1"
-
-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:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-setimmediate@^1.0.4, setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-setprototypeof@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
- integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
-
-setprototypeof@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
- integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
-
-signal-exit@^3.0.0:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
- integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
-
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-sockjs-client@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177"
- integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
- dependencies:
- debug "^3.2.5"
- eventsource "^1.0.7"
- faye-websocket "~0.11.1"
- inherits "^2.0.3"
- json3 "^3.3.2"
- url-parse "^1.4.3"
-
-sockjs@0.3.19:
- version "0.3.19"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
- integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
- dependencies:
- faye-websocket "^0.10.0"
- uuid "^3.0.1"
-
-source-list-map@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
- integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
-
-source-map-loader@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.3.tgz#d4b0c8cd47d54edce3e6bfa0f523f452b5b0e521"
- integrity sha512-MYbFX9DYxmTQFfy2v8FC1XZwpwHKYxg3SK8Wb7VPBKuhDjz8gi9re2819MsG4p49HDyiOSUKlmZ+nQBArW5CGw==
- dependencies:
- async "^2.5.0"
- loader-utils "~0.2.2"
- source-map "~0.6.1"
-
-source-map-resolve@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@~0.5.12:
- version "0.5.21"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
- integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
- integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-spdy-transport@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
- integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
- dependencies:
- debug "^4.1.0"
- detect-node "^2.0.4"
- hpack.js "^2.1.6"
- obuf "^1.1.2"
- readable-stream "^3.0.6"
- wbuf "^1.7.3"
-
-spdy@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
- integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
- dependencies:
- debug "^4.1.0"
- handle-thing "^2.0.0"
- http-deceiver "^1.2.7"
- select-hose "^2.0.0"
- spdy-transport "^3.0.0"
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
- dependencies:
- extend-shallow "^3.0.0"
-
-ssri@^6.0.1:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
- integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
- dependencies:
- figgy-pudding "^3.5.1"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.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=
-
-stream-browserify@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
- integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-each@^1.1.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
- integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
- dependencies:
- end-of-stream "^1.1.0"
- stream-shift "^1.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"
- integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
- 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-shift@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
- integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
-
-string-width@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0, string-width@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string_decoder@^1.0.0, string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
- integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-
-supports-color@^5.3.0, supports-color@^5.5.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
-symbol-observable@1.2.0, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
- integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-
-tapable@^1.0.0, tapable@^1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
- integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-
-terser-webpack-plugin@^1.1.0:
- version "1.4.5"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
- integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
- dependencies:
- cacache "^12.0.2"
- find-cache-dir "^2.1.0"
- is-wsl "^1.1.0"
- schema-utils "^1.0.0"
- serialize-javascript "^4.0.0"
- source-map "^0.6.1"
- terser "^4.1.2"
- webpack-sources "^1.4.0"
- worker-farm "^1.7.0"
-
-terser@^4.1.2:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
- integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
- dependencies:
- commander "^2.20.0"
- source-map "~0.6.1"
- source-map-support "~0.5.12"
-
-through2@^2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-thunky@^1.0.2:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
- integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
-
-timers-browserify@^2.0.4:
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
- integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
- dependencies:
- setimmediate "^1.0.4"
-
-tiny-invariant@^1.0.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9"
- integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
-
-tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
- integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
- integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-toidentifier@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
- integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
- integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
-
-type-is@~1.6.17, type-is@~1.6.18:
- version "1.6.18"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
- integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.24"
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-typescript@3.9.3:
- version "3.9.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a"
- integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==
-
-ua-parser-js@^0.7.30:
- version "0.7.31"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6"
- integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==
-
-union-value@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^2.0.1"
-
-unique-filename@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
- integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
- dependencies:
- unique-slug "^2.0.0"
-
-unique-slug@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
- integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
- dependencies:
- imurmurhash "^0.1.4"
-
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
- integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
-
-upath@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
- integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
-
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-url-parse@^1.4.3:
- version "1.5.3"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862"
- integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==
- dependencies:
- querystringify "^2.1.1"
- requires-port "^1.0.0"
-
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-use@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-util@0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
- dependencies:
- inherits "2.0.1"
-
-util@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
- integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
- dependencies:
- inherits "2.0.3"
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
- integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-
-uuid@^3.0.1, uuid@^3.3.2:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
- integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
-v8-compile-cache@^2.0.2:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
- integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
-
-value-equal@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
- integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
-
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
- integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-
-vm-browserify@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
- integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-
-warning@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
- integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
- dependencies:
- loose-envify "^1.0.0"
-
-warning@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
- integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
- dependencies:
- loose-envify "^1.0.0"
-
-watchpack-chokidar2@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
- integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
- dependencies:
- chokidar "^2.1.8"
-
-watchpack@^1.5.0:
- version "1.7.5"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
- integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
- dependencies:
- graceful-fs "^4.1.2"
- neo-async "^2.5.0"
- optionalDependencies:
- chokidar "^3.4.1"
- watchpack-chokidar2 "^2.0.1"
-
-wbuf@^1.1.0, wbuf@^1.7.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
- integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
- dependencies:
- minimalistic-assert "^1.0.0"
-
-webpack-cli@3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.2.tgz#aed2437b0db0a7faa2ad28484e166a5360014a91"
- integrity sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==
- dependencies:
- chalk "^2.4.1"
- cross-spawn "^6.0.5"
- enhanced-resolve "^4.1.0"
- findup-sync "^2.0.0"
- global-modules "^1.0.0"
- import-local "^2.0.0"
- interpret "^1.1.0"
- loader-utils "^1.1.0"
- supports-color "^5.5.0"
- v8-compile-cache "^2.0.2"
- yargs "^12.0.5"
-
-webpack-dev-middleware@^3.7.0:
- version "3.7.3"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5"
- integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==
- dependencies:
- memory-fs "^0.4.1"
- mime "^2.4.4"
- mkdirp "^0.5.1"
- range-parser "^1.2.1"
- webpack-log "^2.0.0"
-
-webpack-dev-server@3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz#a5fd8dec95dec410098e7d9a037ff9405395d51a"
- integrity sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==
- dependencies:
- ansi-html "0.0.7"
- bonjour "^3.5.0"
- chokidar "^2.1.6"
- compression "^1.7.4"
- connect-history-api-fallback "^1.6.0"
- debug "^4.1.1"
- del "^4.1.1"
- express "^4.17.0"
- html-entities "^1.2.1"
- http-proxy-middleware "^0.19.1"
- import-local "^2.0.0"
- internal-ip "^4.3.0"
- ip "^1.1.5"
- killable "^1.0.1"
- loglevel "^1.6.1"
- opn "^5.5.0"
- portfinder "^1.0.20"
- schema-utils "^1.0.0"
- selfsigned "^1.10.4"
- semver "^6.0.0"
- serve-index "^1.9.1"
- sockjs "0.3.19"
- sockjs-client "1.3.0"
- spdy "^4.0.0"
- strip-ansi "^3.0.1"
- supports-color "^6.1.0"
- url "^0.11.0"
- webpack-dev-middleware "^3.7.0"
- webpack-log "^2.0.0"
- yargs "12.0.5"
-
-webpack-log@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
- integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
- dependencies:
- ansi-colors "^3.0.0"
- uuid "^3.3.2"
-
-webpack-sources@^1.3.0, webpack-sources@^1.4.0:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
- integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
- dependencies:
- source-list-map "^2.0.0"
- source-map "~0.6.1"
-
-webpack@4.32.2:
- version "4.32.2"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.32.2.tgz#3639375364a617e84b914ddb2c770aed511e5bc8"
- integrity sha512-F+H2Aa1TprTQrpodRAWUMJn7A8MgDx82yQiNvYMaj3d1nv3HetKU0oqEulL9huj8enirKi8KvEXQ3QtuHF89Zg==
- dependencies:
- "@webassemblyjs/ast" "1.8.5"
- "@webassemblyjs/helper-module-context" "1.8.5"
- "@webassemblyjs/wasm-edit" "1.8.5"
- "@webassemblyjs/wasm-parser" "1.8.5"
- acorn "^6.0.5"
- acorn-dynamic-import "^4.0.0"
- ajv "^6.1.0"
- ajv-keywords "^3.1.0"
- chrome-trace-event "^1.0.0"
- enhanced-resolve "^4.1.0"
- eslint-scope "^4.0.0"
- json-parse-better-errors "^1.0.2"
- loader-runner "^2.3.0"
- loader-utils "^1.1.0"
- memory-fs "~0.4.1"
- micromatch "^3.1.8"
- mkdirp "~0.5.0"
- neo-async "^2.5.0"
- node-libs-browser "^2.0.0"
- schema-utils "^1.0.0"
- tapable "^1.1.0"
- terser-webpack-plugin "^1.1.0"
- watchpack "^1.5.0"
- webpack-sources "^1.3.0"
-
-websocket-driver@>=0.5.1:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
- integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
- dependencies:
- http-parser-js ">=0.5.1"
- safe-buffer ">=5.1.0"
- websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
- integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-
-whatwg-fetch@>=0.10.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
- integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-
-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@^1.2.14, which@^1.2.9:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
- integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
- dependencies:
- isexe "^2.0.0"
-
-worker-farm@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
- integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
- dependencies:
- errno "~0.1.7"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-xtend@^4.0.0, xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
- integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yargs-parser@^11.1.1:
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
- integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
-
-yargs@12.0.5, yargs@^12.0.5:
- version "12.0.5"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
- integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.2.0"
- find-up "^3.0.0"
- get-caller-file "^1.0.1"
- os-locale "^3.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^11.1.1"
diff --git a/build.sbt b/build.sbt
index 427c9b2..9e759f7 100644
--- a/build.sbt
+++ b/build.sbt
@@ -22,36 +22,6 @@ inThisBuild(
resolvers += Resolver.sonatypeRepo("releases")
val playJson = "2.10.0-RC5"
-val sttp = "3.5.0"
-
-val consoleDisabledOptions = Seq("-Xfatal-warnings", "-Ywarn-unused", "-Ywarn-unused-import")
-
-// Used only by the server
-// TODO: Reuse it in all projects
-lazy val baseServerSettings: Project => Project = {
- _.settings(
- scalacOptions ++= Seq(
- "-Werror",
- "-unchecked",
- "-deprecation",
- "-feature",
- "-target:jvm-1.8",
- "-encoding",
- "UTF-8",
- "-Xsource:3",
- "-Wconf:src=src_managed/.*:silent",
- "-Xlint:missing-interpolator",
- "-Xlint:adapted-args",
- "-Ywarn-dead-code",
- "-Ywarn-numeric-widen",
- "-Ywarn-value-discard",
- "-Ywarn-unused"
- ),
- Compile / doc / scalacOptions ++= Seq("-no-link-warnings"),
- // Some options are very noisy when using the console and prevent us using it smoothly, let's disable them
- Compile / console / scalacOptions ~= (_.filterNot(consoleDisabledOptions.contains))
- )
-}
// Used only by the lib projects
lazy val baseLibSettings: Project => Project = _.settings(
@@ -120,70 +90,6 @@ lazy val baseWebSettings: Project => Project =
)
)
-// specify versions for all of reacts dependencies
-lazy val reactNpmDeps: Project => Project =
- _.settings(
- stTypescriptVersion := "3.9.3",
- stIgnore += "react-proxy",
- Compile / npmDependencies ++= Seq(
- "react" -> "16.13.1",
- "react-dom" -> "16.13.1",
- "@types/react" -> "16.9.42",
- "@types/react-dom" -> "16.9.8",
- "csstype" -> "2.6.11",
- "@types/prop-types" -> "15.7.3",
- "react-proxy" -> "1.1.8"
- )
- )
-
-lazy val withCssLoading: Project => Project =
- _.settings(
- /* custom webpack file to include css */
- Compile / webpackConfigFile := Some((ThisBuild / baseDirectory).value / "custom.webpack.config.js"),
- Test / webpackConfigFile := None, // it is important to avoid the custom webpack config in tests to get them passing
- Compile / npmDevDependencies ++= Seq(
- "webpack-merge" -> "4.2.2",
- "css-loader" -> "3.4.2",
- "style-loader" -> "1.1.3",
- "file-loader" -> "5.1.0",
- "url-loader" -> "3.0.0"
- )
- )
-
-lazy val bundlerSettings: Project => Project =
- _.settings(
- Compile / fastOptJS / webpackExtraArgs += "--mode=development",
- Compile / fullOptJS / webpackExtraArgs += "--mode=production",
- Compile / fastOptJS / webpackDevServerExtraArgs += "--mode=development",
- Compile / fullOptJS / webpackDevServerExtraArgs += "--mode=production"
- )
-
-// Used only by play-based projects
-lazy val playSettings: Project => Project = {
- _.enablePlugins(PlayScala)
- .disablePlugins(PlayLayoutPlugin)
- .settings(
- // docs are huge and unnecessary
- Compile / doc / sources := Nil,
- Compile / doc / scalacOptions ++= Seq(
- "-no-link-warnings"
- ),
- // remove play noisy warnings
- play.sbt.routes.RoutesKeys.routesImport := Seq.empty,
- libraryDependencies ++= Seq(
- evolutions,
- "com.typesafe.play" %% "play-jdbc" % "2.8.19",
- "com.google.inject" % "guice" % "5.1.0"
- ),
- // test
- libraryDependencies ++= Seq(
- "org.scalatestplus.play" %% "scalatestplus-play" % "5.1.0" % Test,
- "org.mockito" %% "mockito-scala" % "1.17.14" % Test,
- "org.mockito" %% "mockito-scala-scalatest" % "1.17.14" % Test
- )
- )
-}
-
lazy val scalablytypedFacades = (project in file("scalablytyped-facades"))
.configure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin, ScalablyTypedConverterGenSourcePlugin))
.settings(
@@ -246,33 +152,6 @@ lazy val webappCommon = (crossProject(JSPlatform, JVMPlatform) in file("webapp-c
)
)
-/** Just the API side for the admin-data-explorer modules
- */
-lazy val adminDataExplorerApi = (crossProject(JSPlatform, JVMPlatform) in file("admin-data-explorer-api"))
- .configure(baseLibSettings)
- .dependsOn(webappCommon)
- .settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8", "3.2.2"),
- name := "admin-data-explorer-api"
- )
- .jsConfigure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin))
- .jvmSettings(
- libraryDependencies ++= Seq(
- "com.typesafe.play" %% "play-json" % playJson,
- "com.softwaremill.sttp.client3" %% "core" % sttp
- )
- )
- .jsSettings(
- stUseScalaJsDom := true,
- Test / fork := false, // sjs needs this to run tests
- Compile / stMinimize := Selection.All,
- libraryDependencies ++= Seq(
- "com.typesafe.play" %%% "play-json" % playJson,
- "com.softwaremill.sttp.client3" %%% "core" % sttp
- )
- )
-
/** Utils specific to slinky
*/
lazy val slinkyUtils = (project in file("slinky-utils"))
@@ -286,72 +165,12 @@ lazy val slinkyUtils = (project in file("slinky-utils"))
Test / fork := false // sjs needs this to run tests
)
-// shared on the ui only
-lazy val adminDataExplorerWeb = (project in file("admin-data-explorer-web"))
- .dependsOn(adminDataExplorerApi.js)
- .configure(bundlerSettings, baseLibSettings)
- .configure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin))
- .settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8", "3.2.2"),
- name := "admin-data-explorer-web",
- Test / fork := false, // sjs needs this to run tests
- libraryDependencies ++= Seq(
- "com.github.japgolly.scalajs-react" %%% "core" % "2.1.1",
- "io.github.nafg.scalajs-facades" %%% "simplefacade" % "0.16.0",
- "org.scala-js" %%% "scala-js-macrotask-executor" % "1.1.1"
- ),
- Compile / npmDependencies ++= Seq(
- "react" -> "17.0.0",
- "react-dom" -> "17.0.0",
- "react-scripts" -> "5.0.0",
- "react-admin" -> "4.1.0",
- "ra-ui-materialui" -> "4.1.0",
- "ra-data-simple-rest" -> "4.1.0",
- "ra-i18n-polyglot" -> "4.1.0",
- "ra-language-english" -> "4.1.0",
- "ra-core" -> "4.1.0",
- "@mui/material" -> "5.8.1",
- "@emotion/styled" -> "11.8.1"
- )
- )
-
-/** Includes the specific stuff to run the data explorer server side (play-specific)
- */
-lazy val adminDataExplorerPlayServer = (project in file("admin-data-explorer-play-server"))
- .dependsOn(adminDataExplorerApi.jvm, webappCommon.jvm)
- .configure(baseServerSettings, playSettings)
- .settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8"),
- name := "admin-data-explorer-play-server",
- fork := true,
- Test / fork := true, // allows for graceful shutdown of containers once the tests have finished running
- libraryDependencies ++= Seq(
- "org.playframework.anorm" %% "anorm" % "2.7.0",
- "com.typesafe.play" %% "play" % "2.8.19",
- "com.typesafe.play" %% "play-json" % "2.9.4",
- "org.postgresql" % "postgresql" % "42.6.0",
- "com.github.jwt-scala" %% "jwt-core" % "9.2.0",
- "de.svenkubiak" % "jBCrypt" % "0.4.3",
- "commons-validator" % "commons-validator" % "1.7",
- "com.dimafeng" %% "testcontainers-scala-scalatest" % "0.40.15" % "test",
- "com.dimafeng" %% "testcontainers-scala-postgresql" % "0.40.15" % "test",
- "com.softwaremill.sttp.client3" %% "core" % sttp % "test",
- "com.softwaremill.sttp.client3" %% "async-http-client-backend-future" % sttp % "test"
- )
- )
-
lazy val root = (project in file("."))
.aggregate(
scalablytypedFacades,
webappCommon.jvm,
webappCommon.js,
- adminDataExplorerApi.jvm,
- adminDataExplorerApi.js,
- slinkyUtils,
- adminDataExplorerWeb,
- adminDataExplorerPlayServer
+ slinkyUtils
)
.settings(
name := "wiringbits-webapp-utils",
From cbf052b346db4c2b5e6607c40a0f55547a27a7ce Mon Sep 17 00:00:00 2001
From: Sebastian Arellanes <80025691+KapStorm@users.noreply.github.com>
Date: Tue, 29 Aug 2023 22:34:16 -0700
Subject: [PATCH 2/3] Scala3 and mui5 updates (#210)
* Remove admin projects
* Update to scala3 and add st-material-ui library
* Migrate to mui5
---
.scalafmt.conf | 2 +-
build.sbt | 127 +--
.../webapp/utils/slinkyUtils/Utils.scala | 8 +
.../components/core/AlertDialog.scala | 11 +-
.../components/core/AsyncComponent.scala | 37 +-
.../components/core/ConfirmDialog.scala | 12 +-
.../components/core/ErrorBoundaryInfo.scala | 83 +-
.../components/core/ErrorLabel.scala | 39 +-
.../components/core/InfoCard.scala | 63 +-
.../core/widgets/CircularLoader.scala | 28 +-
.../components/core/widgets/Container.scala | 73 +-
.../core/widgets/NavLinkButton.scala | 49 +-
.../components/core/widgets/Scaffold.scala | 66 +-
.../components/core/widgets/Subtitle.scala | 9 +-
.../components/core/widgets/Title.scala | 9 +-
.../slinkyUtils/core/MediaQueryHooks.scala | 18 +-
.../utils/slinkyUtils/core/StyleBuilder.scala | 48 -
.../facades/reactrouterdom/NavLink.scala | 10 +-
.../slinkyUtils/forms/StatefulFormData.scala | 2 +-
slinky-utils/yarn.lock | 988 ++++++++++--------
20 files changed, 799 insertions(+), 883 deletions(-)
create mode 100644 slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/Utils.scala
delete mode 100644 slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/StyleBuilder.scala
diff --git a/.scalafmt.conf b/.scalafmt.conf
index d2a38a2..2f05334 100644
--- a/.scalafmt.conf
+++ b/.scalafmt.conf
@@ -3,7 +3,7 @@ project.git = true
project.excludeFilters = [
]
-runner.dialect=scala213
+runner.dialect=scala3
maxColumn = 120
assumeStandardLibraryStripMargin = false
diff --git a/build.sbt b/build.sbt
index 9e759f7..8a9dcdf 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,6 +1,7 @@
ThisBuild / versionScheme := Some("early-semver")
// For all Sonatype accounts created on or after February 2021
ThisBuild / sonatypeCredentialHost := "s01.oss.sonatype.org"
+ThisBuild / scalaVersion := "3.3.0"
inThisBuild(
List(
@@ -22,6 +23,7 @@ inThisBuild(
resolvers += Resolver.sonatypeRepo("releases")
val playJson = "2.10.0-RC5"
+val stMaterialUi = "5.11.16"
// Used only by the lib projects
lazy val baseLibSettings: Project => Project = _.settings(
@@ -30,24 +32,10 @@ lazy val baseLibSettings: Project => Project = _.settings(
"-encoding",
"UTF-8",
"-feature",
- "-language:implicitConversions"
- // disabled during the migration
- // "-Xfatal-warnings"
- ) ++
- (CrossVersion.partialVersion(scalaVersion.value) match {
- case Some((3, _)) =>
- Seq(
- "-unchecked",
- "-source:3.0-migration"
- )
- case _ =>
- Seq(
- "-deprecation",
- "-Xfatal-warnings",
- "-Wunused:imports,privates,locals",
- "-Wvalue-discard"
- )
- })
+ "-language:implicitConversions",
+ "-unchecked",
+ "-source:3.0-migration"
+ )
},
libraryDependencies ++= Seq(
"org.scalatest" %%% "scalatest" % "3.2.15" % Test
@@ -63,76 +51,23 @@ lazy val baseWebSettings: Project => Project =
"-encoding",
"UTF-8",
"-feature",
- "-language:implicitConversions"
- // disabled during the migration
- // "-Xfatal-warnings"
- ) ++
- (CrossVersion.partialVersion(scalaVersion.value) match {
- case Some((3, _)) =>
- Seq(
- "-unchecked",
- "-source:3.0-migration"
- )
- case _ =>
- Seq(
- "-deprecation",
- "-Xfatal-warnings",
- "-Wunused:imports,privates,locals",
- "-Wvalue-discard",
- "-Ymacro-annotations"
- )
- })
+ "-language:implicitConversions",
+ "-unchecked",
+ "-source:3.0-migration"
+ )
},
libraryDependencies ++= Seq(
"io.github.cquiroz" %%% "scala-java-time" % "2.3.0",
"org.scala-js" %%% "scala-js-macrotask-executor" % "1.1.1",
- "com.alexitc" %%% "sjs-material-ui-facade" % "0.2.0"
+ "com.olvind.st-material-ui" %%% "st-material-ui-icons-slinky" % stMaterialUi
)
)
-lazy val scalablytypedFacades = (project in file("scalablytyped-facades"))
- .configure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin, ScalablyTypedConverterGenSourcePlugin))
- .settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8", "3.2.2"),
- name := "scalablytyped-facades",
- useYarn := true,
- Test / requireJsDomEnv := true,
- stTypescriptVersion := "3.9.3",
- stOutputPackage := "net.wiringbits.facades",
- // material-ui is provided by a pre-packaged library
- stIgnore ++= List(
- "@material-ui/core",
- "@material-ui/styles",
- "@material-ui/icons",
- "react-router",
- "react-router-dom"
- ),
- Compile / npmDependencies ++= Seq(
- "@material-ui/core" -> "3.9.4", // note: version 4 is not supported yet
- "@material-ui/styles" -> "3.0.0-alpha.10", // note: version 4 is not supported yet
- "@material-ui/icons" -> "3.0.2",
- "@types/classnames" -> "2.2.10",
- "react-router" -> "5.1.2",
- "react-router-dom" -> "5.1.2"
- ),
- stFlavour := Flavour.Slinky,
- stReactEnableTreeShaking := Selection.All,
- stUseScalaJsDom := true,
- stMinimize := Selection.AllExcept("@types/classnames"),
- // docs are huge and unnecessary
- Compile / doc / sources := Nil,
- // disabled because it somehow triggers many warnings
- scalaJSLinkerConfig ~= (_.withSourceMap(false))
- )
-
/** The common stuff for the server/client modules
*/
lazy val webappCommon = (crossProject(JSPlatform, JVMPlatform) in file("webapp-common"))
.configure(baseLibSettings)
.settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8", "3.2.2"),
name := "webapp-common"
)
.jsConfigure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin))
@@ -156,18 +91,46 @@ lazy val webappCommon = (crossProject(JSPlatform, JVMPlatform) in file("webapp-c
*/
lazy val slinkyUtils = (project in file("slinky-utils"))
.configure(baseLibSettings, baseWebSettings)
- .configure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin))
- .dependsOn(webappCommon.js, scalablytypedFacades)
+ .configure(_.enablePlugins(ScalaJSPlugin, ScalaJSBundlerPlugin, ScalablyTypedConverterPlugin))
+ .dependsOn(webappCommon.js)
.settings(
- scalaVersion := "2.13.8",
- crossScalaVersions := Seq("2.13.8", "3.2.2"),
name := "slinky-utils",
- Test / fork := false // sjs needs this to run tests
+ Test / fork := false, // sjs needs this to run tests
+ stTypescriptVersion := "3.9.3",
+ useYarn := true,
+ stFlavour := Flavour.Slinky,
+ Compile / stMinimize := Selection.All,
+ stIgnore ++= List(
+ "react-proxy",
+ "@mui/material",
+ "@mui/icons-material",
+ "@mui/joy",
+ "@emotion/react",
+ "@emotion/styled",
+ "react-router",
+ "react-router-dom"
+ ),
+ Compile / npmDependencies ++= Seq(
+ "react" -> "18.2.0",
+ "react-dom" -> "18.2.0",
+ "csstype" -> "2.6.11",
+ "react-proxy" -> "1.1.8",
+ "@mui/material" -> "5.11.16",
+ "@mui/icons-material" -> "5.11.16",
+ "@mui/joy" -> "5.0.0-alpha.74",
+ "@emotion/react" -> "11.10.6",
+ "@emotion/styled" -> "11.10.6",
+ "react-router" -> "5.1.2",
+ "react-router-dom" -> "5.1.2"
+ ),
+ Compile / npmDevDependencies ++= Seq(
+ "@types/react" -> "18.0.33",
+ "@types/react-dom" -> "18.0.11",
+ )
)
lazy val root = (project in file("."))
.aggregate(
- scalablytypedFacades,
webappCommon.jvm,
webappCommon.js,
slinkyUtils
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/Utils.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/Utils.scala
new file mode 100644
index 0000000..d649b62
--- /dev/null
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/Utils.scala
@@ -0,0 +1,8 @@
+package net.wiringbits.webapp.utils.slinkyUtils
+
+import com.olvind.mui.muiMaterial.stylesCreateThemeMod.Theme
+import com.olvind.mui.muiSystem.styleFunctionSxStyleFunctionSxMod.SystemCssProperties
+
+object Utils {
+ type CSSPropertiesUtils = SystemCssProperties[Theme]
+}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AlertDialog.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AlertDialog.scala
index 602e2a0..9a7a1f0 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AlertDialog.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AlertDialog.scala
@@ -1,6 +1,6 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.materialUiCore.{components => mui, materialUiCoreStrings => muiStrings}
+import com.olvind.mui.muiMaterial.components as mui
import slinky.core.{FunctionalComponent, KeyAddingStage}
object AlertDialog {
@@ -19,14 +19,13 @@ object AlertDialog {
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
mui
.Dialog(props.visible)
- .onClose(_ => props.onClose())(
+ .onClose((_, _) => props.onClose())(
mui.DialogTitle(props.title),
mui.DialogContent(mui.DialogContentText(props.message)),
mui.DialogActions(
- mui
- .Button()
- .variant(muiStrings.contained)
- .color(muiStrings.primary)
+ mui.Button.normal
+ .variant("contained")
+ .color("primary")
.onClick(_ => props.onClose())(props.closeText)
)
)
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AsyncComponent.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AsyncComponent.scala
index c3d5a9c..13172dc 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AsyncComponent.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/AsyncComponent.scala
@@ -1,11 +1,10 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.materialUiCore.{components => mui}
-import slinky.core.FunctionalComponent
+import com.olvind.mui.muiMaterial.components as mui
+import org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits.*
import slinky.core.facade.{Hooks, ReactElement}
-import slinky.web.html._
+import slinky.core.{FunctionalComponent, KeyAddingStage}
-import org.scalajs.macrotaskexecutor.MacrotaskExecutor.Implicits._
import scala.concurrent.Future
import scala.util.{Failure, Success}
@@ -55,6 +54,28 @@ object AsyncComponent {
watchedObjects: Iterable[Any] = List("")
)
+ def apply[D](
+ fetch: () => Future[D],
+ render: D => ReactElement,
+ onDataLoaded: D => Unit = (_: D) => (),
+ progressIndicator: () => ReactElement = () => loader,
+ progressIndicatorWhileReloadingData: Boolean = false,
+ retryLabel: String = "Retry",
+ watchedObjects: Iterable[Any] = List("")
+ ): KeyAddingStage = {
+ component[D](
+ Props(
+ fetch,
+ render,
+ onDataLoaded,
+ progressIndicator,
+ progressIndicatorWhileReloadingData,
+ retryLabel,
+ watchedObjects
+ )
+ )
+ }
+
/** @tparam D
* The data to fetch and render
* @return
@@ -95,17 +116,17 @@ object AsyncComponent {
}
private def loader: ReactElement = {
- div(
+ mui.Box(
mui.CircularProgress()
)
}
private def error[D](msg: String, props: Props[D], reload: () => Unit): ReactElement = {
- div(
+ mui.Box(
mui
.Typography()
- .color(com.alexitc.materialui.facade.materialUiCore.mod.PropTypes.Color.secondary)(msg),
- mui.Button.onClick(_ => reload())(props.retryLabel)
+ .color("secondary")(msg),
+ mui.Button.normal.onClick(_ => reload())(props.retryLabel)
)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ConfirmDialog.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ConfirmDialog.scala
index d06aa84..f1015cf 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ConfirmDialog.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ConfirmDialog.scala
@@ -1,7 +1,6 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.materialUiCore.mod.PropTypes
-import com.alexitc.materialui.facade.materialUiCore.{components => mui}
+import com.olvind.mui.muiMaterial.components as mui
import slinky.core.{FunctionalComponent, KeyAddingStage}
object ConfirmDialog {
@@ -41,14 +40,13 @@ object ConfirmDialog {
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
mui
.Dialog(props.visible)
- .onClose(_ => props.onCancel())(
+ .onClose((_, _) => props.onCancel())(
mui.DialogTitle(props.title),
mui.DialogContent(mui.DialogContentText(props.message)),
mui.DialogActions(
- mui.Button().color(PropTypes.Color.secondary).onClick(_ => props.onCancel())(props.cancelText),
- mui
- .Button()
- .color(PropTypes.Color.primary)
+ mui.Button.normal.color("secondary").onClick(_ => props.onCancel())(props.cancelText),
+ mui.Button.normal
+ .color("primary")
.onClick(_ => props.onConfirm())(props.confirmText)
)
)
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorBoundaryInfo.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorBoundaryInfo.scala
index 785d789..cd220b8 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorBoundaryInfo.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorBoundaryInfo.scala
@@ -1,19 +1,12 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.csstype.mod.FlexDirectionProperty
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiIcons.{components => muiIcons}
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
-import org.scalablytyped.runtime.StringDictionary
+import com.olvind.mui.csstype.mod.DataType.{ContentPosition, DisplayInside, SelfPosition}
+import com.olvind.mui.csstype.mod.Property.FlexDirection
+import com.olvind.mui.muiIconsMaterial.components as muiIcons
+import com.olvind.mui.muiMaterial.components as mui
+import com.olvind.mui.muiMaterial.stylesCreateTypographyMod.Variant
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import slinky.core.{FunctionalComponent, KeyAddingStage}
-import slinky.web.html.{className, div, h1}
object ErrorBoundaryInfo {
case class Props(error: scala.scalajs.js.Error)
@@ -22,42 +15,44 @@ object ErrorBoundaryInfo {
component(Props(error))
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "errorBoundaryInfo" -> CSSProperties()
- .setFlex("auto")
- .setDisplay("flex")
- .setFlexDirection(FlexDirectionProperty.column)
- .setAlignItems("center")
- .setJustifyContent("center"),
- "content" -> CSSProperties()
- .setDisplay("flex")
- .setFlexDirection(FlexDirectionProperty.column),
- "icon" -> CSSProperties()
- .setDisplay("flex")
- .setJustifyContent("center")
- .set(
- "& svg ",
- CSSProperties()
- .setFontSize("4em")
- )
- )
- makeStyles(stylesCallback, WithStylesOptions())
+ private val errorBoundaryInfoCss = new CSSPropertiesUtils {
+ flex = "auto"
+ display = DisplayInside.flex
+ flexDirection = FlexDirection.column
+ alignItems = SelfPosition.center
+ justifyContent = ContentPosition.center
+ alignItems = ContentPosition.center
+ justifyContent = ContentPosition.center
}
+ private val contentCss = new CSSPropertiesUtils {
+ display = DisplayInside.flex
+ flexDirection = FlexDirection.column
+ }
+
+ private val iconCss = new CSSPropertiesUtils {
+ display = DisplayInside.flex
+ justifyContent = ContentPosition.center
+ }.set(
+ "& svg",
+ new CSSPropertiesUtils {
+ fontSize = "4em"
+ }
+ )
+
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
val e = props.error
- div(
- className := classes("errorBoundaryInfo"),
- div(
- className := classes("content"),
- div(className := classes("icon"), muiIcons.Warning()),
- h1("You hit an unexpected error"),
- div(e.toString)
+ mui
+ .Box(
+ mui
+ .Box(
+ mui.Box(muiIcons.Warning()).sx(iconCss),
+ mui.Typography("You hit an unexpected error").variant(Variant.h1),
+ mui.Box(e.toString)
+ )
+ .sx(contentCss)
)
- )
+ .sx(errorBoundaryInfoCss)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorLabel.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorLabel.scala
index 98a1f15..4a441fc 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorLabel.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/ErrorLabel.scala
@@ -1,46 +1,29 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiCore.{components => mui, materialUiCoreStrings => muiStrings}
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
+import com.olvind.mui.muiMaterial.components as mui
+import com.olvind.mui.muiMaterial.stylesCreateTypographyMod.Variant
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import org.scalablytyped.runtime.StringDictionary
import slinky.core.facade.Fragment
import slinky.core.{FunctionalComponent, KeyAddingStage}
object ErrorLabel {
-
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "errorLabel" -> CSSProperties()
- .setColor("#f44336")
- )
-
- makeStyles(stylesCallback, WithStylesOptions())
- }
case class Props(text: String)
def apply(text: String): KeyAddingStage = {
component(Props(text))
}
- val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
+ private val errorLabelCss = new CSSPropertiesUtils {
+ color = "#f44336"
+ }
+ val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
if (props.text.nonEmpty) {
- Fragment(
- mui
- .Typography(props.text)
- .className(classes("errorLabel"))
- .variant(muiStrings.body2)
- )
+ mui
+ .Typography(props.text)
+ .variant(Variant.body2)
+ .sx(errorLabelCss)
} else {
Fragment()
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/InfoCard.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/InfoCard.scala
index ae7813b..e54853b 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/InfoCard.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/InfoCard.scala
@@ -1,17 +1,9 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core
-import com.alexitc.materialui.facade.csstype.mod.FlexDirectionProperty
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiCore.{components => mui}
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
-import org.scalablytyped.runtime.StringDictionary
+import com.olvind.mui.csstype.mod.DataType.{ContentPosition, DisplayInside}
+import com.olvind.mui.csstype.mod.Property.{FlexDirection, OverflowInline}
+import com.olvind.mui.muiMaterial.components as mui
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import slinky.core.{FunctionalComponent, KeyAddingStage, TagMod}
import slinky.web.html.div
@@ -22,41 +14,32 @@ object InfoCard {
component(Props(message = message, icon = icon, child = child))
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- /* If you don't need direct access to theme, this could be `StyleRules[Props, String]` */
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "infoCard" -> CSSProperties()
- .setMinHeight(200)
- .setDisplay("flex")
- .setFlexDirection(FlexDirectionProperty.column)
- .setAlignItems("center")
- .setJustifyContent("center")
- .setFontSize("1.5em")
- .setBorderRadius(8)
- .setPadding(16)
- .setOverflow("hidden")
- .setColor("#616161")
- .set(
- "& svg",
- CSSProperties()
- .setFontSize("2em")
- .setMarginBottom(16)
- )
- )
-
- makeStyles(stylesCallback, WithStylesOptions())
- }
+ private val infoCardCss = new CSSPropertiesUtils {
+ minHeight = 200
+ display = DisplayInside.flex
+ flexDirection = FlexDirection.column
+ alignItems = ContentPosition.center
+ justifyContent = ContentPosition.center
+ fontSize = "1.5em"
+ borderRadius = 8
+ padding = 16
+ overflow = OverflowInline.hidden
+ color = "#616161"
+ }.set(
+ "& svg",
+ new CSSPropertiesUtils {
+ fontSize = "2em"
+ marginBottom = 16
+ }
+ )
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
-
mui.Paper
- .className(classes("infoCard"))
.elevation(0)(
props.icon,
props.message,
props.child.getOrElse("")
)
+ .sx(infoCardCss)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/CircularLoader.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/CircularLoader.scala
index 7402e03..c9f2f24 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/CircularLoader.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/CircularLoader.scala
@@ -1,16 +1,7 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiCore.{components => mui}
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
-import org.scalablytyped.runtime.StringDictionary
+import com.olvind.mui.muiMaterial.components as mui
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import slinky.core.{FunctionalComponent, KeyAddingStage}
object CircularLoader {
@@ -20,20 +11,13 @@ object CircularLoader {
component(Props(size = size))
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "circularLoader" -> CSSProperties()
- .setDisplay("flex")
- )
- makeStyles(stylesCallback, WithStylesOptions())
+ private val circularLoaderCss = new CSSPropertiesUtils {
+ display = "flex"
}
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
- mui
- .CircularProgress()
- .className(classes("circularLoader"))
+ mui.CircularProgress
+ .sx(circularLoaderCss)
.size(props.size)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Container.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Container.scala
index bcb8143..653ced4 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Container.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Container.scala
@@ -1,19 +1,11 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.csstype.mod.BoxSizingProperty
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
-import org.scalablytyped.runtime.StringDictionary
+import com.olvind.mui.csstype.mod.DataType.DisplayInside
+import com.olvind.mui.csstype.mod.Property.{BoxSizing, FlexDirection}
+import com.olvind.mui.muiMaterial.components as mui
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import slinky.core.facade.ReactElement
import slinky.core.{FunctionalComponent, KeyAddingStage}
-import slinky.web.html.{className, div, style}
import scala.scalajs.js
@@ -60,13 +52,6 @@ object Container {
)
}
- sealed trait FlexDirection extends Product with Serializable
-
- object FlexDirection {
- case object column extends FlexDirection
- case object row extends FlexDirection
- }
-
sealed trait Alignment extends Product with Serializable
object Alignment extends Enumeration {
@@ -92,39 +77,29 @@ object Container {
def vertical(value: Int): EdgeInsets = EdgeInsets(value, 0, value, 0)
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "container" -> CSSProperties()
- .setDisplay("flex")
- .setBoxSizing(BoxSizingProperty.`border-box`)
- .setWidth("auto")
- )
- makeStyles(stylesCallback, WithStylesOptions())
- }
-
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
-
- val borderRadius = props.borderRadius.getOrElse("0px")
- val minWidth = props.minWidth.getOrElse("0")
- val maxWidth = props.maxWidth.getOrElse("auto")
-
- val flex = props.flex.getOrElse("none")
-
- val containerStyle = js.Dynamic.literal(
- margin = props.margin.value(),
- padding = props.padding.value(),
- borderRadius = borderRadius,
- minWidth = minWidth,
- maxWidth = maxWidth,
- flex = flex.toString,
- flexDirection = props.flexDirection.toString,
- alignItems = parseAlignment(props.alignItems),
+ val borderRadius_ = props.borderRadius.getOrElse("0px")
+ val minWidth_ = props.minWidth.getOrElse("0")
+ val maxWidth_ = props.maxWidth.getOrElse("auto")
+
+ val flex_ = props.flex.map(_.toString).getOrElse("none")
+
+ val containerCss = new CSSPropertiesUtils {
+ display = DisplayInside.flex
+ boxSizing = BoxSizing.`border-box`
+ width = "auto"
+ margin = props.margin.value()
+ padding = props.padding.value()
+ borderRadius = borderRadius_
+ minWidth = minWidth_
+ maxWidth = maxWidth_
+ flex = flex_
+ flexDirection = props.flexDirection
+ alignItems = parseAlignment(props.alignItems)
justifyContent = parseAlignment(props.justifyContent)
- )
+ }
- div(className := classes("container"), style := containerStyle)(props.child)
+ mui.Box(props.child).sx(containerCss)
}
private def parseAlignment(alignment: Alignment): String = {
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/NavLinkButton.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/NavLinkButton.scala
index 6290fba..c7b9be6 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/NavLinkButton.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/NavLinkButton.scala
@@ -1,21 +1,14 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.csstype.mod.TextAlignProperty
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiCore.mod.PropTypes.Color
-import com.alexitc.materialui.facade.materialUiCore.{components => mui, materialUiCoreStrings => muiStrings}
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
+import com.olvind.mui.csstype.mod.Property.{TextAlign, TextDecorationStyle}
+import com.olvind.mui.muiMaterial.components as mui
+import com.olvind.mui.muiMaterial.stylesCreateTypographyMod.Variant
+import com.olvind.mui.react.mod.CSSProperties
import net.wiringbits.webapp.utils.slinkyUtils.facades.reactrouterdom.NavLink
-import org.scalablytyped.runtime.StringDictionary
import slinky.core.{FunctionalComponent, KeyAddingStage}
-import slinky.web.html.{className, onClick}
+import slinky.web.html.{onClick, style}
+
+import scala.scalajs.js
object NavLinkButton {
case class Props(path: String, text: String, onClick: () => Unit)
@@ -24,28 +17,22 @@ object NavLinkButton {
component(Props(path = path, text = text, onClick = onClick))
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "navLinkButton" -> CSSProperties()
- .setMargin("0 8px")
- .setPadding("2px 4px")
- .setColor("inherit")
- .setTextAlign(TextAlignProperty.inherit)
- .setTextDecoration("none"),
- "navLinkButtonActive" -> CSSProperties()
- )
- makeStyles(stylesCallback, WithStylesOptions())
+ private val navLinkButtonCss = new CSSProperties {
+ margin = "0 8px"
+ padding = "2px 4px"
+ color = "inherit"
+ textAlign = TextAlign.inherit
+ textDecoration = TextDecorationStyle.inherit
}
- val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
+ private val navLinkButtonActiveCss = CSSProperties()
- val text = mui.Typography()(props.text).variant(muiStrings.h6).color(Color.inherit)
+ val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
+ val text = mui.Typography()(props.text).variant(Variant.h6).color("inherit")
- NavLink(className := classes("navLinkButton"), onClick := (_ => props.onClick()))(
+ NavLink(onClick := (_ => props.onClick()), style := navLinkButtonCss)(
to = props.path,
- activeClassName = s"${classes("navLinkButton")} ${classes("navLinkButtonActive")}",
+ activeStyle = navLinkButtonActiveCss,
exact = true
)(text)
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Scaffold.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Scaffold.scala
index 87ba1b7..701c67f 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Scaffold.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Scaffold.scala
@@ -1,19 +1,10 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.csstype.mod.FlexDirectionProperty
-import com.alexitc.materialui.facade.materialUiCore.createMuiThemeMod.Theme
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod.{
- CSSProperties,
- StyleRulesCallback,
- Styles,
- WithStylesOptions
-}
-import org.scalablytyped.runtime.StringDictionary
+import com.olvind.mui.csstype.mod.Property.FlexDirection
+import com.olvind.mui.muiMaterial.components as mui
+import net.wiringbits.webapp.utils.slinkyUtils.Utils.CSSPropertiesUtils
import slinky.core.facade.{Fragment, ReactElement}
import slinky.core.{FunctionalComponent, KeyAddingStage}
-import slinky.web.html.{className, div}
object Scaffold {
case class Props(appbar: Option[ReactElement] = None, body: ReactElement, footer: Option[ReactElement] = None)
@@ -26,42 +17,37 @@ object Scaffold {
component(Props(appbar = appbar, body = body, footer = footer))
}
- private lazy val useStyles: StylesHook[Styles[Theme, Unit, String]] = {
- val stylesCallback: StyleRulesCallback[Theme, Unit, String] = theme =>
- StringDictionary(
- "scaffold" -> CSSProperties()
- .setFlex("auto")
- .setDisplay("flex")
- .setFlexDirection(FlexDirectionProperty.column),
- "scaffoldAppbar" -> CSSProperties(),
- "scaffoldBody" -> CSSProperties()
- .setMinHeight("100vh")
- .setFlex("auto")
- .setDisplay("flex")
- .setFlexDirection(FlexDirectionProperty.column)
- .setPadding("1em"),
- "scaffoldFooter" -> CSSProperties()
- )
- makeStyles(stylesCallback, WithStylesOptions())
+ private val scaffoldCss = new CSSPropertiesUtils {
+ flex = "auto"
+ display = "flex"
+ flexDirection = FlexDirection.column
}
- val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val classes = useStyles(())
+ private val scaffoldBodyCss = new CSSPropertiesUtils {
+ minHeight = "100vh"
+ flex = "auto"
+ display = "flex"
+ flexDirection = FlexDirection.column
+ padding = "1em"
+ }
- val appbar = props.appbar match {
- case Some(e) => Fragment(div(className := classes("scaffoldAppbar"))(e))
+ val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
+ val appbar: ReactElement = props.appbar match {
+ case Some(e) => mui.Box(e)
case None => Fragment()
}
- val footer = props.footer match {
- case Some(e) => Fragment(div(className := classes("scaffoldFooter"))(e))
+ val footer: ReactElement = props.footer match {
+ case Some(e) => mui.Box(e)
case None => Fragment()
}
- div(className := classes("scaffold"))(
- appbar,
- div(className := classes("scaffoldBody"))(props.body),
- footer
- )
+ mui
+ .Box(
+ appbar,
+ mui.Box(props.body).sx(scaffoldBodyCss),
+ footer
+ )
+ .sx(scaffoldCss)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Subtitle.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Subtitle.scala
index 49c75fc..ee079ec 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Subtitle.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Subtitle.scala
@@ -1,7 +1,8 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.materialUiCore.mod.PropTypes.Color
-import com.alexitc.materialui.facade.materialUiCore.{typographyTypographyMod, components => mui}
+import com.olvind.mui.csstype.mod.Property.Color
+import com.olvind.mui.muiMaterial.components as mui
+import com.olvind.mui.muiMaterial.stylesCreateTypographyMod.Variant
import slinky.core.{FunctionalComponent, KeyAddingStage}
object Subtitle {
@@ -12,11 +13,11 @@ object Subtitle {
}
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val color = props.color.getOrElse(Color.inherit)
+ val color = props.color.getOrElse("inherit")
mui
.Typography()
.color(color)
- .variant(typographyTypographyMod.Style.h6)(props.text)
+ .variant(Variant.h6)(props.text)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Title.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Title.scala
index 7d3d7b3..1e944f5 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Title.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/components/core/widgets/Title.scala
@@ -1,7 +1,8 @@
package net.wiringbits.webapp.utils.slinkyUtils.components.core.widgets
-import com.alexitc.materialui.facade.materialUiCore.mod.PropTypes.Color
-import com.alexitc.materialui.facade.materialUiCore.{typographyTypographyMod, components => mui}
+import com.olvind.mui.csstype.mod.DataType.Color
+import com.olvind.mui.muiMaterial.components as mui
+import com.olvind.mui.muiMaterial.stylesCreateTypographyMod.Variant
import slinky.core.{FunctionalComponent, KeyAddingStage}
object Title {
@@ -12,11 +13,11 @@ object Title {
}
val component: FunctionalComponent[Props] = FunctionalComponent[Props] { props =>
- val color = props.color.getOrElse(Color.inherit)
+ val color = props.color.getOrElse("inherit")
mui
.Typography()
.color(color)
- .variant(typographyTypographyMod.Style.h4)(props.text)
+ .variant(Variant.h4)(props.text)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/MediaQueryHooks.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/MediaQueryHooks.scala
index 47fc3d3..00c412d 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/MediaQueryHooks.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/MediaQueryHooks.scala
@@ -1,23 +1,23 @@
package net.wiringbits.webapp.utils.slinkyUtils.core
-import com.alexitc.materialui.facade.materialUiCore.useMediaQueryMod.unstableUseMediaQuery
+import com.olvind.mui.muiMaterial.useMediaQueryMod
object MediaQueryHooks {
- def useIsLaptop() = {
- unstableUseMediaQuery("(min-width: 769px)")
+ def useIsLaptop(): Boolean = {
+ useMediaQueryMod.default("(min-width: 769px)")
}
- def useIsTablet() = {
- unstableUseMediaQuery("(min-width: 426px) and (max-width: 768px)")
+ def useIsTablet(): Boolean = {
+ useMediaQueryMod.default("(min-width: 426px) and (max-width: 768px)")
}
- def useIsMobile() = {
- unstableUseMediaQuery("(max-width: 425px)")
+ def useIsMobile(): Boolean = {
+ useMediaQueryMod.default("(max-width: 425px)")
}
- def useIsMobileOrTablet() = {
- unstableUseMediaQuery("(max-width: 768px)")
+ def useIsMobileOrTablet(): Boolean = {
+ useMediaQueryMod.default("(max-width: 768px)")
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/StyleBuilder.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/StyleBuilder.scala
deleted file mode 100644
index 4bbe7e5..0000000
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/core/StyleBuilder.scala
+++ /dev/null
@@ -1,48 +0,0 @@
-package net.wiringbits.webapp.utils.slinkyUtils.core
-
-import com.alexitc.materialui.facade.materialUiStyles.makeStylesMod.StylesHook
-import com.alexitc.materialui.facade.materialUiStyles.mod.makeStyles
-import com.alexitc.materialui.facade.materialUiStyles.withStylesMod._
-import org.scalablytyped.runtime.StringDictionary
-
-import scala.scalajs.js
-
-/* This is an example of a scala facade on top of the generated code.
- * Note that you can do all this without casting, but type inference is not perfect.
- */
-object StyleBuilder {
-
- @inline def apply[Theme, Props <: js.Object]: StyleBuilder[Theme, Props] =
- new StyleBuilder[Theme, Props](_ => StringDictionary.empty)
-}
-
-@inline final class StyleBuilder[T, P] private (val f: StyleRulesCallback[T, P, String]) extends AnyVal {
-
- @inline def add(key: String, value: CSSProperties): StyleBuilder[T, P] =
- new StyleBuilder[T, P]({ theme =>
- val ret = f(theme)
- ret.update(key, value)
- ret
- })
-
- @inline def add(key: String, withTheme: T => CSSProperties): StyleBuilder[T, P] =
- new StyleBuilder[T, P]({ theme =>
- val ret = this.f(theme)
- ret.update(key, withTheme(theme))
- ret
- })
-
- @inline def add(key: String, withThemeProps: (T, P) => CSSProperties): StyleBuilder[T, P] =
- new StyleBuilder[T, P]({ theme =>
- val ret: StyleRules[P, String] = this.f(theme)
- val x: js.Function1[P, CSSProperties] = (props: P) => withThemeProps(theme, props)
- ret.update(key, x)
- ret
- })
-
- @inline def hook: StylesHook[Styles[T, P, String]] =
- makeStyles[Styles[T, P, String]](f)
-
- @inline def hook(opts: WithStylesOptions): StylesHook[Styles[T, P, String]] =
- makeStyles[Styles[T, P, String]](f, opts)
-}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/facades/reactrouterdom/NavLink.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/facades/reactrouterdom/NavLink.scala
index 1f527eb..477f8e4 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/facades/reactrouterdom/NavLink.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/facades/reactrouterdom/NavLink.scala
@@ -1,12 +1,12 @@
package net.wiringbits.webapp.utils.slinkyUtils.facades.reactrouterdom
+import com.olvind.mui.react.mod.CSSProperties
import slinky.core.facade.ReactElement
import slinky.core.{ExternalComponentWithAttributes, TagMod}
import slinky.web.html.a
import scala.scalajs.js
import scala.scalajs.js.annotation.JSImport
-import scala.scalajs.js.|
@JSImport("react-router-dom", "NavLink")
@js.native
@@ -15,17 +15,17 @@ private object NavLinkComponent extends js.Object
object NavLink extends ExternalComponentWithAttributes[a.tag.type] {
case class Props(
to: String,
- activeClassName: js.UndefOr[String] = js.undefined,
- exact: Boolean = false,
+ activeStyle: js.UndefOr[CSSProperties] = js.undefined,
+ exact: Boolean,
children: ReactElement
)
override val component: String | js.Object = NavLinkComponent
def apply(mods: TagMod[a.tag.type]*)(
to: String,
- activeClassName: js.UndefOr[String] = js.undefined,
+ activeStyle: js.UndefOr[CSSProperties] = js.undefined,
exact: Boolean = false
)(children: ReactElement): ReactElement = {
- apply(Props(to = to, activeClassName = activeClassName, exact = exact, children = children))(mods: _*)
+ apply(Props(to = to, activeStyle = activeStyle, exact = exact, children = children))(mods: _*)
}
}
diff --git a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/forms/StatefulFormData.scala b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/forms/StatefulFormData.scala
index 52ef1f4..0680c60 100644
--- a/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/forms/StatefulFormData.scala
+++ b/slinky-utils/src/main/scala/net/wiringbits/webapp/utils/slinkyUtils/forms/StatefulFormData.scala
@@ -1,7 +1,7 @@
package net.wiringbits.webapp.utils.slinkyUtils.forms
case class StatefulFormData[D <: FormData[_]](data: D, state: StatefulFormData.State = StatefulFormData.State.Filling) {
- import StatefulFormData._
+ import StatefulFormData.*
def firstValidationError: Option[String] = {
state.submissionError.orElse(data.formValidationErrors.headOption)
diff --git a/slinky-utils/yarn.lock b/slinky-utils/yarn.lock
index 199caf1..362be2b 100644
--- a/slinky-utils/yarn.lock
+++ b/slinky-utils/yarn.lock
@@ -2,104 +2,283 @@
# yarn lockfile v1
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.8.3":
+"@babel/code-frame@^7.0.0":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
+ integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+ dependencies:
+ "@babel/highlight" "^7.22.13"
+ chalk "^2.4.2"
+
+"@babel/helper-module-imports@^7.16.7":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c"
+ integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
+ integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+
+"@babel/helper-validator-identifier@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+ integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
+"@babel/highlight@^7.22.13":
+ version "7.22.13"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16"
+ integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.5"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1":
version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
dependencies:
regenerator-runtime "^0.13.4"
-"@emotion/hash@^0.7.1":
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831"
- integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==
-
-"@material-ui/core@3.9.4":
- version "3.9.4"
- resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.4.tgz#5297fd4ad9e739a87da4a6d34fc4af5396886e13"
- integrity sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw==
- dependencies:
- "@babel/runtime" "^7.2.0"
- "@material-ui/system" "^3.0.0-alpha.0"
- "@material-ui/utils" "^3.0.0-alpha.2"
- "@types/jss" "^9.5.6"
- "@types/react-transition-group" "^2.0.8"
- brcast "^3.0.1"
- classnames "^2.2.5"
- csstype "^2.5.2"
- debounce "^1.1.0"
- deepmerge "^3.0.0"
- dom-helpers "^3.2.1"
- hoist-non-react-statics "^3.2.1"
- is-plain-object "^2.0.4"
- jss "^9.8.7"
- jss-camel-case "^6.0.0"
- jss-default-unit "^8.0.2"
- jss-global "^3.0.0"
- jss-nested "^6.0.1"
- jss-props-sort "^6.0.0"
- jss-vendor-prefixer "^7.0.0"
- normalize-scroll-left "^0.1.2"
- popper.js "^1.14.1"
- prop-types "^15.6.0"
- react-event-listener "^0.6.2"
- react-transition-group "^2.2.1"
- recompose "0.28.0 - 0.30.0"
- warning "^4.0.1"
-
-"@material-ui/icons@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10"
- integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==
- dependencies:
- "@babel/runtime" "^7.2.0"
- recompose "0.28.0 - 0.30.0"
-
-"@material-ui/styles@3.0.0-alpha.10":
- version "3.0.0-alpha.10"
- resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-3.0.0-alpha.10.tgz#4c28a6d6dacb1fb71aff4642f92b63232a3f298d"
- integrity sha512-qJ5eiupBPRCNlMCDZ2G5h8auBtBtm8uT/oCUAJ/FqhO5oC7POLmmvDN1Cq1cgAmqQnaL6uN5mAM1Gc90GpKr9A==
- dependencies:
- "@babel/runtime" "^7.2.0"
- "@emotion/hash" "^0.7.1"
- "@material-ui/utils" "^3.0.0-alpha.2"
- classnames "^2.2.5"
- deepmerge "^3.0.0"
- hoist-non-react-statics "^3.2.1"
- jss "^10.0.0-alpha.7"
- jss-plugin-camel-case "^10.0.0-alpha.7"
- jss-plugin-default-unit "^10.0.0-alpha.7"
- jss-plugin-global "^10.0.0-alpha.7"
- jss-plugin-nested "^10.0.0-alpha.7"
- jss-plugin-props-sort "^10.0.0-alpha.7"
- jss-plugin-rule-value-function "^10.0.0-alpha.7"
- jss-plugin-vendor-prefixer "^10.0.0-alpha.7"
- prop-types "^15.6.0"
- warning "^4.0.1"
-
-"@material-ui/system@^3.0.0-alpha.0":
- version "3.0.0-alpha.2"
- resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-3.0.0-alpha.2.tgz#096e80c8bb0f70aea435b9e38ea7749ee77b4e46"
- integrity sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==
- dependencies:
- "@babel/runtime" "^7.2.0"
- deepmerge "^3.0.0"
- prop-types "^15.6.0"
- warning "^4.0.1"
-
-"@material-ui/utils@^3.0.0-alpha.2":
- version "3.0.0-alpha.3"
- resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1"
- integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==
- dependencies:
- "@babel/runtime" "^7.2.0"
- prop-types "^15.6.0"
- react-is "^16.6.3"
-
-"@types/classnames@2.2.10":
- version "2.2.10"
- resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999"
- integrity sha512-1UzDldn9GfYYEsWWnn/P4wkTlkZDH7lDb0wBMGbtIQc9zXEQq7FlKBdZUn6OBqD8sKZZ2RQO2mAjGpXiDGoRmQ==
+"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
+ version "7.22.11"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4"
+ integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/types@^7.22.5":
+ version "7.22.11"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.11.tgz#0e65a6a1d4d9cbaa892b2213f6159485fe632ea2"
+ integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==
+ dependencies:
+ "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.5"
+ to-fast-properties "^2.0.0"
+
+"@emotion/babel-plugin@^11.10.6":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
+ integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==
+ dependencies:
+ "@babel/helper-module-imports" "^7.16.7"
+ "@babel/runtime" "^7.18.3"
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/serialize" "^1.1.2"
+ babel-plugin-macros "^3.1.0"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^4.0.0"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+ stylis "4.2.0"
+
+"@emotion/cache@^11.10.5", "@emotion/cache@^11.11.0":
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff"
+ integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==
+ dependencies:
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/sheet" "^1.2.2"
+ "@emotion/utils" "^1.2.1"
+ "@emotion/weak-memoize" "^0.3.1"
+ stylis "4.2.0"
+
+"@emotion/hash@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43"
+ integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==
+
+"@emotion/is-prop-valid@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc"
+ integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
+ dependencies:
+ "@emotion/memoize" "^0.8.1"
+
+"@emotion/memoize@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17"
+ integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
+
+"@emotion/react@11.10.6":
+ version "11.10.6"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.6.tgz#dbe5e650ab0f3b1d2e592e6ab1e006e75fd9ac11"
+ integrity sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@emotion/babel-plugin" "^11.10.6"
+ "@emotion/cache" "^11.10.5"
+ "@emotion/serialize" "^1.1.1"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
+ "@emotion/utils" "^1.2.0"
+ "@emotion/weak-memoize" "^0.3.0"
+ hoist-non-react-statics "^3.3.1"
+
+"@emotion/serialize@^1.1.1", "@emotion/serialize@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51"
+ integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==
+ dependencies:
+ "@emotion/hash" "^0.9.1"
+ "@emotion/memoize" "^0.8.1"
+ "@emotion/unitless" "^0.8.1"
+ "@emotion/utils" "^1.2.1"
+ csstype "^3.0.2"
+
+"@emotion/sheet@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec"
+ integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
+
+"@emotion/styled@11.10.6":
+ version "11.10.6"
+ resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.6.tgz#d886afdc51ef4d66c787ebde848f3cc8b117ebba"
+ integrity sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==
+ dependencies:
+ "@babel/runtime" "^7.18.3"
+ "@emotion/babel-plugin" "^11.10.6"
+ "@emotion/is-prop-valid" "^1.2.0"
+ "@emotion/serialize" "^1.1.1"
+ "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
+ "@emotion/utils" "^1.2.0"
+
+"@emotion/unitless@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3"
+ integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
+
+"@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963"
+ integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==
+
+"@emotion/utils@^1.2.0", "@emotion/utils@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4"
+ integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==
+
+"@emotion/weak-memoize@^0.3.0", "@emotion/weak-memoize@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6"
+ integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
+
+"@mui/base@5.0.0-alpha.124":
+ version "5.0.0-alpha.124"
+ resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.124.tgz#164068642e41ba655fd2b9eaf881526909a41201"
+ integrity sha512-I6M+FrjRCybQCr8I8JTu6L2MkUobSQFgNIpOJyDNKL5zq/73LvZIQXvsKumAzthVGvI1PYaarM9vGDrDYbumKA==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ "@emotion/is-prop-valid" "^1.2.0"
+ "@mui/types" "^7.2.3"
+ "@mui/utils" "^5.11.13"
+ "@popperjs/core" "^2.11.7"
+ clsx "^1.2.1"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+
+"@mui/core-downloads-tracker@^5.11.16":
+ version "5.14.7"
+ resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz#95bed2487bf59632125a13b8eb8f4c21e460afec"
+ integrity sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA==
+
+"@mui/icons-material@5.11.16":
+ version "5.11.16"
+ resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.11.16.tgz#417fa773c56672e39d6ccfed9ac55591985f0d38"
+ integrity sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+
+"@mui/joy@5.0.0-alpha.74":
+ version "5.0.0-alpha.74"
+ resolved "https://registry.yarnpkg.com/@mui/joy/-/joy-5.0.0-alpha.74.tgz#dc722067e4895732d85e57eb931a1d9569f7bc99"
+ integrity sha512-qtrkVZ7fz6qL+m2KI/ULwHpMSdagB8xlbMRLtWNSno4KTLNuixlYkk1eGzMrTQVPCBhm69l4gprWa3OEPElcEg==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ "@mui/base" "5.0.0-alpha.124"
+ "@mui/core-downloads-tracker" "^5.11.16"
+ "@mui/system" "^5.11.16"
+ "@mui/types" "^7.2.3"
+ "@mui/utils" "^5.11.13"
+ clsx "^1.2.1"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+
+"@mui/material@5.11.16":
+ version "5.11.16"
+ resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.11.16.tgz#958cb7bcfa71d889c2585516f012ab3363af843c"
+ integrity sha512-++glQqbZ3rMzOWB77yOvqRG+k8+scYTUKVWZpWff+GWsf6L10g9L2wgRhhAS8bDLuxCbXZlPNbSZowXDDw6z6Q==
+ dependencies:
+ "@babel/runtime" "^7.21.0"
+ "@mui/base" "5.0.0-alpha.124"
+ "@mui/core-downloads-tracker" "^5.11.16"
+ "@mui/system" "^5.11.16"
+ "@mui/types" "^7.2.3"
+ "@mui/utils" "^5.11.13"
+ "@types/react-transition-group" "^4.4.5"
+ clsx "^1.2.1"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+ react-transition-group "^4.4.5"
+
+"@mui/private-theming@^5.14.7":
+ version "5.14.7"
+ resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.14.7.tgz#c9fec31e59bf66b12959e724b0e8ec3bb4a3d923"
+ integrity sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ==
+ dependencies:
+ "@babel/runtime" "^7.22.10"
+ "@mui/utils" "^5.14.7"
+ prop-types "^15.8.1"
+
+"@mui/styled-engine@^5.14.7":
+ version "5.14.7"
+ resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.14.7.tgz#aaacec6c87bcc9a180b2da062c613213af10f2e3"
+ integrity sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==
+ dependencies:
+ "@babel/runtime" "^7.22.10"
+ "@emotion/cache" "^11.11.0"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+
+"@mui/system@^5.11.16":
+ version "5.14.7"
+ resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.14.7.tgz#b08e23f9151d38186ab12dd618906abd4d73d203"
+ integrity sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==
+ dependencies:
+ "@babel/runtime" "^7.22.10"
+ "@mui/private-theming" "^5.14.7"
+ "@mui/styled-engine" "^5.14.7"
+ "@mui/types" "^7.2.4"
+ "@mui/utils" "^5.14.7"
+ clsx "^2.0.0"
+ csstype "^3.1.2"
+ prop-types "^15.8.1"
+
+"@mui/types@^7.2.3", "@mui/types@^7.2.4":
+ version "7.2.4"
+ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.4.tgz#b6fade19323b754c5c6de679a38f068fd50b9328"
+ integrity sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==
+
+"@mui/utils@^5.11.13", "@mui/utils@^5.14.7":
+ version "5.14.7"
+ resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.7.tgz#3677bcabe032f1185e151f57d8c1a166df3ae0a1"
+ integrity sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw==
+ dependencies:
+ "@babel/runtime" "^7.22.10"
+ "@types/prop-types" "^15.7.5"
+ "@types/react-is" "^18.2.1"
+ prop-types "^15.8.1"
+ react-is "^18.2.0"
+
+"@popperjs/core@^2.11.7":
+ version "2.11.8"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
+ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@types/glob@^7.1.1":
version "7.2.0"
@@ -109,19 +288,6 @@
"@types/minimatch" "*"
"@types/node" "*"
-"@types/history@*":
- version "4.7.9"
- resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.9.tgz#1cfb6d60ef3822c589f18e70f8b12f9a28ce8724"
- integrity sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==
-
-"@types/jss@^9.5.6":
- version "9.5.8"
- resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b"
- integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==
- dependencies:
- csstype "^2.0.0"
- indefinite-observable "^1.0.1"
-
"@types/minimatch@*":
version "3.0.5"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
@@ -132,40 +298,39 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.10.tgz#2e3ad0a680d96367103d3e670d41c2fed3da61ae"
integrity sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
"@types/prop-types@*":
version "15.7.4"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
-"@types/react-router-dom@5.1.2":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.2.tgz#853f229f1f297513c0be84f7c914a08b778cfdf5"
- integrity sha512-kRx8hoBflE4Dp7uus+j/0uMHR5uGTAvQtc4A3vOTWKS+epe0leCuxEx7HNT7XGUd1lH53/moWM51MV2YUyhzAg==
- dependencies:
- "@types/history" "*"
- "@types/react" "*"
- "@types/react-router" "*"
+"@types/prop-types@^15.7.5":
+ version "15.7.5"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
+ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
-"@types/react-router@*":
- version "5.1.17"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.17.tgz#087091006213b11042f39570e5cd414863693968"
- integrity sha512-RNSXOyb3VyRs/EOGmjBhhGKTbnN6fHWvy5FNLzWfOWOGjgVUKqJZXfpKzLmgoU8h6Hj8mpALj/mbXQASOb92wQ==
+"@types/react-dom@18.0.11":
+ version "18.0.11"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33"
+ integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==
dependencies:
- "@types/history" "*"
"@types/react" "*"
-"@types/react-router@5.1.2":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.2.tgz#41e5e6aa333a7b9a2bfdac753c04e1ca4b3e0d21"
- integrity sha512-euC3SiwDg3NcjFdNmFL8uVuAFTpZJm0WMFUw+4eXMUnxa7M9RGFEG0szt0z+/Zgk4G2k9JBFhaEnY64RBiFmuw==
+"@types/react-is@^18.2.1":
+ version "18.2.1"
+ resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-18.2.1.tgz#61d01c2a6fc089a53520c0b66996d458fdc46863"
+ integrity sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==
dependencies:
- "@types/history" "*"
"@types/react" "*"
-"@types/react-transition-group@^2.0.8":
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.2.tgz#c48cf2a11977c8b4ff539a1c91d259eaa627028d"
- integrity sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==
+"@types/react-transition-group@^4.4.5":
+ version "4.4.6"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e"
+ integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==
dependencies:
"@types/react" "*"
@@ -178,6 +343,15 @@
"@types/scheduler" "*"
csstype "^3.0.2"
+"@types/react@18.0.33":
+ version "18.0.33"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e"
+ integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
"@types/scheduler@*":
version "0.16.2"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
@@ -467,11 +641,6 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
- integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
-
asn1.js@^5.2.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
@@ -512,6 +681,15 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+babel-plugin-macros@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
+ integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
+ dependencies:
+ "@babel/runtime" "^7.12.5"
+ cosmiconfig "^7.0.0"
+ resolve "^1.19.0"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -641,11 +819,6 @@ braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
-brcast@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.2.tgz#55c41a7a077ff4e7ac784c2060e544d4c39ad477"
- integrity sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA==
-
brorand@^1.0.1, brorand@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@@ -795,12 +968,17 @@ call-bind@^1.0.2:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
camelcase@^5.0.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-chalk@^2.4.1:
+chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -809,11 +987,6 @@ chalk@^2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-change-emitter@^0.1.2:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
- integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
-
chokidar@^2.1.6, chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
@@ -876,11 +1049,6 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-classnames@^2.2.5:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
- integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
-
cliui@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -890,6 +1058,16 @@ cliui@^4.0.0:
strip-ansi "^4.0.0"
wrap-ansi "^2.0.0"
+clsx@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
+ integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
+
+clsx@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b"
+ integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==
+
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@@ -999,6 +1177,11 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+convert-source-map@^1.5.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
+ integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@@ -1026,16 +1209,22 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-core-js@^1.0.0:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
- integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+cosmiconfig@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
+ integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
create-ecdh@^4.0.0:
version "4.0.4"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
@@ -1095,41 +1284,26 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
-css-vendor@^0.3.8:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa"
- integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=
- dependencies:
- is-in-browser "^1.0.2"
-
-css-vendor@^2.0.8:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
- integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
- dependencies:
- "@babel/runtime" "^7.8.3"
- is-in-browser "^1.0.2"
-
-csstype@^2.0.0, csstype@^2.5.2:
- version "2.6.19"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
- integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
+csstype@2.6.11:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5"
+ integrity sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==
csstype@^3.0.2:
version "3.0.10"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
+csstype@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
cyclist@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-debounce@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
- integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
-
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -1173,11 +1347,6 @@ deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
-deepmerge@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7"
- integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==
-
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
@@ -1285,12 +1454,13 @@ dns-txt@^2.0.2:
dependencies:
buffer-indexof "^1.0.0"
-dom-helpers@^3.2.1, dom-helpers@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
- integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
dependencies:
- "@babel/runtime" "^7.1.2"
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
domain-browser@^1.1.1:
version "1.2.0"
@@ -1340,13 +1510,6 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-encoding@^0.1.11:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
- integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
- dependencies:
- iconv-lite "^0.6.2"
-
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -1370,6 +1533,13 @@ errno@^0.1.3, errno@~0.1.7:
dependencies:
prr "~1.0.1"
+error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -1380,6 +1550,11 @@ 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=
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
eslint-scope@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -1557,19 +1732,6 @@ faye-websocket@~0.11.1:
dependencies:
websocket-driver ">=0.5.1"
-fbjs@^0.8.1:
- version "0.8.18"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.18.tgz#9835e0addb9aca2eff53295cd79ca1cfc7c9662a"
- integrity sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==
- dependencies:
- core-js "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^0.7.30"
-
figgy-pudding@^3.5.1:
version "3.5.2"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
@@ -1619,6 +1781,11 @@ find-cache-dir@^2.1.0:
make-dir "^2.0.0"
pkg-dir "^3.0.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@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
@@ -1899,12 +2066,7 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
-hoist-non-react-statics@^2.3.1:
- version "2.5.5"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
- integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
-
-hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.2.1:
+hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
@@ -1999,11 +2161,6 @@ 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=
-hyphenate-style-name@^1.0.2, hyphenate-style-name@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
- integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
-
iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -2011,13 +2168,6 @@ iconv-lite@0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
-iconv-lite@^0.6.2:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
ieee754@^1.1.4:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -2028,6 +2178,14 @@ iferr@^0.1.5:
resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
import-local@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
@@ -2041,13 +2199,6 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-indefinite-observable@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8"
- integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==
- dependencies:
- symbol-observable "1.2.0"
-
infer-owner@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
@@ -2136,6 +2287,11 @@ is-arguments@^1.0.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
is-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
@@ -2155,6 +2311,13 @@ is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+is-core-module@^2.13.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
+ integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
+ dependencies:
+ has "^1.0.3"
+
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
@@ -2237,11 +2400,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
-is-in-browser@^1.0.2, is-in-browser@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
- integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
-
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@@ -2288,7 +2446,7 @@ is-regex@^1.0.4:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-stream@^1.0.1, is-stream@^1.1.0:
+is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
@@ -2330,15 +2488,7 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-isomorphic-fetch@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
-"js-tokens@^3.0.0 || ^4.0.0":
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
@@ -2348,6 +2498,11 @@ json-parse-better-errors@^1.0.2:
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -2370,121 +2525,6 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
-jss-camel-case@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44"
- integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==
- dependencies:
- hyphenate-style-name "^1.0.2"
-
-jss-default-unit@^8.0.2:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6"
- integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==
-
-jss-global@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2"
- integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==
-
-jss-nested@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca"
- integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==
- dependencies:
- warning "^3.0.0"
-
-jss-plugin-camel-case@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.8.2.tgz#8d7f915c8115afaff8cbde08faf610ec9892fba6"
- integrity sha512-2INyxR+1UdNuKf4v9It3tNfPvf7IPrtkiwzofeKuMd5D58/dxDJVUQYRVg/n460rTlHUfsEQx43hDrcxi9dSPA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- hyphenate-style-name "^1.0.3"
- jss "10.8.2"
-
-jss-plugin-default-unit@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.8.2.tgz#c66f12e02e0815d911b85c02c2a979ee7b4ce69a"
- integrity sha512-UZ7cwT9NFYSG+SEy7noRU50s4zifulFdjkUNKE+u6mW7vFP960+RglWjTgMfh79G6OENZmaYnjHV/gcKV4nSxg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-global@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.8.2.tgz#1a35632a693cf50113bcc5ffe6b51969df79c4ec"
- integrity sha512-UaYMSPsYZ7s/ECGoj4KoHC2jwQd5iQ7K+FFGnCAILdQrv7hPmvM2Ydg45ThT/sH46DqktCRV2SqjRuxeBH8nRA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-nested@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.8.2.tgz#79f3c7f75ea6a36ae72fe52e777035bb24d230c7"
- integrity sha512-acRvuPJOb930fuYmhkJaa994EADpt8TxI63Iyg96C8FJ9T2xRyU5T6R1IYKRwUiqZo+2Sr7fdGzRTDD4uBZaMA==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
- tiny-warning "^1.0.2"
-
-jss-plugin-props-sort@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.8.2.tgz#e25a7471868652c394562b6dc5433dcaea7dff6f"
- integrity sha512-wqdcjayKRWBZnNpLUrXvsWqh+5J5YToAQ+8HNBNw0kZxVvCDwzhK2Nx6AKs7p+5/MbAh2PLgNW5Ym/ysbVAuqQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
-
-jss-plugin-rule-value-function@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.8.2.tgz#55354b55f1b2968a15976729968f767f02d64049"
- integrity sha512-bW0EKAs+0HXpb6BKJhrn94IDdiWb0CnSluTkh0rGEgyzY/nmD1uV/Wf6KGlesGOZ9gmJzQy+9FFdxIUID1c9Ug==
- dependencies:
- "@babel/runtime" "^7.3.1"
- jss "10.8.2"
- tiny-warning "^1.0.2"
-
-jss-plugin-vendor-prefixer@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.8.2.tgz#ebb4a482642f34091e454901e21176441dd5f475"
- integrity sha512-DeGv18QsSiYLSVIEB2+l0af6OToUe0JB+trpzUxyqD2QRC/5AzzDrCrYffO5AHZ81QbffYvSN/pkfZaTWpRXlg==
- dependencies:
- "@babel/runtime" "^7.3.1"
- css-vendor "^2.0.8"
- jss "10.8.2"
-
-jss-props-sort@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323"
- integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==
-
-jss-vendor-prefixer@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71"
- integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==
- dependencies:
- css-vendor "^0.3.8"
-
-jss@10.8.2, jss@^10.0.0-alpha.7:
- version "10.8.2"
- resolved "https://registry.yarnpkg.com/jss/-/jss-10.8.2.tgz#4b2a30b094b924629a64928236017a52c7c97505"
- integrity sha512-FkoUNxI329CKQ9OQC8L72MBF9KPf5q8mIupAJ5twU7G7XREW7ahb+7jFfrjZ4iy1qvhx1HwIWUIvkZBDnKkEdQ==
- dependencies:
- "@babel/runtime" "^7.3.1"
- csstype "^3.0.2"
- is-in-browser "^1.1.3"
- tiny-warning "^1.0.2"
-
-jss@^9.8.7:
- version "9.8.7"
- resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05"
- integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==
- dependencies:
- is-in-browser "^1.1.3"
- symbol-observable "^1.1.0"
- warning "^3.0.0"
-
killable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -2521,6 +2561,11 @@ lcid@^2.0.0:
dependencies:
invert-kv "^2.0.0"
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
loader-runner@^2.3.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
@@ -2553,7 +2598,7 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
-lodash@^4.17.11, lodash@^4.17.14:
+lodash@^4.17.11, lodash@^4.17.14, lodash@^4.6.1:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -2563,7 +2608,7 @@ loglevel@^1.6.1:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
-loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -2855,14 +2900,6 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
-node-fetch@^1.0.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
node-forge@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
@@ -2909,11 +2946,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-normalize-scroll-left@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa"
- integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==
-
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -2926,7 +2958,7 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -3072,6 +3104,13 @@ parallel-transform@^1.1.0:
inherits "^2.0.3"
readable-stream "^2.1.5"
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
parse-asn1@^5.0.0, parse-asn1@^5.1.5:
version "5.1.6"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
@@ -3083,6 +3122,16 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-json@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
parse-passwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
@@ -3128,6 +3177,11 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -3140,6 +3194,11 @@ path-to-regexp@^1.7.0:
dependencies:
isarray "0.0.1"
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
pbkdf2@^3.0.3:
version "3.1.2"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
@@ -3185,11 +3244,6 @@ pkg-dir@^3.0.0:
dependencies:
find-up "^3.0.0"
-popper.js@^1.14.1:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
- integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
-
portfinder@^1.0.20:
version "1.0.28"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
@@ -3219,14 +3273,7 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-promise@^7.1.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
- dependencies:
- asap "~2.0.3"
-
-prop-types@^15.6.0, prop-types@^15.6.2:
+prop-types@^15.6.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -3235,6 +3282,15 @@ prop-types@^15.6.0, prop-types@^15.6.2:
object-assign "^4.1.1"
react-is "^16.8.1"
+prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
proxy-addr@~2.0.5:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@@ -3350,24 +3406,36 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
-react-event-listener@^0.6.2:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a"
- integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==
+react-deep-force-update@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1"
+ integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==
+
+react-dom@18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
dependencies:
- "@babel/runtime" "^7.2.0"
- prop-types "^15.6.0"
- warning "^4.0.1"
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
-react-is@^16.6.0, react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1:
+react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
- integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+react-is@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+react-proxy@1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a"
+ integrity sha512-46GkBpZD97R/vV+iw+u6aFACzIHOst9gCl41d5K5vepPBz2i2gqHmXQJWKXsrUsSOdylKahN3sd9taswFN8Wzw==
+ dependencies:
+ lodash "^4.6.1"
+ react-deep-force-update "^1.0.0"
react-router-dom@5.1.2:
version "5.1.2"
@@ -3398,15 +3466,22 @@ react-router@5.1.2:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-transition-group@^2.2.1:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
- integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
+react-transition-group@^4.4.5:
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
+ integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
dependencies:
- dom-helpers "^3.4.0"
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
loose-envify "^1.4.0"
prop-types "^15.6.2"
- react-lifecycles-compat "^3.0.4"
+
+react@18.2.0:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
"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:
version "2.3.7"
@@ -3446,23 +3521,16 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-"recompose@0.28.0 - 0.30.0":
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0"
- integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==
- dependencies:
- "@babel/runtime" "^7.0.0"
- change-emitter "^0.1.2"
- fbjs "^0.8.1"
- hoist-non-react-statics "^2.3.1"
- react-lifecycles-compat "^3.0.2"
- symbol-observable "^1.0.4"
-
regenerator-runtime@^0.13.4:
version "0.13.9"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+regenerator-runtime@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
+ integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
+
regex-not@^1.0.0, regex-not@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
@@ -3529,6 +3597,11 @@ resolve-from@^3.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve-pathname@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
@@ -3539,6 +3612,15 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+resolve@^1.19.0:
+ version "1.22.4"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34"
+ integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@@ -3583,11 +3665,18 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0:
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
schema-utils@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
@@ -3683,7 +3772,7 @@ set-value@^2.0.0, set-value@^2.0.1:
is-plain-object "^2.0.3"
split-string "^3.0.1"
-setimmediate@^1.0.4, setimmediate@^1.0.5:
+setimmediate@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
@@ -3811,10 +3900,10 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
-source-map@^0.5.6:
+source-map@^0.5.6, source-map@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+ integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
@@ -3953,6 +4042,11 @@ strip-eof@^1.0.0:
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+stylis@4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51"
+ integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==
+
supports-color@^5.3.0, supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -3967,10 +4061,10 @@ supports-color@^6.1.0:
dependencies:
has-flag "^3.0.0"
-symbol-observable@1.2.0, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
- integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
tapable@^1.0.0, tapable@^1.1.0:
version "1.1.3"
@@ -4026,7 +4120,7 @@ tiny-invariant@^1.0.2:
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9"
integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==
-tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
+tiny-warning@^1.0.0, tiny-warning@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
@@ -4036,6 +4130,11 @@ to-arraybuffer@^1.0.0:
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
to-object-path@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
@@ -4096,11 +4195,6 @@ typescript@3.9.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.3.tgz#d3ac8883a97c26139e42df5e93eeece33d610b8a"
integrity sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==
-ua-parser-js@^0.7.30:
- version "0.7.31"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6"
- integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==
-
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
@@ -4225,20 +4319,6 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-warning@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
- integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
- dependencies:
- loose-envify "^1.0.0"
-
-warning@^4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
- integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
- dependencies:
- loose-envify "^1.0.0"
-
watchpack-chokidar2@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
@@ -4388,11 +4468,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-whatwg-fetch@>=0.10.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
- integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
@@ -4440,6 +4515,11 @@ yallist@^3.0.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
yargs-parser@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
From e2d553dd47483bdb98ae04cee160a51b8193e7db Mon Sep 17 00:00:00 2001
From: Scala Steward
Date: Wed, 30 Aug 2023 05:44:50 +0000
Subject: [PATCH 3/3] Update sbt-scalafmt to 2.5.1
---
project/plugins.sbt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/project/plugins.sbt b/project/plugins.sbt
index eb583ee..7661d38 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -10,6 +10,6 @@ addSbtPlugin("org.scalablytyped.converter" % "sbt-converter" % "1.0.0-beta37")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.11.0")
-addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.0")
+addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.1")
addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12")