diff --git a/tests/manifest.xml b/.assets/assets/manifest.xml
similarity index 76%
rename from tests/manifest.xml
rename to .assets/assets/manifest.xml
index 965238cb..856be5f1 100644
--- a/tests/manifest.xml
+++ b/.assets/assets/manifest.xml
@@ -1,13 +1,13 @@
-
+
5d6f5462-3401-48ec-9406-d12882e9ad83
- 1.0.0.0
+ 0.3.0
Computational Systems Biology
en-US
-
-
-
-
+
+
+
+
bio.uni-kl.de
@@ -30,8 +30,8 @@
-
-
+
+
@@ -43,7 +43,7 @@
-
+
@@ -95,32 +95,32 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
\ No newline at end of file
+
diff --git a/.assets/assets/swate.cmd b/.assets/assets/swate.cmd
new file mode 100644
index 00000000..7eb5d841
--- /dev/null
+++ b/.assets/assets/swate.cmd
@@ -0,0 +1,4 @@
+@ECHO OFF
+echo "Starting Excel instance with the SWATE manifest ..."
+
+npx office-addin-debugging start manifest.xml desktop --debug-method web
\ No newline at end of file
diff --git a/.assets/assets/swate.sh b/.assets/assets/swate.sh
new file mode 100644
index 00000000..be647d24
--- /dev/null
+++ b/.assets/assets/swate.sh
@@ -0,0 +1,3 @@
+echo "Starting Excel instance with the SWATE manifest ..."
+
+npx office-addin-debugging start manifest.xml desktop --debug-method web
\ No newline at end of file
diff --git a/.assets/swate.zip b/.assets/swate.zip
index e19102f4..bcd12b5f 100644
Binary files a/.assets/swate.zip and b/.assets/swate.zip differ
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index e08dfdab..416e6f93 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,3 +1,26 @@
+### 0.3.0+0d31c43 (Released 2021-2-11)
+* Additions:
+ * latest commit #0d31c43
+ * [[#4bf33cb](https://github.com/nfdi4plants/Swate/commit/4bf33cb478861250a3f1794140821460115e3173)] Add ontology accession number as tag in ref columns (Issue #100).
+ * [[#262dae3](https://github.com/nfdi4plants/Swate/commit/262dae32acef085d3bfff46c1194f80698278387)] Add option to write process.json to Swate annotation table (Issue #84). :sparkles:
+ * [[#09467d9](https://github.com/nfdi4plants/Swate/commit/09467d97813b708ce8bee58935b0b5830aea15f7)] Visually group building blocks to protocols (Issues 101#, #103, #104) :sparkles:
+ * [[#0516353](https://github.com/nfdi4plants/Swate/commit/05163533c6832023301e588ccc59b34af5b18f88)] Add Logos and visually update Swate (Issue #59).
+ * [[#5c2e56a](https://github.com/nfdi4plants/Swate/commit/5c2e56a46b57fa627c5b37b7e8307ab633a4e12b)] Add option to add unit cols to existing building block (Issue #94).
+ * [[#9987184](https://github.com/nfdi4plants/Swate/commit/99871849bc83cfa4bd4fe7760c2f43dae524d76b)] Add sorensen dice sorting to advanced term search (Issue #95).
+ * [[#9158bb7](https://github.com/nfdi4plants/Swate/commit/9158bb75696399492050109ebb0d04be59eeb9b6)] Update unit search to only search UO ontology (Issue #93).
+ * [[#4e0d0c9](https://github.com/nfdi4plants/Swate/commit/4e0d0c9e32c5be606542f9ca0f05b74be6626e1d)] Add easy to access navigation option to advanced search (Issue #91).
+ * [[#374e326](https://github.com/nfdi4plants/Swate/commit/374e326f2123a2f61825f281bc4886b109d5261d)] Add features from #68 to Update Reference Columns (Issue 87#).
+* Deletions:
+ * [[#9da9c55](https://github.com/nfdi4plants/Swate/commit/9da9c55a23d737aa05ff7c12759446ce5387902f)] Remove event handlers (input assist, #87).
+* Bugfixes:
+ * [[#0d31c43](https://github.com/nfdi4plants/Swate/commit/0d31c43ff55961b7eed6d91183c4c91c85356c59)] Fix bug not opening "File Picker" upload window on click.
+ * [[#8606b12](https://github.com/nfdi4plants/Swate/commit/8606b12fe5497c2fbea2659cafd123c9a22dfe34)] Add Protocol Xml logic and fix ISADotNet dependency.
+ * [[#51928c0](https://github.com/nfdi4plants/Swate/commit/51928c0af9b5d5a39dbc54abbadc3aa81e8580f8)] Fix minor routing icon mismatch.
+ * [[#fdcb58c](https://github.com/nfdi4plants/Swate/commit/fdcb58c71ce624879448c4e86e2119b72bc877ae)] Fix minor white/lightgrey mix ups in filepicker view.
+ * [[#cc26e81](https://github.com/nfdi4plants/Swate/commit/cc26e81e895d7ec7fc7abef885e5d7afb4c0a7c2)] Fix bug overloading computers when creating an annotation table for whole rows (Issue #63).
+ * [[#1e5eb3d](https://github.com/nfdi4plants/Swate/commit/1e5eb3d6c2b0f2f0527d4843c8bc0addabdb0b04)] Fix reset of unit search input when unchecking (Issue #92).
+ * [[#474cf73](https://github.com/nfdi4plants/Swate/commit/474cf73cb48227d58e88d239e6e9e50e8676c78a)] Fix bug creating wrong TAN with insertTerm.
+
### 0.2.0+899b535 (Released 2021-1-11)
* Additions:
* latest commit #899b535
diff --git a/SAFEOfficeAddInn.sln b/Swate.sln
similarity index 94%
rename from SAFEOfficeAddInn.sln
rename to Swate.sln
index 915d6a36..939ac4bc 100644
--- a/SAFEOfficeAddInn.sln
+++ b/Swate.sln
@@ -25,10 +25,6 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{A21844B3-2816-4F6F-B275-308DA4EC2B3E}"
ProjectSection(SolutionItems) = preProject
src\Client\public\favicon.png = src\Client\public\favicon.png
- src\Client\public\assets\icon-16.png = src\Client\public\assets\icon-16.png
- src\Client\public\assets\icon-32.png = src\Client\public\assets\icon-32.png
- src\Client\public\assets\icon-80.png = src\Client\public\assets\icon-80.png
- src\Client\public\assets\logo-filled.png = src\Client\public\assets\logo-filled.png
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{DB2C5A73-BF7F-45D5-AEC8-D36539C5C019}"
@@ -63,7 +59,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{494903F3
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A7CCC606-3646-4F94-9F59-79C75E413344}"
ProjectSection(SolutionItems) = preProject
- tests\manifest.xml = tests\manifest.xml
tests\test.cmd = tests\test.cmd
tests\test.sh = tests\test.sh
EndProjectSection
diff --git a/build.fsx b/build.fsx
index a1408273..dc9cb566 100644
--- a/build.fsx
+++ b/build.fsx
@@ -1,17 +1,35 @@
-#r "paket: groupref build //"
+#r "paket:
+nuget BlackFox.Fake.BuildTask
+nuget Fake.Core.Target
+nuget Fake.Core.Process
+nuget Fake.Core.ReleaseNotes
+nuget Fake.IO.FileSystem
+nuget Fake.DotNet.Cli
+nuget Fake.DotNet.MSBuild
+nuget Fake.DotNet.AssemblyInfoFile
+nuget Fake.DotNet.Paket
+nuget Fake.DotNet.FSFormatting
+nuget Fake.DotNet.Fsi
+nuget Fake.DotNet.NuGet
+nuget Fake.Api.Github
+nuget Fake.DotNet.Testing.Expecto
+nuget Fake.Extensions.Release
+nuget Fake.Tools.Git //
+"
+
+#if !FAKE
#load "./.fake/build.fsx/intellisense.fsx"
-#r "netstandard"
-
+#r "netstandard" // Temp fix for https://github.com/dotnet/fsharp/issues/5216
+#endif
open System
+open System.Text
open Fake
open Fake.Core
open Fake.DotNet
open Fake.IO
open Fake.Api
open Fake.Tools.Git
-open Farmer
-open Farmer.Builders
Target.initEnvironment ()
@@ -354,18 +372,19 @@ Target.create "Release" (fun config ->
let semVer =
let opt =
config.Context.Arguments
+ |> List.map (fun x -> x.ToLower())
|> List.tryFind (fun x -> x.StartsWith "semver:")
match opt with
- | Some "semver:major"| Some "semver:Major" ->
+ | Some "semver:major"->
Trace.trace "Increase major for next release notes."
Major
- | Some "semver:minor"| Some "semver:Minor" ->
+ | Some "semver:minor" ->
Trace.trace "Increase minor for next release notes."
Minor
- | Some "semver:Patch"| Some "semver:patch" ->
+ | Some "semver:patch" ->
Trace.trace "Increase patch for next release notes."
Patch
- | Some "semver:wip"| Some "semver:WIP" ->
+ | Some "semver:wip" ->
Trace.trace "Add new commits to current release."
WIP
| Some x ->
@@ -503,8 +522,6 @@ Target.create "Release" (fun config ->
"RELEASE_NOTES.md"
newNotes
- writeNewReleaseNotes
-
Trace.trace "Update RELEASE_NOTES.md done!"
Trace.trace "Update Version.fs"
@@ -521,6 +538,35 @@ Target.create "Release" (fun config ->
]
Trace.trace "Update Version.fs done!"
+
+ /// Update maniefest.xmls
+
+ Trace.trace "Update manifest.xml"
+
+ let _ =
+ let newVer = sprintf "%i.%i.%i" newRelease.SemVer.Major newRelease.SemVer.Minor newRelease.SemVer.Patch
+ Shell.regexReplaceInFilesWithEncoding
+ "[0-9]+.[0-9]+.[0-9]+"
+ newVer
+ Encoding.UTF8
+ [
+ (Path.combine __SOURCE_DIRECTORY__ @".assets\assets\manifest.xml")
+ (Path.combine __SOURCE_DIRECTORY__ "manifest.xml")
+ ]
+
+ Trace.trace "Update manifest.xml done!"
+)
+
+Target.create "ZipAssets" (fun _ ->
+
+ let assetPath = System.IO.Path.Combine(__SOURCE_DIRECTORY__,@".assets\assets")
+ let assetDir = Fake.IO.DirectoryInfo.ofPath assetPath
+
+ let files =
+ let assetsPaths = Fake.IO.DirectoryInfo.getFiles assetDir
+ assetsPaths |> Array.map (fun x -> x.FullName)
+
+ Zip.zip assetDir.FullName ".assets\swate.zip" files
)
Target.create "GithubDraft" (fun config ->
@@ -576,7 +622,6 @@ Target.create "GithubDraft" (fun config ->
let release = ReleaseNotes.load "RELEASE_NOTES.md"
let semVer = (sprintf "v%i.%i.%i" release.SemVer.Major release.SemVer.Minor release.SemVer.Patch)
-
let token =
match Environment.environVarOrDefault "github_token" "", tokenOpt with
| s, None when System.String.IsNullOrWhiteSpace s |> not -> s
@@ -591,6 +636,7 @@ Target.create "GithubDraft" (fun config ->
let files =
let assetPath = System.IO.Path.Combine(__SOURCE_DIRECTORY__,@".assets")
let assetDir = Fake.IO.DirectoryInfo.ofPath assetPath
+ /// This only accesses files and not folders. So in this case it will only access the .zip file created by "ZipAssets"
let assetsPaths = Fake.IO.DirectoryInfo.getFiles assetDir
assetsPaths |> Array.map (fun x -> x.FullName)
@@ -605,40 +651,9 @@ Target.create "GithubDraft" (fun config ->
|> Async.RunSynchronously
Trace.trace "Draft successfully created!"
- //let responseCreate =
- // FSharp.Data.Http.RequestString
- // ( "https://api.github.com/repos/nfdi4plants/Swate/releases",
- // headers = [
- // "accept", "application/vnd.github.v3+json";
- // "User-Agent", "Swate";
- // "Authorization", sprintf "token 5da68a1d1bdd09413f47b4ecdfd6911d641d7a93"
- // ],
- // body = FSharp.Data.HttpRequestBody.TextRequest textRequestBody
- // )
- //Trace.trace "Draft successfully created!"
-
- //let upLink =
- // let pattern = "\"upload_url\":\"[a-z]+://[a-zA-Z./0-9]+"
- // System.Text.RegularExpressions.Regex.Match(responseCreate,pattern)
- // |> fun x -> x.Value.Replace("\"upload_url\":","").Replace("\"","")
-
- //let uploadResponse =
- // let readInZipAsBinary =
- // let path = System.IO.Path.Combine(__SOURCE_DIRECTORY__,@".assets\swate.zip")
- // System.IO.File.ReadAllBytes(path)
- // FSharp.Data.Http.RequestString
- // ( upLink,
- // query = ["name","swate.zip"; "label","Swate"],
- // headers = [
- // "accept", "application/vnd.github.v3+json";
- // "User-Agent", "Swate";
- // "Authorization", sprintf "token 5da68a1d1bdd09413f47b4ecdfd6911d641d7a93"
- // "Content-Type", "application\zip"
- // ],
- // body = FSharp.Data.HttpRequestBody.BinaryUpload readInZipAsBinary
- // )
)
+
Target.create "Bundle" (fun _ ->
runDotNet (sprintf "publish -c Release -o \"%s\"" deployDir) serverPath
npm "run build" "."
@@ -691,6 +706,9 @@ open Fake.Core.TargetOperators
"IsExistingReleaseNotes"
==> "Release"
+"ZipAssets"
+ ==> "GithubDraft"
+
"InstallOfficeAddinTooling"
==> "WebpackConfigSetup"
==> "LocalConnectionStringSetup"
diff --git a/build.fsx.lock b/build.fsx.lock
index 087f2999..95f2765b 100644
--- a/build.fsx.lock
+++ b/build.fsx.lock
@@ -8,7 +8,7 @@ NUGET
BlackFox.VsWhere (1.1)
FSharp.Core (>= 4.2.3)
Microsoft.Win32.Registry (>= 4.7)
- Fake.Api.Github (5.20.3)
+ Fake.Api.GitHub (5.20.3)
FSharp.Core (>= 4.7.2)
Octokit (>= 0.48)
Fake.Core.CommandLineParsing (5.20.3)
@@ -125,9 +125,22 @@ NUGET
Fake.IO.FileSystem (>= 5.20.3)
Fake.Testing.Common (>= 5.20.3)
FSharp.Core (>= 4.7.2)
+ Fake.Extensions.Release (0.2)
+ Fake.Api.GitHub (>= 5.20.3)
+ Fake.Core.ReleaseNotes (>= 5.20.3)
+ Fake.Core.Target (>= 5.20.3)
+ Fake.DotNet.AssemblyInfoFile (>= 5.20.3)
+ Fake.IO.FileSystem (>= 5.20.3)
+ Fake.IO.Zip (>= 5.20.3)
+ Fake.Tools.Git (>= 5.20.3)
+ FSharp.Core (>= 5.0)
Fake.IO.FileSystem (5.20.3)
Fake.Core.String (>= 5.20.3)
FSharp.Core (>= 4.7.2)
+ Fake.IO.Zip (5.20.3)
+ Fake.Core.String (>= 5.20.3)
+ Fake.IO.FileSystem (>= 5.20.3)
+ FSharp.Core (>= 4.7.2)
Fake.Net.Http (5.20.3)
Fake.Core.Trace (>= 5.20.3)
FSharp.Core (>= 4.7.2)
@@ -142,106 +155,164 @@ NUGET
Fake.Core.Trace (>= 5.20.3)
Fake.IO.FileSystem (>= 5.20.3)
FSharp.Core (>= 4.7.2)
- Farmer (1.1.1)
- FSharp.Core (>= 4.7.1)
- Newtonsoft.Json (>= 12.0.2)
FParsec (1.1.1)
FSharp.Core (>= 4.3.4)
- FSharp.Compiler.Service (37.0)
- FSharp.Core (>= 4.6.2)
+ FSharp.Compiler.Service (38.0.2)
+ FSharp.Core (5.0)
Microsoft.Build.Framework (>= 16.6)
Microsoft.Build.Tasks.Core (>= 16.6)
Microsoft.Build.Utilities.Core (>= 16.6)
- System.Buffers (>= 4.5)
+ System.Buffers (>= 4.5.1)
System.Collections.Immutable (>= 1.5)
- System.Memory (>= 4.5.3)
+ System.Diagnostics.Process (>= 4.3)
+ System.Diagnostics.TraceSource (>= 4.3)
+ System.Linq.Expressions (>= 4.3)
+ System.Linq.Queryable (>= 4.3)
+ System.Memory (>= 4.5.4)
+ System.Net.Requests (>= 4.3)
+ System.Net.Security (>= 4.3)
System.Reflection.Emit (>= 4.3)
System.Reflection.Metadata (>= 1.6)
System.Reflection.TypeExtensions (>= 4.3)
- System.Runtime.Loader (>= 4.0)
- FSharp.Control.Reactive (4.4.2)
+ System.Runtime (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Runtime.Loader (>= 4.3)
+ System.Security.Claims (>= 4.3)
+ System.Security.Cryptography.Algorithms (>= 4.3)
+ System.Security.Principal (>= 4.3)
+ System.Threading.Tasks.Parallel (>= 4.3)
+ System.Threading.Thread (>= 4.3)
+ System.Threading.ThreadPool (>= 4.3)
+ FSharp.Control.Reactive (4.5)
FSharp.Core (>= 4.7.2)
System.Reactive (>= 4.4.1)
- FSharp.Core (4.7.2)
- Microsoft.Build (16.7)
- Microsoft.Build.Framework (16.7)
+ FSharp.Core (5.0)
+ Microsoft.Build (16.8)
+ Microsoft.Build.Framework (16.8)
System.Security.Permissions (>= 4.7)
- Microsoft.Build.Tasks.Core (16.7)
- Microsoft.Build.Framework (>= 16.7)
- Microsoft.Build.Utilities.Core (>= 16.7)
+ Microsoft.Build.Tasks.Core (16.8)
+ Microsoft.Build.Framework (>= 16.8)
+ Microsoft.Build.Utilities.Core (>= 16.8)
Microsoft.Win32.Registry (>= 4.3)
System.CodeDom (>= 4.4)
System.Collections.Immutable (>= 1.5)
System.Reflection.Metadata (>= 1.6)
System.Reflection.TypeExtensions (>= 4.1)
System.Resources.Extensions (>= 4.6)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Security.Cryptography.Pkcs (>= 4.7)
+ System.Security.Cryptography.Xml (>= 4.7)
System.Security.Permissions (>= 4.7)
System.Threading.Tasks.Dataflow (>= 4.9)
- Microsoft.Build.Tasks.Git (1.0)
- Microsoft.Build.Utilities.Core (16.7)
- Microsoft.Build.Framework (>= 16.7)
+ Microsoft.Build.Utilities.Core (16.8)
+ Microsoft.Build.Framework (>= 16.8)
Microsoft.Win32.Registry (>= 4.3)
System.Collections.Immutable (>= 1.5)
System.Security.Permissions (>= 4.7)
System.Text.Encoding.CodePages (>= 4.0.1)
- Microsoft.NETCore.Platforms (3.1.3)
- Microsoft.NETCore.Targets (3.1)
- Microsoft.SourceLink.Common (1.0)
- Microsoft.SourceLink.GitHub (1.0)
- Microsoft.Build.Tasks.Git (>= 1.0)
- Microsoft.SourceLink.Common (>= 1.0)
+ Microsoft.NETCore.Platforms (5.0)
+ Microsoft.NETCore.Targets (5.0)
Microsoft.Win32.Primitives (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
- Microsoft.Win32.Registry (4.7)
- System.Buffers (>= 4.5)
- System.Memory (>= 4.5.3)
- System.Security.AccessControl (>= 4.7)
- System.Security.Principal.Windows (>= 4.7)
+ Microsoft.Win32.Registry (5.0)
+ System.Buffers (>= 4.5.1)
+ System.Memory (>= 4.5.4)
+ System.Security.AccessControl (>= 5.0)
+ System.Security.Principal.Windows (>= 5.0)
Mono.Posix.NETStandard (1.0)
- MSBuild.StructuredLogger (2.1.176)
+ MSBuild.StructuredLogger (2.1.303)
Microsoft.Build (>= 16.4)
Microsoft.Build.Framework (>= 16.4)
Microsoft.Build.Tasks.Core (>= 16.4)
Microsoft.Build.Utilities.Core (>= 16.4)
- Microsoft.SourceLink.GitHub (>= 1.0)
Newtonsoft.Json (12.0.3)
- NuGet.Common (5.7)
- NuGet.Frameworks (>= 5.7)
- System.Diagnostics.Process (>= 4.3)
- System.Threading.Thread (>= 4.3)
- NuGet.Configuration (5.7)
- NuGet.Common (>= 5.7)
- System.Security.Cryptography.ProtectedData (>= 4.3)
- NuGet.Frameworks (5.7)
- NuGet.Packaging (5.7)
+ NuGet.Common (5.8.1)
+ NuGet.Frameworks (>= 5.8.1)
+ NuGet.Configuration (5.8.1)
+ NuGet.Common (>= 5.8.1)
+ System.Security.Cryptography.ProtectedData (>= 4.4)
+ NuGet.Frameworks (5.8.1)
+ NuGet.Packaging (5.8.1)
Newtonsoft.Json (>= 9.0.1)
- NuGet.Configuration (>= 5.7)
- NuGet.Versioning (>= 5.7)
- System.Dynamic.Runtime (>= 4.3)
- System.Security.Cryptography.Cng (>= 5.0.0-preview.3.20214.6)
- System.Security.Cryptography.Pkcs (>= 5.0.0-preview.3.20214.6)
- NuGet.Protocol (5.7)
- NuGet.Packaging (>= 5.7)
- System.Dynamic.Runtime (>= 4.3)
- NuGet.Versioning (5.7)
+ NuGet.Configuration (>= 5.8.1)
+ NuGet.Versioning (>= 5.8.1)
+ System.Security.Cryptography.Cng (>= 5.0)
+ System.Security.Cryptography.Pkcs (>= 5.0)
+ NuGet.Protocol (5.8.1)
+ NuGet.Packaging (>= 5.8.1)
+ NuGet.Versioning (5.8.1)
Octokit (0.48)
+ runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
runtime.native.System (4.3.1)
Microsoft.NETCore.Platforms (>= 1.1.1)
Microsoft.NETCore.Targets (>= 1.1.3)
+ runtime.native.System.Net.Http (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ runtime.native.System.Net.Security (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ runtime.native.System.Security.Cryptography.Apple (4.3.1)
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1)
+ runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1)
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
+ runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
System.Buffers (4.5.1)
- System.CodeDom (4.7)
+ System.CodeDom (5.0)
System.Collections (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
- System.Collections.Immutable (1.7.1)
+ System.Collections.Concurrent (4.3)
+ System.Collections (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Diagnostics.Tracing (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.Reflection (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.Collections.Immutable (5.0)
System.Memory (>= 4.5.4)
System.Diagnostics.Debug (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
+ System.Diagnostics.DiagnosticSource (5.0.1)
+ System.Memory (>= 4.5.4)
+ System.Runtime.CompilerServices.Unsafe (>= 5.0)
System.Diagnostics.Process (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.Win32.Primitives (>= 4.3)
@@ -264,28 +335,39 @@ NUGET
System.Threading.Tasks (>= 4.3)
System.Threading.Thread (>= 4.3)
System.Threading.ThreadPool (>= 4.3)
- System.Dynamic.Runtime (4.3)
+ System.Diagnostics.TraceSource (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ runtime.native.System (>= 4.3)
System.Collections (>= 4.3)
System.Diagnostics.Debug (>= 4.3)
- System.Linq (>= 4.3)
- System.Linq.Expressions (>= 4.3)
- System.ObjectModel (>= 4.3)
- System.Reflection (>= 4.3)
- System.Reflection.Emit (>= 4.3)
- System.Reflection.Emit.ILGeneration (>= 4.3)
- System.Reflection.Primitives (>= 4.3)
- System.Reflection.TypeExtensions (>= 4.3)
+ System.Globalization (>= 4.3)
System.Resources.ResourceManager (>= 4.3)
System.Runtime (>= 4.3)
System.Runtime.Extensions (>= 4.3)
System.Threading (>= 4.3)
- System.Formats.Asn1 (5.0.0-preview.8.20407.11)
+ System.Diagnostics.Tracing (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ System.Formats.Asn1 (5.0)
System.Buffers (>= 4.5.1)
System.Memory (>= 4.5.4)
System.Globalization (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
+ System.Globalization.Calendars (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Globalization (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Globalization.Extensions (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ System.Globalization (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
System.IO (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
@@ -327,10 +409,99 @@ NUGET
System.Runtime (>= 4.3)
System.Runtime.Extensions (>= 4.3)
System.Threading (>= 4.3)
+ System.Linq.Queryable (4.3)
+ System.Collections (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Linq (>= 4.3)
+ System.Linq.Expressions (>= 4.3)
+ System.Reflection (>= 4.3)
+ System.Reflection.Extensions (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
System.Memory (4.5.4)
System.Buffers (>= 4.5.1)
System.Numerics.Vectors (>= 4.4)
System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
+ System.Net.Http (4.3.4)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ runtime.native.System (>= 4.3)
+ runtime.native.System.Net.Http (>= 4.3)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2)
+ System.Collections (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Diagnostics.DiagnosticSource (>= 4.3)
+ System.Diagnostics.Tracing (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.Globalization.Extensions (>= 4.3)
+ System.IO (>= 4.3)
+ System.IO.FileSystem (>= 4.3)
+ System.Net.Primitives (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Security.Cryptography.Algorithms (>= 4.3)
+ System.Security.Cryptography.Encoding (>= 4.3)
+ System.Security.Cryptography.OpenSsl (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Security.Cryptography.X509Certificates (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.Net.Primitives (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ System.Runtime (>= 4.3.1)
+ System.Runtime.Handles (>= 4.3)
+ System.Net.Requests (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ System.Collections (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Diagnostics.Tracing (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.IO (>= 4.3)
+ System.Net.Http (>= 4.3)
+ System.Net.Primitives (>= 4.3)
+ System.Net.WebHeaderCollection (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.Net.Security (4.3.2)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.Win32.Primitives (>= 4.3)
+ runtime.native.System (>= 4.3)
+ runtime.native.System.Net.Security (>= 4.3)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2)
+ System.Collections (>= 4.3)
+ System.Collections.Concurrent (>= 4.3)
+ System.Diagnostics.Tracing (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.Globalization.Extensions (>= 4.3)
+ System.IO (>= 4.3)
+ System.Net.Primitives (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Security.Claims (>= 4.3)
+ System.Security.Cryptography.Algorithms (>= 4.3)
+ System.Security.Cryptography.Encoding (>= 4.3)
+ System.Security.Cryptography.OpenSsl (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Security.Cryptography.X509Certificates (>= 4.3)
+ System.Security.Principal (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.Threading.ThreadPool (>= 4.3)
+ System.Net.WebHeaderCollection (4.3)
+ System.Collections (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
System.Numerics.Vectors (4.5)
System.ObjectModel (4.3)
System.Collections (>= 4.3)
@@ -338,7 +509,7 @@ NUGET
System.Resources.ResourceManager (>= 4.3)
System.Runtime (>= 4.3)
System.Threading (>= 4.3)
- System.Reactive (4.4.1)
+ System.Reactive (5.0)
System.Runtime.InteropServices.WindowsRuntime (>= 4.3)
System.Threading.Tasks.Extensions (>= 4.5.4)
System.Reflection (4.3)
@@ -357,14 +528,14 @@ NUGET
Microsoft.NETCore.Targets (>= 1.1)
System.Reflection (>= 4.3)
System.Runtime (>= 4.3)
- System.Reflection.Metadata (1.8.1)
- System.Collections.Immutable (>= 1.7.1)
+ System.Reflection.Metadata (5.0)
+ System.Collections.Immutable (>= 5.0)
System.Reflection.Primitives (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
System.Reflection.TypeExtensions (4.7)
- System.Resources.Extensions (4.7.1)
+ System.Resources.Extensions (5.0)
System.Memory (>= 4.5.4)
System.Resources.ResourceManager (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
@@ -375,7 +546,7 @@ NUGET
System.Runtime (4.3.1)
Microsoft.NETCore.Platforms (>= 1.1.1)
Microsoft.NETCore.Targets (>= 1.1.3)
- System.Runtime.CompilerServices.Unsafe (4.7.1)
+ System.Runtime.CompilerServices.Unsafe (5.0)
System.Runtime.Extensions (4.3.1)
Microsoft.NETCore.Platforms (>= 1.1.1)
Microsoft.NETCore.Targets (>= 1.1.3)
@@ -397,25 +568,121 @@ NUGET
System.IO (>= 4.3)
System.Reflection (>= 4.3)
System.Runtime (>= 4.3)
- System.Security.AccessControl (4.7)
- System.Security.Principal.Windows (>= 4.7)
- System.Security.Cryptography.Cng (5.0.0-preview.8.20407.11)
- System.Security.Cryptography.Pkcs (5.0.0-preview.8.20407.11)
+ System.Runtime.Numerics (4.3)
+ System.Globalization (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Security.AccessControl (5.0)
+ System.Security.Principal.Windows (>= 5.0)
+ System.Security.Claims (4.3)
+ System.Collections (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.IO (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Security.Principal (>= 4.3)
+ System.Security.Cryptography.Algorithms (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ runtime.native.System.Security.Cryptography.Apple (>= 4.3.1)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2)
+ System.Collections (>= 4.3)
+ System.IO (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Runtime.Numerics (>= 4.3)
+ System.Security.Cryptography.Encoding (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Security.Cryptography.Cng (5.0)
+ System.Security.Cryptography.Csp (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ System.IO (>= 4.3)
+ System.Reflection (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Security.Cryptography.Algorithms (>= 4.3)
+ System.Security.Cryptography.Encoding (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Security.Cryptography.Encoding (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
+ System.Collections (>= 4.3)
+ System.Collections.Concurrent (>= 4.3)
+ System.Linq (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Security.Cryptography.OpenSsl (5.0)
+ System.Security.Cryptography.Pkcs (5.0.1)
System.Buffers (>= 4.5.1)
- System.Formats.Asn1 (>= 5.0.0-preview.8.20407.11)
+ System.Formats.Asn1 (>= 5.0)
System.Memory (>= 4.5.4)
- System.Security.Cryptography.Cng (>= 5.0.0-preview.8.20407.11)
- System.Security.Cryptography.ProtectedData (4.7)
- System.Memory (>= 4.5.3)
- System.Security.Permissions (4.7)
- System.Security.AccessControl (>= 4.7)
- System.Security.Principal.Windows (4.7)
+ System.Security.Cryptography.Cng (>= 5.0)
+ System.Security.Cryptography.Primitives (4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.IO (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.Security.Cryptography.ProtectedData (5.0)
+ System.Memory (>= 4.5.4)
+ System.Security.Cryptography.X509Certificates (4.3.2)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ runtime.native.System (>= 4.3)
+ runtime.native.System.Net.Http (>= 4.3)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2)
+ System.Collections (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Globalization (>= 4.3)
+ System.Globalization.Calendars (>= 4.3)
+ System.IO (>= 4.3)
+ System.IO.FileSystem (>= 4.3)
+ System.IO.FileSystem.Primitives (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Runtime.InteropServices (>= 4.3)
+ System.Runtime.Numerics (>= 4.3)
+ System.Security.Cryptography.Algorithms (>= 4.3)
+ System.Security.Cryptography.Cng (>= 4.3)
+ System.Security.Cryptography.Csp (>= 4.3)
+ System.Security.Cryptography.Encoding (>= 4.3)
+ System.Security.Cryptography.OpenSsl (>= 4.3)
+ System.Security.Cryptography.Primitives (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Security.Cryptography.Xml (5.0)
+ System.Memory (>= 4.5.4)
+ System.Security.Cryptography.Pkcs (>= 5.0)
+ System.Security.Permissions (>= 5.0)
+ System.Security.Permissions (5.0)
+ System.Security.AccessControl (>= 5.0)
+ System.Security.Principal (4.3)
+ System.Runtime (>= 4.3)
+ System.Security.Principal.Windows (5.0)
System.Text.Encoding (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
- System.Text.Encoding.CodePages (4.7.1)
- System.Runtime.CompilerServices.Unsafe (>= 4.7.1)
+ System.Text.Encoding.CodePages (5.0)
+ System.Runtime.CompilerServices.Unsafe (>= 5.0)
System.Text.Encoding.Extensions (4.3)
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
@@ -428,9 +695,18 @@ NUGET
Microsoft.NETCore.Platforms (>= 1.1)
Microsoft.NETCore.Targets (>= 1.1)
System.Runtime (>= 4.3)
- System.Threading.Tasks.Dataflow (4.11.1)
+ System.Threading.Tasks.Dataflow (5.0)
System.Threading.Tasks.Extensions (4.5.4)
System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
+ System.Threading.Tasks.Parallel (4.3)
+ System.Collections.Concurrent (>= 4.3)
+ System.Diagnostics.Debug (>= 4.3)
+ System.Diagnostics.Tracing (>= 4.3)
+ System.Resources.ResourceManager (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Extensions (>= 4.3)
+ System.Threading (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
System.Threading.Thread (4.3)
System.Runtime (>= 4.3)
System.Threading.ThreadPool (4.3)
diff --git a/manifest.xml b/manifest.xml
index dd819e94..5e559a98 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -1,13 +1,13 @@
-
+
5d6f5462-3401-48ec-9406-d12882e9ad83
- 1.0.0.0
+ 0.3.0
Computational Systems Biology
en-US
-
-
-
-
+
+
+
+
bio.uni-kl.de
@@ -30,8 +30,8 @@
-
-
+
+
@@ -43,7 +43,7 @@
-
+
@@ -95,31 +95,31 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
diff --git a/package-lock.json b/package-lock.json
index e7a81cdc..723ffa2a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,9871 @@
{
+ "name": "Swate",
+ "lockfileVersion": 2,
"requires": true,
- "lockfileVersion": 1,
+ "packages": {
+ "": {
+ "dependencies": {
+ "bulma": "^0.9.0",
+ "bulma-checkradio": "^2.1.0",
+ "bulma-slider": "^2.0.0",
+ "bulma-switch": "^2.0.0",
+ "bulma-tooltip": "^3.0.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/plugin-transform-runtime": "^7.11.5",
+ "@babel/preset-env": "^7.11.5",
+ "@babel/runtime": "^7.11.2",
+ "babel-loader": "^8.0.5",
+ "copy-webpack-plugin": "^6.2.0",
+ "core-js": "^3.3.2",
+ "css-loader": "^4.3.0",
+ "fable-compiler": "^2.13.0",
+ "fable-loader": "^2.1.8",
+ "file-loader": "^4.2.0",
+ "html-webpack-plugin": "^3.2.0",
+ "mini-css-extract-plugin": "^0.10.1",
+ "react": "^16.10.2",
+ "react-dom": "^16.10.2",
+ "remotedev": "^0.2.9",
+ "resolve-url-loader": "^3.1.2",
+ "sass": "^1.27.0",
+ "sass-loader": "^9.0.3",
+ "selfsigned": "^1.10.8",
+ "style-loader": "^1.3.0",
+ "terser": "^4.8.0",
+ "webpack": "^4.44.2",
+ "webpack-cli": "^3.3.12",
+ "webpack-dev-server": "^3.8.2"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz",
+ "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.12.0",
+ "invariant": "^2.2.4",
+ "semver": "^5.5.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.11.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz",
+ "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.11.6",
+ "@babel/helper-module-transforms": "^7.11.0",
+ "@babel/helpers": "^7.10.4",
+ "@babel/parser": "^7.11.5",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.11.5",
+ "@babel/types": "^7.11.5",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.19",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.11.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz",
+ "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.11.5",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
+ "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-explode-assignable-expression": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz",
+ "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.10.4",
+ "browserslist": "^4.12.0",
+ "invariant": "^2.2.4",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz",
+ "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-member-expression-to-functions": "^7.10.5",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz",
+ "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-regex": "^7.10.4",
+ "regexpu-core": "^4.7.0"
+ }
+ },
+ "node_modules/@babel/helper-define-map": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
+ "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/types": "^7.10.5",
+ "lodash": "^4.17.19"
+ }
+ },
+ "node_modules/@babel/helper-explode-assignable-expression": {
+ "version": "7.11.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz",
+ "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-get-function-arity": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
+ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz",
+ "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.11.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz",
+ "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.11.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
+ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-regex": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz",
+ "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.19"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.11.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz",
+ "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-wrap-function": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
+ "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-member-expression-to-functions": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
+ "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz",
+ "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.11.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
+ "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.11.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz",
+ "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
+ "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.11.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz",
+ "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz",
+ "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.10.4",
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-class-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz",
+ "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz",
+ "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz",
+ "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-json-strings": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz",
+ "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz",
+ "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz",
+ "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz",
+ "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-transform-parameters": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz",
+ "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-optional-chaining": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz",
+ "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-methods": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz",
+ "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
+ "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
+ "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
+ "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
+ "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
+ "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
+ "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz",
+ "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
+ "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-define-map": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "globals": "^11.1.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz",
+ "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz",
+ "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz",
+ "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz",
+ "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz",
+ "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz",
+ "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz",
+ "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
+ "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
+ "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz",
+ "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.10.5",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
+ "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz",
+ "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.10.5",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
+ "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
+ "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz",
+ "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz",
+ "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz",
+ "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz",
+ "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz",
+ "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz",
+ "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-runtime": {
+ "version": "7.11.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz",
+ "integrity": "sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.1"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz",
+ "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz",
+ "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz",
+ "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-regex": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz",
+ "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz",
+ "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz",
+ "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz",
+ "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.11.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz",
+ "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.11.0",
+ "@babel/helper-compilation-targets": "^7.10.4",
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-proposal-async-generator-functions": "^7.10.4",
+ "@babel/plugin-proposal-class-properties": "^7.10.4",
+ "@babel/plugin-proposal-dynamic-import": "^7.10.4",
+ "@babel/plugin-proposal-export-namespace-from": "^7.10.4",
+ "@babel/plugin-proposal-json-strings": "^7.10.4",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4",
+ "@babel/plugin-proposal-numeric-separator": "^7.10.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.11.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.10.4",
+ "@babel/plugin-proposal-optional-chaining": "^7.11.0",
+ "@babel/plugin-proposal-private-methods": "^7.10.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.10.4",
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-class-properties": "^7.10.4",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+ "@babel/plugin-syntax-top-level-await": "^7.10.4",
+ "@babel/plugin-transform-arrow-functions": "^7.10.4",
+ "@babel/plugin-transform-async-to-generator": "^7.10.4",
+ "@babel/plugin-transform-block-scoped-functions": "^7.10.4",
+ "@babel/plugin-transform-block-scoping": "^7.10.4",
+ "@babel/plugin-transform-classes": "^7.10.4",
+ "@babel/plugin-transform-computed-properties": "^7.10.4",
+ "@babel/plugin-transform-destructuring": "^7.10.4",
+ "@babel/plugin-transform-dotall-regex": "^7.10.4",
+ "@babel/plugin-transform-duplicate-keys": "^7.10.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.10.4",
+ "@babel/plugin-transform-for-of": "^7.10.4",
+ "@babel/plugin-transform-function-name": "^7.10.4",
+ "@babel/plugin-transform-literals": "^7.10.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.10.4",
+ "@babel/plugin-transform-modules-amd": "^7.10.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.10.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.10.4",
+ "@babel/plugin-transform-modules-umd": "^7.10.4",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4",
+ "@babel/plugin-transform-new-target": "^7.10.4",
+ "@babel/plugin-transform-object-super": "^7.10.4",
+ "@babel/plugin-transform-parameters": "^7.10.4",
+ "@babel/plugin-transform-property-literals": "^7.10.4",
+ "@babel/plugin-transform-regenerator": "^7.10.4",
+ "@babel/plugin-transform-reserved-words": "^7.10.4",
+ "@babel/plugin-transform-shorthand-properties": "^7.10.4",
+ "@babel/plugin-transform-spread": "^7.11.0",
+ "@babel/plugin-transform-sticky-regex": "^7.10.4",
+ "@babel/plugin-transform-template-literals": "^7.10.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.10.4",
+ "@babel/plugin-transform-unicode-escapes": "^7.10.4",
+ "@babel/plugin-transform-unicode-regex": "^7.10.4",
+ "@babel/preset-modules": "^0.1.3",
+ "@babel/types": "^7.11.5",
+ "browserslist": "^4.12.0",
+ "core-js-compat": "^3.6.2",
+ "invariant": "^2.2.2",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
+ "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.11.2",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz",
+ "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.11.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz",
+ "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.11.5",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.11.0",
+ "@babel/parser": "^7.11.5",
+ "@babel/types": "^7.11.5",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.19"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.11.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz",
+ "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+ "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+ "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz",
+ "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "node_modules/@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "dependencies": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz",
+ "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==",
+ "dev": true
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "14.0.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.6.tgz",
+ "integrity": "sha512-FbNmu4F67d3oZMWBV6Y4MaPER+0EpE9eIYf2yaHhCWovc1dlXCZkqGX4NLHfVVr6umt20TNBdRzrNJIzIKfdbw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/adjust-sourcemap-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz",
+ "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "regex-parser": "^2.2.11"
+ },
+ "engines": {
+ "node": ">=8.9"
+ }
+ },
+ "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
+ "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+ "dev": true
+ },
+ "node_modules/ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true,
+ "engines": [
+ "node >= 0.8.0"
+ ],
+ "bin": {
+ "ansi-html": "bin/ansi-html"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "node_modules/arity-n": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
+ "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=",
+ "dev": true
+ },
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "node_modules/asn1.js/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "dependencies": {
+ "util": "0.10.3"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "node_modules/async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true,
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/babel-loader": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
+ "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
+ "dev": true,
+ "dependencies": {
+ "find-cache-dir": "^2.1.0",
+ "loader-utils": "^1.4.0",
+ "mkdirp": "^0.5.3",
+ "pify": "^4.0.1",
+ "schema-utils": "^2.6.5"
+ },
+ "engines": {
+ "node": ">= 6.9"
+ }
+ },
+ "node_modules/babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "dev": true,
+ "dependencies": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "node_modules/base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=",
+ "dev": true
+ },
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "node_modules/batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/bn.js": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
+ "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==",
+ "dev": true
+ },
+ "node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "node_modules/browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "dependencies": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "node_modules/browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/browserify-rsa/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/browserify-sign/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "node_modules/browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "dependencies": {
+ "pako": "~1.0.5"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.14.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz",
+ "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001135",
+ "electron-to-chromium": "^1.3.571",
+ "escalade": "^3.1.0",
+ "node-releases": "^1.1.61"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "dependencies": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "node_modules/buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "node_modules/buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "node_modules/builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "node_modules/bulma": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.0.tgz",
+ "integrity": "sha512-rV75CJkubNUroAt0qCRkjznZLoaXq/ctfMXsMvKSL84UetbSyx5REl96e8GoQ04G4Tkw0XF3STECffTOQrbzOQ=="
+ },
+ "node_modules/bulma-checkradio": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bulma-checkradio/-/bulma-checkradio-2.1.0.tgz",
+ "integrity": "sha512-u/EBioHqmeMaUyVc+P9ellOldIVER4SSzkCYo7+KOBAIZuRm6zRWKste8DAFfsk8sq2xrX16gKXr7vCy7NC0zw=="
+ },
+ "node_modules/bulma-slider": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bulma-slider/-/bulma-slider-2.0.0.tgz",
+ "integrity": "sha512-lXKMA/U43Fi1UnMkVYdNuEu0cGLo4JSWFUcnEyzNXkdpmDFic+d8H9oiaRoLbPiuGTC5SNoHMCP24T5544gnlQ=="
+ },
+ "node_modules/bulma-switch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.0.tgz",
+ "integrity": "sha512-myD38zeUfjmdduq+pXabhJEe3x2hQP48l/OI+Y0fO3HdDynZUY/VJygucvEAJKRjr4HxD5DnEm4yx+oDOBXpAA=="
+ },
+ "node_modules/bulma-tooltip": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.0.tgz",
+ "integrity": "sha512-vfU87vHx+uM1Jc23SCPK2yzCMrdN/rXvCaEl/MYjEBMFMlOd/sGl2X3IGmP8ZPJv0oSjTMdZOoVRekfRuNNpkA=="
+ },
+ "node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "15.0.5",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz",
+ "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==",
+ "dev": true,
+ "dependencies": {
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.0",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cacache/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001146",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001146.tgz",
+ "integrity": "sha512-VAy5RHDfTJhpxnDdp2n40GPPLp3KqNrXz1QqFv4J64HvArKs8nuNMOWkB3ICOaBTU/Aj4rYAo/ytdQDDFF/Pug==",
+ "dev": true
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
+ "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.1.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar/node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chokidar/node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.6.0"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/clean-css/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "node_modules/component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "node_modules/compose-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
+ "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
+ "dev": true,
+ "dependencies": {
+ "arity-n": "^1.0.4"
+ }
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compression/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/compression/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "node_modules/constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "node_modules/copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.0.tgz",
+ "integrity": "sha512-1s/VbhIX73FBFBYF4D0KdeBLkjEnAlCQn0Ufo2a/IyJ41jHpQ9ZzM4JAfbE7yTOhbmwRFkARErJ/XIiLceja6Q==",
+ "dev": true,
+ "dependencies": {
+ "cacache": "^15.0.5",
+ "fast-glob": "^3.2.4",
+ "find-cache-dir": "^3.3.1",
+ "glob-parent": "^5.1.1",
+ "globby": "^11.0.1",
+ "loader-utils": "^2.0.0",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^3.0.2",
+ "schema-utils": "^2.7.1",
+ "serialize-javascript": "^5.0.1",
+ "webpack-sources": "^1.4.3"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+ "dev": true
+ },
+ "node_modules/copy-webpack-plugin/node_modules/ajv": {
+ "version": "6.12.5",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
+ "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
+ "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
+ "dev": true
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
+ "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.8.5",
+ "semver": "7.0.0"
+ }
+ },
+ "node_modules/core-js-compat/node_modules/semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "node_modules/create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ }
+ },
+ "node_modules/create-ecdh/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/css": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "source-map": "^0.6.1",
+ "source-map-resolve": "^0.5.2",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/css-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz",
+ "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^2.0.0",
+ "postcss": "^7.0.32",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.3",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^2.7.1",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+ "dev": true
+ },
+ "node_modules/css-loader/node_modules/ajv": {
+ "version": "6.12.5",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz",
+ "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/css-loader/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "node_modules/css-loader/node_modules/camelcase": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
+ "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/css-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/postcss": {
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/css-loader/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/css/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+ "dev": true
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/del/node_modules/globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del/node_modules/globby/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "node_modules/diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "node_modules/diffie-hellman/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "node_modules/dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "dev": true,
+ "dependencies": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "dependencies": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "node_modules/dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "dependencies": {
+ "utila": "~0.4"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+ "dev": true
+ },
+ "node_modules/domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.2"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "node_modules/domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.3.578",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.578.tgz",
+ "integrity": "sha512-z4gU6dA1CbBJsAErW5swTGAaU2TBzc2mPAonJb00zqW1rOraDo2zfBMDRvaz9cVic+0JEZiYbHWPw/fTaZlG2Q==",
+ "dev": true
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+ "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/enhanced-resolve/node_modules/memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "dev": true,
+ "dependencies": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.3.0 <5.0.0 || >=5.10"
+ }
+ },
+ "node_modules/entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz",
+ "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==",
+ "dev": true
+ },
+ "node_modules/errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "dependencies": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.53",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "dev": true,
+ "dependencies": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz",
+ "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
+ "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==",
+ "dev": true
+ },
+ "node_modules/events": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "dev": true,
+ "dependencies": {
+ "original": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "dependencies": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express/node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/ext": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
+ "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
+ "dev": true,
+ "dependencies": {
+ "type": "^2.0.0"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
+ "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==",
+ "dev": true
+ },
+ "node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend-shallow/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fable-babel-plugins": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/fable-babel-plugins/-/fable-babel-plugins-2.3.0.tgz",
+ "integrity": "sha512-alGBNw5HZJzTEznXKfypFEkD5aWsspbCcoVDu9j8Mqdi77dgp4BSjhYSg61mQEg9UluIAZxRM5lhGARYbU97DQ==",
+ "dev": true
+ },
+ "node_modules/fable-compiler": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/fable-compiler/-/fable-compiler-2.13.0.tgz",
+ "integrity": "sha512-eEd+ue0CWhLpZBXqkIm4uWTGPfX8Q14RkCwSrbO0zPfB9hHW8IylipJ4YVfCZKd27sHDTpGOBwW8JMHqMBrXPQ==",
+ "dev": true
+ },
+ "node_modules/fable-loader": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/fable-loader/-/fable-loader-2.1.9.tgz",
+ "integrity": "sha512-ffFfAx4+92yGRjV7iZQOCzqsjQF1he6Lei6hDqfaW1Qjbyx9bhVa8jCX53+I1mhWEw2JWIQpFzwHnYwz2eT4Hw==",
+ "dev": true,
+ "dependencies": {
+ "fable-babel-plugins": "^2.3.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+ "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-glob/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-glob/node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-glob/node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-glob/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz",
+ "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "dependencies": {
+ "websocket-driver": ">=0.5.1"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+ "dev": true
+ },
+ "node_modules/file-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
+ "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ }
+ },
+ "node_modules/file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz",
+ "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/follow-redirects/node_modules/debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-modules/node_modules/global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "dev": true,
+ "dependencies": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
+ "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/globby/node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "node_modules/handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-base/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/hash-base/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "node_modules/html-entities": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
+ "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==",
+ "dev": true
+ },
+ "node_modules/html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+ "dev": true,
+ "dependencies": {
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
+ },
+ "bin": {
+ "html-minifier": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/html-webpack-plugin": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+ "dev": true,
+ "dependencies": {
+ "html-minifier": "^3.2.3",
+ "loader-utils": "^0.2.16",
+ "lodash": "^4.17.3",
+ "pretty-error": "^2.0.2",
+ "tapable": "^1.0.0",
+ "toposort": "^1.0.0",
+ "util.promisify": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9"
+ }
+ },
+ "node_modules/html-webpack-plugin/node_modules/big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/html-webpack-plugin/node_modules/emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/html-webpack-plugin/node_modules/json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/html-webpack-plugin/node_modules/loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "node_modules/htmlparser2/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "dependencies": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.14"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+ "dev": true
+ },
+ "node_modules/iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "node_modules/ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "dependencies": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "node_modules/ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "dependencies": {
+ "is-path-inside": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "dependencies": {
+ "path-is-inside": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/jsan": {
+ "version": "3.1.13",
+ "resolved": "https://registry.npmjs.org/jsan/-/jsan-3.1.13.tgz",
+ "integrity": "sha512-9kGpCsGHifmw6oJet+y8HaCl14y7qgAsxVdV3pCHDySNR3BfDC30zgkssd7x5LRVAT22dnpbe9JdzzmXZnq9/g==",
+ "dev": true
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/klona": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-1.1.2.tgz",
+ "integrity": "sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levenary": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
+ "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
+ "dev": true,
+ "dependencies": {
+ "leven": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/linked-list": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/linked-list/-/linked-list-0.1.0.tgz",
+ "integrity": "sha1-eYsP+X0bkqT9CEgPVa6k6dSdN78=",
+ "dev": true
+ },
+ "node_modules/loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.3.0 <5.0.0 || >=5.10"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/loader-utils/node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+ "dev": true
+ },
+ "node_modules/loglevel": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "dependencies": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "bin": {
+ "miller-rabin": "bin/miller-rabin"
+ }
+ },
+ "node_modules/miller-rabin/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.44.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mini-css-extract-plugin": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.1.tgz",
+ "integrity": "sha512-9B10gZixtNjHerADBrMxPXM5G0uL0CRGMcLRV67I8nd1SKbwJrI0okKUzD+PxKsUZ9Dxt8/hPvtzF0DrRnrOyA==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^1.1.0",
+ "normalize-url": "1.9.1",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 6.9.0"
+ }
+ },
+ "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "dependencies": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ },
+ "bin": {
+ "multicast-dns": "cli.js"
+ }
+ },
+ "node_modules/multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "node_modules/nan": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/node-libs-browser/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/node-libs-browser/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "node_modules/node-libs-browser/node_modules/util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.3"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "1.1.61",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz",
+ "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "node_modules/object-is": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.getownpropertydescriptors": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
+ "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "dependencies": {
+ "is-wsl": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "dependencies": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "node_modules/os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz",
+ "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "dependencies": {
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "node_modules/parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "dev": true,
+ "dependencies": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "node_modules/param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "node_modules/parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.26",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
+ "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "7.0.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz",
+ "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
+ "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.32",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default/node_modules/postcss": {
+ "version": "7.0.35",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
+ "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
+ "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "node_modules/postcss/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pretty-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+ "dev": true,
+ "dependencies": {
+ "renderkid": "^2.0.1",
+ "utila": "~0.4"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "node_modules/prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "dependencies": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "node_modules/public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/public-encrypt/node_modules/bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/pumpify/node_modules/pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+ "dev": true
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/react": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
+ "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
+ "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.19.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
+ "dev": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.7",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
+ "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
+ "dev": true
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-parser": {
+ "version": "2.2.11",
+ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz",
+ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
+ "dev": true
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
+ "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.2.0",
+ "regjsgen": "^0.5.1",
+ "regjsparser": "^0.6.4",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsgen": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
+ "dev": true
+ },
+ "node_modules/regjsparser": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
+ "dev": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/remotedev": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/remotedev/-/remotedev-0.2.9.tgz",
+ "integrity": "sha512-W8dHOv9BcFnetFEd08yNb5O9Hd+zkTFFnf9FRjNCkb4u+JgQ/U152Aw4q83AmY3m34d6KZwhK5ip/Qc331+4vA==",
+ "dev": true,
+ "dependencies": {
+ "jsan": "^3.1.3",
+ "querystring": "^0.2.0",
+ "rn-host-detect": "^1.0.1",
+ "socketcluster-client": "^13.0.0"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "node_modules/renderkid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+ "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+ "dev": true,
+ "dependencies": {
+ "css-select": "^1.1.0",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.3.0",
+ "strip-ansi": "^3.0.0",
+ "utila": "^0.4.0"
+ }
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "dependencies": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-dir/node_modules/global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "node_modules/resolve-url-loader": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz",
+ "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==",
+ "dev": true,
+ "dependencies": {
+ "adjust-sourcemap-loader": "3.0.0",
+ "camelcase": "5.3.1",
+ "compose-function": "3.0.3",
+ "convert-source-map": "1.7.0",
+ "es6-iterator": "2.0.3",
+ "loader-utils": "1.2.3",
+ "postcss": "7.0.21",
+ "rework": "1.0.1",
+ "rework-visit": "1.0.0",
+ "source-map": "0.6.1"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/resolve-url-loader/node_modules/emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/resolve-url-loader/node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/resolve-url-loader/node_modules/loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/resolve-url-loader/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rework": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
+ "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
+ "dev": true,
+ "dependencies": {
+ "convert-source-map": "^0.3.3",
+ "css": "^2.0.0"
+ }
+ },
+ "node_modules/rework-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
+ "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=",
+ "dev": true
+ },
+ "node_modules/rework/node_modules/convert-source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+ "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=",
+ "dev": true
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/rn-host-detect": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/rn-host-detect/-/rn-host-detect-1.2.0.tgz",
+ "integrity": "sha512-btNg5kzHcjZZ7t7mvvV/4wNJ9e3MPgrWivkRgWURzXL0JJ0pwWlU4zrbmdlz3HHzHOxhBhHB4D+/dbMFfu4/4A==",
+ "dev": true
+ },
+ "node_modules/run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
+ "node_modules/run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "dependencies": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/sass": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz",
+ "integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": ">=2.0.0 <4.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/sass-loader": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-9.0.3.tgz",
+ "integrity": "sha512-fOwsP98ac1VMme+V3+o0HaaMHp8Q/C9P+MUazLFVi3Jl7ORGHQXL1XeRZt3zLSGZQQPC8xE42Y2WptItvGjDQg==",
+ "dev": true,
+ "dependencies": {
+ "klona": "^1.1.2",
+ "loader-utils": "^2.0.0",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^2.7.0",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/sass-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/sass-loader/node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/sass-loader/node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sc-channel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/sc-channel/-/sc-channel-1.2.0.tgz",
+ "integrity": "sha512-M3gdq8PlKg0zWJSisWqAsMmTVxYRTpVRqw4CWAdKBgAfVKumFcTjoCV0hYu7lgUXccCtCD8Wk9VkkE+IXCxmZA==",
+ "dev": true,
+ "dependencies": {
+ "component-emitter": "1.2.1"
+ }
+ },
+ "node_modules/sc-errors": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sc-errors/-/sc-errors-1.4.1.tgz",
+ "integrity": "sha512-dBn92iIonpChTxYLgKkIT/PCApvmYT6EPIbRvbQKTgY6tbEbIy8XVUv4pGyKwEK4nCmvX4TKXcN0iXC6tNW6rQ==",
+ "dev": true
+ },
+ "node_modules/sc-formatter": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/sc-formatter/-/sc-formatter-3.0.2.tgz",
+ "integrity": "sha512-9PbqYBpCq+OoEeRQ3QfFIGE6qwjjBcd2j7UjgDlhnZbtSnuGgHdcRklPKYGuYFH82V/dwd+AIpu8XvA1zqTd+A==",
+ "dev": true
+ },
+ "node_modules/scheduler": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "node_modules/schema-utils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.4",
+ "ajv": "^6.12.2",
+ "ajv-keywords": "^3.4.1"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ }
+ },
+ "node_modules/select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "node_modules/selfsigned": {
+ "version": "1.10.8",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz",
+ "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==",
+ "dev": true,
+ "dependencies": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "node_modules/serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-index/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/serve-index/node_modules/http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/serve-index/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/serve-index/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/serve-index/node_modules/setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "node_modules/serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/socketcluster-client": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/socketcluster-client/-/socketcluster-client-13.0.1.tgz",
+ "integrity": "sha512-hxiE2xz6mgaBlhXbtBa4POgWVEvIcjCoHzf5LTUVhI9IL8V2ltV3Ze8pQsi9egqTjSz4RHPfyrJ7BiETe5Kthw==",
+ "dev": true,
+ "dependencies": {
+ "base-64": "0.1.0",
+ "clone": "2.1.1",
+ "component-emitter": "1.2.1",
+ "linked-list": "0.1.0",
+ "querystring": "0.2.0",
+ "sc-channel": "^1.2.0",
+ "sc-errors": "^1.4.0",
+ "sc-formatter": "^3.0.1",
+ "uuid": "3.2.1",
+ "ws": "5.1.1"
+ }
+ },
+ "node_modules/socketcluster-client/node_modules/uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/sockjs": {
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
+ "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
+ "dev": true,
+ "dependencies": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.4.0",
+ "websocket-driver": "0.6.5"
+ }
+ },
+ "node_modules/sockjs-client": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/sockjs-client/node_modules/debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/sockjs-client/node_modules/faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "dependencies": {
+ "websocket-driver": ">=0.5.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "node_modules/spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/spdy-transport/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz",
+ "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "node_modules/stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+ "dev": true
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trimleft": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
+ "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimstart": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trimright": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
+ "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5",
+ "string.prototype.trimend": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/style-loader": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
+ "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.7.0"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ }
+ },
+ "node_modules/style-loader/node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
+ "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+ "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">= 6.9.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
+ },
+ "node_modules/terser-webpack-plugin/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "dev": true,
+ "dependencies": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/terser/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/terser/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "node_modules/timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "dev": true,
+ "dependencies": {
+ "setimmediate": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/toposort": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
+ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+ "dev": true
+ },
+ "node_modules/tslib": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz",
+ "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==",
+ "dev": true
+ },
+ "node_modules/tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+ "dev": true
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "node_modules/uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uglify-js/node_modules/commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "node_modules/uglify-js/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "node_modules/uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "node_modules/url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "dependencies": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "dev": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "2.0.1"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "node_modules/util/node_modules/inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "node_modules/utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
+ "dev": true
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ },
+ "node_modules/watchpack": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
+ "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.4.1",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "watchpack-chokidar2": "^2.0.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+ "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "chokidar": "^2.1.8"
+ },
+ "engines": {
+ "node": "<8.10.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "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"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "dependencies": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/watchpack-chokidar2/node_modules/readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "dependencies": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "4.44.2",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz",
+ "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.3.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.7.4",
+ "webpack-sources": "^1.4.1"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/webpack-cli": {
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
+ "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "cross-spawn": "^6.0.5",
+ "enhanced-resolve": "^4.1.1",
+ "findup-sync": "^3.0.0",
+ "global-modules": "^2.0.0",
+ "import-local": "^2.0.0",
+ "interpret": "^1.4.0",
+ "loader-utils": "^1.4.0",
+ "supports-color": "^6.1.0",
+ "v8-compile-cache": "^2.1.1",
+ "yargs": "^13.3.2"
+ },
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-middleware": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "dev": true,
+ "dependencies": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/webpack-dev-middleware/node_modules/mime": {
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/webpack-dev-server": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
+ "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.7",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.20",
+ "sockjs-client": "1.4.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "bin": {
+ "webpack-dev-server": "bin/webpack-dev-server.js"
+ },
+ "engines": {
+ "node": ">= 6.11.5"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "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"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "dependencies": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "node_modules/webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "dev": true,
+ "dependencies": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/webpack-sources/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/websocket-driver": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
+ "dev": true,
+ "dependencies": {
+ "websocket-extensions": ">=0.1.1"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "node_modules/worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "dev": true,
+ "dependencies": {
+ "errno": "~0.1.7"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/ws": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz",
+ "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ }
+ },
"dependencies": {
"@babel/code-frame": {
"version": "7.10.4",
@@ -7199,6 +17064,15 @@
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
"dev": true
},
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -7269,15 +17143,6 @@
"es-abstract": "^1.17.5"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
diff --git a/paket.dependencies b/paket.dependencies
index 6f5e1cf6..b3cdc79a 100644
--- a/paket.dependencies
+++ b/paket.dependencies
@@ -5,13 +5,15 @@ storage: none
nuget Fable.Remoting.Giraffe
nuget Fable.SimpleJson 3.11.0
nuget Fable.SimpleXml
+nuget FSharp.Data
nuget Fulma.Extensions.Wikiki.Checkradio
nuget Fulma.Extensions.Wikiki.Slider
nuget Saturn
nuget Expecto
nuget MySql.Data 8.0.21
nuget Microsoft.AspNetCore.Authentication.JwtBearer 3.1.10
-nuget Microsoft.Extensions.Configuration.UserSecrets
+nuget Microsoft.Extensions.Configuration.UserSecrets
+nuget ISADotNet.Fable
nuget Fable.Core
@@ -28,19 +30,5 @@ nuget Fable.Browser.MediaQueryList
nuget Fable.Elmish.Browser
nuget Fulma.Extensions.Wikiki.Tooltip
nuget Fulma.Extensions.Wikiki.Switch
+nuget System.Text.Encodings.Web
nuget Thoth.Elmish.Debouncer
-
-group Build
- source https://api.nuget.org/v3/index.json
- framework: netstandard2.0
- storage: none
-
- nuget Fake.Api.GitHub
- nuget Fake.DotNet.AssemblyInfoFile 5.20.3
- nuget Fake.Tools.Git 5.20.3
- nuget FSharp.Core 4.7.2
- nuget Fake.Core.ReleaseNotes
- nuget Fake.Core.Target
- nuget Fake.DotNet.Cli
- nuget Fake.IO.FileSystem
- nuget Farmer
\ No newline at end of file
diff --git a/paket.lock b/paket.lock
index 24769978..2307286b 100644
--- a/paket.lock
+++ b/paket.lock
@@ -32,8 +32,8 @@ NUGET
Fable.Browser.Event (>= 1.2.1)
Fable.Core (>= 3.0)
FSharp.Core (>= 4.7)
- Fable.Core (3.2.2)
- FSharp.Core (>= 4.7)
+ Fable.Core (3.2.3)
+ FSharp.Core (>= 4.7.2)
Fable.Elmish (3.1)
Fable.Core (>= 3.0)
FSharp.Core (>= 4.6.2)
@@ -70,9 +70,9 @@ NUGET
Fable.Parsimmon (4.1)
Fable.Core (>= 3.0)
FSharp.Core (>= 4.6.2)
- Fable.Promise (2.1)
+ Fable.Promise (2.2)
Fable.Core (>= 3.1.5)
- FSharp.Core (>= 4.7)
+ FSharp.Core (>= 5.0)
Fable.React (7.2)
Fable.Browser.Dom (>= 2.0.1)
Fable.Core (>= 3.1.5)
@@ -110,6 +110,11 @@ NUGET
FSharp.Core (>= 4.3.4)
Microsoft.IO.RecyclableMemoryStream (>= 1.2.2)
FSharp.Core (5.0)
+ FSharp.Data (3.3.3)
+ FSharp.Core (>= 4.3.4)
+ FSharp.SystemTextJson (0.16.6)
+ FSharp.Core (>= 4.7)
+ System.Text.Json (>= 4.6)
Fulma (2.10)
Fable.Core (>= 3.0)
Fable.React (>= 5.1)
@@ -138,6 +143,11 @@ NUGET
Google.Protobuf (3.14)
System.Memory (>= 4.5.3)
System.Runtime.CompilerServices.Unsafe (>= 4.5.2)
+ ISADotNet.Fable (0.1)
+ FSharp.Core (>= 5.0)
+ FSharp.SystemTextJson (>= 0.16.6)
+ System.Text.Encodings.Web (>= 5.0)
+ System.Text.Json (>= 5.0.1)
K4os.Compression.LZ4 (1.2.6)
System.Memory (>= 4.5.4)
K4os.Compression.LZ4.Streams (1.2.6)
@@ -191,9 +201,8 @@ NUGET
Microsoft.CSharp (>= 4.5)
Microsoft.IdentityModel.Logging (>= 6.8)
System.Security.Cryptography.Cng (>= 4.5)
- Microsoft.IO.RecyclableMemoryStream (1.3.6)
+ Microsoft.IO.RecyclableMemoryStream (1.4)
Microsoft.NETCore.Platforms (5.0)
- Microsoft.NETCore.Targets (5.0)
Microsoft.Win32.SystemEvents (5.0)
Microsoft.NETCore.Platforms (>= 5.0)
Mono.Cecil (0.11.3)
@@ -212,354 +221,49 @@ NUGET
NETStandard.Library (2.0.3)
Microsoft.NETCore.Platforms (>= 1.1)
Newtonsoft.Json (12.0.3)
- runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.native.System (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
- runtime.native.System.Security.Cryptography.Apple (4.3.1)
- runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1)
- runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
- runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1)
- runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
- runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
Saturn (0.14.1)
FSharp.Control.Websockets (>= 0.2.2)
FSharp.Core (>= 4.7.2)
Giraffe (>= 4.1)
Microsoft.AspNetCore.Authentication.JwtBearer (>= 3.0.3)
System.Threading.Tasks.Dataflow (>= 4.11.1)
- SSH.NET (2016.1)
- Microsoft.CSharp (>= 4.0.1)
- SshNet.Security.Cryptography (1.2)
- System.Diagnostics.Debug (>= 4.0.11)
- System.Diagnostics.Tools (>= 4.0.1)
- System.Diagnostics.TraceSource (>= 4.0)
- System.Globalization (>= 4.0.11)
- System.IO (>= 4.1)
- System.IO.FileSystem (>= 4.0.1)
- System.IO.FileSystem.Primitives (>= 4.0.1)
- System.Linq (>= 4.1)
- System.Net.NameResolution (>= 4.0)
- System.Net.Sockets (>= 4.1)
- System.Reflection.Extensions (>= 4.0.1)
- System.Runtime.Extensions (>= 4.1)
- System.Security.Cryptography.Algorithms (>= 4.2)
- System.Text.RegularExpressions (>= 4.1)
- System.Threading (>= 4.0.11)
- System.Threading.Thread (>= 4.0)
- System.Threading.ThreadPool (>= 4.0.10)
- System.Threading.Timer (>= 4.0.1)
- System.Xml.XmlDocument (>= 4.0.1)
- System.Xml.XPath.XmlDocument (>= 4.0.1)
- SshNet.Security.Cryptography (1.2)
- System.IO (>= 4.1)
- System.Security.Cryptography.Primitives (>= 4.0)
+ SSH.NET (2020.0.1)
+ SshNet.Security.Cryptography (1.3)
+ SshNet.Security.Cryptography (1.3)
System.Buffers (4.5.1)
- System.Collections (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Collections.Concurrent (4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Diagnostics.Tracing (>= 4.3)
- System.Globalization (>= 4.3)
- System.Reflection (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Threading (>= 4.3)
- System.Threading.Tasks (>= 4.3)
System.Configuration.ConfigurationManager (5.0)
System.Security.Cryptography.ProtectedData (>= 5.0)
System.Security.Permissions (>= 5.0)
- System.Diagnostics.Debug (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Diagnostics.Tools (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Diagnostics.TraceSource (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- runtime.native.System (>= 4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Globalization (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Threading (>= 4.3)
- System.Diagnostics.Tracing (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
System.Drawing.Common (5.0)
Microsoft.Win32.SystemEvents (>= 5.0)
System.Formats.Asn1 (5.0)
- System.Globalization (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
System.IdentityModel.Tokens.Jwt (6.8)
Microsoft.IdentityModel.JsonWebTokens (>= 6.8)
Microsoft.IdentityModel.Tokens (>= 6.8)
- System.IO (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.IO.FileSystem (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.IO (>= 4.3)
- System.IO.FileSystem.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.IO.FileSystem.Primitives (4.3)
- System.Runtime (>= 4.3)
- System.Linq (4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
System.Memory (4.5.4)
- System.Net.NameResolution (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- runtime.native.System (>= 4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Tracing (>= 4.3)
- System.Globalization (>= 4.3)
- System.Net.Primitives (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Runtime.InteropServices (>= 4.3)
- System.Security.Principal.Windows (>= 4.3)
- System.Threading (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.Net.Primitives (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
- System.Runtime (>= 4.3.1)
- System.Runtime.Handles (>= 4.3)
- System.Net.Sockets (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.IO (>= 4.3)
- System.Net.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.Reflection (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.IO (>= 4.3)
- System.Reflection.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
System.Reflection.Emit (4.7)
System.Reflection.Emit.Lightweight (4.7)
- System.Reflection.Extensions (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Reflection (>= 4.3)
- System.Runtime (>= 4.3)
- System.Reflection.Primitives (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Resources.ResourceManager (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Globalization (>= 4.3)
- System.Reflection (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
System.Runtime.CompilerServices.Unsafe (5.0)
- System.Runtime.Extensions (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
- System.Runtime (>= 4.3.1)
- System.Runtime.Handles (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Runtime.InteropServices (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Reflection (>= 4.3)
- System.Reflection.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Runtime.Numerics (4.3)
- System.Globalization (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
System.Security.AccessControl (5.0)
Microsoft.NETCore.Platforms (>= 5.0)
System.Security.Principal.Windows (>= 5.0)
- System.Security.Cryptography.Algorithms (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1)
- runtime.native.System.Security.Cryptography.Apple (>= 4.3.1)
- runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2)
- System.Collections (>= 4.3)
- System.IO (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Runtime.InteropServices (>= 4.3)
- System.Runtime.Numerics (>= 4.3)
- System.Security.Cryptography.Encoding (>= 4.3)
- System.Security.Cryptography.Primitives (>= 4.3)
- System.Text.Encoding (>= 4.3)
System.Security.Cryptography.Cng (5.0)
System.Formats.Asn1 (>= 5.0)
- System.Security.Cryptography.Encoding (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3)
- System.Collections (>= 4.3)
- System.Collections.Concurrent (>= 4.3)
- System.Linq (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Runtime.InteropServices (>= 4.3)
- System.Security.Cryptography.Primitives (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Security.Cryptography.Primitives (4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Globalization (>= 4.3)
- System.IO (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Threading (>= 4.3)
- System.Threading.Tasks (>= 4.3)
System.Security.Cryptography.ProtectedData (5.0)
System.Security.Permissions (5.0)
System.Security.AccessControl (>= 5.0)
System.Windows.Extensions (>= 5.0)
System.Security.Principal.Windows (5.0)
- System.Text.Encoding (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
System.Text.Encoding.CodePages (5.0)
Microsoft.NETCore.Platforms (>= 5.0)
System.Runtime.CompilerServices.Unsafe (>= 5.0)
- System.Text.Encoding.Extensions (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Text.Json (5.0)
- System.Text.RegularExpressions (4.3.1)
- System.Runtime (>= 4.3.1)
- System.Threading (4.3)
- System.Runtime (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.Threading.Tasks (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
+ System.Text.Encodings.Web (5.0)
+ System.Text.Json (5.0.1)
System.Threading.Tasks.Dataflow (5.0)
System.Threading.Tasks.Extensions (4.5.4)
- System.Threading.Thread (4.3)
- System.Runtime (>= 4.3)
- System.Threading.ThreadPool (4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Threading.Timer (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
System.ValueTuple (4.5)
System.Windows.Extensions (5.0)
System.Drawing.Common (>= 5.0)
- System.Xml.ReaderWriter (4.3.1)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Globalization (>= 4.3)
- System.IO (>= 4.3)
- System.IO.FileSystem (>= 4.3)
- System.IO.FileSystem.Primitives (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Runtime.InteropServices (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Text.Encoding.Extensions (>= 4.3)
- System.Text.RegularExpressions (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.Threading.Tasks.Extensions (>= 4.3)
- System.Xml.XmlDocument (4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Globalization (>= 4.3)
- System.IO (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Threading (>= 4.3)
- System.Xml.ReaderWriter (>= 4.3)
- System.Xml.XPath (4.3)
- System.Collections (>= 4.3)
- System.Diagnostics.Debug (>= 4.3)
- System.Globalization (>= 4.3)
- System.IO (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Threading (>= 4.3)
- System.Xml.ReaderWriter (>= 4.3)
- System.Xml.XPath.XmlDocument (4.3)
- System.Collections (>= 4.3)
- System.Globalization (>= 4.3)
- System.IO (>= 4.3)
- System.Resources.ResourceManager (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Extensions (>= 4.3)
- System.Threading (>= 4.3)
- System.Xml.ReaderWriter (>= 4.3)
- System.Xml.XmlDocument (>= 4.3)
- System.Xml.XPath (>= 4.3)
TaskBuilder.fs (2.1)
FSharp.Core (>= 4.1.17)
NETStandard.Library (>= 1.6.1)
@@ -570,9 +274,9 @@ NUGET
Fable.Promise (>= 2.0)
Fable.React (>= 5.1)
FSharp.Core (>= 4.6.2)
- Thoth.Json (5.0)
- Fable.Core (>= 3.1.4)
- FSharp.Core (>= 4.7)
+ Thoth.Json (5.1)
+ Fable.Core (>= 3.1.6)
+ FSharp.Core (>= 4.7.2)
TypeShape (9.0)
FSharp.Core (>= 4.3.2)
Utf8Json (1.3.7)
@@ -580,259 +284,3 @@ NUGET
System.Reflection.Emit.Lightweight (>= 4.3)
System.Threading.Tasks.Extensions (>= 4.4)
System.ValueTuple (>= 4.4)
-
-GROUP Build
-STORAGE: NONE
-RESTRICTION: == netstandard2.0
-NUGET
- remote: https://api.nuget.org/v3/index.json
- BlackFox.VsWhere (1.1)
- FSharp.Core (>= 4.2.3)
- Microsoft.Win32.Registry (>= 4.7)
- Fake.Api.GitHub (5.20.3)
- FSharp.Core (>= 4.7.2)
- Octokit (>= 0.48)
- Fake.Core.CommandLineParsing (5.20.3)
- FParsec (>= 1.1.1)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Context (5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Environment (5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.FakeVar (5.20.3)
- Fake.Core.Context (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Process (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.FakeVar (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- System.Collections.Immutable (>= 1.7.1)
- Fake.Core.ReleaseNotes (5.20.3)
- Fake.Core.SemVer (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.SemVer (5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.String (5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Target (5.20.3)
- Fake.Core.CommandLineParsing (>= 5.20.3)
- Fake.Core.Context (>= 5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.FakeVar (>= 5.20.3)
- Fake.Core.Process (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- FSharp.Control.Reactive (>= 4.4.2)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Tasks (5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Trace (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.FakeVar (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Xml (5.20.3)
- Fake.Core.String (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.DotNet.AssemblyInfoFile (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.DotNet.Cli (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.Process (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.DotNet.MSBuild (>= 5.20.3)
- Fake.DotNet.NuGet (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Mono.Posix.NETStandard (>= 1.0)
- Newtonsoft.Json (>= 12.0.3)
- Fake.DotNet.MSBuild (5.20.3)
- BlackFox.VsWhere (>= 1.1)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.Process (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- MSBuild.StructuredLogger (>= 2.1.176)
- Fake.DotNet.NuGet (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.Process (>= 5.20.3)
- Fake.Core.SemVer (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Tasks (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.Core.Xml (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- Fake.Net.Http (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Newtonsoft.Json (>= 12.0.3)
- NuGet.Protocol (>= 5.6)
- Fake.IO.FileSystem (5.20.3)
- Fake.Core.String (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Net.Http (5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Fake.Tools.Git (5.20.3)
- Fake.Core.Environment (>= 5.20.3)
- Fake.Core.Process (>= 5.20.3)
- Fake.Core.SemVer (>= 5.20.3)
- Fake.Core.String (>= 5.20.3)
- Fake.Core.Trace (>= 5.20.3)
- Fake.IO.FileSystem (>= 5.20.3)
- FSharp.Core (>= 4.7.2)
- Farmer (1.3)
- FSharp.Core (>= 4.7.1)
- Newtonsoft.Json (>= 12.0.2)
- FParsec (1.1.1)
- FSharp.Core (>= 4.3.4)
- FSharp.Control.Reactive (4.5)
- FSharp.Core (>= 4.7.2)
- System.Reactive (>= 4.4.1)
- FSharp.Core (4.7.2)
- Microsoft.Build (16.8)
- Microsoft.Build.Framework (16.8)
- System.Security.Permissions (>= 4.7)
- Microsoft.Build.Tasks.Core (16.8)
- Microsoft.Build.Framework (>= 16.8)
- Microsoft.Build.Utilities.Core (>= 16.8)
- Microsoft.Win32.Registry (>= 4.3)
- System.CodeDom (>= 4.4)
- System.Collections.Immutable (>= 1.5)
- System.Reflection.Metadata (>= 1.6)
- System.Reflection.TypeExtensions (>= 4.1)
- System.Resources.Extensions (>= 4.6)
- System.Runtime.InteropServices (>= 4.3)
- System.Security.Cryptography.Pkcs (>= 4.7)
- System.Security.Cryptography.Xml (>= 4.7)
- System.Security.Permissions (>= 4.7)
- System.Threading.Tasks.Dataflow (>= 4.9)
- Microsoft.Build.Utilities.Core (16.8)
- Microsoft.Build.Framework (>= 16.8)
- Microsoft.Win32.Registry (>= 4.3)
- System.Collections.Immutable (>= 1.5)
- System.Security.Permissions (>= 4.7)
- System.Text.Encoding.CodePages (>= 4.0.1)
- Microsoft.NETCore.Platforms (5.0)
- Microsoft.NETCore.Targets (5.0)
- Microsoft.Win32.Registry (5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.Security.AccessControl (>= 5.0)
- System.Security.Principal.Windows (>= 5.0)
- Mono.Posix.NETStandard (1.0)
- MSBuild.StructuredLogger (2.1.215)
- Microsoft.Build (>= 16.4)
- Microsoft.Build.Framework (>= 16.4)
- Microsoft.Build.Tasks.Core (>= 16.4)
- Microsoft.Build.Utilities.Core (>= 16.4)
- Newtonsoft.Json (12.0.3)
- NuGet.Common (5.8)
- NuGet.Frameworks (>= 5.8)
- NuGet.Configuration (5.8)
- NuGet.Common (>= 5.8)
- System.Security.Cryptography.ProtectedData (>= 4.4)
- NuGet.Frameworks (5.8)
- NuGet.Packaging (5.8)
- Newtonsoft.Json (>= 9.0.1)
- NuGet.Configuration (>= 5.8)
- NuGet.Versioning (>= 5.8)
- System.Security.Cryptography.Cng (>= 5.0.0-preview.3.20214.6)
- System.Security.Cryptography.Pkcs (>= 5.0.0-preview.3.20214.6)
- NuGet.Protocol (5.8)
- NuGet.Packaging (>= 5.8)
- NuGet.Versioning (5.8)
- Octokit (0.48)
- System.Buffers (4.5.1)
- System.CodeDom (5.0)
- System.Collections.Immutable (5.0)
- System.Memory (>= 4.5.4)
- System.Formats.Asn1 (5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.IO (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Text.Encoding (>= 4.3)
- System.Threading.Tasks (>= 4.3)
- System.Memory (4.5.4)
- System.Buffers (>= 4.5.1)
- System.Numerics.Vectors (>= 4.4)
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
- System.Numerics.Vectors (4.5)
- System.Reactive (5.0)
- System.Runtime.InteropServices.WindowsRuntime (>= 4.3)
- System.Threading.Tasks.Extensions (>= 4.5.4)
- System.Reflection (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.IO (>= 4.3)
- System.Reflection.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
- System.Reflection.Metadata (5.0)
- System.Collections.Immutable (>= 5.0)
- System.Reflection.Primitives (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Reflection.TypeExtensions (4.7)
- System.Resources.Extensions (5.0)
- System.Memory (>= 4.5.4)
- System.Runtime (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
- System.Runtime.CompilerServices.Unsafe (5.0)
- System.Runtime.Handles (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Runtime.InteropServices (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Reflection (>= 4.3)
- System.Reflection.Primitives (>= 4.3)
- System.Runtime (>= 4.3)
- System.Runtime.Handles (>= 4.3)
- System.Runtime.InteropServices.WindowsRuntime (4.3)
- System.Runtime (>= 4.3)
- System.Security.AccessControl (5.0)
- System.Security.Principal.Windows (>= 5.0)
- System.Security.Cryptography.Cng (5.0)
- System.Security.Cryptography.Pkcs (5.0.1)
- System.Buffers (>= 4.5.1)
- System.Formats.Asn1 (>= 5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Cng (>= 5.0)
- System.Security.Cryptography.ProtectedData (5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Xml (5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Pkcs (>= 5.0)
- System.Security.Permissions (>= 5.0)
- System.Security.Permissions (5.0)
- System.Security.AccessControl (>= 5.0)
- System.Security.Principal.Windows (5.0)
- System.Text.Encoding (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Text.Encoding.CodePages (5.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- System.Threading.Tasks (4.3)
- Microsoft.NETCore.Platforms (>= 1.1)
- Microsoft.NETCore.Targets (>= 1.1)
- System.Runtime (>= 4.3)
- System.Threading.Tasks.Dataflow (5.0)
- System.Threading.Tasks.Extensions (4.5.4)
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
diff --git a/src/Client/Api.fs b/src/Client/Api.fs
index e43c021c..8335e50c 100644
--- a/src/Client/Api.fs
+++ b/src/Client/Api.fs
@@ -12,4 +12,9 @@ let api : IAnnotatorAPIv1 =
let serviceApi : IServiceAPIv1 =
Remoting.createApi()
|> Remoting.withRouteBuilder Route.builder
- |> Remoting.buildProxy
\ No newline at end of file
+ |> Remoting.buildProxy
+
+let isaDotNetApi : IISADotNetAPIv1 =
+ Remoting.createApi()
+ |> Remoting.withRouteBuilder Route.builder
+ |> Remoting.buildProxy
\ No newline at end of file
diff --git a/src/Client/Client.fs b/src/Client/Client.fs
index 2ef8661a..a8de597a 100644
--- a/src/Client/Client.fs
+++ b/src/Client/Client.fs
@@ -63,49 +63,56 @@ let view (model : Model) (dispatch : Msg -> unit) =
BaseView.baseViewComponent model dispatch [
TermSearchView.termSearchComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.Validation ->
BaseView.baseViewComponent model dispatch [
ValidationView.validationComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.FilePicker ->
BaseView.baseViewComponent model dispatch [
FilePickerView.filePickerComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
+ ]
+
+ | Routing.Route.ProtocolInsert ->
+ BaseView.baseViewComponent model dispatch [
+ ProtocolInsertView.fileUploadViewComponent model dispatch
+ ] [
+ //Text.p [] [str ""]
]
| Routing.Route.ActivityLog ->
BaseView.baseViewComponent model dispatch [
ActivityLogView.activityLogComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.Settings ->
BaseView.baseViewComponent model dispatch [
SettingsView.settingsViewComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.Info ->
BaseView.baseViewComponent model dispatch [
InfoView.infoComponent model dispatch
][
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.NotFound ->
BaseView.baseViewComponent model dispatch [
NotFoundView.notFoundComponent model dispatch
] [
- Text.p [] [str ""]
+ //Text.p [] [str ""]
]
| Routing.Route.Home ->
diff --git a/src/Client/Client.fsproj b/src/Client/Client.fsproj
index b1a24fb8..47030530 100644
--- a/src/Client/Client.fsproj
+++ b/src/Client/Client.fsproj
@@ -5,10 +5,12 @@
FABLE_COMPILER
+
+
@@ -36,8 +38,9 @@
-
+
+
diff --git a/src/Client/CustomComponents/AdvancedSearch.fs b/src/Client/CustomComponents/AdvancedSearch.fs
index 464aeca3..b41b83b2 100644
--- a/src/Client/CustomComponents/AdvancedSearch.fs
+++ b/src/Client/CustomComponents/AdvancedSearch.fs
@@ -115,13 +115,16 @@ let advancedTermSearchComponent (model:Model) (dispatch: Msg -> unit) =
]
]
Dropdown.menu [Props[colorControl model.SiteStyleState.ColorMode];] [
- Dropdown.content [] [
+ Dropdown.content [
+ Props [Style [MaxHeight "180px"; OverflowY OverflowOptions.Scroll; MarginRight "-100px"; PaddingRight "100px"; Border "1px solid darkgrey"]]
+ ] [
// all ontologies found in database
yield createOntologyDropdownItem model dispatch None
yield! (
model.PersistentStorageState.SearchableOntologies
|> Array.map snd
|> Array.toList
+ |> List.sortBy (fun o -> o.Name)
|> List.map (fun ont -> createOntologyDropdownItem model dispatch (Some ont))
)
]
diff --git a/src/Client/CustomComponents/AnnotationTableMissingWarning.fs b/src/Client/CustomComponents/AnnotationTableMissingWarning.fs
index 52898ea0..028f79bc 100644
--- a/src/Client/CustomComponents/AnnotationTableMissingWarning.fs
+++ b/src/Client/CustomComponents/AnnotationTableMissingWarning.fs
@@ -8,14 +8,18 @@ open ExcelColors
open Model
open Messages
+
let annotationTableMissingWarningComponent (model:Model) (dispatch: Msg-> unit) =
Notification.notification [
Notification.Color IsWarning
Notification.Props [
-
]
] [
- Notification.delete [] []
+ Notification.delete [ Props [
+ OnClick (fun e ->
+ AnnotationTableExists (OfficeInterop.Types.TryFindAnnoTableResult.Success "Remove Warning Notification") |> ExcelInterop |> dispatch
+ )
+ ]] [ ]
Heading.h5 [] [str "Warning: No Annotation table found in worksheet"]
Text.p [] [
str "Your worksheet seems to contain no annotation table. You can create one by pressing the button below"
diff --git a/src/Client/CustomComponents/AutocompleteSearch.fs b/src/Client/CustomComponents/AutocompleteSearch.fs
index 6ce59dc0..ffe2d05d 100644
--- a/src/Client/CustomComponents/AutocompleteSearch.fs
+++ b/src/Client/CustomComponents/AutocompleteSearch.fs
@@ -90,11 +90,29 @@ with
DropDownIsLoading = state.HasUnitTermSuggestionsLoading
AdvancedSearchLinkText = "Can't find the unit you are looking for?"
- OnInputChangeMsg = (SearchUnitTermTextChange >> AddBuildingBlock)
- OnSuggestionSelect = (fun sugg -> (sugg.Name,sugg.Accession) |> UnitTermSuggestionUsed |> AddBuildingBlock)
+ OnInputChangeMsg = (fun str -> SearchUnitTermTextChange (str, Unit1) |> AddBuildingBlock)
+ OnSuggestionSelect = (fun sugg -> (sugg, Unit1) |> UnitTermSuggestionUsed |> AddBuildingBlock)
HasAdvancedSearch = true
- OnAdvancedSearch = (fun sugg -> (sugg.Name,sugg.Accession) |> UnitTermSuggestionUsed |> AddBuildingBlock)
+ OnAdvancedSearch = (fun sugg -> (sugg, Unit1) |> UnitTermSuggestionUsed |> AddBuildingBlock)
+ }
+
+ static member ofAddBuildingBlockUnit2State (state:AddBuildingBlockState) : AutocompleteParameters = {
+ ModalId = "Unit2Search_ID"
+ InputId = "Unit2SearchInput_ID"
+
+ StateBinding = state.Unit2TermSearchText
+ Suggestions = state.Unit2TermSuggestions |> Array.map AutocompleteSuggestion.ofTerm
+ MaxItems = 5
+ DropDownIsVisible = state.ShowUnit2TermSuggestions
+ DropDownIsLoading = state.HasUnit2TermSuggestionsLoading
+
+ AdvancedSearchLinkText = "Can't find the unit you are looking for?"
+ OnInputChangeMsg = (fun str -> SearchUnitTermTextChange (str,Unit2) |> AddBuildingBlock)
+ OnSuggestionSelect = (fun sugg -> (sugg, Unit2) |> UnitTermSuggestionUsed |> AddBuildingBlock)
+
+ HasAdvancedSearch = true
+ OnAdvancedSearch = (fun sugg -> (sugg, Unit2) |> UnitTermSuggestionUsed |> AddBuildingBlock)
}
static member ofAddBuildingBlockState (state:AddBuildingBlockState) : AutocompleteParameters = {
@@ -104,16 +122,15 @@ with
StateBinding = state.CurrentBuildingBlock.Name
Suggestions = state.BuildingBlockNameSuggestions |> Array.map AutocompleteSuggestion.ofTerm
MaxItems = 5
- DropDownIsVisible = state.ShowBuildingBlockNameSuggestions
- DropDownIsLoading = state.HasBuildingBlockNameSuggestionsLoading
+ DropDownIsVisible = state.ShowBuildingBlockTermSuggestions
+ DropDownIsLoading = state.HasBuildingBlockTermSuggestionsLoading
OnInputChangeMsg = (BuildingBlockNameChange >> AddBuildingBlock)
- OnSuggestionSelect = (fun sugg -> sugg.Name |> BuildingBlockNameSuggestionUsed |> AddBuildingBlock)
+ OnSuggestionSelect = (fun sugg -> sugg |> BuildingBlockNameSuggestionUsed |> AddBuildingBlock)
HasAdvancedSearch = true
AdvancedSearchLinkText = "Cant find the Term you are looking for?"
- OnAdvancedSearch = (fun sugg -> sugg.Name |> BuildingBlockNameSuggestionUsed |> AddBuildingBlock
- )
+ OnAdvancedSearch = (fun sugg -> sugg |> BuildingBlockNameSuggestionUsed |> AddBuildingBlock)
}
@@ -183,13 +200,17 @@ let createAutocompleteSuggestions
let autocompleteDropdownComponent (dispatch:Msg -> unit) (colorMode:ColorMode) (isVisible: bool) (isLoading:bool) (suggestions: ReactElement list) =
- Container.container[] [
+ Container.container[ ] [
Dropdown.content [Props [
Style [
if isVisible then Display DisplayOptions.Block else Display DisplayOptions.None
//if model.ShowFillSuggestions then Display DisplayOptions.Block else Display DisplayOptions.None
+ ZIndex "20"
+ Width "100%"
+ Position PositionOptions.Absolute
BackgroundColor colorMode.ControlBackground
BorderColor colorMode.ControlForeground
+ MarginTop "-0.5rem"
]]
] [
Table.table [Table.IsFullWidth] [
@@ -226,6 +247,7 @@ let autocompleteTermSearchComponent
Input.input [
Input.Disabled isDisabled
Input.Placeholder inputPlaceholderText
+ Input.ValueOrDefault autocompleteParams.StateBinding
match inputSize with
| Some size -> Input.Size size
| _ -> ()
@@ -261,7 +283,9 @@ let autocompleteTermSearchComponentOfParentOntology
match inputSize with
| Some size -> Button.Size size
| _ -> ()
- ] [str (sprintf "%A" model.TermSearchState.ParentOntology.Value)]
+ ] [str (
+ sprintf "%A" (if model.TermSearchState.ParentOntology.IsSome then model.TermSearchState.ParentOntology.Value.Name else "")
+ )]
]
Control.div [Control.IsExpanded] [
@@ -277,6 +301,7 @@ let autocompleteTermSearchComponentOfParentOntology
| Some size -> Input.Size size
| _ -> ()
Input.Props [
+
ExcelColors.colorControl colorMode
//OnFocus (fun e -> alert "focusout")
//OnBlur (fun e -> alert "focusin")
diff --git a/src/Client/CustomComponents/ErrorModal.fs b/src/Client/CustomComponents/ErrorModal.fs
index 23609566..3c70815e 100644
--- a/src/Client/CustomComponents/ErrorModal.fs
+++ b/src/Client/CustomComponents/ErrorModal.fs
@@ -19,7 +19,7 @@ let errorModal (model:Model) dispatch =
] [ ]
Notification.notification [
Notification.Color IsDanger
- Notification.Props [Style [MaxWidth "80%"]]
+ Notification.Props [Style [MaxWidth "80%"; MaxHeight "80%"; OverflowX OverflowOptions.Auto (*CSSProp.Custom ("overflow", "scroll")*)]]
] [
Notification.delete [Props [OnClick closeMsg]][]
str model.DevState.LastFullError.Value.Message
diff --git a/src/Client/CustomComponents/Navbar.fs b/src/Client/CustomComponents/Navbar.fs
index 0297bf6a..b0a69443 100644
--- a/src/Client/CustomComponents/Navbar.fs
+++ b/src/Client/CustomComponents/Navbar.fs
@@ -3,22 +3,24 @@ module CustomComponents.Navbar
open Fable.React
open Fable.React.Props
open Fulma
+open Fable.FontAwesome
+open Fulma.Extensions.Wikiki
open ExcelColors
open Model
open Messages
-open Fable.FontAwesome
let navbarComponent (model : Model) (dispatch : Msg -> unit) =
Navbar.navbar [Navbar.Props [Props.Role "navigation"; AriaLabel "main navigation" ; ExcelColors.colorElement model.SiteStyleState.ColorMode]] [
Navbar.Brand.a [] [
Navbar.Item.a [Navbar.Item.Props [Props.Href "https://csb.bio.uni-kl.de/"]] [
- img [Props.Src "../assets/CSB_Logo.png"]
+ img [Props.Src "../assets/Swate_logo_for_excel.svg"]
]
- Navbar.Item.a [Navbar.Item.Props [Title "Add New Annotation Table"; Style [ Color model.SiteStyleState.ColorMode.Text]]] [
+ Navbar.Item.a [Navbar.Item.Props [Style [ Color model.SiteStyleState.ColorMode.Text]]] [
Button.a [
- Button.Props [Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]]
+ Button.CustomClass (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
+ Button.Props [ Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]; Tooltip.dataTooltip ("Add Annotation Table") ]
Button.OnClick (fun _ ->
(fun (allNames) ->
CreateAnnotationTable (allNames,model.SiteStyleState.IsDarkMode))
@@ -33,19 +35,26 @@ let navbarComponent (model : Model) (dispatch : Msg -> unit) =
Fa.span [Fa.Solid.Table][]
]
]
- Navbar.Item.a [Navbar.Item.Props [Title "Autoformat Table"; Style [ Color model.SiteStyleState.ColorMode.Text]]] [
+ Navbar.Item.a [Navbar.Item.Props [Style [ Color model.SiteStyleState.ColorMode.Text]]] [
Button.a [
- Button.Props [Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]]
- Button.OnClick (fun e -> PipeActiveAnnotationTable AutoFitTable |> ExcelInterop |> dispatch )
+ Button.CustomClass (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
+ Button.Props [Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]; Tooltip.dataTooltip ("Autoformat Table")]
+ Button.OnClick (fun e ->
+ Msg.Batch [
+ PipeActiveAnnotationTable AutoFitTable |> ExcelInterop
+ PipeActiveAnnotationTable UpdateProtocolGroupHeader |> ExcelInterop
+ ] |> dispatch
+ )
Button.Color Color.IsWhite
Button.IsInverted
] [
Fa.i [Fa.Solid.SyncAlt][]
]
]
- Navbar.Item.a [Navbar.Item.Props [Title "Fill Reference Columns"; Style [ Color model.SiteStyleState.ColorMode.Text]]] [
+ Navbar.Item.a [Navbar.Item.Props [Style [ Color model.SiteStyleState.ColorMode.Text]]] [
Button.a [
- Button.Props [Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]]
+ Button.CustomClass (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
+ Button.Props [Style [BackgroundColor model.SiteStyleState.ColorMode.ElementBackground]; Tooltip.dataTooltip ("Update Reference Columns")]
Button.OnClick (fun _ ->
PipeActiveAnnotationTable FillHiddenColsRequest |> ExcelInterop |> dispatch
)
@@ -57,13 +66,16 @@ let navbarComponent (model : Model) (dispatch : Msg -> unit) =
Fa.span [Fa.Solid.Pen][]
]
]
- Navbar.burger [ Navbar.Burger.IsActive model.SiteStyleState.BurgerVisible
- Navbar.Burger.OnClick (fun e -> ToggleBurger |> StyleChange |> dispatch)
- Navbar.Burger.Props[
- Role "button"
- AriaLabel "menu"
- Props.AriaExpanded false
- ]
+ Navbar.burger [
+ Navbar.Burger.IsActive model.SiteStyleState.BurgerVisible
+ Navbar.Burger.OnClick (fun e -> ToggleBurger |> StyleChange |> dispatch)
+ Navbar.Burger.Modifiers [Modifier.TextColor IsWhite]
+ Navbar.Burger.Props[
+ Role "button"
+ AriaLabel "menu"
+ Props.AriaExpanded false
+
+ ]
] [
span [AriaHidden true] []
span [AriaHidden true] []
@@ -73,10 +85,10 @@ let navbarComponent (model : Model) (dispatch : Msg -> unit) =
Navbar.menu [Navbar.Menu.Props [Id "navbarMenu"; Class (if model.SiteStyleState.BurgerVisible then "navbar-menu is-active" else "navbar-menu") ; ExcelColors.colorControl model.SiteStyleState.ColorMode]] [
Navbar.Dropdown.div [ ] [
Navbar.Item.a [Navbar.Item.Props [Style [ Color model.SiteStyleState.ColorMode.Text]]] [
- str "How to use"
+ str "How to use (WIP)"
]
Navbar.Item.a [Navbar.Item.Props [Style [ Color model.SiteStyleState.ColorMode.Text]]] [
- str "Contact"
+ str "Contact (WIP)"
]
Navbar.Item.a [Navbar.Item.Props [
OnClick (fun e ->
diff --git a/src/Client/ISADotNetHelpers.fs b/src/Client/ISADotNetHelpers.fs
new file mode 100644
index 00000000..31b4d695
--- /dev/null
+++ b/src/Client/ISADotNetHelpers.fs
@@ -0,0 +1,31 @@
+module ISADotNetHelpers
+
+open ISADotNet
+open Shared
+
+let annotationValueToString (annoVal:ISADotNet.AnnotationValue) =
+ match annoVal with
+ | ISADotNet.AnnotationValue.Text v -> v
+ | ISADotNet.AnnotationValue.Float v -> string v
+ | ISADotNet.AnnotationValue.Int v -> string v
+
+let termAccessionReduce (uri:ISADotNet.URI) =
+ let li = uri.LastIndexOf @"/"
+ uri.Remove(0,li+1).Replace("_",":")
+
+let valueIsOntology (v:ISADotNet.Value) =
+ match v with
+ | ISADotNet.Value.Ontology o ->
+ let name = o.Name.Value |> annotationValueToString
+ let tsr = o.TermSourceREF.Value
+ let tan = o.TermAccessionNumber.Value |> termAccessionReduce
+ Some <| OntologyInfo.create name tan
+ | _ ->
+ None
+
+let valueToString (v:ISADotNet.Value) =
+ match v with
+ | ISADotNet.Value.Float f -> string f
+ | ISADotNet.Value.Int i -> string i
+ | ISADotNet.Value.Name s -> s
+ | ISADotNet.Value.Ontology o -> failwith "This Function (valueToString) should not be used to parse ISADotNet.Value.Ontology"
\ No newline at end of file
diff --git a/src/Client/Messages.fs b/src/Client/Messages.fs
index 80bc2f45..dc01025a 100644
--- a/src/Client/Messages.fs
+++ b/src/Client/Messages.fs
@@ -2,7 +2,6 @@ module Messages
open Elmish
open Thoth.Elmish
-
open Shared
open ExcelColors
@@ -10,16 +9,18 @@ open OfficeInterop
open OfficeInterop.Types
open Model
+//open ISADotNet
+
type ExcelInteropMsg =
| PipeActiveAnnotationTable of (TryFindAnnoTableResult -> ExcelInteropMsg)
/// This is used to pipe (all table names []) to a ExcelInteropMsg.
/// This is used to generate a new annotation table name.
| PipeCreateAnnotationTableInfo of (string [] -> ExcelInteropMsg)
| Initialized of (string*string)
- | SyncContext of activeAnnotationTable:TryFindAnnoTableResult*string
- | InSync of string
| FillSelection of activeAnnotationTable:TryFindAnnoTableResult * string * (DbDomain.Term option)
- | AddColumn of activeAnnotationTable:TryFindAnnoTableResult * colname:string * format:(string*string option) option
+ | AddAnnotationBlock of activeAnnotationTable:TryFindAnnoTableResult * OfficeInterop.Types.BuildingBlockTypes.MinimalBuildingBlock
+ | AddAnnotationBlocks of activeAnnotationTable:TryFindAnnoTableResult * OfficeInterop.Types.BuildingBlockTypes.MinimalBuildingBlock list * Xml.GroupTypes.Protocol
+ | AddUnitToAnnotationBlock of tryFindActiveAnnotationTable:TryFindAnnoTableResult * unitTermName:string option * unitTermAccession:string option
| FormatColumn of activeAnnotationTable:TryFindAnnoTableResult * colname:string * formatString:string * prevmsg:string
/// This message does not need the active annotation table as `PipeCreateAnnotationTableInfo` checks if any annotationtables exist in the active worksheet, and if so, errors.
| CreateAnnotationTable of allTableNames:string [] * isDark:bool
@@ -27,14 +28,13 @@ type ExcelInteropMsg =
| AnnotationTableExists of activeAnnotationTable:TryFindAnnoTableResult
| GetParentTerm of activeAnnotationTable:TryFindAnnoTableResult
| AutoFitTable of activeAnnotationTable:TryFindAnnoTableResult
+ | UpdateProtocolGroupHeader of activeAnnotationTable:TryFindAnnoTableResult
//
| GetTableValidationXml of activeAnnotationTable:TryFindAnnoTableResult
- | WriteTableValidationToXml of newTableValidation:XmlValidationTypes.TableValidation * currentSwateVersion:string
+ | WriteTableValidationToXml of newTableValidation:Xml.ValidationTypes.TableValidation * currentSwateVersion:string
+ | WriteProtocolToXml of newProtocol:Xml.GroupTypes.Protocol
| DeleteAllCustomXml
- | GetSwateValidationXml
- //
- | ToggleEventHandler
- | UpdateTablesHaveAutoEditHandler
+ | GetSwateCustomXml
//
| FillHiddenColsRequest of activeAnnotationTable:TryFindAnnoTableResult
| FillHiddenColumns of tableName:string*SearchTermI []
@@ -77,9 +77,9 @@ type DevMsg =
type ApiRequestMsg =
| TestOntologyInsert of (string*string*string*System.DateTime*string)
| GetNewTermSuggestions of string
- | GetNewTermSuggestionsByParentTerm of string*string
+ | GetNewTermSuggestionsByParentTerm of string*OntologyInfo
| GetNewBuildingBlockNameSuggestions of string
- | GetNewUnitTermSuggestions of string
+ | GetNewUnitTermSuggestions of string*relatedUnitSearch:UnitSearchRequest
| GetNewAdvancedTermSearchResults of AdvancedTermSearchOptions
| FetchAllOntologies
/// This function is used to search for all values found in the table main columns.
@@ -92,7 +92,7 @@ type ApiResponseMsg =
| TermSuggestionResponse of DbDomain.Term []
| AdvancedTermSearchResultsResponse of DbDomain.Term []
| BuildingBlockNameSuggestionsResponse of DbDomain.Term []
- | UnitTermSuggestionResponse of DbDomain.Term []
+ | UnitTermSuggestionResponse of DbDomain.Term [] * relatedUnitSearch:UnitSearchRequest
| FetchAllOntologiesResponse of DbDomain.Ontology []
| SearchForInsertTermsResponse of tableName:string*SearchTermI []
//
@@ -115,6 +115,7 @@ type PersistentStorageMsg =
type FilePickerMsg =
| LoadNewFiles of string list
| UpdateFileNames of newFileNames:(int*string) list
+ ///
| UpdateDNDDropped of isDropped:bool
type AddBuildingBlockMsg =
@@ -122,20 +123,29 @@ type AddBuildingBlockMsg =
| BuildingBlockNameChange of string
| ToggleSelectionDropdown
- | BuildingBlockNameSuggestionUsed of string
+ | BuildingBlockNameSuggestionUsed of DbDomain.Term
| NewBuildingBlockNameSuggestions of DbDomain.Term []
- | SearchUnitTermTextChange of string
- | UnitTermSuggestionUsed of unitName:string*unitAccession:string
- | NewUnitTermSuggestions of DbDomain.Term []
+ | SearchUnitTermTextChange of searchString:string * relatedUnitSearch:UnitSearchRequest
+ | UnitTermSuggestionUsed of unitTerm:DbDomain.Term* relatedUnitSearch:UnitSearchRequest
+ | NewUnitTermSuggestions of DbDomain.Term [] * relatedUnitSearch:UnitSearchRequest
| ToggleBuildingBlockHasUnit
type ValidationMsg =
// Client
| UpdateDisplayedOptionsId of int option
- | UpdateTableValidationScheme of XmlValidationTypes.TableValidation
+ | UpdateTableValidationScheme of Xml.ValidationTypes.TableValidation
// OfficeInterop
- | StoreTableRepresentationFromOfficeInterop of OfficeInterop.Types.XmlValidationTypes.TableValidation * buildingBlocks:OfficeInterop.Types.BuildingBlockTypes.BuildingBlock [] * msg:string
+ | StoreTableRepresentationFromOfficeInterop of OfficeInterop.Types.Xml.ValidationTypes.TableValidation * buildingBlocks:OfficeInterop.Types.BuildingBlockTypes.BuildingBlock [] * msg:string
+
+type ProtocolInsertMsg =
+ // Client
+ | UpdateUploadData of string
+ | ParseJsonToProcessRequest of string
+ | ParseJsonToProcessResult of Result
+
+type TopLevelMsg =
+ | CloseSuggestions
type Msg =
| Bounce of (System.TimeSpan*string*Msg)
@@ -150,6 +160,8 @@ type Msg =
| FilePicker of FilePickerMsg
| AddBuildingBlock of AddBuildingBlockMsg
| Validation of ValidationMsg
+ | ProtocolInsert of ProtocolInsertMsg
+ | TopLevelMsg of TopLevelMsg
| UpdatePageState of Routing.Route option
| Batch of seq
| DoNothing
@@ -179,5 +191,14 @@ let pipeNameTuple3 msg param =
let constructParam =
param |> fun (x,y,z) -> annotationTableOpt,x,y,z
msg (constructParam)
- |> PipeActiveAnnotationTable
+ )
+
+/// This function is used to easily pipe a message into `PipeActiveAnnotationTable`. This is designed for a message with (x1,x2,x3,x4) other params.
+/// Use this as: (x1,x2,x3) |> pipeNameTuple4 msg
+let pipeNameTuple4 msg param =
+ PipeActiveAnnotationTable
+ (fun annotationTableOpt ->
+ let constructParam =
+ param |> fun (x,y,z,u) -> annotationTableOpt,x,y,z,u
+ msg (constructParam)
)
\ No newline at end of file
diff --git a/src/Client/Model.fs b/src/Client/Model.fs
index 4d5a361c..8490fdf7 100644
--- a/src/Client/Model.fs
+++ b/src/Client/Model.fs
@@ -64,7 +64,7 @@ type TermSearchState = {
TermSearchText : string
SelectedTerm : DbDomain.Term option
TermSuggestions : DbDomain.Term []
- ParentOntology : string option
+ ParentOntology : OntologyInfo option
SearchByParentOntology : bool
HasSuggestionsLoading : bool
ShowSuggestions : bool
@@ -208,10 +208,10 @@ type PageState = {
}
type FilePickerState = {
- FileNames : (int*string) list
+ FileNames : (int*string) list
/// Used for drag and drop, to determine if something is currently dragged or not.
/// Necessary to deactivate pointer events on children during drag.
- DNDDropped : bool
+ DNDDropped : bool
} with
static member init () = {
FileNames = []
@@ -294,51 +294,78 @@ type AnnotationBuildingBlock = {
type AddBuildingBlockState = {
CurrentBuildingBlock : AnnotationBuildingBlock
+ BuildingBlockSelectedTerm : DbDomain.Term option
BuildingBlockNameSuggestions : DbDomain.Term []
ShowBuildingBlockSelection : bool
BuildingBlockHasUnit : bool
- ShowBuildingBlockNameSuggestions : bool
- HasBuildingBlockNameSuggestionsLoading : bool
+ ShowBuildingBlockTermSuggestions : bool
+ HasBuildingBlockTermSuggestionsLoading : bool
+ /// This section is used to add a unit directly to a freshly created building block.
UnitTermSearchText : string
+ UnitSelectedTerm : DbDomain.Term option
UnitTermSuggestions : DbDomain.Term []
HasUnitTermSuggestionsLoading : bool
ShowUnitTermSuggestions : bool
- /// This entry determines if the current UnitTermSearchText is a real term or if it is a customly typed unit.
- /// If UnitTermSearchTextHasTermID.IsSome then the string is the Term.Accession else it is customely typed.
- /// This is necessary to store the information about the Term.Accession for TAN in the unit columns.
- UnitTermSearchTextHasTermAccession : string option
+
+ /// This section is used to add a unit directly to an already existing building block
+ Unit2TermSearchText : string
+ Unit2SelectedTerm : DbDomain.Term option
+ Unit2TermSuggestions : DbDomain.Term []
+ HasUnit2TermSuggestionsLoading : bool
+ ShowUnit2TermSuggestions : bool
} with
static member init () = {
- CurrentBuildingBlock = AnnotationBuildingBlock.init NoneSelected
+ ShowBuildingBlockSelection = false
+ CurrentBuildingBlock = AnnotationBuildingBlock.init AnnotationBuildingBlockType.Parameter
+ BuildingBlockSelectedTerm = None
BuildingBlockNameSuggestions = [||]
- ShowBuildingBlockSelection = false
+ ShowBuildingBlockTermSuggestions = false
+ HasBuildingBlockTermSuggestionsLoading = false
BuildingBlockHasUnit = false
- ShowBuildingBlockNameSuggestions = false
- HasBuildingBlockNameSuggestionsLoading = false
+ /// This section is used to add a unit directly to a freshly created building block.
UnitTermSearchText = ""
+ UnitSelectedTerm = None
UnitTermSuggestions = [||]
- HasUnitTermSuggestionsLoading = false
ShowUnitTermSuggestions = false
- UnitTermSearchTextHasTermAccession = None
+ HasUnitTermSuggestionsLoading = false
+
+ /// This section is used to add a unit directly to an already existing building block
+ Unit2TermSearchText = ""
+ Unit2SelectedTerm = None
+ Unit2TermSuggestions = [||]
+ ShowUnit2TermSuggestions = false
+ HasUnit2TermSuggestionsLoading = false
}
/// Validation scheme for Table
type ValidationState = {
ActiveTableBuildingBlocks : OfficeInterop.Types.BuildingBlockTypes.BuildingBlock []
- TableValidationScheme : OfficeInterop.Types.XmlValidationTypes.TableValidation
+ TableValidationScheme : OfficeInterop.Types.Xml.ValidationTypes.TableValidation
// Client view related
DisplayedOptionsId : int option
} with
static member init () = {
ActiveTableBuildingBlocks = [||]
- TableValidationScheme = OfficeInterop.Types.XmlValidationTypes.TableValidation.init()
+ TableValidationScheme = OfficeInterop.Types.Xml.ValidationTypes.TableValidation.init()
DisplayedOptionsId = None
}
+
+open ISADotNet
+
+type ProtocolInsertState = {
+ UploadData: string
+ ProcessModel: ISADotNet.Process option
+} with
+ static member init () = {
+ UploadData = ""
+ ProcessModel = None
+ }
+
type Model = {
//PageState
@@ -370,6 +397,8 @@ type Model = {
//States regarding File picker functionality
FilePickerState : FilePickerState
+ ProtocolInsertState : ProtocolInsertState
+
//Insert annotation columns
AddBuildingBlockState : AddBuildingBlockState
@@ -392,4 +421,5 @@ let initializeModel (pageOpt: Route option) = {
FilePickerState = FilePickerState .init ()
AddBuildingBlockState = AddBuildingBlockState .init ()
ValidationState = ValidationState .init ()
+ ProtocolInsertState = ProtocolInsertState .init ()
}
diff --git a/src/Client/NFDIColors.fs b/src/Client/NFDIColors.fs
new file mode 100644
index 00000000..40d4f714
--- /dev/null
+++ b/src/Client/NFDIColors.fs
@@ -0,0 +1,218 @@
+/// Colors used from nfdi4plants Branding repository on GitHub
+// https://github.com/nfdi4plants/Branding#dataplant
+module NFDIColors
+
+module Mint =
+
+ []
+ let Base = "#1FC2A7"
+
+ []
+ let Lighter10 = "#35c8b0"
+ []
+ let Lighter20 = "#4cceb9"
+ []
+ let Lighter30 = "#62d4c1"
+ []
+ let Lighter40 = "#79daca"
+ []
+ let Lighter50 = "#8fe1d3"
+ []
+ let Lighter60 = "#a5e7dc"
+ []
+ let Lighter70 = "#bcede5"
+ []
+ let Lighter80 = "#d2f3ed"
+ []
+ let Lighter90 = "#e9f9f6"
+
+ []
+ let Darker10 = "#1caf96"
+ []
+ let Darker20 = "#199b86"
+ []
+ let Darker30 = "#168875"
+ []
+ let Darker40 = "#137464"
+ []
+ let Darker50 = "#106154"
+ []
+ let Darker60 = "#0c4e43"
+ []
+ let Darker70 = "#093a32"
+ []
+ let Darker80 = "#062721"
+ []
+ let Darker90 = "#031311"
+
+module LightBlue =
+
+ []
+ let Base = "#4FB3D9"
+
+ []
+ let Lighter10 = "#61bbdd"
+ []
+ let Lighter20 = "#72c2e1"
+ []
+ let Lighter30 = "#84cae4"
+ []
+ let Lighter40 = "#95d1e8"
+ []
+ let Lighter50 = "#a7d9ec"
+ []
+ let Lighter60 = "#b9e1f0"
+ []
+ let Lighter70 = "#cae8f4"
+ []
+ let Lighter80 = "#dcf0f7"
+ []
+ let Lighter90 = "#edf7fb"
+
+ []
+ let Darker10 = "#47a1c3"
+ []
+ let Darker20 = "#3f8fae"
+ []
+ let Darker30 = "#377d98"
+ []
+ let Darker40 = "#2f6b82"
+ []
+ let Darker50 = "#285a6d"
+ []
+ let Darker60 = "#204857"
+ []
+ let Darker70 = "#183641"
+ []
+ let Darker80 = "#10242b"
+ []
+ let Darker90 = "#081216"
+
+module DarkBlue =
+
+ []
+ let Base = "#2D3E50"
+
+ []
+ let Lighter10 = "#425162"
+ []
+ let Lighter20 = "#576573"
+ []
+ let Lighter30 = "#6c7885"
+ []
+ let Lighter40 = "#818b96"
+ []
+ let Lighter50 = "#969fa8"
+ []
+ let Lighter60 = "#abb2b9"
+ []
+ let Lighter70 = "#c0c5cb"
+ []
+ let Lighter80 = "#d5d8dc"
+ []
+ let Lighter90 = "#eaecee"
+
+ []
+ let Darker10 = "#293848"
+ []
+ let Darker20 = "#243240"
+ []
+ let Darker30 = "#1f2b38"
+ []
+ let Darker40 = "#1b2530"
+ []
+ let Darker50 = "#171f28"
+ []
+ let Darker60 = "#121920"
+ []
+ let Darker70 = "#0d1318"
+ []
+ let Darker80 = "#090c10"
+ []
+ let Darker90 = "#040608"
+
+module Yellow =
+
+ []
+ let Base = "#FFC000"
+
+ []
+ let Lighter10 = "#ffc61a"
+ []
+ let Lighter20 = "#ffcd33"
+ []
+ let Lighter30 = "#ffd34d"
+ []
+ let Lighter40 = "#ffd966"
+ []
+ let Lighter50 = "#ffe080"
+ []
+ let Lighter60 = "#ffe699"
+ []
+ let Lighter70 = "#ffecb3"
+ []
+ let Lighter80 = "#fff2cc"
+ []
+ let Lighter90 = "#fff9e6"
+
+ []
+ let Darker10 = "#e6ad00"
+ []
+ let Darker20 = "#cc9a00"
+ []
+ let Darker30 = "#b38600"
+ []
+ let Darker40 = "#997300"
+ []
+ let Darker50 = "#806000"
+ []
+ let Darker60 = "#664d00"
+ []
+ let Darker70 = "#4c3a00"
+ []
+ let Darker80 = "#332600"
+ []
+ let Darker90 = "#191300"
+
+module Red =
+
+ []
+ let Base = "#c21f3a"
+
+ []
+ let Lighter10 = "#C8354D"
+ []
+ let Lighter20 = "#CE4B61"
+ []
+ let Lighter30 = "#D46275"
+ []
+ let Lighter40 = "#DA7888"
+ []
+ let Lighter50 = "#E08F9C"
+ []
+ let Lighter60 = "#E6A5B0"
+ []
+ let Lighter70 = "#ECBBC3"
+ []
+ let Lighter80 = "#F2D2D7"
+ []
+ let Lighter90 = "#F8E8EB"
+
+ []
+ let Darker10 = "#AE1B34"
+ []
+ let Darker20 = "#9B182E"
+ []
+ let Darker30 = "#871528"
+ []
+ let Darker40 = "#741222"
+ []
+ let Darker50 = "#600F1D"
+ []
+ let Darker60 = "#4D0C17"
+ []
+ let Darker70 = "#3A0911"
+ []
+ let Darker80 = "#26060B"
+ []
+ let Darker90 = "#130305"
\ No newline at end of file
diff --git a/src/Client/OfficeInterop/EventHandlers.fs b/src/Client/OfficeInterop/EventHandlers.fs
index a4e99cf4..b089d3a5 100644
--- a/src/Client/OfficeInterop/EventHandlers.fs
+++ b/src/Client/OfficeInterop/EventHandlers.fs
@@ -23,114 +23,114 @@ open BuildingBlockTypes
// Subscription.TestSubscription m |> dispatch
// Cmd.ofSub sub
-/// This module is loaded client side and is meant to work as a storage for office information.
-/// This could possible be refractured into a model type design.
-module EventHandlerStates =
-
- /// This mutable variable contains the information of which table currently has an existing eventhandler for assisted deleting from hidden columns.
- /// In addition the 'OfficeExtension.EventHandlerResult' object is needed to access the specific handler again and to individually remove it.
- let mutable adaptHiddenColsHandlerList: Map> = Map.empty
-
-/// This functions works as event handler that can be added to tables and triggers on OnChanged event.
-/// It is used to delete anything written in the hidden columns (referenced by '#h' in the column header tag array).
-let adaptHiddenColsHandler (tableChangeArgs:TableChangedEventArgs, tableName) =
- Excel.run(fun context ->
-
- /// get active worksheet to execute function on
- let worksheet = context.workbook.worksheets.getActiveWorksheet()
- /// As we found out the getItem() function does not only operate on the sheet it is executed on therefore we need the annotationTable-name of the active sheet.
- /// The table name is passed by a previous function and allows us to access a specific annotation table on any worksheet in the excel workbook
- let table = worksheet.tables.getItem(tableName)
-
- // The next part loads relevant information from the excel objects and allows us to access them after 'context.sync()'
-
- let tableHeader = table.getHeaderRowRange()
- let _ = tableHeader.load(U2.Case2 (ResizeArray[|"values"; "columnIndex"|]))
-
- let tableRange = table.getRange()
- let _ = tableRange.load(U2.Case2 (ResizeArray[|"values"; "rowIndex"|]))
-
- let changedRange = tableChangeArgs.getRange(context)
- let _ = changedRange.load(U2.Case2 (ResizeArray[|"columnIndex"; "rowIndex"; "rowCount"|]))
-
- let r = context.runtime.load(U2.Case1 "enableEvents")
-
- context.sync()
- .``then``(fun t ->
-
- /// during our function we want all eventHandlers to be deactivated to prevent any cross reactions.
- r.enableEvents <- false
-
- // This is necessary to find the correct table index for changed cell
- // As the Range in which the change occured is always referenced from the worksheet and not from the table we need to calculate the table index
- // e.g. If a table starts at cell 'C5' then the table index is 0 but the worksheet index is 2.#
-
- /// Calculate the table column index for the changed range
- let recalcChangedTableColIndex =
- let tableHeaderRangeColIndex = tableHeader.columnIndex
- let selectColIndex = changedRange.columnIndex
- selectColIndex - tableHeaderRangeColIndex
-
- /// Calculate the table row index for the changed range
- let recalcChangedTableRowIndex =
- let tableRangedRowIndex = tableRange.rowIndex
- let selectRowIndex = changedRange.rowIndex
- selectRowIndex - tableRangedRowIndex
-
- /// Get an array of all headers. We have a lot of information in our headers, e.g. tag array
- let headerVals = tableHeader.values.[0] |> Array.ofSeq
-
- /// find the index of the next non hidden column. We assume, that all columns in between are part of the building block that got changed.
- let nextNonHiddenColForward = findIndexNextNotHiddenCol headerVals (recalcChangedTableColIndex+1.)
-
- //printfn "Try access fields at row: %.0f for column: %.0f - %.0f" recalcChangedTableRowIndex (recalcChangedTableColIndex+1.) (nextNonHiddenColForward-1.)
-
- /// This gives us the header of the column in which something was changed.
- let header = tableHeader.values.[0].[int recalcChangedTableColIndex]
-
- /// Parse header to allow for easy access on any relevant information in form of the 'ColHeader' record type.
- let parsedHeader = parseColHeader (string header.Value)
-
- /// This function will change the value of all cells of the same row and the same building block as the cells changed.
- /// E.g. changed cells C5 to C8, which have 5 hidden columns as part of the building block. Then it will delete D6:H8.
- let changeHidden () =
- // We cannot work with the tableChangeArgs.details.valueAfter to see if we delete the hidden cols or adapt to user specific.
- // tableChangeArgs.details.valueAfter works only on single cell changes
-
- /// This creates a one cell range with an empty input. We use this as insert to simulate a delete.
- let input =
- ResizeArray([
- ResizeArray([
- "" |> box |> Some
- ])
- ])
-
- /// Iterate over all rows starting from our table index of the rows changed (this will always be the index of the first row changed)
- /// and ending with the same index plus the number of rows changed.
- /// tl;dr iterate over all rows with a changed cell
- for rowInd in recalcChangedTableRowIndex .. 1. .. (recalcChangedTableRowIndex + changedRange.rowCount - 1.) do
-
- /// Iterate over all columns starting from our table index of the columns changed (this will always be the index of the first col changed) + 1
- /// and ending with the index of the next non-hidden col - 1, so with the last hidden col.
- /// tl;dr iterate over all hidden cols
- for colInd in recalcChangedTableColIndex+1. .. 1. .. nextNonHiddenColForward-1. do
-
- /// for all these combinations get the cell object for these indices and insert our empty input.
- /// Effectively deleting their previous value.
- let c = tableRange.getCell(rowInd, colInd)
- c.values <- input
-
- /// This is a failsafe to prevent firing the event when a reference (hidden) column is changed.
- match parsedHeader.TagArr with
- | Some tagArr ->
- if tagArr |> Array.contains ColumnTags.HiddenTag then () else changeHidden()
- | None ->
- changeHidden()
-
- /// activate events again
- r.enableEvents <- true
-
- /// This is not accessed and could very well be anything
- t
- )
- )
\ No newline at end of file
+///// This module is loaded client side and is meant to work as a storage for office information.
+///// This could possible be refractured into a model type design.
+//module EventHandlerStates =
+
+// /// This mutable variable contains the information of which table currently has an existing eventhandler for assisted deleting from hidden columns.
+// /// In addition the 'OfficeExtension.EventHandlerResult' object is needed to access the specific handler again and to individually remove it.
+// let mutable adaptHiddenColsHandlerList: Map> = Map.empty
+
+///// This functions works as event handler that can be added to tables and triggers on OnChanged event.
+///// It is used to delete anything written in the hidden columns (referenced by '#h' in the column header tag array).
+//let adaptHiddenColsHandler (tableChangeArgs:TableChangedEventArgs, tableName) =
+// Excel.run(fun context ->
+
+// /// get active worksheet to execute function on
+// let worksheet = context.workbook.worksheets.getActiveWorksheet()
+// /// As we found out the getItem() function does not only operate on the sheet it is executed on therefore we need the annotationTable-name of the active sheet.
+// /// The table name is passed by a previous function and allows us to access a specific annotation table on any worksheet in the excel workbook
+// let table = worksheet.tables.getItem(tableName)
+
+// // The next part loads relevant information from the excel objects and allows us to access them after 'context.sync()'
+
+// let tableHeader = table.getHeaderRowRange()
+// let _ = tableHeader.load(U2.Case2 (ResizeArray[|"values"; "columnIndex"|]))
+
+// let tableRange = table.getRange()
+// let _ = tableRange.load(U2.Case2 (ResizeArray[|"values"; "rowIndex"|]))
+
+// let changedRange = tableChangeArgs.getRange(context)
+// let _ = changedRange.load(U2.Case2 (ResizeArray[|"columnIndex"; "rowIndex"; "rowCount"|]))
+
+// let r = context.runtime.load(U2.Case1 "enableEvents")
+
+// context.sync()
+// .``then``(fun t ->
+
+// /// during our function we want all eventHandlers to be deactivated to prevent any cross reactions.
+// r.enableEvents <- false
+
+// // This is necessary to find the correct table index for changed cell
+// // As the Range in which the change occured is always referenced from the worksheet and not from the table we need to calculate the table index
+// // e.g. If a table starts at cell 'C5' then the table index is 0 but the worksheet index is 2.#
+
+// /// Calculate the table column index for the changed range
+// let recalcChangedTableColIndex =
+// let tableHeaderRangeColIndex = tableHeader.columnIndex
+// let selectColIndex = changedRange.columnIndex
+// selectColIndex - tableHeaderRangeColIndex
+
+// /// Calculate the table row index for the changed range
+// let recalcChangedTableRowIndex =
+// let tableRangedRowIndex = tableRange.rowIndex
+// let selectRowIndex = changedRange.rowIndex
+// selectRowIndex - tableRangedRowIndex
+
+// /// Get an array of all headers. We have a lot of information in our headers, e.g. tag array
+// let headerVals = tableHeader.values.[0] |> Array.ofSeq
+
+// /// find the index of the next non hidden column. We assume, that all columns in between are part of the building block that got changed.
+// let nextNonHiddenColForward = findIndexNextNotHiddenCol headerVals (recalcChangedTableColIndex+1.)
+
+// //printfn "Try access fields at row: %.0f for column: %.0f - %.0f" recalcChangedTableRowIndex (recalcChangedTableColIndex+1.) (nextNonHiddenColForward-1.)
+
+// /// This gives us the header of the column in which something was changed.
+// let header = tableHeader.values.[0].[int recalcChangedTableColIndex]
+
+// /// Parse header to allow for easy access on any relevant information in form of the 'ColHeader' record type.
+// let parsedHeader = parseColHeader (string header.Value)
+
+// /// This function will change the value of all cells of the same row and the same building block as the cells changed.
+// /// E.g. changed cells C5 to C8, which have 5 hidden columns as part of the building block. Then it will delete D6:H8.
+// let changeHidden () =
+// // We cannot work with the tableChangeArgs.details.valueAfter to see if we delete the hidden cols or adapt to user specific.
+// // tableChangeArgs.details.valueAfter works only on single cell changes
+
+// /// This creates a one cell range with an empty input. We use this as insert to simulate a delete.
+// let input =
+// ResizeArray([
+// ResizeArray([
+// "" |> box |> Some
+// ])
+// ])
+
+// /// Iterate over all rows starting from our table index of the rows changed (this will always be the index of the first row changed)
+// /// and ending with the same index plus the number of rows changed.
+// /// tl;dr iterate over all rows with a changed cell
+// for rowInd in recalcChangedTableRowIndex .. 1. .. (recalcChangedTableRowIndex + changedRange.rowCount - 1.) do
+
+// /// Iterate over all columns starting from our table index of the columns changed (this will always be the index of the first col changed) + 1
+// /// and ending with the index of the next non-hidden col - 1, so with the last hidden col.
+// /// tl;dr iterate over all hidden cols
+// for colInd in recalcChangedTableColIndex+1. .. 1. .. nextNonHiddenColForward-1. do
+
+// /// for all these combinations get the cell object for these indices and insert our empty input.
+// /// Effectively deleting their previous value.
+// let c = tableRange.getCell(rowInd, colInd)
+// c.values <- input
+
+// /// This is a failsafe to prevent firing the event when a reference (hidden) column is changed.
+// match parsedHeader.TagArr with
+// | Some tagArr ->
+// if tagArr |> Array.contains ColumnTags.HiddenTag then () else changeHidden()
+// | None ->
+// changeHidden()
+
+// /// activate events again
+// r.enableEvents <- true
+
+// /// This is not accessed and could very well be anything
+// t
+// )
+// )
\ No newline at end of file
diff --git a/src/Client/OfficeInterop/HelperFunctions.fs b/src/Client/OfficeInterop/HelperFunctions.fs
index 5c658aa9..6f731a69 100644
--- a/src/Client/OfficeInterop/HelperFunctions.fs
+++ b/src/Client/OfficeInterop/HelperFunctions.fs
@@ -10,6 +10,103 @@ open System.Text.RegularExpressions
open OfficeInterop.Regex
open OfficeInterop.Types
open BuildingBlockTypes
+open Shared
+
+
+let createEmptyMatrixForTables (colCount:int) (rowCount:int) value =
+ [|
+ for i in 0 .. rowCount-1 do
+ yield [|
+ for i in 0 .. colCount-1 do yield U3.Case2 value
+ |] :> IList>
+ |] :> IList>>
+
+let tryFindSpannedBuildingBlocks (currentProtocolGroup:Xml.GroupTypes.Protocol) (buildingBlocks: BuildingBlock []) =
+ let findAllSpannedBlocks =
+ currentProtocolGroup.SpannedBuildingBlocks
+ |> List.choose (fun spannedBlock ->
+ buildingBlocks
+ |> Array.tryFind (fun foundBuildingBlock ->
+ let isSameAccession =
+ if spannedBlock.TermAccession <> "" && foundBuildingBlock.MainColumn.Header.Value.Ontology.IsSome then
+ foundBuildingBlock.MainColumn.Header.Value.Ontology.Value.TermAccession = spannedBlock.TermAccession
+ else
+ false
+ foundBuildingBlock.MainColumn.Header.Value.Header = spannedBlock.ColumnName
+ && isSameAccession
+ )
+ )
+ //let reduce = findAllSpannedBlocks |> List.map (fun x -> x.MainColumn.Header.Value.Header)
+ if findAllSpannedBlocks.Length = currentProtocolGroup.SpannedBuildingBlocks.Length then
+ Some findAllSpannedBlocks
+ else
+ None
+
+/// This will create the column header attributes for a unit block.
+/// as unit always has to be a term and cannot be for example "Source" or "Sample", both of which have a differen format than for exmaple "Parameter [TermName]",
+/// we only need one function to generate id and attributes and bring the unit term in the right format.
+let unitColAttributes (unitTermName:string) (unitAccessionOptt:string option) (id:int) =
+ match id with
+ | 1 ->
+ match unitAccessionOptt with
+ | Some accession -> sprintf "[%s] (#h; #t%s; #u)" unitTermName accession
+ | None -> sprintf "[%s] (#h; #u)" unitTermName
+ | _ ->
+ match unitAccessionOptt with
+ | Some accession -> sprintf "[%s] (#%i; #h; #t%s; #u)" unitTermName id accession
+ | None -> sprintf "[%s] (#%i; #h; #u)" unitTermName id
+
+
+let createUnitColumns (allColHeaders:string []) (annotationTable:Table) newBaseColIndex rowCount (format:string option) (unitAccessionOpt:string option) =
+ let col = createEmptyMatrixForTables 1 rowCount ""
+ if format.IsSome then
+ let findNewIdForUnit() =
+ let rec loopingCheck int =
+ let isExisting =
+ allColHeaders
+ // Should a column with the same name already exist, then count up the id tag.
+ |> Array.exists (fun existingHeader ->
+ // We don't need to check TSR or TAN, because the main column always starts with "Unit"
+ existingHeader = sprintf "Unit %s" (unitColAttributes format.Value unitAccessionOpt int)
+ )
+ if isExisting then
+ loopingCheck (int+1)
+ else
+ int
+ loopingCheck 1
+
+ let newUnitId = findNewIdForUnit()
+
+ /// create unit main column
+ let createdUnitCol1 =
+ annotationTable.columns.add(
+ index = newBaseColIndex+3.,
+ values = U4.Case1 col,
+ name = sprintf "Unit %s" (unitColAttributes format.Value unitAccessionOpt newUnitId)
+ )
+
+ /// create unit TSR
+ let createdUnitCol2 =
+ annotationTable.columns.add(
+ index = newBaseColIndex+4.,
+ values = U4.Case1 col,
+ name = sprintf "Term Source REF %s" (unitColAttributes format.Value unitAccessionOpt newUnitId)
+ )
+
+ /// create unit TAN
+ let createdUnitCol3 =
+ annotationTable.columns.add(
+ index = newBaseColIndex+5.,
+ values = U4.Case1 col,
+ name = sprintf "Term Accession Number %s" (unitColAttributes format.Value unitAccessionOpt newUnitId)
+ )
+
+ Some (
+ sprintf " Added specified unit: %s" (format.Value),
+ sprintf "0.00 \"%s\"" (format.Value)
+ )
+ else
+ None
/// Swaps 'Rows with column values' to 'Columns with row values'.
let viewRowsByColumns (rows:ResizeArray>) =
@@ -33,7 +130,7 @@ let findIndexNextNotHiddenCol (headerVals:obj option []) (startIndex:float) =
let checkIsHidden =
prep.TagArr.Value |> Array.contains ColumnTags.HiddenTag
if checkIsHidden then
- Some (i + 1 |> float)
+ Some (i|> float)
else
None
else
@@ -46,7 +143,8 @@ let findIndexNextNotHiddenCol (headerVals:obj option []) (startIndex:float) =
if nextIsHidden then
loopingCheckSkipHiddenCols (newInd + 1.)
else
- newInd
+ newInd+1.
+ //failwith (sprintf "START: %A ; FOUND NEW: %A" startIndex (loopingCheckSkipHiddenCols startIndex))
loopingCheckSkipHiddenCols startIndex
module BuildingBlockTypes =
@@ -159,7 +257,7 @@ module BuildingBlockTypes =
// Build in fail safe.
errorMsg2 nextCol currentBlock
- // Building blocks are defined by one visuable column and an undefined number of hidden columns.
+ // Building blocks are defined by one visable column and an undefined number of hidden columns.
// Therefore we iterate through the columns array and use every column without an `#h` tag as the start of a new building block.
let rec sortColsIntoBuildingBlocks (index:int) (currentBlock:BuildingBlock option) (buildingBlockList:BuildingBlock list) =
// Exit case if we iterated through all columns
@@ -194,11 +292,13 @@ module BuildingBlockTypes =
then
// There are multiple possibilities which column this is: TSR; TAN; Unit; Unit TSR; Unit TAN are the currently existing ones.
// We first check if there is NO unit tag in the header tag array
- if nextCol.Header.Value.TagArr.Value |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTagStart) |> not then
+ /// DEPRECATED! For now we keep "x.StartsWith ColumnTags.UnitTag" instead of contains, as we (>0.2.1) added accession number behind unit tag
+ if nextCol.Header.Value.TagArr.Value |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTag) |> not then
let updateCurrentBlock = checkForHiddenColType currentBlock nextCol
sortColsIntoBuildingBlocks (index+1) updateCurrentBlock buildingBlockList
/// Next we check for unit columns in the scheme of `Unit [Term] (#h; #u...) | TSR [Term] (#h; #u...) | TAN [Term] (#h; #u...)`
- elif nextCol.Header.Value.TagArr.Value |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTagStart) then
+ /// DEPRECATED! For now we keep "x.StartsWith ColumnTags.UnitTag" instead of contains, as we once (>0.2.1) added accession number behind unit tag
+ elif nextCol.Header.Value.TagArr.Value |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTag) then
/// Please notice that we update the unit building block in the following function and not the core building block.
let updatedUnitBlock = checkForHiddenColType currentBlock.Value.Unit nextCol
/// Update the core building block with the updated unit building block.
@@ -210,11 +310,47 @@ module BuildingBlockTypes =
failwith (sprintf "The tag array of the next column to process in 'sortColsIntoBuildingBlocks' was not recognized as hidden or main column: %A." nextCol.Header)
/// Sort all columns into building blocks.
- let buildingBlocks =
+ let buildingBlocksPre =
sortColsIntoBuildingBlocks 0 None []
|> List.rev
|> Array.ofList
+ // UPDATE IN > 0.2.0
+ /// As we now add the TermAccession as "#txxx" tag in the reference columns we walk over all buildingBlock and update the maincolumn header accordingly.
+ let buildingBlocks =
+ buildingBlocksPre
+ |> Array.map (fun buildingBlock ->
+ match buildingBlock.TAN, buildingBlock.TSR with
+ | Some tan, Some tsr ->
+ match tan.Header.Value.Ontology, tsr.Header.Value.Ontology with
+ | Some ont1, Some ont2 ->
+ let isSame = ont1.TermAccession = ont2.TermAccession
+ if isSame |> not then
+ failwith (sprintf "During BuildingBlock update with TermAccession found BuildingBlock (%s) with unknow TAN TSR pattern. (3)" buildingBlock.MainColumn.Header.Value.Header)
+ if ont1.TermAccession <> "" then
+ let nextMainColumn = {
+ buildingBlock.MainColumn with
+ Header = {
+ buildingBlock.MainColumn.Header.Value with
+ Ontology = {
+ buildingBlock.MainColumn.Header.Value.Ontology.Value with
+ TermAccession = ont1.TermAccession
+ } |> Some
+ } |> Some
+ }
+ { buildingBlock with MainColumn = nextMainColumn }
+ else
+ buildingBlock
+ | None, None ->
+ buildingBlock
+ | _,_ ->
+ failwith (sprintf "During BuildingBlock update with TermAccession found BuildingBlock (%s) with unknow TAN TSR pattern. (2)" buildingBlock.MainColumn.Header.Value.Header)
+ | None, None ->
+ buildingBlock
+ | _, _ ->
+ failwith (sprintf "During BuildingBlock update with TermAccession found BuildingBlock (%s) with unknow TAN TSR pattern." buildingBlock.MainColumn.Header.Value.Header)
+ )
+
buildingBlocks
open System
@@ -249,7 +385,7 @@ let xmlElementToXmlString (root:XmlElement) =
text root.Content
] |> serializeXml
-let getCurrentValidationXml (customXmlParts:CustomXmlPartCollection) (context:RequestContext)=
+let getCurrentCustomXml (customXmlParts:CustomXmlPartCollection) (context:RequestContext) =
promise {
let! getXml =
context.sync().``then``(fun e ->
@@ -284,24 +420,150 @@ let getCurrentValidationXml (customXmlParts:CustomXmlPartCollection) (context:Re
failwith "Swate could not parse Workbook Custom Xml Parts. Had neither one root nor many root elements. Please contact the developer."
if xmlParsed.Name <> "customXml" then failwith (sprintf "Swate found unexpected root xml element: %s" xmlParsed.Name)
- let currentSwateValidationXml =
- let v = SimpleXml.findElementsByName "Validation" xmlParsed
- if v.Length > 1 then failwith (sprintf "Swate found multiple 'Validation' xml elements. Please contact the developer.")
- if v.Length = 0 then
- None
- else
- XmlValidationTypes.SwateValidation.ofXml xml |> Some
+ return xmlParsed, xml
+ }
+
+let swateValidationOfXml (xmlParsed:XmlElement) (xml:string) =
+ let v = SimpleXml.findElementsByName "Validation" xmlParsed
+ if v.Length > 1 then failwith (sprintf "Swate found multiple 'Validation' xml elements. Please contact the developer.")
+ if v.Length = 0 then
+ None
+ else
+ Xml.ValidationTypes.SwateValidation.ofXml xml |> Some
+
+let protocolGroupOfXml (xmlParsed:XmlElement) (xml:string) =
+ let protocolGroupTag = "ProtocolGroup"
+ let v = SimpleXml.findElementsByName protocolGroupTag xmlParsed
+ if v.Length > 1 then failwith (sprintf "Swate found multiple '%s' xml elements. Please contact the developer." protocolGroupTag)
+ if v.Length = 0 then
+ None
+ else
+ Xml.GroupTypes.ProtocolGroup.ofXml xml |> Some
- return xmlParsed, currentSwateValidationXml
+let updateProtocolFromXml(protocol:Xml.GroupTypes.Protocol) (remove:bool) =
+ Excel.run(fun context ->
+
+ // The first part accesses current CustomXml
+ let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
+ let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
+
+ promise {
+ let! xmlParsed, xml = getCurrentCustomXml customXmlParts context
+
+ let currentProtocolGroup =
+ let previousProtocolGroup = protocolGroupOfXml xmlParsed xml
+ if previousProtocolGroup.IsNone then Xml.GroupTypes.ProtocolGroup.create protocol.SwateVersion [] else previousProtocolGroup.Value
+
+ let nextProtocolGroup =
+ let newProtocols =
+ currentProtocolGroup.Protocols
+ |> List.filter (fun x -> x.TableName <> protocol.TableName || x.WorksheetName <> protocol.WorksheetName || x.Id <> protocol.Id)
+ |> fun filteredProtocols ->
+ if remove then
+ filteredProtocols
+ else
+ protocol::filteredProtocols
+ { currentProtocolGroup with
+ SwateVersion = protocol.SwateVersion
+ Protocols = newProtocols
+ }
+
+ let nextCustomXml =
+ let nextAsXmlFormat = nextProtocolGroup.toXml |> SimpleXml.parseElement
+ let childrenWithoutProtocolGroup = xmlParsed.Children |> List.filter (fun child ->
+ child.Name <> "ProtocolGroup"
+ )
+ let nextChildren = nextAsXmlFormat::childrenWithoutProtocolGroup
+ { xmlParsed with
+ Children = nextChildren
+ } |> xmlElementToXmlString
+
+ let! deleteXml =
+ context.sync().``then``(fun e ->
+ let items = customXmlParts.items
+ let xmls = items |> Seq.map (fun x -> x.delete() )
+
+ xmls |> Array.ofSeq
+ )
+
+ let! addNext =
+ context.sync().``then``(fun e ->
+ customXmlParts.add(nextCustomXml)
+ )
+
+ // This will be displayed in activity log
+ return
+ "Info",
+ sprintf
+ "%s ProtocolGroup Scheme with '%s - %s - %s' "
+ (if remove then "Remove Protocol from" else "Update")
+ protocol.WorksheetName
+ protocol.TableName
+ protocol.Id
+ }
+ )
+
+/// range -> 'let groupHeader = annoHeaderRange.getRowsAbove(1.)'
+let formatGroupHeaderForRange (range:Excel.Range) (context:RequestContext) =
+ promise {
+
+ let! range = context.sync().``then``(fun e ->
+ range.load(U2.Case2 (ResizeArray(["format"])))
+ )
+
+ let! colorAndGetBorderItems = context.sync().``then``(fun e ->
+
+ let f = range.format
+
+ f.fill.color <- "#70AD47"
+ f.font.color <- "white"
+ f.font.bold <- true
+ f.horizontalAlignment <- U2.Case2 "center"
+
+ let format = f.load(U2.Case2 (ResizeArray(["borders"])))
+ format.borders.load(propertyNames = U2.Case2 (ResizeArray(["items"])))
+ )
+
+ let! borderItems = context.sync().``then``(fun e ->
+ colorAndGetBorderItems.items |> Array.ofSeq |> Array.map (fun x -> x.load(propertyNames = U2.Case2 (ResizeArray(["sideIndex"; "color"]))) )
+ )
+ let! colorBorder = context.sync().``then``(fun e ->
+ let color = borderItems |> Array.map (fun x ->
+ if x.sideIndex = U2.Case2 "InsideVertical" then
+ x.color <- "white"
+ )
+ color
+ )
+ ()
}
-let createEmptyMatrixForTables (colCount:int) (rowCount:int) value =
- [|
- for i in 0 .. rowCount-1 do
- yield [|
- for i in 0 .. colCount-1 do yield U3.Case2 value
- |] :> IList>
- |] :> IList>>
+/// range -> 'let groupHeader = annoHeaderRange.getRowsAbove(1.)'
+let cleanGroupHeaderFormat (range:Excel.Range) (context:RequestContext) =
+ promise {
+ // unmerge group header
+ let! unmerge = context.sync().``then``(fun e ->
+ range.unmerge()
+
+ )
+ // empty group header
+ let! groupHeaderValues = context.sync().``then``(fun e ->
+ range.load(U2.Case1 "values")
+ )
+ // empty group header part 2
+ let! emptyGroupHeaderValues = context.sync().``then``(fun e ->
+ let nV =
+ groupHeaderValues.values
+ |> Seq.map (fun innerArr ->
+ innerArr
+ |> Seq.map (fun _ ->
+ "" |> box |> Some
+ ) |> ResizeArray
+ ) |> ResizeArray
+ groupHeaderValues.values <- nV
+ )
+
+ return ()
+ }
let createValueMatrix (colCount:int) (rowCount:int) value =
ResizeArray([
diff --git a/src/Client/OfficeInterop/OfficeInterop.fs b/src/Client/OfficeInterop/OfficeInterop.fs
index 3eb8a95b..5c5199dd 100644
--- a/src/Client/OfficeInterop/OfficeInterop.fs
+++ b/src/Client/OfficeInterop/OfficeInterop.fs
@@ -11,7 +11,7 @@ open Shared
open OfficeInterop.Regex
open OfficeInterop.Types
-open XmlValidationTypes
+open Xml
open OfficeInterop.HelperFunctions
open OfficeInterop.EventHandlers
open BuildingBlockTypes
@@ -62,36 +62,36 @@ open Fable.SimpleXml
open Fable.SimpleXml.Generator
/// This is not used in production and only here for development. Its content is always changing to test functions for new features.
-let exampleExcelFunction () =
+let exampleExcelFunction1 () =
Excel.run(fun context ->
-
- // The first part accesses current CustomXml
- let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
- let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
+ let selectedRange = context.workbook.getSelectedRange()
+ let _ = selectedRange.load(U2.Case2 (ResizeArray(["rowIndex"; "columnIndex"; "rowCount";"address"; "isEntireColumn"])))
promise {
- return "test"
+
+ let! baseFunc =
+ context.sync().``then``(fun e ->
+ sprintf "%A, %A" selectedRange.columnIndex selectedRange.rowIndex
+ )
+
+ return baseFunc
}
)
-
/// This is not used in production and only here for development. Its content is always changing to test functions for new features.
let exampleExcelFunction2 () =
Excel.run(fun context ->
-
- // The first part accesses current CustomXml
- let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
- let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
+ let selectedRange = context.workbook.getSelectedRange()
+ let _ = selectedRange.load(U2.Case2 (ResizeArray(["rowIndex"; "columnIndex"; "rowCount";"address"; "isEntireColumn"])))
promise {
- let! xmlParsed, currentSwateValidationXml = getCurrentValidationXml customXmlParts context
-
- let currentSwateVersion = "0.1.3"
- let currentSwateValidationXml' =
- if currentSwateValidationXml.IsNone then SwateValidation.init (currentSwateVersion) else currentSwateValidationXml.Value
+ let! baseFunc =
+ context.sync().``then``(fun e ->
+ sprintf "%A, %A" selectedRange.columnIndex selectedRange.rowIndex
+ )
- return sprintf "%A" currentSwateValidationXml'
+ return baseFunc
}
)
@@ -128,13 +128,21 @@ let createAnnotationTable ((allTableNames:String []),isDark:bool) =
let activeTables = activeSheet.tables.load(propertyNames=U2.Case1 "items")
let tableRange = context.workbook.getSelectedRange()
- let _ = tableRange.load(U2.Case2 (ResizeArray(["rowIndex"; "columnIndex"; "rowCount";"address"; ])))
+ let _ = tableRange.load(U2.Case2 (ResizeArray(["rowIndex"; "columnIndex"; "rowCount";"address"; "isEntireColumn"])))
let r = context.runtime.load(U2.Case1 "enableEvents")
+ promise {
- //sync with proxy objects after loading values from excel
- context.sync()
- .``then``( fun _ ->
+ ///// This is used to create the range in which we want to display the group header. (The row above the table)
+ //let! groupDisplayRange = context.sync().``then``( fun _ ->
+ // activeSheet.getRangeByIndexes(tableRange.rowIndex,tableRange.columnIndex,1.,2.)
+ //)
+
+ ///// This will format the row above our table to have accent background, white font and inner vertical white borders
+ //let! _ = createGroupHeaderFormatForRange groupDisplayRange context
+
+ //sync with proxy objects after loading values from excel
+ let! r = context.sync().``then``( fun _ ->
/// Filter all names of tables on the active worksheet for names starting with "annotationTable".
let annoTables =
@@ -160,7 +168,9 @@ let createAnnotationTable ((allTableNames:String []),isDark:bool) =
/// We do not want to create annotation tables of any size. The recommended workflow is to use the addBuildingBlock functionality.
/// Therefore we recreate the tableRange but with a columncount of 2. The 2 Basic columns in any annotation table.
/// "Source Name" | "Sample Name"
- let adaptedRange = activeSheet.getRangeByIndexes(tableRange.rowIndex,tableRange.columnIndex,tableRange.rowCount,2.)
+ let adaptedRange =
+ let rowCount = if tableRange.isEntireColumn then 21. else (if tableRange.rowCount <= 1. then 1. else tableRange.rowCount-1.)
+ activeSheet.getRangeByIndexes(tableRange.rowIndex+1.,tableRange.columnIndex,rowCount,2.)
/// Create table in current worksheet
let annotationTable = activeSheet.tables.add(U2.Case1 adaptedRange,true)
@@ -183,26 +193,17 @@ let createAnnotationTable ((allTableNames:String []),isDark:bool) =
let annoTableName = allTableNames |> Array.filter (fun x -> x.StartsWith "annotationTable")
- /// Should event handlers be active, then add them to the new table, otherwise don't.
- /// If the storage map is empty then eventhanderls should be deactivated.
- let updateEventHandler =
- if EventHandlerStates.adaptHiddenColsHandlerList.IsEmpty |> not then
- EventHandlerStates.adaptHiddenColsHandlerList <-
- EventHandlerStates.adaptHiddenColsHandlerList.Add (newName, annotationTable.onChanged.add(fun eventArgs -> adaptHiddenColsHandler (eventArgs,newName)) )
- false
- elif annoTableName |> Array.isEmpty then
- EventHandlerStates.adaptHiddenColsHandlerList <-
- EventHandlerStates.adaptHiddenColsHandlerList.Add (newName, annotationTable.onChanged.add(fun eventArgs -> adaptHiddenColsHandler (eventArgs,newName)) )
- true
- else
- false
-
r.enableEvents <- true
/// Return info message
- TryFindAnnoTableResult.Success newName, updateEventHandler, sprintf "Annotation Table created in [%s] with dimensions 2c x (%.0f + 1h)r" tableRange.address (tableRange.rowCount - 1.)
+ TryFindAnnoTableResult.Success newName, sprintf "Annotation Table created in [%s] with dimensions 2c x (%.0f + 1h)r" tableRange.address (tableRange.rowCount - 1.)
)
//.catch (fun e -> e |> unbox |> fun x -> x.Message)
+
+ let! sync = context.sync().``then``(fun e -> ())
+
+ return r
+ }
)
@@ -258,90 +259,6 @@ let getTableInfoForAnnoTableCreation() =
)
)
-/// This function is used to either add eventHandlers to all annotationTables or to remove all eventHanderls.
-let toggleAdaptHiddenColsEventHandler () =
- /// Check if storage for eventHandlers is empty
- let isEmpty = EventHandlerStates.adaptHiddenColsHandlerList.IsEmpty
- /// If it is empty when the function is called then we want to add event handlers.
- if isEmpty then
- Excel.run(fun context ->
-
- /// This function recursevly adds eventHandlers to all elements of the 'tables' [] and stores the reference to the event handler in 'map'
- let rec addEventToTable (map:Map>) ind (tables: Table []) =
- if ind > tables.Length-1 then
- map
- else
- let newMap = map.Add (tables.[ind].name, tables.[ind].onChanged.add(fun eventArgs -> adaptHiddenColsHandler (eventArgs,tables.[ind].name)))
- addEventToTable newMap (ind+1) tables
-
- // Ref. 2
-
- let tableCollection = context.workbook.tables.load(propertyNames = U2.Case1 "items")
-
- context.sync()
- .``then``(fun _ ->
-
- /// Get all annotationTables
- let annoTables =
- tableCollection.items
- |> Seq.filter (fun x -> x.name.StartsWith "annotationTable")
- |> Array.ofSeq
-
- /// Add eventHandlers to all of them ...
- let newHandlers = annoTables |> addEventToTable EventHandlerStates.adaptHiddenColsHandlerList 0
- /// ... and store reference in event handler storage.
- /// This is necessary as we need these objects to remove them (see 'removeHandler' below)
- EventHandlerStates.adaptHiddenColsHandlerList <- newHandlers
-
- /// Create message
- let tableMessageStr = annoTables |> Seq.map (fun x -> x.name) |> String.concat ", "
-
- /// Return message in array due to how removing the handlers is structured.
- /// (if .. then .. else needs same output.)
- [|sprintf "Event handler added to tables: %s" tableMessageStr|]
- )
- )
- else
- /// creates a list of "Promises", which each remove one eventHandler and the reference from the event handler storage.
- let rec removeHandler ind promises (handlerArr:(string*OfficeExtension.EventHandlerResult) []) =
-
- if ind > handlerArr.Length-1 then
- promises
- else
- /// get current handler from event handler storage
- let (name,handler):string*OfficeExtension.EventHandlerResult = handlerArr.[ind]
-
- /// Give handler.context as input for 'Excel.run' and remove it from the table and the event handler storage.
- let promise =
- Excel.run(handler.context, fun context ->
-
- let _ = handler.remove()
-
- let newMap = EventHandlerStates.adaptHiddenColsHandlerList.Remove(name)
-
- EventHandlerStates.adaptHiddenColsHandlerList <- newMap
-
- context.sync()
- .``then``(fun t ->
- // As we will 'String.concat' these messages later we want the first message to give more context ...
- if ind = 0 then
- sprintf "Event handler removed from tables: %s" name
- // ... and every other message to just contain the table name.
- else
- name
- )
- )
-
- // iterate through the whole event handler storage
- removeHandler (ind+1) (promise::promises) handlerArr
-
- // create all promises to remove event handlers
- removeHandler 0 [] (Map.toArray EventHandlerStates.adaptHiddenColsHandlerList)
- // this is done to create readable output.
- |> List.rev
- // execute all promises
- |> Promise.Parallel
-
/// This function is used to hide all '#h' tagged columns and to fit rows and columns to their values.
/// The main goal is to improve readability of the table with this function.
let autoFitTable (annotationTable) =
@@ -362,11 +279,10 @@ let autoFitTable (annotationTable) =
// Ref. 1
r.enableEvents <- false
-
// Auto fit on all columns to fit cols and rows to their values.
- let allCols = allCols.items |> Array.ofSeq
+ let allTableCols = allCols.items |> Array.ofSeq
let _ =
- allCols
+ allTableCols
|> Array.map (fun col -> col.getRange())
|> Array.map (fun x ->
// make all columns visible, we will later selectively hide all with '#h' tag
@@ -394,7 +310,7 @@ let autoFitTable (annotationTable) =
r.enableEvents <- true
// return message
- "Autoformat Table"
+ "Info","Autoformat Table"
)
)
@@ -412,7 +328,8 @@ let getTableRepresentation(annotationTable) =
let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
promise {
- let! xmlParsed, currentSwateValidationXml = getCurrentValidationXml customXmlParts context
+ let! xmlParsed, xml = getCurrentCustomXml customXmlParts context
+ let currentSwateValidationXml = swateValidationOfXml xmlParsed xml
let! worksheetName, buildingBlocks =
context.sync().``then``( fun _ ->
@@ -456,7 +373,8 @@ let getTableRepresentation(annotationTable) =
ColumnValidations = updatedNewColumnValidations}
else
/// Should no current TableValidation xml exist, create a new one
- TableValidation.create
+ ValidationTypes.TableValidation.create
+ ""
worksheetName
annotationTable
System.DateTime.Now
@@ -469,11 +387,11 @@ let getTableRepresentation(annotationTable) =
)
/// This function is used to add a new building block to the active annotationTable.
-let addAnnotationBlock (annotationTable,colName:string,format:(string*(string option)) option) =
+let addAnnotationBlock (annotationTable,buildingBlockInfo:MinimalBuildingBlock) =
/// The following cols are currently always singles (cannot have TSR, TAN, unit cols). For easier refactoring these names are saved in OfficeInterop.Types.
let isSingleCol =
- match colName with
+ match buildingBlockInfo.MainColumnName with
| ColumnCoreNames.Shown.Sample | ColumnCoreNames.Shown.Source | ColumnCoreNames.Shown.Data -> true
| _ -> false
@@ -488,29 +406,21 @@ let addAnnotationBlock (annotationTable,colName:string,format:(string*(string op
/// This is used to create the bracket information for reference (hidden) columns. Again this has two modi, one with id tag and one without.
/// This time no core name is needed as this will always be TSR or TAN.
- let hiddenColAttributes (parsedColHeader:ColHeader) (id:int) =
+ let hiddenColAttributes (parsedColHeader:ColHeader) (columnAccessionOpt: string option) (id:int) =
let coreName =
match parsedColHeader.Ontology, parsedColHeader.CoreName with
- | Some o , _ -> o
+ | Some o , _ -> o.Name
| None, Some cn -> cn
| _ -> parsedColHeader.Header
match id with
| 1 ->
- (sprintf "[%s] (#h)" coreName)
- | _ ->
- (sprintf "[%s] (#%i; #h)" coreName id)
-
- /// This will create the column header attributes for a unit block.
- /// as unit always has to be a term and cannot be for example "Source" or "Sample", both of which have a differen format than for exmaple "Parameter [TermName]",
- /// we only need one function to generate id and attributes and bring the unit term in the right format.
- let unitColAttributes (unitTermInfo:string*string option) (id:int) =
- let unitTermName = fst unitTermInfo
- let unitAccession = if (snd unitTermInfo).IsNone then "" else (snd unitTermInfo).Value
- match id with
- | 1 ->
- sprintf "[%s] (#h; #u%s)" unitTermName unitAccession
+ match columnAccessionOpt with
+ | Some accession -> sprintf "[%s] (#h; #t%s)" coreName accession
+ | None -> sprintf "[%s] (#h)" coreName
| _ ->
- sprintf "[%s] (#%i; #h; #u%s)" unitTermName id unitAccession
+ match columnAccessionOpt with
+ | Some accession -> sprintf "[%s] (#%i; #h; #t%s)" coreName id accession
+ | None -> sprintf "[%s] (#%i; #h)" coreName id
Excel.run(fun context ->
let sheet = context.workbook.worksheets.getActiveWorksheet()
@@ -519,181 +429,231 @@ let addAnnotationBlock (annotationTable,colName:string,format:(string*(string op
// Ref. 2
// This is necessary to place new columns next to selected col
- let tables = annotationTable.columns.load(propertyNames = U2.Case1 "items")
let annoHeaderRange = annotationTable.getHeaderRowRange()
- let _ = annoHeaderRange.load(U2.Case2 (ResizeArray[|"values";"columnIndex"|]))
+ let _ = annoHeaderRange.load(U2.Case2 (ResizeArray[|"values";"columnIndex"; "columnCount"; "rowIndex"|]))
let tableRange = annotationTable.getRange()
let _ = tableRange.load(U2.Case2 (ResizeArray(["columnCount";"rowCount"])))
let range = context.workbook.getSelectedRange()
let _ = range.load(U2.Case1 "columnIndex")
// Ref. 1
-
let r = context.runtime.load(U2.Case1 "enableEvents")
- context.sync().``then``( fun _ ->
+ promise {
- r.enableEvents <- false
+ let! newBaseColIndex,headerVals = context.sync().``then``(fun e ->
+ // Ref. 3
+ /// This is necessary to place new columns next to selected col.
+ /// selected ranged returns indices always from a worksheet perspective but we need the related table index. This is calculated here.
+ let newBaseColIndex =
+ let diff = range.columnIndex - annoHeaderRange.columnIndex |> int
+ let vals = annoHeaderRange.columnCount |> int
+ let maxLength = vals-1
+ if diff < 0 then
+ maxLength
+ elif diff > maxLength then
+ maxLength
+ else
+ diff
+ |> float
- // Ref. 3
- /// This is necessary to place new columns next to selected col.
- /// selected ranged returns indices always from a worksheet perspective but we need the related table index. This is calculated here.
- let newBaseColIndex =
- let tableHeaderRangeColIndex = annoHeaderRange.columnIndex
- let selectColIndex = range.columnIndex
- let diff = selectColIndex - tableHeaderRangeColIndex |> int
- let vals = tables.items
- let maxLength = vals.Count-1
- if diff < 0 then
- maxLength+1
- elif diff > maxLength then
- maxLength+1
- else
- diff+1
- |> float
+ // This is necessary to skip over hidden cols
+ /// Get an array of the headers
+ let headerVals = annoHeaderRange.values.[0] |> Array.ofSeq
- // This is necessary to skip over hidden cols
- /// Get an array of the headers
- let headerVals = annoHeaderRange.values.[0] |> Array.ofSeq
+ /// Here is the next col index, which is not hidden, calculated.
+ let newBaseColIndex' = findIndexNextNotHiddenCol headerVals newBaseColIndex
+ newBaseColIndex', headerVals
+ )
- /// Here is the next col index, which is not hidden, calculated.
- let newBaseColIndex' = findIndexNextNotHiddenCol headerVals newBaseColIndex
-
- let allColHeaders =
- headerVals
- |> Array.choose id
- |> Array.map string
-
- /// This is necessary to check if the would be created col name already exists, to then tick up the id tag.
- let parsedBaseHeader = parseColHeader colName
- /// This function checks if the would be col names already exist. If they do it ticks up the id tag to keep col names unique.
- let findNewIdForName() =
- let rec loopingCheck int =
- let isExisting =
- allColHeaders
- // Should a column with the same name already exist, then count up the id tag.
- |> Array.exists (fun existingHeader ->
- if isSingleCol then
- existingHeader = mainColName colName int
- else
- existingHeader = mainColName colName int
- // i think it is necessary to also check for "TSR" and "TAN" because of the following possibilities
- // Parameter [instrument model] | "Term Source REF [instrument model] (#h) | ...
- // Factor [instrument model] | "Term Source REF [instrument model] (#h) | ...
- // in the example above the mainColumn name is different but "TSR" and "TAN" would be the same.
- || existingHeader = sprintf "Term Source REF %s" (hiddenColAttributes parsedBaseHeader int)
- || existingHeader = sprintf "Term Accession Number %s" (hiddenColAttributes parsedBaseHeader int)
- )
- if isExisting then
- loopingCheck (int+1)
- else
- int
- loopingCheck 1
+ let! res = context.sync().``then``( fun _ ->
- // The new id, which does not exist yet with the column name
- let newId = findNewIdForName()
+ r.enableEvents <- false
- let rowCount = tableRange.rowCount |> int
- //create an empty column to insert
- let col = createEmptyMatrixForTables 1 rowCount ""
+ let allColHeaders =
+ headerVals
+ |> Array.choose id
+ |> Array.map string
+
+ /// This is necessary to check if the would be created col name already exists, to then tick up the id tag.
+ let parsedBaseHeader = parseColHeader buildingBlockInfo.MainColumnName
+ /// This function checks if the would be col names already exist. If they do it ticks up the id tag to keep col names unique.
+ let findNewIdForName() =
+ let rec loopingCheck int =
+ let isExisting =
+ allColHeaders
+ // Should a column with the same name already exist, then count up the id tag.
+ |> Array.exists (fun existingHeader ->
+ if isSingleCol then
+ existingHeader = mainColName buildingBlockInfo.MainColumnName int
+ else
+ existingHeader = mainColName buildingBlockInfo.MainColumnName int
+ // i think it is necessary to also check for "TSR" and "TAN" because of the following possibilities
+ // Parameter [instrument model] | "Term Source REF [instrument model] (#h) | ...
+ // Factor [instrument model] | "Term Source REF [instrument model] (#h) | ...
+ // in the example above the mainColumn name is different but "TSR" and "TAN" would be the same.
+ || existingHeader = sprintf "Term Source REF %s" (hiddenColAttributes parsedBaseHeader buildingBlockInfo.MainColumnTermAccession int)
+ || existingHeader = sprintf "Term Accession Number %s" (hiddenColAttributes parsedBaseHeader buildingBlockInfo.MainColumnTermAccession int)
+ )
+ if isExisting then
+ loopingCheck (int+1)
+ else
+ int
+ loopingCheck 1
- // create main column
- let createdCol1() =
- annotationTable.columns.add(
- index = newBaseColIndex',
- values = U4.Case1 col,
- name = mainColName colName newId
- )
+ // The new id, which does not exist yet with the column name
+ let newId = findNewIdForName()
- // create TSR
- let createdCol2() =
- annotationTable.columns.add(
- index = newBaseColIndex'+1.,
- values = U4.Case1 col,
- name = sprintf "Term Source REF %s" (hiddenColAttributes parsedBaseHeader newId)
- )
+ let rowCount = tableRange.rowCount |> int
- // create TAN
- let createdCol3() =
- annotationTable.columns.add(
- index = newBaseColIndex'+2.,
- values = U4.Case1 col,
- name = sprintf "Term Accession Number %s" (hiddenColAttributes parsedBaseHeader newId)
- )
+ //create an empty column to insert
+ let col value = createEmptyMatrixForTables 1 rowCount value
+
+ printfn "%A" buildingBlockInfo.Values
+
+ // create main column
+ let createdCol1() =
+ let mainColVal = if buildingBlockInfo.Values.IsSome then buildingBlockInfo.Values.Value.Name else ""
+ annotationTable.columns.add(
+ index = newBaseColIndex,
+ values = U4.Case1 (col mainColVal),
+ name = mainColName buildingBlockInfo.MainColumnName newId
+ )
+
+ // create TSR
+ let createdCol2() =
+ let tsrColVal = if buildingBlockInfo.Values.IsSome && buildingBlockInfo.Values.Value.TermAccession <> "" then buildingBlockInfo.Values.Value.TermAccession.Split([|":"|],StringSplitOptions.None).[0] else ""
+ annotationTable.columns.add(
+ index = newBaseColIndex+1.,
+ values = U4.Case1 (col tsrColVal),
+ name = sprintf "Term Source REF %s" (hiddenColAttributes parsedBaseHeader buildingBlockInfo.MainColumnTermAccession newId)
+ )
- // Should the column be Data, Source or Sample then we do not add TSR and TAN
- let createCols =
- if isSingleCol then
- [|createdCol1()|]
+ // create TAN
+ let createdCol3() =
+ let linkTermAccession() = buildingBlockInfo.Values.Value.TermAccession |> Shared.URLs.termAccessionUrlOfAccessionStr
+ let tanColVal = if buildingBlockInfo.Values.IsSome && buildingBlockInfo.Values.Value.TermAccession <> "" then linkTermAccession() else ""
+ annotationTable.columns.add(
+ index = newBaseColIndex+2.,
+ values = U4.Case1 (col tanColVal),
+ name = sprintf "Term Accession Number %s" (hiddenColAttributes parsedBaseHeader buildingBlockInfo.MainColumnTermAccession newId)
+ )
+
+ // Should the column be Data, Source or Sample then we do not add TSR and TAN
+ let createCols =
+ if isSingleCol then
+ [|createdCol1()|]
- else [|
- createdCol1()
- createdCol2()
- createdCol3()
- |]
+ else [|
+ createdCol1()
+ createdCol2()
+ createdCol3()
+ |]
- /// if format.isSome then we need to also add unit columns in the following scheme:
- /// Unit [UnitTermName] (#id; #h; #u) | Term Source REF [UnitTermName] (#id; #h; #u) | Term Accession Number [UnitTermName] (#id; #h; #u)
- let createUnitColsIfNeeded =
- if format.IsSome then
- let findNewIdForUnit() =
- let rec loopingCheck int =
- let isExisting =
- allColHeaders
- // Should a column with the same name already exist, then count up the id tag.
- |> Array.exists (fun existingHeader ->
- // We don't need to check TSR or TAN, because the main column always starts with "Unit"
- existingHeader = sprintf "Unit %s" (unitColAttributes format.Value int)
- )
- if isExisting then
- loopingCheck (int+1)
- else
- int
- loopingCheck 1
-
- let newUnitId = findNewIdForUnit()
-
- /// create unit main column
- let createdUnitCol1 =
- annotationTable.columns.add(
- index = newBaseColIndex'+3.,
- values = U4.Case1 col,
- name = sprintf "Unit %s" (unitColAttributes format.Value newUnitId)
- )
+ /// if format.isSome then we need to also add unit columns in the following scheme:
+ /// Unit [UnitTermName] (#id; #h; #u) | Term Source REF [UnitTermName] (#id; #h; #u) | Term Accession Number [UnitTermName] (#id; #h; #u)
+ let createUnitColsIfNeeded =
+ OfficeInterop.HelperFunctions.createUnitColumns allColHeaders annotationTable newBaseColIndex rowCount buildingBlockInfo.UnitName buildingBlockInfo.UnitTermAccession
- /// create unit TSR
- let createdUnitCol2 =
- annotationTable.columns.add(
- index = newBaseColIndex'+4.,
- values = U4.Case1 col,
- name = sprintf "Term Source REF %s" (unitColAttributes format.Value newUnitId)
- )
+ /// If unit block was added then return some msg information
+ let unitColCreationMsg = if createUnitColsIfNeeded.IsSome then fst createUnitColsIfNeeded.Value else ""
+ let unitColFormat = if createUnitColsIfNeeded.IsSome then snd createUnitColsIfNeeded.Value else "0.00"
- /// create unit TAN
- let createdUnitCol3 =
- annotationTable.columns.add(
- index = newBaseColIndex'+5.,
- values = U4.Case1 col,
- name = sprintf "Term Accession Number %s" (unitColAttributes format.Value newUnitId)
- )
+ r.enableEvents <- true
+ /// return main col names, unit column format and a message. The first two params are used in a follow up message (executing 'changeTableColumnFormat')
+ mainColName buildingBlockInfo.MainColumnName newId, unitColFormat, sprintf "%s column was added. %s" buildingBlockInfo.MainColumnName unitColCreationMsg
+ )
- Some (
- sprintf " Added specified unit: %s" (fst format.Value),
- sprintf "0.00 \"%s\"" (fst format.Value)
- )
- else
- None
+ return res
+ }
+ )
- /// If unit block was added then return some msg information
- let unitColCreationMsg = if createUnitColsIfNeeded.IsSome then fst createUnitColsIfNeeded.Value else ""
- let unitColFormat = if createUnitColsIfNeeded.IsSome then snd createUnitColsIfNeeded.Value else "0.00"
+let addAnnotationBlocksAsProtocol (annotationTable,buildingBlockInfoList:MinimalBuildingBlock list, protocol:Xml.GroupTypes.Protocol) =
+
+ let addBuildingBlock buildingBlockInfo =
+ promise {
+ let! res = addAnnotationBlock(annotationTable,buildingBlockInfo)
+ return [res]
+ }
+ let chainBuildingBlocks buildingBlockInfoList =
+ let promiseList = buildingBlockInfoList |> List.map (fun x -> addBuildingBlock x)
+ let emptyPromise = promise {return []}
+ let rec chain ind (promiseList:JS.Promise<(string*string*string) list> list ) resultPromise =
+ if ind >= promiseList.Length then
+ resultPromise
+ elif ind = 0 then
+ let currentPromise = promiseList |> List.item ind
+ chain 1 promiseList currentPromise
+ else
+ let currentPromise = promiseList |> List.item ind
+ let nextPromise =
+ Promise.PromiseBuilder().Merge(currentPromise,resultPromise, (fun x y -> x@y))
+ chain (ind+1) promiseList nextPromise
- r.enableEvents <- true
- /// return main col names, unit column format and a message. The first two params are used in a follow up message (executing 'changeTableColumnFormat')
- mainColName colName newId, unitColFormat, sprintf "%s column was added.%s" colName unitColCreationMsg
+ chain 0 promiseList emptyPromise
+
+ let infoProm =
+ Excel.run(fun context ->
+ let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
+ let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
+ let activeSheet = context.workbook.worksheets.getActiveWorksheet().load(propertyNames = U2.Case2 (ResizeArray[|"name"|]))
+
+ let annoHeaderRange,annoBodyRange = getBuildingBlocksPreSync context annotationTable
+
+ promise {
+ let! xmlParsed, xml = getCurrentCustomXml customXmlParts context
+
+ let currentProtocolGroup = protocolGroupOfXml xmlParsed xml
+
+ let! buildingBlocks = context.sync().``then``( fun e -> getBuildingBlocks annoHeaderRange annoBodyRange )
+
+ if currentProtocolGroup.IsSome then
+ let existsAlready =
+ currentProtocolGroup.Value.Protocols
+ |> List.tryFind (fun existingProtocol ->
+ existingProtocol.TableName = annotationTable &&
+ existingProtocol.WorksheetName = activeSheet.name &&
+ existingProtocol.Id = protocol.Id
+ )
+ let isComplete =
+ if existsAlready.IsSome then
+ (tryFindSpannedBuildingBlocks existsAlready.Value buildingBlocks).IsSome
+ else
+ true
+ if existsAlready.IsSome then
+ if isComplete then
+ failwith ( sprintf "Protocol %s exists already in %s - %s." existsAlready.Value.Id existsAlready.Value.TableName existsAlready.Value.WorksheetName )
+
+ let! newProtocol = context.sync().``then``(fun e ->
+ { protocol with
+ WorksheetName = activeSheet.name
+ TableName = annotationTable }
+ )
+ let! chainProm = chainBuildingBlocks buildingBlockInfoList
+
+ return (chainProm,newProtocol)
+ }
)
- )
+
+ promise {
+ let! blockResults,info = infoProm
+ let createSpannedBlocks =
+ [
+ for ind in 0 .. blockResults.Length-1 do
+ let colName = blockResults |> List.item ind |> (fun (x,_,_) -> x)
+ let relatedTermAccession = buildingBlockInfoList |> List.rev |> List.item ind |> (fun x ->
+ if colName.Contains(x.MainColumnName) |> not then
+ failwith (sprintf "Had problems relating term accession and term name: %s in %s" x.MainColumnName colName)
+ if x.MainColumnTermAccession.IsSome then x.MainColumnTermAccession.Value else ""
+ )
+ yield
+ Xml.GroupTypes.SpannedBuildingBlock.create colName relatedTermAccession
+ ]
+ let completeProtocolInfo = {info with SpannedBuildingBlocks = createSpannedBlocks}
+ return (blockResults,completeProtocolInfo)
+ }
+
let changeTableColumnFormat annotationTable (colName:string) (format:string) =
Excel.run(fun context ->
@@ -724,7 +684,7 @@ let changeTableColumnFormat annotationTable (colName:string) (format:string) =
r.enableEvents <- true
// return msg
- sprintf "format of %s was changed to %s" colName format
+ "Info",sprintf "Format of %s was changed to %s" colName format
)
)
@@ -775,7 +735,14 @@ let getParentTerm (annotationTable) =
None
else
// is selected range is in table then take header value from selected column
- tableRange.values.[0].[newColIndex]
+ let header = tableRange.values.[0].[newColIndex]
+ let parsedHeader = parseColHeader (string header.Value)
+ /// as the reference columns also contain a accession tag we want to return the first reference column header
+ /// instead of the main column header, if the main column header does include an ontology
+ if parsedHeader.Ontology.IsSome then
+ tableRange.values.[0].[newColIndex+1]
+ else
+ None
// return header of selected col
value
)
@@ -828,7 +795,7 @@ let fillValue (annotationTable,term,termBackground:Shared.DbDomain.Term option)
Some ("user-specific" |> box)
| 1, Some term ->
//add "Term Accession Number"
- let replace = Shared.URLs.TermAccessionBaseUrl + "/" + term.Accession.Replace(@":",@"_")
+ let replace = Shared.URLs.TermAccessionBaseUrl + term.Accession.Replace(@":",@"_")
Some ( replace |> box )
| 0, Some term ->
//add "Term Source REF"
@@ -845,7 +812,7 @@ let fillValue (annotationTable,term,termBackground:Shared.DbDomain.Term option)
nextColsRange.values <- nextNewVals
r.enableEvents <- true
// return print msg
- sprintf "%A, %A" nextColsRange.values.Count nextNewVals
+ "Info",sprintf "Insert %A %Ax" term nextColsRange.values.Count
)
)
@@ -879,28 +846,25 @@ let createSearchTermsIFromTable (annotationTable') =
// group cells by value so we don't get doubles.
bBlock.MainColumn.Cells
|> Array.groupBy (fun cell ->
- cell.Value.IsSome, cell.Value.Value
+ cell.Value.Value
)
- // only keep cells with value and create InsertTerm types that will be passed to the server to get filled with a term option.
- |> Array.choose (fun ((isSome,searchStr),cellArr) ->
- if isSome && searchStr <> "" then
- let rowIndices = cellArr |> Array.map (fun cell -> cell.Index)
- Shared.SearchTermI.create tsrTanColIndices searchStr rowIndices
- |> Some
- else
- None
+ // create SearchTermI types that will be passed to the server to get filled with a term option.
+ |> Array.map (fun (searchStr,cellArr) ->
+ let rowIndices = cellArr |> Array.map (fun cell -> cell.Index)
+ Shared.SearchTermI.create tsrTanColIndices searchStr "" bBlock.MainColumn.Header.Value.Ontology rowIndices
)
/// We differentiate between building blocks with and without unit as unit building blocks will not contain terms as values but e.g. numbers.
/// In this case we do not want to search the database for the cell values but the parent ontology in the header.
/// This will then be used for TSR and TAN.
let fillTermConstructsWithUnit (bBlock:BuildingBlock) =
- let searchStr = bBlock.MainColumn.Header.Value.Ontology.Value
+ let searchStr = bBlock.MainColumn.Header.Value.Ontology.Value.Name
+ let termAccession = bBlock.MainColumn.Header.Value.Ontology.Value.TermAccession
let rowIndices =
bBlock.MainColumn.Cells
|> Array.map (fun x ->
x.Index
)
- [|Shared.SearchTermI.create tsrTanColIndices searchStr rowIndices|]
+ [|Shared.SearchTermI.create tsrTanColIndices searchStr termAccession None rowIndices|]
if bBlock.Unit.IsSome then
fillTermConstructsWithUnit bBlock
else
@@ -914,10 +878,11 @@ let createSearchTermsIFromTable (annotationTable') =
|> Array.map (
fun bBlock ->
let unit = bBlock.Unit.Value
- let searchString = unit.MainColumn.Header.Value.Ontology.Value
+ let searchString = unit.MainColumn.Header.Value.Ontology.Value.Name
+ let termAccession = unit.MainColumn.Header.Value.Ontology.Value.TermAccession
let colIndices = [|unit.MainColumn.Index; unit.TSR.Value.Index; unit.TAN.Value.Index|]
let rowIndices = unit.MainColumn.Cells |> Array.map (fun x -> x.Index)
- Shared.SearchTermI.create colIndices searchString rowIndices
+ Shared.SearchTermI.create colIndices searchString termAccession None rowIndices
)
/// Combine search types
@@ -933,7 +898,7 @@ let createSearchTermsIFromTable (annotationTable') =
/// This function will be executed after the SearchTerm types from 'createSearchTermsFromTable' where send to the server to search the database for them.
/// Here the results will be written into the table by the stored col and row indices.
-let UpdateTableBySearchTermsI (annotationTable,insertTerms:SearchTermI []) =
+let UpdateTableBySearchTermsI (annotationTable,terms:SearchTermI []) =
Excel.run(fun context ->
/// This will create a single cell value arr
@@ -944,14 +909,12 @@ let UpdateTableBySearchTermsI (annotationTable,insertTerms:SearchTermI []) =
])
])
-
// Ref. 2
let sheet = context.workbook.worksheets.getActiveWorksheet()
let annotationTable = sheet.tables.getItem(annotationTable)
let annoBodyRange = annotationTable.getDataBodyRange()
let _ = annoBodyRange.load(U2.Case2 (ResizeArray [|"values"|])) |> ignore
-
// Ref. 1
let r = context.runtime.load(U2.Case1 "enableEvents")
@@ -959,30 +922,45 @@ let UpdateTableBySearchTermsI (annotationTable,insertTerms:SearchTermI []) =
``then``(fun _ ->
r.enableEvents <- false
/// Filter for only terms which returned a result and therefore were not custom user input.
- let foundTerms = insertTerms |> Array.filter (fun x -> x.TermOpt.IsSome)
+ let foundTerms = terms |> Array.filter (fun x -> x.TermOpt.IsSome)
/// Insert terms into related cells for all stored row-/ col-indices
let insert() =
- foundTerms
+ terms
// iterate over all found terms
|> Array.map (
- fun insertTerm ->
- /// Term search result from database
- let t = insertTerm.TermOpt.Value
- /// Get ontology and accession from Term.Accession
- let ont, accession =
- let a = t.Accession
- let splitA = a.Split":"
- let accession = Shared.URLs.TermAccessionBaseUrl + a.Replace(":","_")
- splitA.[0], accession
+ fun term ->
+ let t,ont,accession =
+ if term.TermOpt.IsSome then
+ /// Term search result from database
+ let t = term.TermOpt.Value
+ /// Get ontology and accession from Term.Accession
+ let ont, accession =
+ let a = t.Accession
+ let splitA = a.Split":"
+ let accession = Shared.URLs.TermAccessionBaseUrl + a.Replace(":","_")
+ splitA.[0], accession
+ t.Name,ont,accession
+ elif term.SearchString = "" then
+ let t = ""
+ let ont = ""
+ let accession = ""
+ t, ont, accession
+ elif term.TermOpt = None then
+ let t = term.SearchString
+ let ont = "user-specific"
+ let accession = "user-specific"
+ t, ont, accession
+ else
+ failwith "Swate encountered an error in (UpdateTableBySearchTermsI.insert()) trying to parse database search results to Swate table."
/// Distinguish between core building blocks and unit buildingblocks.
let inputVals = [|
/// if the n of cols is 2 then it is a core building block.
- if insertTerm.ColIndices.Length = 2 then
+ if term.ColIndices.Length = 2 then
createCellValueInput ont
createCellValueInput accession
/// if the n of cols is 3 then it is a unit building block.
- elif insertTerm.ColIndices.Length = 3 then
- createCellValueInput t.Name
+ elif term.ColIndices.Length = 3 then
+ createCellValueInput t
createCellValueInput ont
createCellValueInput accession
|]
@@ -994,12 +972,12 @@ let UpdateTableBySearchTermsI (annotationTable,insertTerms:SearchTermI []) =
/// This led to the first column to be erased for the same rows that were found to be replaced.
// iterate over all columns (in this case in form of the index of their array. as we need the index to access the correct 'inputVal' value
- for i in 0 .. insertTerm.ColIndices.Length-1 do
+ for i in 0 .. term.ColIndices.Length-1 do
// iterate over all rows and insert the correct inputVal
- for rowInd in insertTerm.RowIndices do
+ for rowInd in term.RowIndices do
- let cell = annoBodyRange.getCell(float rowInd, float insertTerm.ColIndices.[i])
+ let cell = annoBodyRange.getCell(float rowInd, float term.ColIndices.[i])
cell.values <- inputVals.[i]
)
@@ -1074,6 +1052,7 @@ let getTableMetaData (annotationTable) =
let rowRangeAddr, rowRangeColCount, rowRangeRowCount = rowRange.address,rowRange.columnCount,rowRange.rowCount
let headerRangeAddr, headerRangeColCount, headerRangeRowCount = headerRange.address,headerRange.columnCount,headerRange.rowCount
+ "info",
sprintf "Table Metadata: [Table] : %ic x %ir ; [TotalRange] : %s : %ic x %ir ; [HeaderRowRange] : %s : %ic x %ir "
(colCount |> int)
(rowCount |> int)
@@ -1086,9 +1065,6 @@ let getTableMetaData (annotationTable) =
)
)
-let syncContext (passthroughMessage : string) =
- Excel.run (fun context -> context.sync(passthroughMessage))
-
let deleteAllCustomXml() =
Excel.run(fun context ->
@@ -1110,7 +1086,7 @@ let deleteAllCustomXml() =
}
)
-let getSwateValidationXml() =
+let getSwateCustomXml() =
Excel.run(fun context ->
// The first part accesses current CustomXml
@@ -1119,17 +1095,197 @@ let getSwateValidationXml() =
promise {
- let! xmlParsed, currentSwateValidationXml = getCurrentValidationXml customXmlParts context
+ //let! xmlParsed, currentSwateValidationXml = getCurrentValidationXml customXmlParts context
+
+ let! getXml =
+ context.sync().``then``(fun e ->
+ let items = customXmlParts.items
+ let xmls = items |> Seq.map (fun x -> x.getXml() )
- return "Info",sprintf "%A" currentSwateValidationXml
+ xmls |> Array.ofSeq
+ )
+
+ let! xml =
+ context.sync().``then``(fun e ->
+
+ //let nOfItems = customXmlParts.items.Count
+ let vals = getXml |> Array.map (fun x -> x.value)
+ //sprintf "N = %A; items: %A" nOfItems vals
+ let xml = vals |> String.concat Environment.NewLine
+ xml
+ )
+
+ return "Info",sprintf "%A" xml
}
)
-let writeTableValidationToXml(tableValidation:TableValidation,currentSwateVersion:string) =
+let writeProtocolToXml(protocol:GroupTypes.Protocol) =
+ updateProtocolFromXml protocol false
+
+let removeProtocolFromXml(protocol:GroupTypes.Protocol) =
+ updateProtocolFromXml protocol true
+
+/// This function ist used to parse the protocol xml and the table to building blocks and assign the correct
+/// table protocol-group-header to each building block.
+let updateProtocolGroupHeader (annotationTableName) =
+ Excel.run(fun context ->
+
+ let activeSheet = context.workbook.worksheets.getActiveWorksheet().load(propertyNames = U2.Case2 (ResizeArray[|"name"|]))
+ let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
+ let customXmlParts = workbook.customXmlParts.load (propertyNames = U2.Case2 (ResizeArray[|"items"|]))
+
+
+ let annoHeaderRange,annoBodyRange = getBuildingBlocksPreSync context annotationTableName
+ let _ = annoHeaderRange.load(U2.Case1 "rowIndex")
+ let groupHeader = annoHeaderRange.getRowsAbove(1.)
+
+ promise {
+ let! xmlParsed, xml = getCurrentCustomXml customXmlParts context
+ let! buildingBlocks = context.sync().``then``( fun e -> getBuildingBlocks annoHeaderRange annoBodyRange )
+ let currentProtocolGroup = protocolGroupOfXml xmlParsed xml
+
+ let! applyGroups = promise {
+
+ let protocolsForCurrentTableSheet =
+ if currentProtocolGroup.IsSome then
+ currentProtocolGroup.Value.Protocols
+ |> List.filter (fun protocol ->
+ protocol.TableName = annotationTableName
+ && protocol.WorksheetName = activeSheet.name
+ )
+ else
+ []
+
+ let getGroupHeaderIndicesForProtocol (buildingBlocks:BuildingBlock []) (protocol:Xml.GroupTypes.Protocol) =
+ let buildingBlockOpts = tryFindSpannedBuildingBlocks protocol buildingBlocks
+
+ // caluclate list of indices fro group blocks
+ if buildingBlockOpts.IsSome then
+ let getStartAndEnd (mainColIndices:int list) =
+ let startInd = List.min mainColIndices
+ let endInd =
+ let headerVals = annoHeaderRange.values.[0] |> Array.ofSeq
+ let max = List.max mainColIndices |> float
+ findIndexNextNotHiddenCol headerVals max |> int
+ startInd,endInd-1
+ let bbColNumberAndIndices =
+ buildingBlockOpts.Value
+ |> List.map (fun bb ->
+ let nOfCols =
+ if bb.TAN.IsNone || bb.TSR.IsNone then
+ 1
+ elif bb.TAN.IsSome && bb.TSR.IsSome && bb.Unit.IsNone then
+ 3
+ elif bb.TAN.IsSome && bb.TSR.IsSome && bb.Unit.IsSome then
+ 6
+ else failwith (sprintf "Swate encountered an unknown column pattern for building block: %s " bb.MainColumn.Header.Value.Header)
+ bb.MainColumn.Index, nOfCols
+ )
+ let rec sortIntoBlocks (iteration:int) (currentGroupIterator:int) (bbColNumberAndIndices:(int*int) list) (collector:(int*int*int) list) =
+ if iteration >= bbColNumberAndIndices.Length then
+ collector
+ elif iteration = 0 then
+ let currentInd, currentN = List.item iteration bbColNumberAndIndices
+ sortIntoBlocks 1 currentGroupIterator bbColNumberAndIndices ((currentGroupIterator,currentInd,currentN)::collector)
+ else
+ let currentColIndex, currentNOfCols = List.item iteration bbColNumberAndIndices
+ let lastGroup, lastColIndex, lastNOfCols =
+ collector
+ |> List.sortBy (fun (group,colIndex,nOfCols) -> colIndex)
+ |> List.last
+ /// - 1 as the lastColIndex is already the mainColumn
+ let lastBBEndInd = lastColIndex + lastNOfCols
+ if lastBBEndInd = currentColIndex then
+ sortIntoBlocks (iteration+1) currentGroupIterator bbColNumberAndIndices ((currentGroupIterator,currentColIndex,currentNOfCols)::collector)
+ elif lastBBEndInd > currentColIndex then
+ failwith (sprintf "Swate encountered an unknown building block pattern (Error: SIB%i-%i)" lastBBEndInd currentColIndex)
+ else
+ let newGroupIterator = currentGroupIterator + 1
+ sortIntoBlocks (iteration+1) newGroupIterator bbColNumberAndIndices ((newGroupIterator,currentColIndex,currentNOfCols)::collector)
+ let mainColIndiceBlocks =
+ sortIntoBlocks 0 0 bbColNumberAndIndices []
+ |> List.groupBy (fun (group,colInd,nOfCols) -> group)
+ |> List.map (fun x ->
+ snd x |> List.map (fun (group,colInd,nOfCols) -> colInd)
+ )
+ |> List.map getStartAndEnd
+ Some mainColIndiceBlocks
+ else
+ None
+
+ let! group =
+ protocolsForCurrentTableSheet
+ |> List.map (fun protocol ->
+ let startEndIndices = getGroupHeaderIndicesForProtocol buildingBlocks protocol
+ promise {
+
+ let! cleanGroupHeaderFormat = cleanGroupHeaderFormat groupHeader context
+
+ if startEndIndices.IsSome then
+
+ let! r1 =
+ startEndIndices.Value
+ |> List.map (fun (startInd,endInd )->
+
+ promise {
+
+ let startInd,endInd = startInd + 1 |> float, endInd |> float
+
+ let! mergedGroupHeader =
+ context.sync().``then``(fun e ->
+ /// +2 to also include start and endcolumn, without it would end two too early.
+ let diff = (endInd - startInd) + 2.
+ let getProtocolGroupHeaderRange = activeSheet.getRangeByIndexes(annoHeaderRange.rowIndex-1., startInd, 1., diff)
+ getProtocolGroupHeaderRange.merge()
+ getProtocolGroupHeaderRange.load(U2.Case2 (ResizeArray(["values"])))
+ )
+
+ let! insertValue = context.sync().``then``(fun e ->
+ let nV =
+ mergedGroupHeader.values
+ |> Seq.map (fun innerArr ->
+ innerArr
+ |> Seq.map (fun _ ->
+ protocol.Id |> box |> Some
+ ) |> ResizeArray
+ ) |> ResizeArray
+ mergedGroupHeader.values <- nV
+ )
+ return sprintf "%A - %A -> %A." startInd endInd protocol.Id
+ }
+
+ ) |> Promise.Parallel
+
+ return String.concat " " r1
+
+ else
+ // REMOVE INCOMPLETE PROTOCOL
+
+ let! remove = removeProtocolFromXml protocol
+ return sprintf "%A" remove
+
+ }
+ ) |> Promise.Parallel
+ return group
+ }
+
+ let! format = formatGroupHeaderForRange groupHeader context
+
+ return ("info", "Update Protocol Header")
+ }
+ )
+
+
+let writeTableValidationToXml(tableValidation:ValidationTypes.TableValidation,currentSwateVersion:string) =
Excel.run(fun context ->
// Update DateTime
- let newTableValidation = {tableValidation with DateTime = System.DateTime.Now}
+ let newTableValidation = {
+ tableValidation with
+ // This line is used to give freshly created TableValidations the current Swate Version
+ SwateVersion = if tableValidation.SwateVersion = "" then currentSwateVersion else tableValidation.SwateVersion
+ DateTime = System.DateTime.Now
+ }
// The first part accesses current CustomXml
let workbook = context.workbook.load(propertyNames = U2.Case2 (ResizeArray[|"customXmlParts"|]))
@@ -1137,10 +1293,11 @@ let writeTableValidationToXml(tableValidation:TableValidation,currentSwateVersio
promise {
- let! xmlParsed, currentSwateValidationXml' = getCurrentValidationXml customXmlParts context
-
+ let! xmlParsed, xml = getCurrentCustomXml customXmlParts context
+
let currentSwateValidationXml =
- if currentSwateValidationXml'.IsNone then SwateValidation.init (currentSwateVersion) else currentSwateValidationXml'.Value
+ let previousValidation = swateValidationOfXml xmlParsed xml
+ if previousValidation.IsNone then ValidationTypes.SwateValidation.init (currentSwateVersion) else previousValidation.Value
let nextSwateValidationXml =
let newTableValidations =
@@ -1158,8 +1315,7 @@ let writeTableValidationToXml(tableValidation:TableValidation,currentSwateVersio
child.Name <> "Validation"
)
let nextChildren = nextAsXmlFormat::childrenWithoutValidation
- {
- xmlParsed with
+ { xmlParsed with
Children = nextChildren
} |> OfficeInterop.HelperFunctions.xmlElementToXmlString
@@ -1185,4 +1341,91 @@ let writeTableValidationToXml(tableValidation:TableValidation,currentSwateVersio
newTableValidation.TableName
( newTableValidation.DateTime.ToString("yyyy-MM-dd HH:mm") )
}
+ )
+
+/// This function is used to add unit reference columns to an existing building block without unit reference columns
+let addUnitToExistingBuildingBlock (annotationTable:string,format:string option,unitAccessionOpt:string option) =
+ Excel.run(fun context ->
+
+ let annotationTableName = annotationTable
+
+ let sheet = context.workbook.worksheets.getActiveWorksheet()
+ let annotationTable = sheet.tables.getItem(annotationTableName)
+
+ // Ref. 2
+
+ // This is necessary to place new columns next to selected col
+ let annoHeaderRange = annotationTable.getHeaderRowRange()
+ let _ = annoHeaderRange.load(U2.Case2 (ResizeArray[|"rowIndex"|]))
+
+ let tableRange = annotationTable.getRange()
+ let _ = tableRange.load(U2.Case2 (ResizeArray(["columnCount";"rowCount"])))
+
+ let selectedRange = context.workbook.getSelectedRange()
+ let _ = selectedRange.load(U2.Case2 (ResizeArray(["values";"columnIndex"; "columnCount"])))
+
+ // Ref. 2
+ let annoHeaderRange, annoBodyRange = BuildingBlockTypes.getBuildingBlocksPreSync context annotationTableName
+
+ context.sync()
+ .``then``( fun _ ->
+
+ if selectedRange.columnCount <> 1. then
+ failwith "To add a unit please select a single column"
+
+ let newSelectedColIndex =
+ // recalculate the selected range index based on table
+ let diff = selectedRange.columnIndex - annoHeaderRange.columnIndex
+ // if index is smaller 0 it is outside of table range
+ if diff <= 0. then 0.
+ // if index is bigger than columnCount-1 then it is outside of tableRange
+ elif diff >= annoHeaderRange.columnCount-1. then annoHeaderRange.columnCount-1.
+ else diff
+
+ /// Sort all columns into building blocks.
+ let buildingBlocks =
+ getBuildingBlocks annoHeaderRange annoBodyRange
+
+ /// find building block with the closest main column index from left
+ let findLeftClosestBuildingBlock =
+ buildingBlocks
+ |> Array.filter (fun x -> x.MainColumn.Index <= int newSelectedColIndex)
+ |> Array.minBy (fun x -> Math.Abs(x.MainColumn.Index - int newSelectedColIndex))
+
+ if findLeftClosestBuildingBlock.TAN.IsNone || findLeftClosestBuildingBlock.TSR.IsNone then
+ failwith (
+ sprintf
+ "Swate can only add a unit to columns of the type: %s, %s, %s."
+ OfficeInterop.Types.ColumnCoreNames.Shown.Parameter
+ OfficeInterop.Types.ColumnCoreNames.Shown.Characteristics
+ OfficeInterop.Types.ColumnCoreNames.Shown.Factor
+ )
+
+ if findLeftClosestBuildingBlock.Unit.IsSome then
+ failwith (
+ sprintf
+ "Swate cannot add a unit to a building block already containing a unit: %A"
+ findLeftClosestBuildingBlock.Unit.Value.MainColumn.Header.Value.CoreName
+ )
+
+ // This is necessary to skip over hidden cols
+ /// Get an array of the headers
+ let headerVals = annoHeaderRange.values.[0] |> Array.ofSeq
+
+ let allColHeaders =
+ headerVals
+ |> Array.choose id
+ |> Array.map string
+
+ let unitColumnResult =
+ createUnitColumns allColHeaders annotationTable (float findLeftClosestBuildingBlock.MainColumn.Index) (int tableRange.rowCount) format unitAccessionOpt
+
+ let maincolName = findLeftClosestBuildingBlock.MainColumn.Header.Value.Header
+
+ /// If unit block was added then return some msg information
+ let unitColCreationMsg = if unitColumnResult.IsSome then fst unitColumnResult.Value else ""
+ let unitColFormat = if unitColumnResult.IsSome then snd unitColumnResult.Value else "0.00"
+
+ maincolName, unitColFormat, unitColCreationMsg
+ )
)
\ No newline at end of file
diff --git a/src/Client/OfficeInterop/Regex.fs b/src/Client/OfficeInterop/Regex.fs
index 297ed941..f2262057 100644
--- a/src/Client/OfficeInterop/Regex.fs
+++ b/src/Client/OfficeInterop/Regex.fs
@@ -17,7 +17,11 @@ let BracketsPattern = "\([^\]]*\)"
let CoreNamePattern = "^[^[(]*"
[]
-let UnitAccessionPattern = "#u.+?:\d+"
+let TermAccessionPattern = "#t[a-zA-Z0-9]+?:[a-zA-Z0-9]+"
+
+// currently unused
+[]
+let GroupPattern = "#g[a-zA-Z0-9]+"
let parseSquaredBrackets (headerStr:string) =
match headerStr with
@@ -49,33 +53,44 @@ let parseCoreName (headerStr:string) =
| _ ->
None
-let parseUnitAccession (tag:string) =
+let parseTermAccession (tag:string) =
match tag with
- | Shared.HelperFunctions.Regex UnitAccessionPattern value ->
+ | Shared.HelperFunctions.Regex TermAccessionPattern value ->
value.Trim()
|> Some
| _ ->
None
+open Shared
+
let parseColHeader (headerStr:string) =
let coreName = parseCoreName headerStr
- let ontology = parseSquaredBrackets headerStr
let tagArr = parseBrackets headerStr
- let isUnit, accessionOpt =
+ let ontology =
+ let hasOnt = parseSquaredBrackets headerStr
+ let termAccession =
+ match tagArr with
+ | None -> None
+ | Some ta ->
+ let hasAccession = ta |> Array.tryFind (fun x -> x.StartsWith ColumnTags.TermAccessionTag)
+ if hasAccession.IsSome && (parseTermAccession hasAccession.Value).IsSome
+ then hasAccession.Value.Replace(Types.ColumnTags.TermAccessionTag,"") |> Some
+ else None
+ match hasOnt,termAccession with
+ | Some ontName, None -> OntologyInfo.create ontName "" |> Some
+ | Some ontName, Some ta -> OntologyInfo.create ontName ta |> Some
+ | _,_ -> None
+
+ let isUnit =
match tagArr with
- | None ->
- false, None
+ | None -> false
| Some ta ->
- let checkForAccession = ta |> Array.choose parseUnitAccession
- let isUnit = ta |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTagStart)
- match checkForAccession.Length with
- | 1 -> isUnit, checkForAccession.[0].Replace(ColumnTags.UnitTagStart,"") |> Some
- | _ -> isUnit, None
+ let isUnit = ta |> Array.exists (fun x -> x.StartsWith ColumnTags.UnitTag)
+ isUnit
{
Header = headerStr
CoreName = coreName
Ontology = ontology
TagArr = tagArr
- HasUnitAccession = accessionOpt
IsUnitCol = isUnit
}
\ No newline at end of file
diff --git a/src/Client/OfficeInterop/Types.fs b/src/Client/OfficeInterop/Types.fs
index e9359021..e901ea16 100644
--- a/src/Client/OfficeInterop/Types.fs
+++ b/src/Client/OfficeInterop/Types.fs
@@ -21,30 +21,6 @@ let Excel : Excel.IExports = jsNative
[]
let RangeLoadOptions : Interfaces.RangeLoadOptions = jsNative
-
-// Testing Subscription
-// https://elmish.github.io/elmish/subscriptions.html // elmish subscriptions
-// https://docs.microsoft.com/de-de/office/dev/add-ins/develop/dialog-api-in-office-add-ins // office excel dialog
-//module Subscription =
-// type Msg =
-// | TestSubscription of string
-
-// type Model = {
-// TestString : string
-// }
-
-// let init () = {
-// TestString = ""
-// }
-
-// let update msg currentModel =
-// match msg with
-// | TestSubscription str ->
-// let nextModel = {
-// currentModel with TestString = str
-// }
-// nextModel, Cmd.none
-
module ColumnCoreNames =
module Shown =
@@ -84,174 +60,272 @@ module ColumnTags =
let HiddenTag = "#h"
[]
- /// As for now, unit tags can contain a accession number if they are existing unit terms.
- let UnitTagStart = "#u"
+ let UnitTag = "#u"
+
+ /// This has additional information afterwards so it needs to be parsed as 'StartsWith'
+ /// Not used
+ []
+ let GroupTag = "#g"
+
+ /// This has additional information afterwards so it needs to be parsed as 'StartsWith'
+ []
+ let TermAccessionTag = "#t"
open System
open Fable.SimpleXml
open Fable.SimpleXml.Generator
-//module SwateInteropTypes =
-
-// type ColumnRepresentation = {
-// Header : string
-// /// TODO: this is meant for future application and should be implemented together with separate unit columns
-// Unit : string option
-// TagArray : string []
-// ParentOntology : string option
-// } with
-// static member init (?header) = {
-// Header = if header.IsSome then header.Value else ""
-// Unit = None
-// TagArray = [||]
-// ParentOntology = None
-// }
-
-module XmlValidationTypes =
-
- /// User can define what kind of input a column should have
- type ContentType =
- | OntologyTerm of string
- | Text
- | Url
- | Boolean
- | Number
- | Int
- | Decimal
+module Xml =
+
+ module GroupTypes =
+
+ type SpannedBuildingBlock = {
+ ColumnName : string
+ TermAccession : string
+ } with
+ static member create name termAccession = {
+ ColumnName = name
+ TermAccession = termAccession
+ }
+ static member init = SpannedBuildingBlock.create "" ""
+
+ type Protocol = {
+ Id : string
+ ProtocolVersion : string
+ SwateVersion : string
+ TableName : string
+ WorksheetName : string
+ SpannedBuildingBlocks : SpannedBuildingBlock list
+ } with
+ static member create id version swateVersion tableName worksheetName spannedBuildingBlocks = {
+ Id = id
+ ProtocolVersion = version
+ SwateVersion = swateVersion
+ TableName = tableName
+ WorksheetName = worksheetName
+ SpannedBuildingBlocks = spannedBuildingBlocks
+ }
+ static member init = Protocol.create "" "" "" "" "" []
+
+ type ProtocolGroup = {
+ SwateVersion : string
+ Protocols : Protocol list
+ } with
+ static member create swateVersion protocols = {
+ SwateVersion = swateVersion
+ Protocols = protocols
+ }
+ static member init = ProtocolGroup.create "" []
+
+ member this.toXml =
+ node "ProtocolGroup" [
+ attr.value( "SwateVersion", this.SwateVersion )
+ ] [
+ for protocol in this.Protocols do
+ yield
+ node "Protocol" [
+ attr.value( "Id", protocol.Id )
+ attr.value( "SwateVersion", protocol.SwateVersion )
+ attr.value( "ProtocolVersion", protocol.ProtocolVersion )
+ attr.value( "TableName", protocol.TableName )
+ attr.value( "WorksheetName", protocol.WorksheetName )
+ ][
+ for spannedBuildingBlock in protocol.SpannedBuildingBlocks do
+ yield
+ leaf "SpannedBuildingBlock" [
+ attr.value( "Name", spannedBuildingBlock.ColumnName )
+ attr.value( "TermAccession", spannedBuildingBlock.TermAccession )
+ ]
+ ]
+ ] |> serializeXml
+
+ static member ofXml (xmlString:string) =
+ let protocolGroupTag = "ProtocolGroup"
+ let xml = xmlString |> SimpleXml.parseElement
+
+ let protocolGroup = xml |> SimpleXml.tryFindElementByName protocolGroupTag
+ if protocolGroup.IsNone then failwith (sprintf "Could not find existing <%s> tag." protocolGroupTag)
+
+ let protocols = xml |> SimpleXml.findElementsByName "Protocol"
+ let swateVersion = protocolGroup.Value.Attributes.["SwateVersion"]
+ let nextProtocols =
+ protocols
+ |> List.map (fun protocol ->
+ let id = protocol.Attributes.["Id"]
+ let swateVersion = protocol.Attributes.["SwateVersion"]
+ let protocolVersion = protocol.Attributes.["ProtocolVersion"]
+ let tableName = protocol.Attributes.["TableName"]
+ let worksheetName = protocol.Attributes.["WorksheetName"]
+ let nextSpannedBBs =
+ protocol.Children
+ |> List.map (fun spannedBB ->
+ let name = spannedBB.Attributes.["Name"]
+ let termAccession = spannedBB.Attributes.["TermAccession"]
+ SpannedBuildingBlock.create name termAccession
+ )
+ Protocol.create id protocolVersion swateVersion tableName worksheetName nextSpannedBBs
+ )
+ ProtocolGroup.create swateVersion nextProtocols
+
+ module ValidationTypes =
+
+ /// User can define what kind of input a column should have
+ type ContentType =
+ | OntologyTerm of string
+ | UnitTerm of string
+ | Text
+ | Url
+ | Boolean
+ | Number
+ | Int
+ | Decimal
- member this.toReadableString =
- match this with
- | OntologyTerm po ->
- sprintf "Ontology [%s]" po
- | _ ->
- string this
+ member this.toReadableString =
+ match this with
+ | OntologyTerm po ->
+ sprintf "Ontology [%s]" po
+ | UnitTerm ut ->
+ sprintf "Unit [%s]" ut
+ | _ ->
+ string this
- static member ofString (str:string) =
- match str with
- | ontology when str.StartsWith "OntologyTerm " ->
- let s = ontology.Replace("OntologyTerm ","").Replace("\"","")
- OntologyTerm s
- | "Text" -> Text
- | "Url" -> Url
- | "Boolean" -> Boolean
- | "Number" -> Number
- | "Int" -> Int
- | "Decimal" -> Decimal
- | _ ->
- failwith ( sprintf "Tried parsing '%s' to ContenType. No match found." str )
-
- type ColumnValidation = {
- ColumnHeader : string
- ColumnAdress : int option
- Importance : int option
- ValidationFormat : ContentType option
- Unit : string option
- } with
- static member create colHeader colAdress importance validationFormat unit = {
- ColumnHeader = colHeader
- ColumnAdress = colAdress
- Importance = importance
- ValidationFormat = validationFormat
- Unit = unit
- }
+ static member ofString (str:string) =
+ match str with
+ | ontology when str.StartsWith "OntologyTerm " ->
+ let s = ontology.Replace("OntologyTerm ","").Replace("\"","")
+ OntologyTerm s
+ | unit when str.StartsWith "UnitTerm " ->
+ let s = unit.Replace("UnitTerm ", "").Replace("\"","")
+ UnitTerm s
+ | "Text" -> Text
+ | "Url" -> Url
+ | "Boolean" -> Boolean
+ | "Number" -> Number
+ | "Int" -> Int
+ | "Decimal" -> Decimal
+ | _ ->
+ failwith ( sprintf "Tried parsing '%s' to ContenType. No match found." str )
+
+ type ColumnValidation = {
+ ColumnHeader : string
+ ColumnAdress : int option
+ Importance : int option
+ ValidationFormat : ContentType option
+ Unit : string option
+ } with
+ static member create colHeader colAdress importance validationFormat unit = {
+ ColumnHeader = colHeader
+ ColumnAdress = colAdress
+ Importance = importance
+ ValidationFormat = validationFormat
+ Unit = unit
+ }
- static member init (?colHeader, ?colAdress) = {
- ColumnHeader = if colHeader.IsSome then colHeader.Value else ""
- ColumnAdress = if colAdress.IsSome then colAdress.Value else None
- Importance = None
- ValidationFormat = None
- Unit = None
- }
+ static member init (?colHeader, ?colAdress) = {
+ ColumnHeader = if colHeader.IsSome then colHeader.Value else ""
+ ColumnAdress = if colAdress.IsSome then colAdress.Value else None
+ Importance = None
+ ValidationFormat = None
+ Unit = None
+ }
- type TableValidation = {
- WorksheetName : string
- TableName : string
- DateTime : DateTime
- // "FirstUser; SecondUser"
- Userlist : string list
- ColumnValidations: ColumnValidation list
- } with
- static member create worksheetName tableName dateTime userlist colValidations = {
- WorksheetName = worksheetName
- TableName = tableName
- DateTime = dateTime
- Userlist = userlist
- ColumnValidations = colValidations
- }
- static member init (?worksheetName,?tableName, (?dateTime:DateTime), ?userList) = {
- WorksheetName = if worksheetName.IsSome then worksheetName.Value else ""
- TableName = if tableName.IsSome then tableName.Value else ""
- DateTime = if dateTime.IsSome then dateTime.Value else DateTime.Now
- Userlist = if userList.IsSome then userList.Value else []
- ColumnValidations = []
- }
+ type TableValidation = {
+ SwateVersion : string
+ WorksheetName : string
+ TableName : string
+ DateTime : DateTime
+ // "FirstUser; SecondUser"
+ Userlist : string list
+ ColumnValidations: ColumnValidation list
+ } with
+ static member create swateVersion worksheetName tableName dateTime userlist colValidations = {
+ SwateVersion = swateVersion
+ WorksheetName = worksheetName
+ TableName = tableName
+ DateTime = dateTime
+ Userlist = userlist
+ ColumnValidations = colValidations
+ }
+ static member init (?swateVersion, ?worksheetName,?tableName, (?dateTime:DateTime), ?userList) = {
+ SwateVersion = if swateVersion.IsSome then swateVersion.Value else ""
+ WorksheetName = if worksheetName.IsSome then worksheetName.Value else ""
+ TableName = if tableName.IsSome then tableName.Value else ""
+ DateTime = if dateTime.IsSome then dateTime.Value else DateTime.Now
+ Userlist = if userList.IsSome then userList.Value else []
+ ColumnValidations = []
+ }
- /// This type is used to work on the CustomXml 'Validation' tag, which is used to store information on how to validate a specifc Swate table as correct.
- type SwateValidation = {
- SwateVersion : string
- TableValidations : TableValidation list
- } with
- static member init v = {
- SwateVersion = v
- TableValidations = []
- }
+ /// This type is used to work on the CustomXml 'Validation' tag, which is used to store information on how to validate a specifc Swate table as correct.
+ type SwateValidation = {
+ /// Used to show the last used Swate version to edit SwateValidation CustomXml
+ SwateVersion : string
+ TableValidations : TableValidation list
+ } with
+ static member create swateVersion tableValidations = {
+ SwateVersion = swateVersion
+ TableValidations = tableValidations
+ }
+ static member init v = SwateValidation.create v []
- member this.toXml =
- node "Validation" [
- attr.value("SwateVersion", this.SwateVersion)
- ][
- for table in this.TableValidations do
- yield
- node "TableValidation" [
- attr.value( "WorksheetName", table.WorksheetName )
- attr.value( "TableName", table.TableName )
- attr.value( "DateTime", table.DateTime.ToString("yyyy-MM-dd HH:mm") )
- attr.value( "Userlist", table.Userlist |> String.concat "; " )
- ][
- for column in table.ColumnValidations do
- yield
- leaf "ColumnValidation" [
- attr.value("ColumnHeader" , column.ColumnHeader)
- attr.value("ColumnAdress" , if column.ColumnAdress.IsSome then string column.ColumnAdress.Value else "None")
- attr.value("Importance" , if column.Importance.IsSome then string column.Importance.Value else "None")
- attr.value("ValidationFormat" , if column.ValidationFormat.IsSome then string column.ValidationFormat.Value else "None")
- attr.value("Unit" , if column.Unit.IsSome then column.Unit.Value else "None")
- ]
- ]
- ] |> serializeXml
+ member this.toXml =
+ node "Validation" [
+ attr.value("SwateVersion", this.SwateVersion)
+ ][
+ for table in this.TableValidations do
+ yield
+ node "TableValidation" [
+ attr.value( "SwateVersion", table.SwateVersion )
+ attr.value( "WorksheetName", table.WorksheetName )
+ attr.value( "TableName", table.TableName )
+ attr.value( "DateTime", table.DateTime.ToString("yyyy-MM-dd HH:mm") )
+ attr.value( "Userlist", table.Userlist |> String.concat "; " )
+ ][
+ for column in table.ColumnValidations do
+ yield
+ leaf "ColumnValidation" [
+ attr.value("ColumnHeader" , column.ColumnHeader)
+ attr.value("ColumnAdress" , if column.ColumnAdress.IsSome then string column.ColumnAdress.Value else "None")
+ attr.value("Importance" , if column.Importance.IsSome then string column.Importance.Value else "None")
+ attr.value("ValidationFormat" , if column.ValidationFormat.IsSome then string column.ValidationFormat.Value else "None")
+ attr.value("Unit" , if column.Unit.IsSome then column.Unit.Value else "None")
+ ]
+ ]
+ ] |> serializeXml
- static member ofXml (xmlString:string) =
- let xml = xmlString |> SimpleXml.parseElement
- let swateValidation =
- xml |> SimpleXml.tryFindElementByName "Validation"
- if swateValidation.IsNone then failwith "Could not find existing tag."
- let tableValidations =
- xml |> SimpleXml.findElementsByName "TableValidation"
- let validationType = SwateValidation.init swateValidation.Value.Attributes.["SwateVersion"]
- let tableValidationTypes =
- tableValidations
- |> List.map (fun table ->
- let worksheetName = table.Attributes.["WorksheetName"]
- let tableName = table.Attributes.["TableName"]
- let dateTime =
- //let day, month, year =
- // let s = table.Attributes.["DateTime"].Split([|"/"|], StringSplitOptions.None)
- // int s.[0], int s.[1], int s.[2]
- System.DateTime.Parse(table.Attributes.["DateTime"])
- let userlist = table.Attributes.["Userlist"].Split([|"; "|], StringSplitOptions.RemoveEmptyEntries) |> List.ofSeq
- let columnValidationTypes =
- table.Children
- |> List.map (fun column ->
- let columnHeader = column.Attributes.["ColumnHeader"]
- let columnAdress = column.Attributes.["ColumnAdress"] |> fun x -> if x = "None" then None else Some (int x)
- let importance = column.Attributes.["Importance"] |> fun x -> if x = "None" then None else Some (int x)
- let validationFormat = column.Attributes.["ValidationFormat"] |> fun x -> if x = "None" then None else ContentType.ofString x |> Some
- let unit = column.Attributes.["Unit"] |> fun x -> if x = "None" then None else Some x
- ColumnValidation.create columnHeader columnAdress importance validationFormat unit
- )
- TableValidation.create worksheetName tableName dateTime userlist columnValidationTypes
- )
- { validationType with TableValidations = tableValidationTypes }
+ static member ofXml (xmlString:string) =
+ let swateValidationTag = "Validation"
+ let xml = xmlString |> SimpleXml.parseElement
+ let swateValidation =
+ xml |> SimpleXml.tryFindElementByName swateValidationTag
+ if swateValidation.IsNone then failwith (sprintf "Could not find existing <%s> tag." swateValidationTag)
+ let tableValidations =
+ xml |> SimpleXml.findElementsByName "TableValidation"
+ let swateVersion = swateValidation.Value.Attributes.["SwateVersion"]
+ let nextTableValidations =
+ tableValidations
+ |> List.map (fun table ->
+ let swateVersion = table.Attributes.["SwateVersion"]
+ let worksheetName = table.Attributes.["WorksheetName"]
+ let tableName = table.Attributes.["TableName"]
+ let dateTime =
+ //let day, month, year =
+ // let s = table.Attributes.["DateTime"].Split([|"/"|], StringSplitOptions.None)
+ // int s.[0], int s.[1], int s.[2]
+ System.DateTime.Parse(table.Attributes.["DateTime"])
+ let userlist = table.Attributes.["Userlist"].Split([|"; "|], StringSplitOptions.RemoveEmptyEntries) |> List.ofSeq
+ let nextColumnValidations =
+ table.Children
+ |> List.map (fun column ->
+ let columnHeader = column.Attributes.["ColumnHeader"]
+ let columnAdress = column.Attributes.["ColumnAdress"] |> fun x -> if x = "None" then None else Some (int x)
+ let importance = column.Attributes.["Importance"] |> fun x -> if x = "None" then None else Some (int x)
+ let validationFormat = column.Attributes.["ValidationFormat"] |> fun x -> if x = "None" then None else ContentType.ofString x |> Some
+ let unit = column.Attributes.["Unit"] |> fun x -> if x = "None" then None else Some x
+ ColumnValidation.create columnHeader columnAdress importance validationFormat unit
+ )
+ TableValidation.create swateVersion worksheetName tableName dateTime userlist nextColumnValidations
+ )
+ SwateValidation.create swateVersion nextTableValidations
type TryFindAnnoTableResult =
@@ -273,13 +347,14 @@ type TryFindAnnoTableResult =
| _ ->
Error "Could not process message. Swate was not able to identify the given annotation tables with a known case."
+open Shared
+
type ColHeader = {
- Header : string
- CoreName: string option
- Ontology: string option
- TagArr: string [] option
- HasUnitAccession : string option
- IsUnitCol: bool
+ Header: string
+ CoreName: string option
+ Ontology: OntologyInfo option
+ TagArr: string [] option
+ IsUnitCol: bool
}
/// This module contains types to handle value search for TSR and TAN columns.
@@ -323,14 +398,50 @@ module BuildingBlockTypes =
Unit = unit
}
- member this.toColumnValidation : (XmlValidationTypes.ColumnValidation) =
+ member this.toColumnValidation : (Xml.ValidationTypes.ColumnValidation) =
{
ColumnHeader = this.MainColumn.Header.Value.Header
ColumnAdress = this.MainColumn.Index |> Some
Importance = None
ValidationFormat = None
- Unit = if this.Unit.IsSome then this.Unit.Value.MainColumn.Header.Value.Ontology else None
+ Unit = if this.Unit.IsSome then this.Unit.Value.MainColumn.Header.Value.Ontology.Value.Name |> Some else None
}
+ open ISADotNetHelpers
+
+ type MinimalBuildingBlock = {
+ MainColumnName : string
+ MainColumnTermAccession : string option
+ UnitName : string option
+ UnitTermAccession : string option
+ Values : OntologyInfo option
+ } with
+ static member create mainColName colTermAccession unitName unitTermAccession values = {
+ MainColumnName = mainColName
+ MainColumnTermAccession = colTermAccession
+ UnitName = unitName
+ UnitTermAccession = unitTermAccession
+ Values = values
+ }
+
+ // This function assumes that Process.ExecutesProtocol.Parameters.IsSome and Process.ParameterValues.IsSome.
+ // For ExecutesProtocol.Parameters 'parameterName' ('annotationValue','termSource','termAccession') are required.
+ // For Process.ParameterValues 'category' ('annotationValue','termSource','termAccession') and 'value' (IF ONTOLOGY 'annotationValue','termSource','termAccession') are required.
+ // IF Process.ParameterValue has Unit then ('annotationValue','termSource','termAccession') are required.
+ static member ofISADotNetProcess (isaProcess:ISADotNet.Process) =
+ let paramValuesPairs = isaProcess.ParameterValues.Value
+ paramValuesPairs
+ |> List.map (fun paramValuePair ->
+ let hasUnit = paramValuePair.Unit.IsSome
+ let hasOntologyValue = paramValuePair.Value.Value |> ISADotNetHelpers.valueIsOntology
+ let mainColName =
+ let n = paramValuePair.Category.Value.ParameterName.Value.Name.Value |> ISADotNetHelpers.annotationValueToString
+ sprintf "Parameter [%s]" n
+ let colTermAccession = paramValuePair.Category.Value.ParameterName.Value.TermAccessionNumber.Value |> ISADotNetHelpers.termAccessionReduce
+ let unitName = if hasUnit then paramValuePair.Unit.Value.Name.Value |> ISADotNetHelpers.annotationValueToString |> Some else None
+ let unitTermAccession = if hasUnit then paramValuePair.Unit.Value.TermAccessionNumber.Value |> ISADotNetHelpers.termAccessionReduce |> Some else None
+ let values = if hasOntologyValue.IsSome then hasOntologyValue else OntologyInfo.create (ISADotNetHelpers.valueToString paramValuePair.Value.Value) "" |> Some
+ MinimalBuildingBlock.create mainColName (Some colTermAccession) unitName unitTermAccession values
+ )
diff --git a/src/Client/Routing.fs b/src/Client/Routing.fs
index 93786b05..c2ade1c8 100644
--- a/src/Client/Routing.fs
+++ b/src/Client/Routing.fs
@@ -13,6 +13,7 @@ type Route =
| Validation
| FilePicker
| Info
+| ProtocolInsert
| ActivityLog
| Settings
| NotFound
@@ -24,6 +25,7 @@ type Route =
| Route.TermSearch -> "/#TermSearch"
| Route.Validation -> "/#Validation"
| Route.FilePicker -> "/#FilePicker"
+ | Route.ProtocolInsert -> "/#ProtocolInsert"
| Route.Info -> "/#Info"
| Route.ActivityLog -> "/#ActivityLog"
| Route.Settings -> "/#Settings"
@@ -35,16 +37,31 @@ type Route =
| Route.AddBuildingBlock -> "AddBuildingBlock"
| Route.TermSearch -> "TermSearch"
| Route.Validation -> "Validation"
+ | Route.ProtocolInsert -> "ProtocolInsert"
| Route.Info -> "Info"
| Route.FilePicker -> "FilePicker"
| Route.ActivityLog -> "ActivityLog"
| Route.Settings -> "Settings"
| Route.NotFound -> "NotFound"
+ member this.toStringRdbl =
+ match this with
+ | Route.Home -> ""
+ | Route.AddBuildingBlock -> "Manage Building Blocks"
+ | Route.TermSearch -> "Manage Terms"
+ | Route.Validation -> "Validation"
+ | Route.FilePicker -> "File Picker"
+ | Route.ProtocolInsert -> "Protocol Insert"
+ | Route.Info -> "Info"
+ | Route.ActivityLog -> "Activity Log"
+ | Route.Settings -> "Settings"
+ | Route.NotFound -> "NotFound"
+
+
static member toIcon (p: Route)=
let createElem icons name =
Fable.React.Standard.span [
- Fable.React.Props.Class (Tooltip.ClassName + " " + Tooltip.IsTooltipRight + " " + Tooltip.IsMultiline)
+ Fable.React.Props.Class (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
Tooltip.dataTooltip (name)
] (
icons
@@ -55,13 +72,15 @@ type Route =
)
match p with
- | Route.Home -> createElem [Fa.Solid.Home ] (p |> Route.toString)
- | Route.TermSearch -> createElem [Fa.Solid.SearchPlus ] (p |> Route.toString)
- | Route.Validation -> createElem [Fa.Solid.ClipboardCheck ] (p |> Route.toString)
- | Route.AddBuildingBlock -> createElem [Fa.Solid.Columns; Fa.Solid.PlusCircle ] (p |> Route.toString)
- | Route.FilePicker -> createElem [Fa.Solid.FileUpload ] (p |> Route.toString)
- | Route.ActivityLog -> createElem [Fa.Solid.History ] (p |> Route.toString)
- | _ -> Fa.i [Fa.Solid.QuestionCircle] []
+ | Route.Home -> createElem [Fa.Solid.Home ] (p.toStringRdbl)
+ | Route.TermSearch -> createElem [Fa.Solid.SearchPlus ] (p.toStringRdbl)
+ | Route.Validation -> createElem [Fa.Solid.ClipboardCheck ] (p.toStringRdbl)
+ | Route.AddBuildingBlock -> createElem [Fa.Solid.Columns; Fa.Solid.PlusCircle ] (p.toStringRdbl)
+ | Route.ProtocolInsert -> createElem [Fa.Solid.Table; Fa.Solid.PlusCircle ] (p.toStringRdbl)
+ | Route.FilePicker -> createElem [Fa.Solid.Upload ] (p.toStringRdbl)
+ | Route.ActivityLog -> createElem [Fa.Solid.History ] (p.toStringRdbl)
+ | Route.Info -> createElem [Fa.Solid.Question ] (p.toStringRdbl)
+ | _ -> Fa.i [Fa.Solid.QuestionCircle] []
///explained here: https://elmish.github.io/browser/routing.html
//let curry f x y = f (x,y)
@@ -80,6 +99,7 @@ module Routing =
map Route.Validation (s "Validation")
map Route.FilePicker (s "FilePicker")
map Route.Info (s "Info")
+ map Route.ProtocolInsert (s "ProtocolInsert")
map Route.ActivityLog (s "ActivityLog")
map Route.Settings (s "Settings")
map Route.NotFound (s "NotFound")
diff --git a/src/Client/Update.fs b/src/Client/Update.fs
index 217f64e1..bb164590 100644
--- a/src/Client/Update.fs
+++ b/src/Client/Update.fs
@@ -9,7 +9,6 @@ open Shared
open Routing
open Model
open Messages
-open OfficeInterop
open OfficeInterop.Types
@@ -83,11 +82,21 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
Cmd.OfPromise.either
OfficeInterop.autoFitTable
(name)
- (fun msg -> InSync msg |> ExcelInterop)
+ (GenericLog >> Dev)
(GenericError >> Dev)
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
currentState, cmd
+ | UpdateProtocolGroupHeader activeTableNameRes ->
+ let cmd name =
+ Cmd.OfPromise.either
+ OfficeInterop.updateProtocolGroupHeader
+ (name)
+ (GenericLog >> Dev)
+ (GenericError >> Dev)
+ let cmd = matchActiveTableResToMsg activeTableNameRes cmd
+ currentState, cmd
+
| Initialized (h,p) ->
let welcomeMsg = sprintf "Ready to go in %s running on %s" h p
@@ -106,27 +115,10 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
()
(AnnotationTableExists >> ExcelInterop)
(GenericError >> Dev)
- Cmd.ofMsg (ToggleEventHandler |> ExcelInterop)
Cmd.ofMsg (("Info",welcomeMsg) |> (GenericLog >> Dev))
]
nextState, cmd
-
- | SyncContext (activeTableNameRes,passthroughMessage) ->
- currentState,
- Cmd.batch [
- Cmd.ofMsg (AutoFitTable activeTableNameRes |> ExcelInterop)
- Cmd.OfPromise.either
- OfficeInterop.tryFindActiveAnnotationTable
- ()
- (AnnotationTableExists >> ExcelInterop)
- (GenericError >> Dev)
- Cmd.OfPromise.either
- OfficeInterop.syncContext
- passthroughMessage
- (fun _ -> ExcelInterop (InSync passthroughMessage))
- (GenericError >> Dev)
- ]
| AnnotationTableExists annoTableOpt ->
let exists =
@@ -140,45 +132,76 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
nextState,Cmd.none
- | InSync passthroughMessage ->
- currentState,
- ("Info",passthroughMessage)
- |> (GenericLog >> Dev)
- |> Cmd.ofMsg
-
| FillSelection (activeTableNameRes,fillValue,fillTerm) ->
let cmd name =
Cmd.OfPromise.either
OfficeInterop.fillValue
(name,fillValue,fillTerm)
- ((fun x -> SyncContext (activeTableNameRes,x)) >> ExcelInterop)
+ (GenericLog >> Dev)
(GenericError >> Dev)
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
currentState, cmd
- | AddColumn (activeTableNameRes,colName,format) ->
- let cmd name=
+ | AddAnnotationBlock (activeTableNameRes,minBuildingBlockInfo) ->
+ let cmd tableName =
Cmd.OfPromise.either
- //OfficeInterop.addAnnotationColumn
OfficeInterop.addAnnotationBlock
- (name,colName,format)
+ (tableName,minBuildingBlockInfo)
(fun (newColName,format,msg) ->
- FormatColumn (activeTableNameRes,newColName,format,msg) |> ExcelInterop
+ Msg.Batch [
+ FormatColumn (activeTableNameRes,newColName,format,msg) |> ExcelInterop
+ UpdateProtocolGroupHeader activeTableNameRes |> ExcelInterop
+ ]
)
(GenericError >> Dev)
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
currentState, cmd
+ | AddAnnotationBlocks (activeTableNameRes,minBuildingBlockInfos, protocol) ->
+ let cmd tableName =
+ Cmd.OfPromise.either
+ OfficeInterop.addAnnotationBlocksAsProtocol
+ (tableName,minBuildingBlockInfos,protocol)
+ (fun (resList,protocolInfo) ->
+ Msg.Batch [
+ for newColName,format,msg in resList do
+ yield
+ FormatColumn (activeTableNameRes,newColName,format,msg) |> ExcelInterop
+ yield
+ WriteProtocolToXml protocolInfo |> ExcelInterop
+ ]
+ )
+ (GenericError >> Dev)
+ let cmd = matchActiveTableResToMsg activeTableNameRes cmd
+ currentState, cmd
+
+ | AddUnitToAnnotationBlock (activeTableNameRes, format, unitTermOpt) ->
+ let cmd name =
+ Cmd.OfPromise.either
+ OfficeInterop.addUnitToExistingBuildingBlock
+ (name,format,unitTermOpt)
+ (fun (newColName,format,msg) ->
+ Msg.Batch [
+ FormatColumn (activeTableNameRes, newColName, format, msg) |> ExcelInterop
+ UpdateProtocolGroupHeader activeTableNameRes |> ExcelInterop
+ ]
+ )
+ (GenericError >> Dev)
+ let cmd = matchActiveTableResToMsg activeTableNameRes cmd
+ currentState, cmd
+
| FormatColumn (activeTableNameRes,colName,format,msg) ->
let cmd name =
- Cmd.batch [
- Cmd.ofMsg (InSync msg |> ExcelInterop)
- Cmd.OfPromise.either
- (OfficeInterop.changeTableColumnFormat name colName)
- format
- ((fun msg -> SyncContext (activeTableNameRes,msg)) >> ExcelInterop)
- (GenericError >> Dev)
- ]
+ Cmd.OfPromise.either
+ (OfficeInterop.changeTableColumnFormat name colName)
+ format
+ (fun x ->
+ Msg.Batch [
+ AutoFitTable activeTableNameRes |> ExcelInterop
+ GenericLog x |> Dev
+ ]
+ )
+ (GenericError >> Dev)
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
currentState,cmd
@@ -187,11 +210,8 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
Cmd.OfPromise.either
OfficeInterop.createAnnotationTable
(allTableNames,isDark)
- (fun (res,updateEventHandler,msg) ->
- Msg.Batch [
- AnnotationtableCreated (res,msg) |> ExcelInterop
- if updateEventHandler then UpdateTablesHaveAutoEditHandler |> ExcelInterop
- ]
+ (fun (res,msg) ->
+ AnnotationtableCreated (res,msg) |> ExcelInterop
)
(GenericError >> Dev)
currentState,cmd
@@ -201,8 +221,13 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
currentState with
HasAnnotationTable = true
}
-
- nextState,Cmd.ofMsg(SyncContext (activeTableNameRes,range)|> ExcelInterop)
+ let msg =
+ Msg.Batch [
+ AutoFitTable activeTableNameRes |> ExcelInterop
+ UpdateProtocolGroupHeader activeTableNameRes |> ExcelInterop
+ GenericLog ("info", range) |> Dev
+ ]
+ nextState, Cmd.ofMsg msg
| GetParentTerm activeTableNameRes ->
@@ -239,43 +264,40 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
(GenericError >> Dev)
currentState, cmd
- | DeleteAllCustomXml ->
+ | WriteProtocolToXml protocolInfo ->
let cmd =
Cmd.OfPromise.either
- OfficeInterop.deleteAllCustomXml
- ()
- (GenericLog >> Dev)
+ OfficeInterop.writeProtocolToXml
+ (protocolInfo)
+ (fun res ->
+ Msg.Batch [
+ GenericLog res |> Dev
+ PipeActiveAnnotationTable UpdateProtocolGroupHeader |> ExcelInterop
+ ]
+ )
(GenericError >> Dev)
currentState, cmd
- | GetSwateValidationXml ->
+ | DeleteAllCustomXml ->
let cmd =
Cmd.OfPromise.either
- OfficeInterop.getSwateValidationXml
+ OfficeInterop.deleteAllCustomXml
()
- (GenericLog >> Dev)
+ (fun res ->
+ Msg.Batch [
+ GenericLog res |> Dev
+ PipeActiveAnnotationTable UpdateProtocolGroupHeader |> ExcelInterop
+ ]
+ )
(GenericError >> Dev)
currentState, cmd
- //
- | ToggleEventHandler ->
+ | GetSwateCustomXml ->
let cmd =
Cmd.OfPromise.either
- OfficeInterop.toggleAdaptHiddenColsEventHandler
+ OfficeInterop.getSwateCustomXml
()
- (fun msg ->
- let msg' = msg |> String.concat ", "
- Msg.Batch [
- GenericLog ("Info",msg') |> Dev
- UpdateTablesHaveAutoEditHandler |> ExcelInterop
- ]
- )
+ (GenericLog >> Dev)
(GenericError >> Dev)
currentState, cmd
- | UpdateTablesHaveAutoEditHandler ->
- let nextState = {
- currentState with
- TablesHaveAutoEditHandler = not OfficeInterop.EventHandlers.EventHandlerStates.adaptHiddenColsHandlerList.IsEmpty
- }
- nextState, Cmd.none
//
| FillHiddenColsRequest activeTableNameRes ->
let cmd name =
@@ -334,11 +356,12 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
nextState, cmd
+ /// DEV
| TryExcel ->
let nextState = currentState
let cmd =
Cmd.OfPromise.either
- OfficeInterop.exampleExcelFunction
+ OfficeInterop.exampleExcelFunction1
()
((fun x ->
("Debug",x) |> GenericLog) >> Dev
@@ -359,15 +382,6 @@ let handleExcelInteropMsg (excelInteropMsg: ExcelInteropMsg) (currentState:Excel
//| _ ->
// printfn "Hit currently non existing message"
// currentState, Cmd.none
-
- //| ExcelSubscriptionMsg msg ->
- // let m,cmd = OfficeInterop.Types.Subscription.update msg currentState.SubscriptionState
- // let nextState = {
- // currentState with
- // SubscriptionState = m
- // }
- // nextState, Cmd.map (ExcelSubscriptionMsg >> ExcelInterop) cmd
-
let handleTermSearchMsg (termSearchMsg: TermSearchMsg) (currentState:TermSearchState) : TermSearchState * Cmd =
match termSearchMsg with
@@ -579,7 +593,7 @@ let handleDevMsg (devMsg: DevMsg) (currentState:DevState) : DevState * Cmd
Cmd.OfPromise.either
OfficeInterop.getTableMetaData
(name)
- ((fun msg -> SyncContext (activeTableNameRes,msg)) >> ExcelInterop)
+ (GenericLog >> Dev)
(GenericError >> Dev)
let cmd = matchActiveTableResToMsg activeTableNameRes cmd
currentState, cmd
@@ -605,7 +619,26 @@ let handleApiRequestMsg (reqMsg: ApiRequestMsg) (currentState: ApiState) : ApiSt
nextState,nextCmd
- let handleTermSuggestionByParentTermRequest (apiFunctionname:string) (responseHandler: DbDomain.Term [] -> ApiMsg) queryString parentOntology =
+ let handleUnitTermSuggestionRequest (apiFunctionname:string) (responseHandler: (DbDomain.Term [] * UnitSearchRequest) -> ApiMsg) queryString (relUnit:UnitSearchRequest) =
+ let currentCall = {
+ FunctionName = apiFunctionname
+ Status = Pending
+ }
+
+ let nextState = {
+ currentState with
+ currentCall = currentCall
+ }
+ let nextCmd =
+ Cmd.OfAsync.either
+ Api.api.getUnitTermSuggestions
+ (5,queryString,relUnit)
+ (responseHandler >> Api)
+ (ApiError >> Api)
+
+ nextState,nextCmd
+
+ let handleTermSuggestionByParentTermRequest (apiFunctionname:string) (responseHandler: DbDomain.Term [] -> ApiMsg) queryString (parentOntology:OntologyInfo) =
let currentCall = {
FunctionName = apiFunctionname
Status = Pending
@@ -674,11 +707,12 @@ let handleApiRequestMsg (reqMsg: ApiRequestMsg) (currentState: ApiState) : ApiSt
queryString
parentOntology
- | GetNewUnitTermSuggestions queryString ->
- handleTermSuggestionRequest
+ | GetNewUnitTermSuggestions (queryString,relUnit) ->
+ handleUnitTermSuggestionRequest
"getUnitTermSuggestions"
(UnitTermSuggestionResponse >> Response)
queryString
+ relUnit
| GetNewBuildingBlockNameSuggestions queryString ->
handleTermSuggestionRequest
@@ -788,6 +822,25 @@ let handleApiResponseMsg (resMsg: ApiResponseMsg) (currentState: ApiState) : Api
nextState, cmds
+ let handleUnitTermSuggestionResponse (responseHandler: DbDomain.Term [] * UnitSearchRequest -> Msg) (suggestions: DbDomain.Term[]) (relatedUnitSearch:UnitSearchRequest) =
+ let finishedCall = {
+ currentState.currentCall with
+ Status = Successfull
+ }
+
+ let nextState = {
+ currentState with
+ currentCall = noCall
+ callHistory = finishedCall::currentState.callHistory
+ }
+
+ let cmds = Cmd.batch [
+ ("Debug",sprintf "[ApiSuccess]: Call %s successfull." finishedCall.FunctionName) |> ApiSuccess |> Api |> Cmd.ofMsg
+ (suggestions,relatedUnitSearch) |> responseHandler |> Cmd.ofMsg
+ ]
+
+ nextState, cmds
+
match resMsg with
| TermSuggestionResponse suggestions ->
//let finishedCall = {
@@ -811,11 +864,13 @@ let handleApiResponseMsg (resMsg: ApiResponseMsg) (currentState: ApiState) : Api
(NewSuggestions >> TermSearch)
suggestions
- | UnitTermSuggestionResponse suggestions ->
+ | UnitTermSuggestionResponse (suggestions,relUnit) ->
- handleTermSuggestionResponse
+ handleUnitTermSuggestionResponse
(NewUnitTermSuggestions >> AddBuildingBlock)
suggestions
+ relUnit
+
| BuildingBlockNameSuggestionsResponse suggestions ->
@@ -1001,7 +1056,7 @@ let handleAddBuildingBlockMsg (addBuildingBlockMsg:AddBuildingBlockMsg) (current
nextState,Cmd.none
- | SearchUnitTermTextChange newTerm ->
+ | SearchUnitTermTextChange (newTerm,relUnit) ->
let triggerNewSearch =
newTerm.Length > 2
@@ -1011,42 +1066,67 @@ let handleAddBuildingBlockMsg (addBuildingBlockMsg:AddBuildingBlockMsg) (current
"GetNewUnitTermSuggestions",
(
if triggerNewSearch then
- newTerm |> (GetNewUnitTermSuggestions >> Request >> Api)
+ (newTerm,relUnit) |> (GetNewUnitTermSuggestions >> Request >> Api)
else
DoNothing
)
- let nextState = {
- currentState with
- UnitTermSearchText = newTerm
- ShowUnitTermSuggestions = triggerNewSearch
- HasUnitTermSuggestionsLoading = true
- UnitTermSearchTextHasTermAccession = None
- }
+ let nextState =
+ match relUnit with
+ | Unit1 ->
+ { currentState with
+ UnitTermSearchText = newTerm
+ UnitSelectedTerm = None
+ ShowUnitTermSuggestions = triggerNewSearch
+ HasUnitTermSuggestionsLoading = true
+ }
+ | Unit2 ->
+ { currentState with
+ Unit2TermSearchText = newTerm
+ Unit2SelectedTerm = None
+ ShowUnit2TermSuggestions = triggerNewSearch
+ HasUnit2TermSuggestionsLoading = true
+ }
nextState, ((delay, bounceId, msgToBounce) |> Bounce |> Cmd.ofMsg)
- | NewUnitTermSuggestions suggestions ->
-
- let nextState = {
- currentState with
- UnitTermSuggestions = suggestions
- ShowUnitTermSuggestions = true
- HasUnitTermSuggestionsLoading = false
- }
+ | NewUnitTermSuggestions (suggestions,relUnit) ->
+
+ let nextState =
+ match relUnit with
+ | Unit1 ->
+ { currentState with
+ UnitTermSuggestions = suggestions
+ ShowUnitTermSuggestions = true
+ HasUnitTermSuggestionsLoading = false
+ }
+ | Unit2 ->
+ { currentState with
+ Unit2TermSuggestions = suggestions
+ ShowUnit2TermSuggestions = true
+ HasUnit2TermSuggestionsLoading = false
+ }
nextState,Cmd.none
- | UnitTermSuggestionUsed (suggestionName,suggestionAccession) ->
+ | UnitTermSuggestionUsed (suggestion, relUnit) ->
- let nextState = {
- currentState with
- UnitTermSearchText = suggestionName
- //UnitTerm = Some suggestion
- ShowUnitTermSuggestions = false
- HasUnitTermSuggestionsLoading = false
- UnitTermSearchTextHasTermAccession = Some suggestionAccession
- }
+ let nextState =
+ match relUnit with
+ | Unit1 ->
+ { currentState with
+ UnitTermSearchText = suggestion.Name
+ UnitSelectedTerm = Some suggestion
+ ShowUnitTermSuggestions = false
+ HasUnitTermSuggestionsLoading = false
+ }
+ | Unit2 ->
+ { currentState with
+ Unit2TermSearchText = suggestion.Name
+ Unit2SelectedTerm = Some suggestion
+ ShowUnit2TermSuggestions = false
+ HasUnit2TermSuggestionsLoading = false
+ }
nextState, Cmd.none
| BuildingBlockNameChange newName ->
@@ -1072,8 +1152,9 @@ let handleAddBuildingBlockMsg (addBuildingBlockMsg:AddBuildingBlockMsg) (current
let nextState = {
currentState with
CurrentBuildingBlock = nextBB
- ShowBuildingBlockNameSuggestions = triggerNewSearch
- HasBuildingBlockNameSuggestionsLoading = true
+ BuildingBlockSelectedTerm = None
+ ShowBuildingBlockTermSuggestions = triggerNewSearch
+ HasBuildingBlockTermSuggestionsLoading = true
}
nextState, ((delay, bounceId, msgToBounce) |> Bounce |> Cmd.ofMsg)
@@ -1083,24 +1164,26 @@ let handleAddBuildingBlockMsg (addBuildingBlockMsg:AddBuildingBlockMsg) (current
let nextState = {
currentState with
BuildingBlockNameSuggestions = suggestions
- ShowBuildingBlockNameSuggestions = true
- HasBuildingBlockNameSuggestionsLoading = false
+ ShowBuildingBlockTermSuggestions = true
+ HasBuildingBlockTermSuggestionsLoading = false
}
nextState,Cmd.none
- | BuildingBlockNameSuggestionUsed nameSuggestion ->
+ | BuildingBlockNameSuggestionUsed suggestion ->
let nextBB = {
currentState.CurrentBuildingBlock with
- Name = nameSuggestion
+ Name = suggestion.Name
}
let nextState = {
currentState with
CurrentBuildingBlock = nextBB
- ShowBuildingBlockNameSuggestions = false
- HasBuildingBlockNameSuggestionsLoading = false
+
+ BuildingBlockSelectedTerm = Some suggestion
+ ShowBuildingBlockTermSuggestions = false
+ HasBuildingBlockTermSuggestionsLoading = false
}
nextState, Cmd.none
@@ -1126,7 +1209,7 @@ let handleAddBuildingBlockMsg (addBuildingBlockMsg:AddBuildingBlockMsg) (current
}
nextState, Cmd.none
-open OfficeInterop.Types.XmlValidationTypes
+open OfficeInterop.Types.Xml.ValidationTypes
let handleValidationMsg (validationMsg:ValidationMsg) (currentState: ValidationState) : ValidationState * Cmd =
match validationMsg with
@@ -1136,6 +1219,7 @@ let handleValidationMsg (validationMsg:ValidationMsg) (currentState: ValidationS
let nextCmd =
GenericLog ("Info", msg) |> Dev |> Cmd.ofMsg
+
let nextState = {
currentState with
ActiveTableBuildingBlocks = buildingBlocks
@@ -1156,6 +1240,61 @@ let handleValidationMsg (validationMsg:ValidationMsg) (currentState: ValidationS
}
nextState, Cmd.none
+let handleFileUploadJsonMsg (fujMsg:ProtocolInsertMsg) (currentState: ProtocolInsertState) : ProtocolInsertState * Cmd =
+ match fujMsg with
+ // Client
+ | UpdateUploadData newDataString ->
+ let nextState = {
+ currentState with
+ UploadData = newDataString
+ }
+ nextState, Cmd.ofMsg (ParseJsonToProcessRequest newDataString |> ProtocolInsert)
+ | ParseJsonToProcessRequest parsableString ->
+ let cmd =
+ Cmd.OfAsync.either
+ Api.isaDotNetApi.parseJsonToProcess
+ parsableString
+ (Ok >> ParseJsonToProcessResult)
+ (Result.Error >> ParseJsonToProcessResult)
+ currentState, Cmd.map ProtocolInsert cmd
+ | ParseJsonToProcessResult (Ok isaProcess) ->
+ let nextState = {
+ currentState with
+ ProcessModel = Some isaProcess
+ }
+ nextState, Cmd.none
+ | ParseJsonToProcessResult (Result.Error e) ->
+ let cmd =
+ GenericError e |> Dev |> Cmd.ofMsg
+ currentState, cmd
+ //| SendJson ->
+ // let cmd =
+ // Cmd.OfAsync.perform
+ // Api.isaDotNetApi.tryTestProcess
+ // ISADotNet.Process.empty
+ // (fun x -> GenericLog ("info", "sent process"))
+ // currentState, Cmd.map Dev cmd
+
+
+let handleTopLevelMsg (topLevelMsg:TopLevelMsg) (currentModel: Model) : Model * Cmd =
+ match topLevelMsg with
+ // Client
+ | CloseSuggestions ->
+ let nextModel = {
+ currentModel with
+ TermSearchState = {
+ currentModel.TermSearchState with
+ ShowSuggestions = false
+ }
+ AddBuildingBlockState = {
+ currentModel.AddBuildingBlockState with
+ ShowBuildingBlockTermSuggestions = false
+ ShowUnitTermSuggestions = false
+ ShowUnit2TermSuggestions = false
+ }
+ }
+ nextModel, Cmd.none
+
let update (msg : Msg) (currentModel : Model) : Model * Cmd =
match msg with
| DoNothing -> currentModel,Cmd.none
@@ -1325,4 +1464,21 @@ let update (msg : Msg) (currentModel : Model) : Model * Cmd =
currentModel with
ValidationState = nextValidationState
}
+ nextModel, nextCmd
+
+ | ProtocolInsert fileUploadJsonMsg ->
+ let nextFileUploadJsonState, nextCmd =
+ currentModel.ProtocolInsertState
+ |> handleFileUploadJsonMsg fileUploadJsonMsg
+
+ let nextModel = {
+ currentModel with
+ ProtocolInsertState = nextFileUploadJsonState
+ }
+ nextModel, nextCmd
+
+ | TopLevelMsg topLevelMsg ->
+ let nextModel, nextCmd =
+ handleTopLevelMsg topLevelMsg currentModel
+
nextModel, nextCmd
\ No newline at end of file
diff --git a/src/Client/Views/ActivityLogView.fs b/src/Client/Views/ActivityLogView.fs
index bbdee40d..de4227e1 100644
--- a/src/Client/Views/ActivityLogView.fs
+++ b/src/Client/Views/ActivityLogView.fs
@@ -45,14 +45,14 @@ let activityLogComponent (model:Model) dispatch =
Container.container [
Container.Props [Style [
Padding "1rem"
- Border "2.5px solid #f14668"
+ Border (sprintf "2.5px solid %s" NFDIColors.Red.Base)
BorderRadius "10px"
]]
][
Button.a [
Button.Color Color.IsWarning
Button.IsFullWidth
- Button.OnClick (fun e -> GetSwateValidationXml |> ExcelInterop |> dispatch )
+ Button.OnClick (fun e -> GetSwateCustomXml |> ExcelInterop |> dispatch )
Button.Props [Style [MarginBottom "1rem"]; Title "Show record type data of Swate validation Xml"]
] [
span [] [str "Show Swate Validation Xml!"]
diff --git a/src/Client/Views/AddBuildingBlockView.fs b/src/Client/Views/AddBuildingBlockView.fs
index 070a3985..633c806a 100644
--- a/src/Client/Views/AddBuildingBlockView.fs
+++ b/src/Client/Views/AddBuildingBlockView.fs
@@ -5,12 +5,15 @@ open Fable.React.Props
open Fulma
open Fulma.Extensions.Wikiki
open Fable.FontAwesome
+open Fable.Core
+open Fable.Core.JsInterop
+
open ExcelColors
open Model
open Messages
open Shared
open CustomComponents
-open Fable.Core
+
let isValidBuildingBlock (block : AnnotationBuildingBlock) =
match block.Type with
@@ -35,7 +38,7 @@ let isValidBuildingBlock (block : AnnotationBuildingBlock) =
// td [] [
// b [] [str sugg.Name]
// ]
-// td [Style [Color "red"]] [if sugg.IsObsolete then str "obsolete"]
+// td [Style [Color ""]] [if sugg.IsObsolete then str "obsolete"]
// td [Style [FontWeight "light"]] [small [] [str sugg.Accession]]
// ])
// |> List.ofArray
@@ -82,108 +85,222 @@ let addBuildingBlockFooterComponent (model:Model) (dispatch:Msg -> unit) =
]
]
-let addBuildingBlockComponent (model:Model) (dispatch:Msg -> unit) =
- form [
- OnSubmit (fun e -> e.preventDefault())
- // https://keycode.info/
- OnKeyDown (fun k -> if k.key = "Enter" then k.preventDefault())
+let addBuildingBlockElements (model:Model) (dispatch:Msg -> unit) =
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "15px 15px 0 0"
+ Padding "0.25rem 1rem"
+ MarginBottom "1rem"
+ ]
] [
- Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Annotation building block selection"]
-
- Field.div [] [
- Label.label [Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [ str "Building block"]
- Help.help [] [str "Select the type of annotation building block (column) to add to the annotation table"]
- Field.div [Field.HasAddons] [
- Control.div [] [
- Dropdown.dropdown [Dropdown.IsActive model.AddBuildingBlockState.ShowBuildingBlockSelection] [
- Dropdown.trigger [] [
- Button.button [Button.OnClick (fun _ -> ToggleSelectionDropdown |> AddBuildingBlock |> dispatch)] [
- span [] [model.AddBuildingBlockState.CurrentBuildingBlock.Type |> AnnotationBuildingBlockType.toString |> str]
- Fa.i [Fa.Solid.AngleDown] []
- ]
- ]
- Dropdown.menu [Props[colorControl model.SiteStyleState.ColorMode]] [
- Dropdown.content [] ([
- Parameter
- Factor
- Characteristics
- Sample
- Data
- Source
- ] |> List.map (createBuildingBlockDropdownItem model dispatch))
+ Field.div [
+ Field.HasAddons
+ ] [
+ Control.div [] [
+ Dropdown.dropdown [Dropdown.IsActive model.AddBuildingBlockState.ShowBuildingBlockSelection] [
+ Dropdown.trigger [] [
+ Button.a [Button.OnClick (fun _ -> ToggleSelectionDropdown |> AddBuildingBlock |> dispatch)] [
+ span [Style [MarginRight "5px"]] [model.AddBuildingBlockState.CurrentBuildingBlock.Type |> AnnotationBuildingBlockType.toString |> str]
+ Fa.i [Fa.Solid.AngleDown] []
]
]
- ]
- Control.div [Control.IsExpanded] [
- match model.AddBuildingBlockState.CurrentBuildingBlock.Type with
- | Parameter | Characteristics | Factor ->
- AutocompleteSearch.autocompleteTermSearchComponent
- dispatch
- model.SiteStyleState.ColorMode
- model
- "Start typing to search"
- None
- (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockState model.AddBuildingBlockState)
- false
- | _ -> ()
- ]
- ]
- match model.AddBuildingBlockState.CurrentBuildingBlock.Type with
- | Parameter | Characteristics | Factor ->
- Field.div [Field.HasAddons] [
- Control.div [] [
- Button.a [ Button.OnClick (fun _ -> ToggleBuildingBlockHasUnit |> AddBuildingBlock |> dispatch)] [
- Fa.stack [Fa.Stack.Size Fa.FaSmall; Fa.Stack.Props [Style [ Color "#666666"]]][
- Fa.i [Fa.Regular.Square; Fa.Stack2x][]
- if model.AddBuildingBlockState.BuildingBlockHasUnit then
- Fa.i [Fa.Solid.Check; Fa.Stack1x][]
+ Dropdown.menu [Props[colorControl model.SiteStyleState.ColorMode]] [
+ Dropdown.content [] ([
+ Parameter
+ Factor
+ Characteristics
+ Sample
+ Data
+ Source
+ ] |> List.map (createBuildingBlockDropdownItem model dispatch)
+ |> fun x ->
+ List.append x [
+ Dropdown.Item.div [
+ Dropdown.Item.Modifiers [Modifier.TextAlignment (Screen.All,TextAlignment.Right)]
+ ][
+ a [ Href Shared.URLs.AnnotationPrinciplesUrl; Target "_Blank" ] [
+ str "more"
+ ]
+ ]
]
- ]
- ]
- Control.p [] [
- Button.button [Button.IsStatic true] [
- str (sprintf "This %s has a unit:" (model.AddBuildingBlockState.CurrentBuildingBlock.Type |> AnnotationBuildingBlockType.toString ))
- ]
+
+ )
]
+ ]
+ ]
+ Control.div [Control.IsExpanded] [
+ match model.AddBuildingBlockState.CurrentBuildingBlock.Type with
+ | Parameter | Characteristics | Factor ->
AutocompleteSearch.autocompleteTermSearchComponent
dispatch
model.SiteStyleState.ColorMode
model
"Start typing to search"
None
- (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnitState model.AddBuildingBlockState)
- // if BuildingBlockHasUnit = false then disabled = true
- (model.AddBuildingBlockState.BuildingBlockHasUnit |> not)
- ]
- | _ -> ()
+ (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockState model.AddBuildingBlockState)
+ false
+ | _ -> ()
+ ]
]
+ match model.AddBuildingBlockState.CurrentBuildingBlock.Type with
+ | Parameter | Characteristics | Factor ->
+ Field.div [Field.HasAddons] [
+ Control.div [] [
+ Button.a [
+ Button.Props [Style [
+ if model.AddBuildingBlockState.BuildingBlockHasUnit then Color NFDIColors.Mint.Base else Color NFDIColors.Red.Base
+ ]]
+ Button.OnClick (fun _ ->
+ let inputId = (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnitState model.AddBuildingBlockState).InputId
+ if model.AddBuildingBlockState.BuildingBlockHasUnit = true then
+ let e = Browser.Dom.document.getElementById inputId
+ e?value <- null
+ ToggleBuildingBlockHasUnit |> AddBuildingBlock |> dispatch
+ )
+ ] [
+ if model.AddBuildingBlockState.BuildingBlockHasUnit then
+ Fa.i [ Fa.Size Fa.FaLarge; Fa.Solid.Check ][ ]
+ else
+ Fa.i [ Fa.Size Fa.FaLarge ; Fa.Solid.Ban ][ ]
+ ]
+ ]
+ Control.p [] [
+ Button.button [Button.IsStatic true] [
+ str (sprintf "This %s has a unit:" (model.AddBuildingBlockState.CurrentBuildingBlock.Type |> AnnotationBuildingBlockType.toString ))
+ ]
+ ]
+ AutocompleteSearch.autocompleteTermSearchComponent
+ dispatch
+ model.SiteStyleState.ColorMode
+ model
+ "Start typing to search"
+ None
+ (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnitState model.AddBuildingBlockState)
+ // if BuildingBlockHasUnit = false then disabled = true
+ (model.AddBuildingBlockState.BuildingBlockHasUnit |> not)
+ ]
+
+ div [][
+ Help.help [Help.Props [Style [Display DisplayOptions.Inline]]] [
+ a [OnClick (fun _ -> ToggleModal (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockState model.AddBuildingBlockState).ModalId |> AdvancedSearch |> dispatch)] [
+ str "Use advanced search building block"
+ ]
+ ]
+ match model.AddBuildingBlockState.CurrentBuildingBlock.Type with
+ | Parameter | Characteristics | Factor ->
+ str " "
+
+ Help.help [Help.Props [Style [Display DisplayOptions.Inline; Float FloatOptions.Right]]] [
+ a [OnClick (fun _ -> ToggleModal (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnitState model.AddBuildingBlockState).ModalId |> AdvancedSearch |> dispatch)] [
+ str "Use advanced search unit"
+ ]
+ ]
+ | _ -> ()
+ ]
+
+ | _ -> ()
- // Fill selection confirmation
Field.div [] [
Control.div [] [
Button.button [
let isValid = model.AddBuildingBlockState.CurrentBuildingBlock |> isValidBuildingBlock
+ Button.Color Color.IsSuccess
if isValid then
- Button.CustomClass "is-success"
Button.IsActive true
else
- Button.CustomClass "is-danger"
+ Button.Color Color.IsDanger
Button.Props [Disabled true]
Button.IsFullWidth
Button.OnClick (
- let format =
- match model.AddBuildingBlockState.BuildingBlockHasUnit, model.AddBuildingBlockState.UnitTermSearchText, model.AddBuildingBlockState.UnitTermSearchTextHasTermAccession with
- | _,"", _ -> None //"0.00"
- | false, _, _ -> None//"0.00"
- | true, str, Some accession -> Some (str,Some accession)
- | true, str, None -> Some (str,None)
+ let colName = model.AddBuildingBlockState.CurrentBuildingBlock |> AnnotationBuildingBlock.toAnnotationTableHeader
+ let colTerm = if model.AddBuildingBlockState.BuildingBlockSelectedTerm.IsSome then Some model.AddBuildingBlockState.BuildingBlockSelectedTerm.Value.Accession else None
+ let unitName =
+ match model.AddBuildingBlockState.BuildingBlockHasUnit, model.AddBuildingBlockState.UnitTermSearchText with
+ | _,"" -> None //"0.00"
+ | false, _ -> None //"0.00"
+ | true, str -> Some str
//sprintf "0.00 \"%s\"" str
- let colName = model.AddBuildingBlockState.CurrentBuildingBlock |> AnnotationBuildingBlock.toAnnotationTableHeader
- fun _ -> (colName,format) |> pipeNameTuple2 AddColumn |> ExcelInterop |> dispatch
+ let unitTerm = if model.AddBuildingBlockState.UnitSelectedTerm.IsSome then Some model.AddBuildingBlockState.UnitSelectedTerm.Value.Accession else None
+ let minBuildingBlock = OfficeInterop.Types.BuildingBlockTypes.MinimalBuildingBlock.create colName colTerm unitName unitTerm None
+ fun _ -> minBuildingBlock |> pipeNameTuple AddAnnotationBlock |> ExcelInterop |> dispatch
)
] [
- str "Insert this annotation building block"
+ str "Insert annotation building block"
+ ]
+ ]
+ ]
+ ]
+
+let addUnitToExistingBlockElements (model:Model) (dispatch:Msg -> unit) =
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "0 0 15px 15px"
+ Padding "0.25rem 1rem"
+ ]] [
+ Field.div [Field.HasAddons] [
+ Control.p [] [
+ Button.button [Button.IsStatic true] [
+ str ("Add unit")
]
]
+ AutocompleteSearch.autocompleteTermSearchComponent
+ dispatch
+ model.SiteStyleState.ColorMode
+ model
+ "Start typing to search"
+ None
+ (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnit2State model.AddBuildingBlockState)
+ // if BuildingBlockHasUnit = false then disabled = true
+ false
+ ]
+ Help.help [Help.Props [Style [Display DisplayOptions.Inline]]] [
+ a [OnClick (fun _ -> ToggleModal (AutocompleteSearch.AutocompleteParameters.ofAddBuildingBlockUnit2State model.AddBuildingBlockState).ModalId |> AdvancedSearch |> dispatch)] [
+ str "Use advanced search"
+ ]
]
+
+ Field.div [] [
+ Control.div [] [
+ Button.button [
+ let isValid = model.AddBuildingBlockState.Unit2TermSearchText <> ""
+ Button.Color Color.IsSuccess
+ if isValid then
+ Button.IsActive true
+ else
+ Button.Color Color.IsDanger
+ Button.Props [Disabled true]
+ Button.IsFullWidth
+ Button.OnClick (fun e ->
+ let unitTermOpt = if model.AddBuildingBlockState.Unit2SelectedTerm.IsSome then Some model.AddBuildingBlockState.Unit2SelectedTerm.Value.Accession else None
+ match model.AddBuildingBlockState.Unit2TermSearchText with
+ | "" ->
+ GenericLog ("Error", "Cannot execute function with empty unit input") |> Dev |> dispatch
+ | str ->
+ (Some str, unitTermOpt) |> pipeNameTuple2 AddUnitToAnnotationBlock |> ExcelInterop |> dispatch
+ )
+ ] [
+ str "Add unit to existing building block"
+ ]
+ ]
+ ]
+ ]
+
+let addBuildingBlockComponent (model:Model) (dispatch:Msg -> unit) =
+ form [
+ OnSubmit (fun e -> e.preventDefault())
+ // https://keycode.info/
+ OnKeyDown (fun k -> if k.key = "Enter" then k.preventDefault())
+ ] [
+ Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Annotation building block selection"]
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [str "Select the type of annotation building block (column) to add to the annotation table."]
+ // Input forms, etc related to add building block.
+ addBuildingBlockElements model dispatch
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [str "Add unit reference columns to existing building block."]
+ // Input forms, etc related to add unit to existing building block.
+ addUnitToExistingBlockElements model dispatch
+
]
\ No newline at end of file
diff --git a/src/Client/Views/BaseView.fs b/src/Client/Views/BaseView.fs
index 2dc32b48..61c645ef 100644
--- a/src/Client/Views/BaseView.fs
+++ b/src/Client/Views/BaseView.fs
@@ -14,7 +14,7 @@ open CustomComponents
let createNavigationTab (pageLink: Routing.Route) (model:Model) (dispatch:Msg-> unit) =
let isActive = (model.PageState.CurrentPage = pageLink)
- Tabs.tab [Tabs.Tab.IsActive isActive;] [
+ Tabs.tab [Tabs.Tab.IsActive isActive] [
a [ //Href (Routing.Route.toRouteUrl pageLink)
Style [
if isActive then
@@ -34,13 +34,41 @@ let createNavigationTab (pageLink: Routing.Route) (model:Model) (dispatch:Msg->
// str (pageLink |> Routing.Route.toString)
//else
// pageLink |> Routing.Route.toIcon
- span [Class "hideUnder575px"][str (pageLink |> Routing.Route.toString)]
- span [Class "hideOver575px"][pageLink |> Routing.Route.toIcon]
+ span [Class "hideUnder775px"][str pageLink.toStringRdbl]
+ span [Class "hideOver775px"][pageLink |> Routing.Route.toIcon]
]
]
]
+let tabRow (model:Model) dispatch (tabs: seq)=
+ Tabs.tabs[
+ Tabs.IsCentered; Tabs.IsFullWidth; Tabs.IsBoxed
+ Tabs.Props [
+ Style [
+ BackgroundColor model.SiteStyleState.ColorMode.BodyBackground
+ CSSProp.Custom ("overflow","visible")
+ ]
+ ]
+ ] [
+ yield! tabs
+ ]
+
+let firstRowTabs (model:Model) dispatch =
+ tabRow model dispatch [
+ createNavigationTab Routing.Route.AddBuildingBlock model dispatch
+ createNavigationTab Routing.Route.TermSearch model dispatch
+ createNavigationTab Routing.Route.Validation model dispatch
+ createNavigationTab Routing.Route.FilePicker model dispatch
+ createNavigationTab Routing.Route.ProtocolInsert model dispatch
+ createNavigationTab Routing.Route.Info model dispatch
+ ]
+
+let sndRowTabs (model:Model) dispatch =
+ tabRow model dispatch [
+
+ ]
+
let footerContentStatic (model:Model) dispatch =
div [][
str "Swate Release Version "
@@ -51,28 +79,25 @@ open Fable.Core.JsInterop
/// The base react component for all views in the app. contains the navbar and takes body and footer components to create the full view.
let baseViewComponent (model: Model) (dispatch: Msg -> unit) (bodyChildren: ReactElement list) (footerChildren: ReactElement list) =
- div [ Style [MinHeight "100vh"; BackgroundColor model.SiteStyleState.ColorMode.BodyBackground; Color model.SiteStyleState.ColorMode.Text;]
+ div [
+ OnClick (fun e ->
+ if model.TermSearchState.ShowSuggestions
+ || model.AddBuildingBlockState.ShowUnitTermSuggestions
+ || model.AddBuildingBlockState.ShowUnit2TermSuggestions
+ || model.AddBuildingBlockState.ShowBuildingBlockTermSuggestions
+ then
+ TopLevelMsg.CloseSuggestions |> TopLevelMsg |> dispatch
+ )
+ Style [MinHeight "100vh"; BackgroundColor model.SiteStyleState.ColorMode.BodyBackground; Color model.SiteStyleState.ColorMode.Text;
+ ]
] [
Navbar.navbarComponent model dispatch
Container.container [
Container.IsFluid
] [
br []
- Tabs.tabs[
- Tabs.IsCentered; Tabs.IsFullWidth; Tabs.IsBoxed
- Tabs.Props [
- Style [
- BackgroundColor model.SiteStyleState.ColorMode.BodyBackground
- OverflowX OverflowOptions.Hidden
- ]
- ]
- ] [
- createNavigationTab Routing.Route.AddBuildingBlock model dispatch
- createNavigationTab Routing.Route.TermSearch model dispatch
- createNavigationTab Routing.Route.Validation model dispatch
- createNavigationTab Routing.Route.FilePicker model dispatch
- createNavigationTab Routing.Route.Info model dispatch
- ]
+ firstRowTabs model dispatch
+ //sndRowTabs model dispatch
if (not model.ExcelState.HasAnnotationTable) then
CustomComponents.AnnotationTableMissingWarning.annotationTableMissingWarningComponent model dispatch
@@ -85,23 +110,15 @@ let baseViewComponent (model: Model) (dispatch: Msg -> unit) (bodyChildren: Reac
br []
- Footer.footer [ Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]] [
- Content.content [
- Content.Modifiers [ Modifier.TextAlignment (Screen.All, TextAlignment.Left)]
- Content.Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]
- ] [
- yield! footerChildren
- //Button.button [
- // Button.OnClick (fun e ->
- // let e = Browser.Dom.document.getElementById("BlockNameSearch")
- // let content = e.innerHTML
- // e.innerHTML <- content
- // )
- //][
- // str "Test"
- //]
+ if footerChildren.IsEmpty |> not then
+ Footer.footer [ Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]] [
+ Content.content [
+ Content.Modifiers [ Modifier.TextAlignment (Screen.All, TextAlignment.Left)]
+ Content.Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]
+ ] [
+ yield! footerChildren
+ ]
]
- ]
]
div [Style [Position PositionOptions.Fixed; Bottom "0"; Width "100%"; TextAlign TextAlignOptions.Center; Color "grey"]][
diff --git a/src/Client/Views/FilePickerView.fs b/src/Client/Views/FilePickerView.fs
index 4e16106e..7e0a777a 100644
--- a/src/Client/Views/FilePickerView.fs
+++ b/src/Client/Views/FilePickerView.fs
@@ -228,7 +228,7 @@ let dragAndDropElement (model:Model) (dispatch: Msg -> unit) id =
eve.target?style?borderBottom <- "0.5px solid darkgrey")
OnDragLeave (fun eve ->
eve.preventDefault()
- eve.target?style?backgroundColor <- "white"
+ eve.target?style?backgroundColor <- ExcelColors.colorfullMode.BodyBackground
eve.target?style?borderBottom <- "0px solid darkgrey")
OnDragEnd (fun eve ->
// restore wrapper
@@ -252,7 +252,7 @@ let dragAndDropElement (model:Model) (dispatch: Msg -> unit) id =
eve.preventDefault()
dropped <- true
UpdateDNDDropped true |> FilePicker |> dispatch
- eve.target?style?backgroundColor <- "white"
+ eve.target?style?backgroundColor <- ExcelColors.colorfullMode.BodyBackground
eve.target?style?borderBottom <- "0px solid darkgrey"
let prevId = eve.dataTransfer.getData("text")
@@ -350,10 +350,10 @@ let placeOnTopElement model dispatch =
eve.target?style?borderBottom <- "2px solid darkgrey")
OnDragLeave (fun eve ->
eve.preventDefault()
- eve.target?style?borderBottom <- "2px solid white")
+ eve.target?style?borderBottom <- "2px solid white" ) //(sprintf "2px solid %s" ExcelColors.colorfullMode.BodyBackground) )
OnDrop (fun eve ->
eve.preventDefault()
- eve.target?style?borderBottom <- "2px solid white"
+ eve.target?style?borderBottom <- "2px solid white" //(sprintf "2px solid %s" ExcelColors.colorfullMode.BodyBackground)
dropped <- true
UpdateDNDDropped true |> FilePicker |> dispatch
let prevId = eve.dataTransfer.getData("text")
@@ -414,69 +414,160 @@ let fileElementContainer (model:Model) dispatch =
dragAndDropClone model dispatch (ele)
]
-let filePickerComponent (model:Model) (dispatch:Msg -> unit) =
- let inputId = "filePicker_OnFilePickerMainFunc"
- Content.content [ Content.Props [colorControl model.SiteStyleState.ColorMode ]] [
- Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "File Picker"]
- File.file [] [
- File.label [] [
- File.input [
- Props [
- Id inputId
- Multiple true
- OnChange (fun ev ->
-
- let files : FileList = ev.target?files
-
- let fileNames =
- [ for i=0 to (files.length - 1) do yield files.item i ]
- |> List.map (fun f -> f.name)
-
- fileNames |> LoadNewFiles |> FilePicker |> dispatch
-
- let picker = Browser.Dom.document.getElementById(inputId)
- // https://stackoverflow.com/questions/3528359/html-input-type-file-file-selection-event/3528376
- picker?value <- null
- )
- ]
- ]
- File.cta [] [
- File.icon [] [
- Fa.i [
- Fa.Solid.Upload
- ] []
- ]
- File.name [Props [Style [BorderRight "none"]]] [
- str "Chose one or multiple files"
- ]
+let uploadButton (model:Model) dispatch inputId =
+ File.file [
+ File.Color IsInfo
+ File.IsCentered
+ File.Props [Style [Margin "1rem 0"]]
+ ] [
+ File.label [ Props [Style [Width "100%"]] ] [
+ File.input [
+ Props [
+ Id inputId
+ Multiple true
+ OnChange (fun ev ->
+
+ let files : FileList = ev.target?files
+
+ let fileNames =
+ [ for i=0 to (files.length - 1) do yield files.item i ]
+ |> List.map (fun f -> f.name)
+
+ fileNames |> LoadNewFiles |> FilePicker |> dispatch
+
+ let picker = Browser.Dom.document.getElementById(inputId)
+ // https://stackoverflow.com/questions/3528359/html-input-type-file-file-selection-event/3528376
+ picker?value <- null
+ )
]
]
+ File.cta [
+ Props [Style [Width "100%"; JustifyContent "center" ]]
+ ] [
+ File.icon [] [ Fa.i [ Fa.Solid.Upload ] [] ]
+ File.label [ Props [
+ OnClick (fun e ->
+ let getUploadElement = Browser.Dom.document.getElementById inputId
+ getUploadElement.click()
+ )
+ ] ] [ str "Pick file names" ]
+ ]
]
+ ]
- div [
- Style [Margin "1rem auto"]
- ][
- if model.FilePickerState.FileNames = [] then
- str "Here you can select files from your computer to insert their names into a Swate column."
- else
- fileElementContainer model dispatch
- ]
+let fileNameElements (model:Model) dispatch =
+ div [ ][
+ if model.FilePickerState.FileNames <> [] then
+ fileElementContainer model dispatch
+
+ Button.a [
+ Button.IsFullWidth
+ if model.FilePickerState.FileNames |> List.isEmpty then
+ yield! [
+ Button.Disabled true
+ Button.IsActive false
+ Button.Color Color.IsDanger
+ ]
+ else
+ Button.Color Color.IsSuccess
+ Button.OnClick (fun e ->
+ (fun tableName -> InsertFileNames (tableName, model.FilePickerState.FileNames |> List.map snd)) |> PipeActiveAnnotationTable |> ExcelInterop |> dispatch
+ )
+
+ ][
+ str "Insert File Names"
+ ]
+ else
+ div [][
+ str "All names from your selected files will be displayed here."
+ ]
+ ]
+
+let sortButton icon msg =
+ Button.a [
+ Button.IsOutlined
+ Button.Color IsPrimary
+ Button.OnClick msg
+ ][
+ Fa.i [ Fa.Size Fa.FaLarge; icon ] [ ]
+ ]
+
+let fileSortElements (model:Model) dispatch =
+ div [Style [MarginBottom "1rem"; Display DisplayOptions.Flex]][
Button.a [
- Button.IsFullWidth
- if model.FilePickerState.FileNames |> List.isEmpty then
- yield! [
- Button.Disabled true
- Button.IsActive false
- Button.Color Color.IsDanger
- ]
- else
- Button.Color Color.IsSuccess
+ Button.IsOutlined
+ Button.Color IsPrimary
Button.OnClick (fun e ->
- (fun tableName -> InsertFileNames (tableName, model.FilePickerState.FileNames |> List.map snd)) |> PipeActiveAnnotationTable |> ExcelInterop |> dispatch
+ let txt = model.FilePickerState.FileNames |> List.map snd |> String.concat System.Environment.NewLine
+ let textArea = Browser.Dom.document.createElement "textarea"
+ textArea?value <- txt
+ textArea?style?top <- "0"
+ textArea?style?left <- "0"
+ textArea?style?position <- "fixed"
+
+ Browser.Dom.document.body.appendChild textArea |> ignore
+
+ textArea.focus()
+ /// Can't belive this actually worked
+ textArea?select()
+
+ let t = Browser.Dom.document.execCommand("copy")
+ Browser.Dom.document.body.removeChild(textArea) |> ignore
+ ()
)
+ ][
+ Fa.i [Fa.Props [Title "Copy to Clipboard"]; Fa.Regular.Clipboard ] []
+ ]
+ Button.list [
+ Button.List.HasAddons
+ Button.List.Props [Style [MarginLeft "auto"]]
][
- str "Insert File Names"
+ sortButton Fa.Solid.SortAlphaDown (fun e ->
+ let sortedList = model.FilePickerState.FileNames |> List.sortBy snd |> List.mapi (fun i x -> i,snd x)
+ UpdateFileNames sortedList |> FilePicker |> dispatch
+ )
+ sortButton Fa.Solid.SortAlphaDownAlt (fun e ->
+ let sortedList = model.FilePickerState.FileNames |> List.sortByDescending snd |> List.mapi (fun i x -> i,snd x)
+ UpdateFileNames sortedList |> FilePicker |> dispatch
+ )
+ ]
+ ]
+
+let fileContainer (model:Model) dispatch inputId=
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "15px 15px 0 0"
+ Padding "0.25rem 1rem"
+ MarginBottom "1rem"
]
+ ][
+ fileSortElements model dispatch
+
+ fileNameElements model dispatch
+ ]
+
+let filePickerComponent (model:Model) (dispatch:Msg -> unit) =
+ let inputId = "filePicker_OnFilePickerMainFunc"
+ Content.content [ ] [
+ Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "File Picker"]
+
+ Help.help [][
+ b [] [ str "Choose one or multiple files, rearrange them and add their names to the Excel sheet."]
+ str " You can use "
+ u [][str "drag'n'drop"]
+ str " to change the file order or remove files selected by accident."
+ ]
+
+ uploadButton model dispatch inputId
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [
+ str "Select files from your computer and insert their names into Excel."
+ ]
+
+ /// COlored container element for all uploaded file names and sort elements
+ fileContainer model dispatch inputId
+
]
\ No newline at end of file
diff --git a/src/Client/Views/InfoView.fs b/src/Client/Views/InfoView.fs
index 4d627451..aa883f16 100644
--- a/src/Client/Views/InfoView.fs
+++ b/src/Client/Views/InfoView.fs
@@ -47,55 +47,80 @@ let introductionElement model dispatch =
]
]
+
+
let getInContactElement (model:Model) dispatch =
[
Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent; MarginLeft "7%"]]] [str "Get In Contact With Us"]
-
+
Columns.columns [Columns.Props [Style [MaxWidth "80%"; Margin "0 auto"]]][
Column.column [][
Heading.h5 [Heading.IsSubtitle; Heading.Props [Style [Color model.SiteStyleState.ColorMode.Text]]][
- str "Got a good idea or just want to get in touch? Reach out to us! "
- div [] [a [Href Shared.URLs.CSBTwitterUrl; Target "_Blank"][str "#Twitter @cs_biology"]]
+ str "Swate is part of the dataPLANT organisation."
]
- ]
- Column.column [Column.Width (Screen.All, Column.IsOneFifth); Column.CustomClass "flexToCentered"][
- a [Href Shared.URLs.CSBTwitterUrl; Target "_Blank"][
- Fa.i [
- Fa.Size Fa.Fa4x
- Fa.Brand.Twitter
- Fa.CustomClass "myFaBrand myFaTwitter"
- ][]
+ Content.content [][
+ blockquote [Style [Color model.SiteStyleState.ColorMode.Text; BackgroundColor model.SiteStyleState.ColorMode.ControlBackground]][
+ str "Services and infrastructures to support "
+ a [Href "https://twitter.com/search?q=%23FAIRData&src=hashtag_click"][ str "#FAIRData" ]
+ str " science and good data management practices within the plant basic research community. "
+ a [Href "https://twitter.com/search?q=%23NFDI&src=hashtag_click"] [ str "#NFDI" ]
+ str "."
+ ]
]
]
- ]
-
- Columns.columns [Columns.Props [Style [MaxWidth "80%"; Margin "0 auto"]]][
- Column.column [Column.Width (Screen.All, Column.IsOneFifth); Column.CustomClass "hideUnder775px"][
- a [Href Shared.URLs.CSBWebsiteUrl; Target "_Blank"][
- Fa.i [
- Fa.CustomClass "myFaBrand myFaCSB"
- ][
- str "CSB"
+ Column.column [Column.Width (Screen.All, Column.IsNarrow); Column.CustomClass "flexToCentered"][
+ a [Href "https://nfdi4plants.de/"; Target "_Blank"; Class "nfdiIcon" ] [
+ Fulma.Image.image [][
+ img [Src "https://raw.githubusercontent.com/nfdi4plants/Branding/138420e3b6f9ec9e125c1ca8840874b2be2a1262/logos/DataPLANT_logo_minimal_square_bg_darkblue.svg"]
]
]
]
+ ]
+
+ Columns.columns [Columns.Props [Style [MaxWidth "80%"; Margin "0 auto"]]][
Column.column [][
Heading.h5 [Heading.IsSubtitle; Heading.Props [Style [Color model.SiteStyleState.ColorMode.Text]]][
- str "If you are interested in our other work, check out our "
- b [][str "website"]
- str "!"
+ str "Got a good idea or just want to get in touch? Reach out to us! "
+ div [] [a [Href Shared.URLs.NFDITwitterUrl; Target "_Blank"][str "#Twitter @nfdi4plants"]]
]
]
- Column.column [Column.Width (Screen.All, Column.IsOneFifth); Column.CustomClass "flexToCentered hideOver775px"][
- a [Href Shared.URLs.CSBWebsiteUrl; Target "_Blank"][
+ Column.column [Column.Width (Screen.All, Column.IsNarrow); Column.CustomClass "flexToCentered"][
+ a [Href Shared.URLs.NFDITwitterUrl; Target "_Blank"][
Fa.i [
- Fa.CustomClass "myFaBrand myFaCSB"
- ][
- str "CSB"
- ]
+ Fa.Size Fa.Fa4x
+ Fa.Brand.Twitter
+ Fa.CustomClass "myFaBrand myFaTwitter"
+ ][]
]
]
]
+
+ //Columns.columns [
+ // Columns.Props [Style [MaxWidth "80%"; Margin "0 auto"]]
+ // Columns.CustomClass "reverseCols"
+ //][
+ // Column.column [
+ // Column.Width (Screen.All, Column.IsNarrow)
+ // Column.CustomClass "flexToCentered"
+ // ][
+ // a [
+ // Href Shared.URLs.CSBWebsiteUrl; Target "_Blank"
+ // ][
+ // Fa.i [
+ // Fa.CustomClass "myFaBrand myFaCSB"
+ // ][
+ // str "CSB"
+ // ]
+ // ]
+ // ]
+ // Column.column [][
+ // Heading.h5 [Heading.IsSubtitle; Heading.Props [Style [Color model.SiteStyleState.ColorMode.Text]]][
+ // str "If you are interested in our other work, check out our "
+ // b [][str "website"]
+ // str "!"
+ // ]
+ // ]
+ //]
Columns.columns [Columns.Props [Style [MaxWidth "80%"; Margin "0 auto"]]][
Column.column [][
@@ -106,7 +131,7 @@ let getInContactElement (model:Model) dispatch =
]
]
- Column.column [Column.Width (Screen.All, Column.IsOneFifth); Column.CustomClass "flexToCentered"][
+ Column.column [Column.Width (Screen.All, Column.IsNarrow); Column.CustomClass "flexToCentered"][
a [Href "https://github.com/nfdi4plants/Swate/issues"; Target "_Blank"][
Fa.i [
Fa.Brand.Github
diff --git a/src/Client/Views/ProtocolInsertView.fs b/src/Client/Views/ProtocolInsertView.fs
new file mode 100644
index 00000000..ae1e49c7
--- /dev/null
+++ b/src/Client/Views/ProtocolInsertView.fs
@@ -0,0 +1,293 @@
+module ProtocolInsertView
+
+open System
+
+open Fulma
+open Fable
+open Fable.React
+open Fable.React.Props
+open Fable.FontAwesome
+//open Fable.Core.JS
+open Fable.Core.JsInterop
+
+//open ISADotNet
+
+open Model
+open Messages
+open Browser.Types
+open Fulma.Extensions.Wikiki
+
+open Shared
+open ISADotNetHelpers
+
+let isViableISADotNetProcess (isaProcess:ISADotNet.Process) =
+
+ // The following comment was written with another function in mind, but can be used as base for documentation.
+
+ let isExistingChecks =
+ let hasExecProtocol = "executesProtocol", isaProcess.ExecutesProtocol.IsSome
+ let hasProtocolParams = "parameterValues", isaProcess.ParameterValues.IsSome
+ let hasExecProtocolParams =
+ "executesProtocol.parameters",
+ if isaProcess.ExecutesProtocol.IsSome then
+ isaProcess.ExecutesProtocol.Value.Parameters.IsSome
+ else
+ false
+ let hasAnnoTSRTAN =
+ isaProcess.ExecutesProtocol.Value.Parameters.Value
+ |> List.map (fun p ->
+ if p.ParameterName.IsSome then
+ "executesProtocol.parameters.Anno/TSR/TAN",
+ p.ParameterName.Value.Name.IsSome
+ && p.ParameterName.Value.TermAccessionNumber.IsSome
+ && p.ParameterName.Value.TermSourceREF.IsSome
+ else
+ "executesProtocol.parameters.Anno/TSR/TAN",
+ false
+ )
+ let hasAnnoTSRTAN2 =
+ isaProcess.ParameterValues.Value
+ |> List.map (fun x ->
+ if x.Category.IsSome then
+ if x.Category.Value.ParameterName.IsSome then
+ "parameterValues.category.parameterName.Anno/TST/TAN",
+ x.Category.Value.ParameterName.Value.Name.IsSome
+ && x.Category.Value.ParameterName.Value.TermSourceREF.IsSome
+ && x.Category.Value.ParameterName.Value.TermAccessionNumber.IsSome
+ else
+ "parameterValues.category.parameterName.Anno/TST/TAN",
+ false
+ else
+ "parameterValues.category.parameterName.Anno/TST/TAN",
+ false
+ )
+ let hasParameterValueValue =
+ isaProcess.ParameterValues.Value
+ |> List.map (fun x ->
+ "parameterValues.Value",
+ x.Value.IsSome
+ )
+ [|hasExecProtocol; hasProtocolParams; hasExecProtocolParams; yield! hasAnnoTSRTAN; yield! hasAnnoTSRTAN; yield! hasParameterValueValue|]
+ |> Collections.Array.filter (fun (param,isExisting) ->
+ isExisting = false
+ )
+ if isExistingChecks |> Collections.Array.isEmpty then
+ let execParams = isaProcess.ExecutesProtocol.Value.Parameters.Value
+ let paramValuePairs = isaProcess.ParameterValues.Value
+ /// As we want a very controlled environment we establish this failsafe for now. This can be changed later on.
+ let isSameLength = execParams.Length = paramValuePairs.Length
+ /// As we want a very controlled environment we establish this failsafe for now. This can be changed later on.
+ let hasSameEntrys =
+ paramValuePairs
+ |> List.choose (fun paramValuePair ->
+ let param = paramValuePair.Category.Value.ParameterName.Value
+ execParams |> List.tryFind (fun execParam ->
+ execParam.ParameterName.Value.Name = param.Name
+ && execParam.ParameterName.Value.TermAccessionNumber = param.TermAccessionNumber
+ && execParam.ParameterName.Value.TermSourceREF = param.TermSourceREF
+ )
+ )
+ if not isSameLength then
+ false, Some <| sprintf "Process.ExecutesProtocol.Parameters and Process.ParameterValues has not the same number of items: %i - %i" execParams.Length paramValuePairs.Length
+ elif hasSameEntrys.Length <> paramValuePairs.Length then
+ false, Some <| sprintf "Process.ExecutesProtocol.Parameters and Process.ParameterValues has different values in (category.)parameterName.annotationValue."
+ else
+ true, None
+ else
+ false, Some <| sprintf "Process contains missing values: %A" (isExistingChecks |> Collections.Array.map fst)
+
+let paramValuePairElement (ppv:ISADotNet.ProcessParameterValue) =
+ Table.table [Table.IsFullWidth; Table.IsBordered][
+ thead [][
+ tr [][
+ th [Style [Width "50%"]] [
+ str (annotationValueToString ppv.Category.Value.ParameterName.Value.Name.Value)
+ ]
+ th [][
+ str (termAccessionReduce ppv.Category.Value.ParameterName.Value.TermAccessionNumber.Value)
+ ]
+ ]
+ ]
+ tbody [][
+ tr [Style [Width "50%"] ][
+ let isOntology = valueIsOntology ppv.Value.Value
+ td [][
+ str (
+ if isOntology.IsSome then
+ isOntology.Value.Name
+ elif ppv.Unit.IsSome then
+ let unitName = ppv.Unit.Value.Name.Value |> annotationValueToString
+ let value = valueToString ppv.Value.Value
+ sprintf "%s %s" value unitName
+ else
+ valueToString ppv.Value.Value
+ )
+ ]
+ td [][
+ str (
+ if isOntology.IsSome then
+ isOntology.Value.TermAccession
+ elif ppv.Unit.IsSome then
+ ppv.Unit.Value.TermAccessionNumber.Value |> termAccessionReduce
+ else
+ valueToString ppv.Value.Value
+ )
+ ]
+ ]
+ ]
+ ]
+
+/// only diplayed if model.ProtocolInsertState.ProcessModel.IsSome
+let displayProtocolInfoElement isViable (errorMsg:string option) (model:Model) dispatch =
+
+ if not isViable then
+ [
+ Label.label [Label.Props [Style [Color NFDIColors.Red.Base]]][str "The following errors occured:"]
+ str (errorMsg.Value)
+ ]
+ else
+ [
+ let paramValuePairs = model.ProtocolInsertState.ProcessModel.Value.ParameterValues.Value
+ Field.div [][
+ yield div [Style [MarginBottom "1rem"]][
+ b [][ str model.ProtocolInsertState.ProcessModel.Value.ExecutesProtocol.Value.Name.Value ]
+ str (sprintf " - Version %s" model.ProtocolInsertState.ProcessModel.Value.ExecutesProtocol.Value.Version.Value)
+ ]
+ for paramValuePair in paramValuePairs do
+ yield paramValuePairElement paramValuePair
+ ]
+ ]
+
+let fileUploadButton (model:Model) dispatch id =
+ Label.label [Label.Props [Style [Margin "1rem auto"]]][
+ Input.input [
+ Input.Props [
+ Id id
+ Type "file"; Style [Display DisplayOptions.None]
+ OnChange (fun ev ->
+ let files : FileList = ev.target?files
+
+ let fileNames =
+ [ for i=0 to (files.length - 1) do yield files.item i ]
+ |> List.map (fun f -> f.slice() )
+
+ let reader = Browser.Dom.FileReader.Create()
+
+ reader.onload <- fun evt ->
+ UpdateUploadData evt.target?result |> ProtocolInsert |> dispatch
+
+ reader.onerror <- fun evt ->
+ GenericLog ("Error", evt.Value) |> Dev |> dispatch
+
+ reader.readAsText(fileNames |> List.head)
+
+ let picker = Browser.Dom.document.getElementById(id)
+ // https://stackoverflow.com/questions/3528359/html-input-type-file-file-selection-event/3528376
+ picker?value <- null
+ )
+ ]
+ ]
+ Button.a [Button.Color Color.IsInfo; Button.IsFullWidth][
+ str "Upload Process.json"
+ ]
+ ]
+
+open OfficeInterop.Types.Xml
+
+let addToTableButton isValid (model:Model) dispatch =
+ Field.div [] [
+ Control.div [] [
+ Button.a [
+ if isValid then
+ Button.IsActive true
+ else
+ Button.Color Color.IsDanger
+ Button.Props [Disabled true]
+ Button.IsFullWidth
+ Button.Color IsSuccess
+ Button.OnClick (fun e ->
+ let preProtocol =
+ let p = model.ProtocolInsertState.ProcessModel.Value
+ let id = p.ExecutesProtocol.Value.Name.Value
+ let version = p.ExecutesProtocol.Value.Version.Value
+ let swateVersion = model.PersistentStorageState.AppVersion
+ GroupTypes.Protocol.create id version swateVersion "" "" []
+ let minBuildingBlockInfos =
+ OfficeInterop.Types.BuildingBlockTypes.MinimalBuildingBlock.ofISADotNetProcess model.ProtocolInsertState.ProcessModel.Value
+ |> List.rev
+ pipeNameTuple2 AddAnnotationBlocks (minBuildingBlockInfos,preProtocol) |> ExcelInterop |> dispatch
+
+ //for minBuildBlockInfo in minBuildingBlockInfos
+ // do
+ // let msg tableName = AddAnnotationBlock (tableName, minBuildBlockInfo)
+ // PipeActiveAnnotationTable msg |> ExcelInterop |> dispatch
+ )
+ ] [
+ str "Insert protocol annotation blocks"
+ ]
+ ]
+ ]
+
+let protocolInsertElement (model:Model) dispatch =
+ let isViable, errorMsg =
+ if model.ProtocolInsertState.ProcessModel.IsSome then
+ isViableISADotNetProcess model.ProtocolInsertState.ProcessModel.Value
+ else
+ false, "" |> Some
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "15px 15px 0 0"
+ Padding "0.25rem 1rem"
+ MarginBottom "1rem"
+ ]
+ ] [
+ Field.div [Field.Props [Style [
+ Width "100%"
+ ]]][
+ if model.ProtocolInsertState.ProcessModel.IsSome then
+ yield! displayProtocolInfoElement isViable errorMsg model dispatch
+ else
+ Field.div [][
+ str "The protocol building blocks will be shown here"
+ ]
+
+ addToTableButton isViable model dispatch
+ ]
+ ]
+
+let fileUploadViewComponent (model:Model) dispatch =
+ let uploadId = "UploadFiles_ElementId"
+ form [
+ OnSubmit (fun e -> e.preventDefault())
+ // https://keycode.info/
+ OnKeyDown (fun k -> if k.key = "Enter" then k.preventDefault())
+ ] [
+
+ Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Protocol driven building block insert"]
+
+ Help.help [][
+ b [] [
+ str "Upload a "
+ a [Href "https://github.com/nfdi4plants/Swate/wiki/Insert-via-Process.json"; Target "_Blank"][ str "process.json" ]
+ str " file."
+ ]
+ str " The building blocks in this file can be group inserted into a Swate table."
+ str " In the future these files will be accessible either by "
+ a [Href "https://github.com/nfdi4plants/Spawn"; Target "_Blank"] [str "Spawn"]
+ str " or offered as download!"
+ ]
+
+ fileUploadButton model dispatch uploadId
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [str "Show uploaded file data."]
+
+ protocolInsertElement model dispatch
+
+ //div [][
+ // str (
+ // let dataStr = model.ProtocolInsertState.ProcessModel
+ // if dataStr.IsNone then "no upload data found" else sprintf "%A" model.ProtocolInsertState.ProcessModel.Value
+ // )
+ //]
+ ]
\ No newline at end of file
diff --git a/src/Client/Views/SettingsView.fs b/src/Client/Views/SettingsView.fs
index f74d76aa..6781f304 100644
--- a/src/Client/Views/SettingsView.fs
+++ b/src/Client/Views/SettingsView.fs
@@ -19,52 +19,20 @@ let toggleDarkModeElement (model:Model) dispatch =
str "Darkmode"
]
Level.right [ Props [ Style [if model.SiteStyleState.IsDarkMode then Color model.SiteStyleState.ColorMode.Text else Color model.SiteStyleState.ColorMode.Fade]]] [
- Switch.switchInline [
+ Switch.switch [
Switch.Id "DarkModeSwitch"
Switch.IsOutlined
Switch.Color IsSuccess
Switch.OnChange (fun _ -> ToggleColorMode |> StyleChange |> dispatch)
- ] [span [Class "nonSelectText"][str "DarkMode"]]
- ]
- ]
-
-let toggleAutoDeleteAssistElement (model:Model) dispatch =
- Level.level [Level.Level.IsMobile][
- Level.left [Props [Style [Display DisplayOptions.Block]]] [
- str "Toggle Reference Column Input Assist"
- ]
- Level.right [Props [Title "Toggle Reference Column Input Assist"]][
- Button.a [
- Button.Props [Style []]
- Button.OnClick (fun _ ->
- ToggleEventHandler |> ExcelInterop |> dispatch
- )
- ] [
- Fa.span [Fa.Solid.Edit][]
- Fa.span [
- Fa.Solid.Sync
- if model.ExcelState.TablesHaveAutoEditHandler then Fa.Spin][]
- ]
+ ] []
]
]
let settingsViewComponent (model:Model) dispatch =
div [
-
+ Style [MaxWidth "500px"]
][
Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Swate Settings"]
Label.label [][str "Customize Swate"]
toggleDarkModeElement model dispatch
-
- Label.label [][
- str "Adjust Swate Settings"
- Fa.i [
- Fa.Solid.QuestionCircle;
- Fa.Props [
- Style [MarginLeft "3px"; Cursor "pointer"]
- Title "Swate creates hidden reference columns for each building block. With this setting turned on this information will be deleted whenever the main column value changes."
- ]
- ][]
- ]
- toggleAutoDeleteAssistElement model dispatch
]
\ No newline at end of file
diff --git a/src/Client/Views/TermSearchView.fs b/src/Client/Views/TermSearchView.fs
index f0e6ee95..a850b9aa 100644
--- a/src/Client/Views/TermSearchView.fs
+++ b/src/Client/Views/TermSearchView.fs
@@ -27,7 +27,7 @@ open CustomComponents
// td [] [
// b [] [str sugg.Name]
// ]
-// td [Style [Color "red"]] [if sugg.IsObsolete then str "obsolete"]
+// td [Style [Color ""]] [if sugg.IsObsolete then str "obsolete"]
// td [Style [FontWeight "light"]] [small [] [str sugg.Accession]]
// ])
// |> List.ofArray
@@ -43,79 +43,104 @@ open Fable.Core
open Fable.Core.JsInterop
let simpleSearchComponent (model:Model) (dispatch: Msg -> unit) =
- Field.div [] [
-
- Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Ontology term search"]
- br []
-
- AutocompleteSearch.autocompleteTermSearchComponentOfParentOntology
- dispatch
- model.SiteStyleState.ColorMode
- model
- "Start typing to search for terms"
- (Some Size.IsLarge)
- (AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState)
-
- Field.div [][
- Switch.switch [
- Switch.Color IsSuccess
- Switch.IsOutlined
- Switch.Id "switch-1"
- Switch.Checked model.TermSearchState.SearchByParentOntology
- Switch.OnChange (fun e ->
- ToggleSearchByParentOntology |> TermSearch |> dispatch
- // this one is ugly, what it does is: Do the related search after toggling directed search (by parent ontology) of/on.
- ((AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState).OnInputChangeMsg model.TermSearchState.TermSearchText) |> dispatch
- )
- ] [ str "Use related term directed search." ]
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "15px 15px 0 0"
+ Padding "0.25rem 1rem"
+ MarginBottom "1rem"
]
-
- //Control.div [] [
-
- //Input.input [ Input.Placeholder "Start typing to start search"
- // Input.Size Size.IsLarge
- // Input.Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]
- // Input.OnChange (fun e -> e.Value |> SearchTermTextChange |> Simple |> TermSearch |> dispatch)
- // Input.Value model.TermSearchState.Simple.TermSearchText
- // ]
- //AutocompleteDropdown.autocompleteDropdownComponent
- // model
- // dispatch
- // model.TermSearchState.Simple.ShowSuggestions
- // model.TermSearchState.Simple.HasSuggestionsLoading
- // (createTermSuggestions model dispatch)
- //]
- Help.help [] [str "When applicable, search for an ontology term to fill into the selected field(s)"]
- ]
-
+ ] [
+ Field.div [] [
+ AutocompleteSearch.autocompleteTermSearchComponentOfParentOntology
+ dispatch
+ model.SiteStyleState.ColorMode
+ model
+ "Start typing to search for terms"
+ (Some Size.IsLarge)
+ (AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState)
+
+ div [][
+ Switch.switchInline [
+ Switch.Color IsPrimary
+ Switch.Id "switch-1"
+ Switch.Checked model.TermSearchState.SearchByParentOntology
+ Switch.OnChange (fun e ->
+ ToggleSearchByParentOntology |> TermSearch |> dispatch
+ let _ =
+ let inpId = (AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState).InputId
+ let e = Browser.Dom.document.getElementById inpId
+ e.focus()
+ ()
+ // this one is ugly, what it does is: Do the related search after toggling directed search (by parent ontology) of/on.
+ //((AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState).OnInputChangeMsg model.TermSearchState.TermSearchText) |> dispatch
+ )
+ ] [ str "Use related term directed search." ]
+
+ Help.help [ Help.Props [Style [Display DisplayOptions.Inline; Float FloatOptions.Right]] ][
+ a [OnClick (fun _ -> ToggleModal (AutocompleteSearch.AutocompleteParameters.ofTermSearchState model.TermSearchState).ModalId |> AdvancedSearch |> dispatch)] [
+ str "Use advanced search"
+ ]
+ ]
+ ]
-let termSearchComponent (model : Model) (dispatch : Msg -> unit) =
- form [
- OnSubmit (fun e -> e.preventDefault())
- OnKeyDown (fun k -> if (int k.which) = 13 then k.preventDefault())
- ] [
- simpleSearchComponent model dispatch
+ //Control.div [] [
+
+ //Input.input [ Input.Placeholder "Start typing to start search"
+ // Input.Size Size.IsLarge
+ // Input.Props [ExcelColors.colorControl model.SiteStyleState.ColorMode]
+ // Input.OnChange (fun e -> e.Value |> SearchTermTextChange |> Simple |> TermSearch |> dispatch)
+ // Input.Value model.TermSearchState.Simple.TermSearchText
+ // ]
+ //AutocompleteDropdown.autocompleteDropdownComponent
+ // model
+ // dispatch
+ // model.TermSearchState.Simple.ShowSuggestions
+ // model.TermSearchState.Simple.HasSuggestionsLoading
+ // (createTermSuggestions model dispatch)
+ //]
+ ]
// Fill selection confirmation
Field.div [] [
Control.div [] [
- Button.button [
+ Button.a [
let hasText = model.TermSearchState.TermSearchText.Length > 0
if hasText then
Button.CustomClass "is-success"
Button.IsActive true
else
Button.CustomClass "is-danger"
- Button.Props [Disabled true]
+ Button.Props [
+ Disabled (not hasText)
+ //Style [Flex "1"]
+ ]
Button.IsFullWidth
- Button.OnClick (fun _ -> (model.TermSearchState.TermSearchText,model.TermSearchState.SelectedTerm) |> pipeNameTuple2 FillSelection |> ExcelInterop |> dispatch)
+ Button.OnClick (fun _ ->
+ if hasText then
+ (model.TermSearchState.TermSearchText,model.TermSearchState.SelectedTerm) |> pipeNameTuple2 FillSelection |> ExcelInterop |> dispatch
+ )
] [
str "Fill selected cells with this term"
-
]
]
]
+ ]
+
+
+
+let termSearchComponent (model : Model) (dispatch : Msg -> unit) =
+ form [
+ OnSubmit (fun e -> e.preventDefault())
+ OnKeyDown (fun k -> if (int k.which) = 13 then k.preventDefault())
+ ] [
+
+ Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]][ str "Ontology term search"]
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [str "Search for an ontology term to fill into the selected field(s)"]
+
+ simpleSearchComponent model dispatch
//if model.TermSearchState.SelectedTerm.IsNone then
// str "No Term Selected"
diff --git a/src/Client/Views/ValidationView.fs b/src/Client/Views/ValidationView.fs
index 2bcf9eea..8a61d69e 100644
--- a/src/Client/Views/ValidationView.fs
+++ b/src/Client/Views/ValidationView.fs
@@ -9,13 +9,15 @@ open Browser
open Browser.MediaQueryList
open Browser.MediaQueryListExtensions
+open Shared
+
open ExcelColors
open Model
open Messages
open CustomComponents
-open OfficeInterop.Types.XmlValidationTypes
+open OfficeInterop.Types.Xml.ValidationTypes
let columnListElement ind (columnValidation:ColumnValidation) (model:Model) dispatch =
let isActive =
@@ -25,11 +27,15 @@ let columnListElement ind (columnValidation:ColumnValidation) (model:Model) disp
| _ ->
false
tr [
- Class "nonSelectText"
+ /// Remove validationTableEle when active to remove on-hover color change to really light grey.
+ if isActive then
+ Class "nonSelectText"
+ else
+ Class "nonSelectText validationTableEle"
Style [
Cursor "pointer"
UserSelect UserSelectOptions.None
- if model.ValidationState.DisplayedOptionsId.IsSome && model.ValidationState.DisplayedOptionsId.Value = ind then
+ if isActive then
BackgroundColor model.SiteStyleState.ColorMode.ElementBackground
Color "white"
]
@@ -46,13 +52,13 @@ let columnListElement ind (columnValidation:ColumnValidation) (model:Model) disp
if columnValidation.Importance.IsSome then
str (string columnValidation.Importance)
else
- str "X"
+ str "-"
]
td [][
if columnValidation.ValidationFormat.IsSome then
str columnValidation.ValidationFormat.Value.toReadableString
else
- str "X"
+ str "-"
]
td [][
Icon.icon [][
@@ -92,7 +98,7 @@ let checkradioElement (id:int) (contentTypeOpt:ContentType option) (columnValida
//][
// str contentType
//]
- let isDisabled = (contentType = "Ontology [None]")
+ let isDisabled = (contentType = "Ontology [None]" || contentType = "Unit [None]")
div [Style [Position PositionOptions.Relative]] [
input [
Type "checkbox";
@@ -122,8 +128,20 @@ let checkradioElement (id:int) (contentTypeOpt:ContentType option) (columnValida
][]
]
-let checkradioList (ind:int) (hasOntology:string option) colVal model dispatch =
- let ontologyContent = if hasOntology.IsSome then ContentType.OntologyTerm hasOntology.Value |> Some else ContentType.OntologyTerm "None" |> Some
+let findOntology (columnValidation:ColumnValidation) (buildingBlocks:OfficeInterop.Types.BuildingBlockTypes.BuildingBlock []) =
+ buildingBlocks
+ |> Array.find (fun x -> x.MainColumn.Header.Value.Header = columnValidation.ColumnHeader)
+ |> fun x -> x.MainColumn.Header.Value.Ontology
+
+let checkradioList (ind:int) colVal model dispatch =
+ let hasOntology = findOntology colVal model.ValidationState.ActiveTableBuildingBlocks
+
+ let unitContent =
+ if colVal.Unit.IsSome then ContentType.UnitTerm colVal.Unit.Value |> Some else ContentType.UnitTerm "None" |> Some
+
+ let ontologyContent =
+ if hasOntology.IsSome then ContentType.OntologyTerm hasOntology.Value.Name |> Some else ContentType.OntologyTerm "None" |> Some
+
[
checkradioElement ind None colVal model dispatch
@@ -134,15 +152,12 @@ let checkradioList (ind:int) (hasOntology:string option) colVal model dispatch =
checkradioElement ind (Some ContentType.Url) colVal model dispatch
checkradioElement ind ontologyContent colVal model dispatch
+ checkradioElement ind unitContent colVal model dispatch
]
-let findOntology (columnValidation:ColumnValidation) (buildingBlocks:OfficeInterop.Types.BuildingBlockTypes.BuildingBlock []) =
- buildingBlocks
- |> Array.find (fun x -> x.MainColumn.Header.Value.Header = columnValidation.ColumnHeader)
- |> fun x -> x.MainColumn.Header.Value.Ontology
-let sliderElements id format dispatch =
- let defaultSliderVal = string (if format.Importance.IsSome then format.Importance.Value else 0)
+let sliderElements id columnValidation model dispatch =
+ let defaultSliderVal = string (if columnValidation.Importance.IsSome then columnValidation.Importance.Value else 0)
let sliderId = sprintf "importanceSlider%i" id
let outputSliderId = sprintf "outputForImportanceSlider%i" id
[
@@ -158,9 +173,17 @@ let sliderElements id format dispatch =
// this is used to quickly update the label element to the right of the slider with t he new value
let sliderEle = Browser.Dom.document.getElementById(outputSliderId)
let _ = sliderEle.textContent <- (if e.Value = "0" then "None" else e.Value)
- ()
+ /// Previously this appeared rather laggy, but now it seems to work fine.
+ let nextColumnValidation = {
+ columnValidation with
+ Importance = if e.Value = "0" then None else int e.Value |> Some
+ }
+ let nextTableValidation =
+ updateTableValidationByColValidation model nextColumnValidation
+ UpdateTableValidationScheme nextTableValidation |> Validation |> dispatch
+ //()
)
- Slider.Color IsSuccess
+ Slider.Color IsPrimary
Slider.ValueOrDefault defaultSliderVal
]
output [Props.HtmlFor sliderId; Id outputSliderId; Style [TextOverflow "unset"]] [
@@ -170,46 +193,50 @@ let sliderElements id format dispatch =
open Fable.Core.JsInterop
-/// Submit button to apply slider changes to model. If slider.OnChange would dispatch message the app would suffer from lag spikes.
-let submitButton ind columnValidation (model:Model) dispatch =
- Button.span [
- Button.Color IsSuccess
- Button.IsOutlined
- Button.OnClick (
- fun e ->
- let sliderId = sprintf "importanceSlider%i" ind
- let sliderEle = Browser.Dom.document.getElementById(sliderId)
- let impoValue = sliderEle?value
- printfn "%s" impoValue
- let nextColumnValidation = {
- columnValidation with
- Importance = if impoValue = "0" then None else int impoValue |> Some
- }
- let nextTableValidation =
- updateTableValidationByColValidation model nextColumnValidation
- UpdateTableValidationScheme nextTableValidation |> Validation |> dispatch
- )
- ][
- str "Submit Importance"
- ]
+
+///// Submit button to apply slider changes to model. If slider.OnChange would dispatch message the app would suffer from lag spikes.
+///// EDIT: This problem appearently disappeared. For now we will test it with only slider
+//let submitButton ind (columnValidation:ColumnValidation) (model:Model) dispatch =
+// Button.span [
+// Button.IsFullWidth
+// Button.Color IsPrimary
+// //Button.IsStatic isSame
+// Button.OnClick (
+// fun e ->
+// let sliderId = sprintf "importanceSlider%i" ind
+// let sliderEle = Browser.Dom.document.getElementById(sliderId)
+// let impoValue = sliderEle?value
+// let nextColumnValidation = {
+// columnValidation with
+// Importance = if impoValue = "0" then None else int impoValue |> Some
+// }
+// let nextTableValidation =
+// updateTableValidationByColValidation model nextColumnValidation
+// UpdateTableValidationScheme nextTableValidation |> Validation |> dispatch
+// )
+// ][
+// str "Submit Importance"
+// ]
let optionsElement ind (columnValidation:ColumnValidation) (model:Model) dispatch =
- let hasOntology = findOntology columnValidation model.ValidationState.ActiveTableBuildingBlocks
let isVisible =
match model.ValidationState.DisplayedOptionsId with
| Some id when id = ind ->
- DisplayOptions.Block
+ true
| _ ->
- DisplayOptions.None
+ false
tr [][
td [
ColSpan 4
- Style [Padding "0"]
+ Style [
+ Padding "0";
+ if isVisible then BorderBottom (sprintf "2px solid %s" ExcelColors.colorfullMode.Accent)
+ ]
][
Box.box' [
Props [
Style [
- Display isVisible
+ Display (if isVisible then DisplayOptions.Block else DisplayOptions.None)
Width "100%"
]
]
@@ -220,7 +247,7 @@ let optionsElement ind (columnValidation:ColumnValidation) (model:Model) dispatc
Help.help [Help.Props [Style [MarginBottom "1rem"]]][str "Select the specific type of content for the selected column."]
- yield! checkradioList ind hasOntology columnValidation model dispatch
+ yield! checkradioList ind columnValidation model dispatch
]
Column.column [][
@@ -228,41 +255,27 @@ let optionsElement ind (columnValidation:ColumnValidation) (model:Model) dispatc
Help.help [][str "Define how important it is to fill in the column correctly."]
- yield! sliderElements ind columnValidation dispatch
+ yield! sliderElements ind columnValidation model dispatch
- submitButton ind columnValidation model dispatch
+ //submitButton ind columnValidation model dispatch
]
]
]
]
]
-
-let validationComponent model dispatch =
- form [
- OnSubmit (fun e -> e.preventDefault())
- // https://keycode.info/
- OnKeyDown (fun k -> if k.key = "Enter" then k.preventDefault())
- ] [
- Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [ str "Table Validation"]
-
- //Help.help [Help.Color IsDanger] [
- // str "This is currently a preview feature and is still missing a lot of features. See "
- // a [Href "https://github.com/nfdi4plants/Swate/issues/45"; Target "_Blank"][str "here"]
- // str " for the newst updates on this feature."
- //]
-
+let validationElements (model:Model) dispatch =
+ div [
+ Style [
+ BorderLeft (sprintf "5px solid %s" NFDIColors.Mint.Base)
+ //BorderRadius "15px 15px 0 0"
+ Padding "0.25rem 1rem"
+ MarginBottom "1rem"
+ ]
+ ][
Field.div [Field.Props [Style [
Width "100%"
]]] [
- Button.a [
- Button.Color Color.IsInfo
- Button.IsFullWidth
- Button.OnClick (fun e -> PipeActiveAnnotationTable GetTableValidationXml |> ExcelInterop |> dispatch )
- Button.Props [Style [MarginBottom "1rem"]]
- ] [
- str "Update Table Representation"
- ]
// Worksheet - annotationTable name - DateTime of saving
div [
Id "TableRepresentationInfoHeader"
@@ -272,13 +285,20 @@ let validationComponent model dispatch =
header?style?transition <- "unset"
)
][
- b [][
- str model.ValidationState.TableValidationScheme.WorksheetName
- ]
+ b [][ str model.ValidationState.TableValidationScheme.WorksheetName ]
str " - "
str model.ValidationState.TableValidationScheme.TableName
str " - "
str ( model.ValidationState.TableValidationScheme.DateTime.ToString("yyyy-MM-dd HH:mm") )
+ str " - "
+ str (
+ sprintf "Swate %s" (
+ if model.ValidationState.TableValidationScheme.SwateVersion = "" then
+ model.PersistentStorageState.AppVersion
+ else
+ model.ValidationState.TableValidationScheme.SwateVersion
+ )
+ )
]
Table.table [ Table.IsHoverable; Table.IsFullWidth ] [
thead [ ] [
@@ -298,6 +318,13 @@ let validationComponent model dispatch =
]
]
]
+
+ /// Show warning if no validation format was found
+ if model.ValidationState.TableValidationScheme.SwateVersion = "" then
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color NFDIColors.Red.Lighter10]]][
+ str """No validation format for this table found! Hit "Add validation to workbook" to add a validation format for the active annotation table."""
+ ]
+
// Submit new validation scheme. This will write custom xml into the workbook.
Button.a [
Button.Color Color.IsSuccess
@@ -308,9 +335,47 @@ let validationComponent model dispatch =
header?style?opacity <- 0
WriteTableValidationToXml (model.ValidationState.TableValidationScheme, model.PersistentStorageState.AppVersion) |> ExcelInterop |> dispatch
)
- Button.Props [Style [MarginBottom "1rem"]]
+ Button.Props [Tooltip.dataTooltip "Write validation info to excel worksheet."]
+ Button.CustomClass (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
] [
str "Add validation to workbook"
]
]
+ ]
+
+let validationComponent model dispatch =
+ form [
+ OnSubmit (fun e -> e.preventDefault())
+ // https://keycode.info/
+ OnKeyDown (fun k -> if k.key = "Enter" then k.preventDefault())
+ ] [
+ Label.label [Label.Size Size.IsLarge; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [ str "Table Validation"]
+
+ Help.help [][
+ str "Display a table representation and add information to later validate values in the table according to their respective column."
+ ]
+
+ Button.a [
+ Button.Color Color.IsInfo
+ Button.IsFullWidth
+ Button.OnClick (fun e -> PipeActiveAnnotationTable GetTableValidationXml |> ExcelInterop |> dispatch )
+ Button.CustomClass (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
+ Button.Props [Style [Margin "1rem 0"]; Tooltip.dataTooltip "Get validation info for currently shown annotation table."]
+ ] [
+ str "Update table representation"
+ ]
+
+ Label.label [Label.Size Size.IsSmall; Label.Props [Style [Color model.SiteStyleState.ColorMode.Accent]]] [
+ str """Adjust current Swate table validation. """
+ span [
+ Class (Tooltip.ClassName + " " + Tooltip.IsTooltipBottom + " " + Tooltip.IsMultiline)
+ Tooltip.dataTooltip """When hitting "Add validation to workbook" this information will be saved as part of the workbook."""
+ Style [Color NFDIColors.LightBlue.Base; MarginLeft ".5rem"]
+ ][
+ Fa.i [ Fa.Solid.InfoCircle ][]
+ ]
+ ]
+
+ validationElements model dispatch
+
]
\ No newline at end of file
diff --git a/src/Client/index.html b/src/Client/index.html
index c815a066..bad6701e 100644
--- a/src/Client/index.html
+++ b/src/Client/index.html
@@ -1,16 +1,17 @@
- SAFE Template
+ Swate
-
-
+
+