diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 7917852..5c1c4a9 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -2,12 +2,6 @@
"version": 1,
"isRoot": true,
"tools": {
- "fake-cli": {
- "version": "5.20.4",
- "commands": [
- "fake"
- ]
- },
"paket": {
"version": "6.1.3",
"commands": [
@@ -15,4 +9,4 @@
]
}
}
-}
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index e496c0e..2940fdf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,3 +45,5 @@ yarn-error\.log
dist/
.ionide/
+
+TestResults/
\ No newline at end of file
diff --git a/build.fsx b/build.fsx
index 1d1d8ba..47e4583 100644
--- a/build.fsx
+++ b/build.fsx
@@ -1,58 +1,27 @@
-#r "paket: groupref netcorebuild //"
-#load ".fake/build.fsx/intellisense.fsx"
-#if !FAKE
-#r "Facades/netstandard"
-#r "netstandard"
-#endif
-
-#nowarn "52"
+#r "nuget: Fun.Build, 0.3.7"
+#r "nuget: Fake.IO.FileSystem, 6.0.0"
+#r "nuget: BlackFox.CommandLine, 1.0.0"
+#r "nuget: Fake.Core.ReleaseNotes, 6.0.0"
+#r "nuget: FsToolkit.ErrorHandling, 4.3.0"
+open Fun.Build
open System
open System.IO
open System.Text.RegularExpressions
open Fake.Core
-open Fake.Core.TargetOperators
-open Fake.DotNet
open Fake.IO
-open Fake.IO.Globbing.Operators
open Fake.IO.FileSystemOperators
-open Fake.Tools
-open Fake.JavaScript
-open Fake.Api
-
-let versionFromGlobalJson : DotNet.CliInstallOptions -> DotNet.CliInstallOptions = (fun o ->
- { o with Version = DotNet.Version (DotNet.getSDKVersionFromGlobalJson()) }
- )
-
-let dotnetSdk = lazy DotNet.install versionFromGlobalJson
-let inline dtntWorkDir wd =
- DotNet.Options.lift dotnetSdk.Value
- >> DotNet.Options.withWorkingDirectory wd
-
-let inline yarnWorkDir (ws : string) (yarnParams : Yarn.YarnParams) =
- { yarnParams with WorkingDirectory = ws }
-
-let root = __SOURCE_DIRECTORY__
-
-module Source =
- let dir = root > "src"
- let projectFile = dir > "Thoth.Json.Giraffe.fsproj"
-
-module Tests =
- let dir = root > "tests"
- let projectFile = dir > "Thoth.Json.Giraffe.Tests.fsproj"
-
-let gitOwner = "thoth-org"
-let repoName = "Thoth.Json.Giraffe"
+open BlackFox.CommandLine
+open FsToolkit.ErrorHandling
module Util =
- let visitFile (visitor: string -> string) (fileName : string) =
+ let visitFile (visitor: string->string) (fileName: string) =
File.ReadAllLines(fileName)
|> Array.map (visitor)
|> fun lines -> File.WriteAllLines(fileName, lines)
- let replaceLines (replacer: string -> Match -> string option) (reg: Regex) (fileName: string) =
+ let replaceLines (replacer: string->Match->string option) (reg: Regex) (fileName: string) =
fileName |> visitFile (fun line ->
let m = reg.Match(line)
if not m.Success
@@ -62,50 +31,12 @@ module Util =
| None -> line
| Some newLine -> newLine)
-// Module to print colored message in the console
-module Logger =
- let consoleColor (fc : ConsoleColor) =
- let current = Console.ForegroundColor
- Console.ForegroundColor <- fc
- { new IDisposable with
- member x.Dispose() = Console.ForegroundColor <- current }
-
- let warn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.DarkYellow in printf "%s" s) str
- let warnfn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.DarkYellow in printfn "%s" s) str
- let error str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.Red in printf "%s" s) str
- let errorfn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.Red in printfn "%s" s) str
-
-let run (cmd:string) dir args =
- Command.RawCommand(cmd, Arguments.OfArgs args)
- |> CreateProcess.fromCommand
- |> CreateProcess.withWorkingDirectory dir
- |> Proc.run
- |> ignore
-
-Target.create "Clean" (fun _ ->
- !! "src/**/bin"
- ++ "src/**/obj"
- ++ "tests/**/bin"
- ++ "tests/**/obj"
- ++ "temp/"
- |> Shell.cleanDirs
-)
-
-Target.create "YarnInstall"(fun _ ->
- Yarn.install id
-)
-
-Target.create "DotnetRestore" (fun _ ->
- DotNet.restore (dtntWorkDir Source.dir) ""
- // DotNet.restore (dtntWorkDir Tests.dir) ""
-)
-
-let needsPublishing (versionRegex: Regex) (newVersion: string) projFile =
+// Build a NuGet package
+let needsPublishing (versionRegex: Regex) (releaseNotes: ReleaseNotes.ReleaseNotes) projFile =
printfn "Project: %s" projFile
- if newVersion.ToUpper().EndsWith("NEXT")
- || newVersion.ToUpper().EndsWith("UNRELEASED")
+ if releaseNotes.NugetVersion.ToUpper().EndsWith("NEXT")
then
- Logger.warnfn "Version marked as unreleased version in Changelog, don't publish yet."
+ printfn "Version in Release Notes ends with NEXT, don't publish yet."
false
else
File.ReadLines(projFile)
@@ -115,117 +46,104 @@ let needsPublishing (versionRegex: Regex) (newVersion: string) projFile =
|> function
| None -> failwith "Couldn't find version in project file"
| Some m ->
- let sameVersion = m.Groups.[1].Value = newVersion
+ let sameVersion = m.Groups.[1].Value = releaseNotes.NugetVersion
if sameVersion then
- Logger.warnfn "Already version %s, no need to publish." newVersion
+ printfn "Already version %s, no need to publish." releaseNotes.NugetVersion
not sameVersion
-let pushNuget (newVersion: string) (projFile: string) =
- let versionRegex = Regex("(.*?)", RegexOptions.IgnoreCase)
+let toPackageReleaseNotes (notes: string list) =
+ String.Join("\n * ", notes)
+ |> (fun txt -> txt.Replace("\"", "\\\""))
+
+let createPublishNugetStageForProject (projectFile : string) =
+ let projectDir = IO.Path.GetDirectoryName(projectFile)
+
+ stage $"Publish NuGet for {projectFile}" {
+ workingDir projectDir
+
+ run (fun ctx -> asyncResult {
+ let nugetKey = ctx.GetEnvVar "NUGET_KEY"
+ let releaseNotes = projectDir > "RELEASE_NOTES.md" |> ReleaseNotes.load
+ let versionRegex = Regex("(.*?)", RegexOptions.IgnoreCase)
+
+ do! ctx.RunCommand "pwd"
+
+ if needsPublishing versionRegex releaseNotes projectFile then
+ (versionRegex, projectFile)
+ ||> Util.replaceLines (fun line _ ->
+ versionRegex.Replace(line, ""+releaseNotes.NugetVersion+"")
+ |> Some
+ )
+
+ let! dotnetPackOutput =
+ CmdLine.empty
+ |> CmdLine.appendRaw "dotnet"
+ |> CmdLine.appendRaw "pack"
+ |> CmdLine.appendPrefix "-c" "Release"
+ |> CmdLine.appendRaw $"""/p:PackageReleaseNotes="{toPackageReleaseNotes releaseNotes.Notes}" """
+ |> CmdLine.toString
+ |> ctx.RunCommandCaptureOutput
+
+ let m = Regex.Match(dotnetPackOutput, ".*'(?.*\.(?.*\..*\..*)\.nupkg)'")
+
+ if not m.Success then
+ failwithf "Couldn't find NuGet package in output: %s" dotnetPackOutput
+
+ let nupkgPath = m.Groups.["nupkg_path"].Value
+
+ do! CmdLine.empty
+ |> CmdLine.appendRaw "dotnet"
+ |> CmdLine.appendRaw "nuget"
+ |> CmdLine.appendRaw "push"
+ |> CmdLine.appendRaw nupkgPath
+ |> CmdLine.appendPrefix "--api-key" nugetKey
+ |> CmdLine.appendPrefix "--source" "nuget.org"
+ |> CmdLine.toString
+ |> ctx.RunCommand
+ }
+ )
+ }
- let nugetKey =
- match Environment.environVarOrNone "NUGET_KEY" with
- | Some nugetKey -> nugetKey
- | None -> failwith "The Nuget API key must be set in a NUGET_KEY environmental variable"
- let needsPublishing = needsPublishing versionRegex newVersion projFile
+module Stages =
- (versionRegex, projFile) ||> Util.replaceLines (fun line _ ->
- versionRegex.Replace(line, "" + newVersion + "") |> Some)
+ let clean =
+ stage "Clean" {
+ run (fun _ ->
+ [
+ "src/bin"
+ "src/obj"
+ "tests/bin"
+ "tests/obj"
+ ]
+ |> Shell.cleanDirs
+ )
+ }
- DotNet.pack (fun p ->
- DotNet.Options.lift dotnetSdk.Value p
- )
- projFile
-
- let projDir = Path.GetDirectoryName(projFile)
-
- let file =
- Directory.GetFiles(projDir > "bin" > "Release", "*.nupkg")
- |> Array.find (fun nupkg -> nupkg.Contains(newVersion))
-
- if needsPublishing then
- run
- "dotnet"
- root
- [
- "paket"
- "push"
- "--url"
- "https://www.nuget.org/api/v2/package"
- "--api-key"
- nugetKey
- file
- ]
-
-let versionRegex = Regex("^## ?\\[?v?([\\w\\d.-]+\\.[\\w\\d.-]+[a-zA-Z0-9])\\]?", RegexOptions.IgnoreCase)
-
-let getLastVersion () =
- File.ReadLines("CHANGELOG.md")
- |> Seq.tryPick (fun line ->
- let m = versionRegex.Match(line)
- if m.Success then Some m else None)
- |> function
- | None -> failwith "Couldn't find version in changelog file"
- | Some m ->
- m.Groups.[1].Value
-
-let isPreRelease (version : string) =
- let regex = Regex(".*(alpha|beta|rc).*", RegexOptions.IgnoreCase)
- regex.IsMatch(version)
-
-let getNotes (version : string) =
- File.ReadLines("CHANGELOG.md")
- |> Seq.skipWhile(fun line ->
- let m = versionRegex.Match(line)
-
- if m.Success then
- m.Groups.[1].Value <> version
- else
- true
- )
- // Remove the version line
- |> Seq.skip 1
- // Take all until the next version line
- |> Seq.takeWhile (fun line ->
- let m = versionRegex.Match(line)
- not m.Success
- )
-
-Target.create "Test" (fun _ ->
- DotNet.test id Tests.projectFile
-)
-
-Target.create "Publish" (fun _ ->
- let version = getLastVersion()
- pushNuget version Source.projectFile
-)
-
-Target.create "Release" (fun _ ->
- let version = getLastVersion()
-
- Git.Staging.stageAll root
- let commitMsg = sprintf "Release version %s" version
- Git.Commit.exec root commitMsg
- Git.Branches.push root
-
- let token =
- match Environment.environVarOrDefault "GITHUB_TOKEN" "" with
- | s when not (System.String.IsNullOrWhiteSpace s) -> s
- | _ -> failwith "The Github token must be set in a GITHUB_TOKEN environmental variable"
-
- GitHub.createClientWithToken token
- |> GitHub.draftNewRelease gitOwner repoName version (isPreRelease version) (getNotes version)
- |> GitHub.publishDraft
- |> Async.RunSynchronously
-
-)
-
-"Clean"
- ==> "YarnInstall"
- ==> "DotnetRestore"
- ==> "Test"
- ==> "Publish"
- ==> "Release"
-
-Target.runOrList ()
+ let test =
+ stage "Tests" {
+ workingDir "tests"
+ run "dotnet test"
+ }
+
+pipeline "Test" {
+
+ Stages.clean
+ noPrefixForStep
+ Stages.test
+
+ runIfOnlySpecified
+}
+
+pipeline "Publish" {
+ whenEnvVar "NUGET_KEY"
+
+ Stages.clean
+ Stages.test
+
+ createPublishNugetStageForProject "./src/Thoth.Json.Giraffe.fsproj"
+
+ runIfOnlySpecified
+}
+
+tryPrintPipelineCommandHelp ()
diff --git a/fake.cmd b/fake.cmd
deleted file mode 100644
index 6a36f1a..0000000
--- a/fake.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-dotnet tool restore
-dotnet fake %*
diff --git a/fake.sh b/fake.sh
deleted file mode 100755
index 656ab02..0000000
--- a/fake.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-dotnet tool restore
-dotnet fake $@
diff --git a/package.json b/package.json
deleted file mode 100644
index c806c96..0000000
--- a/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "private": true,
- "devDependencies": {
- "chalk": "^2.4.2",
- "changelog-parser": "^2.7.0",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.7",
- "shelljs": "^0.8.5",
- "simple-git": "^3.16.0"
- }
-}
diff --git a/paket.dependencies b/paket.dependencies
index 9a2c04d..f35f0ec 100644
--- a/paket.dependencies
+++ b/paket.dependencies
@@ -8,19 +8,3 @@ nuget Expecto
nuget Microsoft.AspNetCore.TestHost
nuget Microsoft.NET.Test.Sdk
nuget YoloDev.Expecto.TestSdk
-
-group netcorebuild
- source https://www.nuget.org/api/v2
- framework: netstandard2.0
-
- nuget NETStandard.Library.NETFramework
- nuget Fake.DotNet.Cli
- nuget Fake.DotNet.Paket
- nuget Fake.Core.Target
- nuget Fake.Core.Process
- nuget Fake.Core.String
- nuget Fake.Core.ReleaseNotes
- nuget Fake.IO.FileSystem
- nuget Fake.Tools.Git
- nuget Fake.JavaScript.Yarn
- nuget Fake.Api.GitHub
diff --git a/paket.lock b/paket.lock
index 04b2de3..430eddb 100644
--- a/paket.lock
+++ b/paket.lock
@@ -619,232 +619,3 @@ NUGET
Expecto (>= 9.0 < 10.0) - restriction: >= netcoreapp2.1
FSharp.Core (>= 4.6) - restriction: >= netcoreapp2.1
System.Collections.Immutable (>= 1.5 < 5.1) - restriction: >= netcoreapp2.1
-
-GROUP netcorebuild
-RESTRICTION: == netstandard2.0
-NUGET
- remote: https://www.nuget.org/api/v2
- BlackFox.VsWhere (1.1)
- FSharp.Core (>= 4.2.3)
- Microsoft.Win32.Registry (>= 4.7)
- Fake.Api.GitHub (5.20.4)
- FSharp.Core (>= 4.7.2)
- Octokit (>= 0.48)
- Fake.Core.CommandLineParsing (5.20.4)
- FParsec (>= 1.1.1)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Context (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Environment (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.FakeVar (5.20.4)
- Fake.Core.Context (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Process (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- System.Collections.Immutable (>= 1.7.1)
- Fake.Core.ReleaseNotes (5.20.4)
- Fake.Core.SemVer (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.SemVer (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.String (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Target (5.20.4)
- Fake.Core.CommandLineParsing (>= 5.20.4)
- Fake.Core.Context (>= 5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Control.Reactive (>= 4.4.2)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Tasks (5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Trace (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Xml (5.20.4)
- Fake.Core.String (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.DotNet.Cli (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.DotNet.MSBuild (>= 5.20.4)
- Fake.DotNet.NuGet (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Mono.Posix.NETStandard (>= 1.0)
- Newtonsoft.Json (>= 12.0.3)
- Fake.DotNet.MSBuild (5.20.4)
- BlackFox.VsWhere (>= 1.1)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- MSBuild.StructuredLogger (>= 2.1.176)
- Fake.DotNet.NuGet (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.SemVer (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Tasks (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.Core.Xml (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- Fake.Net.Http (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Newtonsoft.Json (>= 12.0.3)
- NuGet.Protocol (>= 5.6)
- Fake.DotNet.Paket (5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.DotNet.Cli (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.IO.FileSystem (5.20.4)
- Fake.Core.String (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.JavaScript.Yarn (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Net.Http (5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Tools.Git (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.SemVer (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- FParsec (1.1.1)
- FSharp.Core (>= 4.3.4)
- FSharp.Control.Reactive (5.0.2)
- FSharp.Core (>= 4.7.2)
- System.Reactive (>= 5.0)
- FSharp.Core (5.0.1)
- Microsoft.Build (16.10)
- Microsoft.Build.Framework (16.10)
- System.Security.Permissions (>= 4.7)
- Microsoft.Build.Tasks.Core (16.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.Build.Utilities.Core (>= 16.10)
- Microsoft.NET.StringTools (>= 1.0)
- Microsoft.Win32.Registry (>= 4.3)
- System.CodeDom (>= 4.4)
- System.Collections.Immutable (>= 5.0)
- System.Reflection.Metadata (>= 1.6)
- System.Resources.Extensions (>= 4.6)
- 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.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.NET.StringTools (>= 1.0)
- Microsoft.Win32.Registry (>= 4.3)
- System.Collections.Immutable (>= 5.0)
- System.Configuration.ConfigurationManager (>= 4.7)
- System.Security.Permissions (>= 4.7)
- System.Text.Encoding.CodePages (>= 4.0.1)
- Microsoft.NET.StringTools (1.0)
- System.Memory (>= 4.5.4)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- Microsoft.NETCore.Platforms (5.0.2)
- 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.500)
- Microsoft.Build (>= 16.4)
- Microsoft.Build.Framework (>= 16.4)
- Microsoft.Build.Tasks.Core (>= 16.4)
- Microsoft.Build.Utilities.Core (>= 16.4)
- NETStandard.Library.NETFramework (2.0.0-preview2-25405-01)
- Newtonsoft.Json (13.0.1)
- NuGet.Common (5.9.1)
- NuGet.Frameworks (>= 5.9.1)
- NuGet.Configuration (5.9.1)
- NuGet.Common (>= 5.9.1)
- System.Security.Cryptography.ProtectedData (>= 4.4)
- NuGet.Frameworks (5.9.1)
- NuGet.Packaging (5.9.1)
- Newtonsoft.Json (>= 9.0.1)
- NuGet.Configuration (>= 5.9.1)
- NuGet.Versioning (>= 5.9.1)
- System.Security.Cryptography.Cng (>= 5.0)
- System.Security.Cryptography.Pkcs (>= 5.0)
- NuGet.Protocol (5.9.1)
- NuGet.Packaging (>= 5.9.1)
- NuGet.Versioning (5.9.1)
- Octokit (0.50)
- System.Buffers (4.5.1)
- System.CodeDom (5.0)
- System.Collections.Immutable (5.0)
- System.Memory (>= 4.5.4)
- System.Configuration.ConfigurationManager (5.0)
- System.Security.Cryptography.ProtectedData (>= 5.0)
- System.Security.Permissions (>= 5.0)
- System.Formats.Asn1 (5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- 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.Metadata (5.0)
- System.Collections.Immutable (>= 5.0)
- 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.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.CodePages (5.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- System.Threading.Tasks.Dataflow (5.0)
- System.Threading.Tasks.Extensions (4.5.4)
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
diff --git a/src/ThothSerializer.fs b/src/ThothSerializer.fs
index 459f3c7..9919846 100644
--- a/src/ThothSerializer.fs
+++ b/src/ThothSerializer.fs
@@ -95,6 +95,7 @@ type ThothSerializer (?caseStrategy : CaseStrategy, ?extra : ExtraCoders, ?skipN
use stream = new MemoryStream(bytes)
use streamReader = new StreamReader(stream)
use jsonReader = new JsonTextReader(streamReader)
+ jsonReader.DateParseHandling <- DateParseHandling.None
let json = JValue.ReadFrom jsonReader
match Decode.fromValue "$" decoder json with
| Ok value -> value
@@ -104,6 +105,7 @@ type ThothSerializer (?caseStrategy : CaseStrategy, ?extra : ExtraCoders, ?skipN
let decoder = Decode.Auto.generateDecoderCached<'T>(?caseStrategy=caseStrategy, ?extra=extra)
use streamReader = new StreamReader(stream)
use jsonReader = new JsonTextReader(streamReader)
+ jsonReader.DateParseHandling <- DateParseHandling.None
let! json = JValue.ReadFromAsync jsonReader
return
match Decode.fromValue "$" decoder json with
diff --git a/tests/ThothSerializer.fs b/tests/ThothSerializer.fs
index d42484f..c9a4872 100644
--- a/tests/ThothSerializer.fs
+++ b/tests/ThothSerializer.fs
@@ -1,6 +1,7 @@
module Tests.ThothSerializer
open System
+open System.IO
open System.Net.Http
open Microsoft.AspNetCore.Builder
@@ -175,4 +176,52 @@ let tests =
Expect.stringStarts content "Error while deserializing" "Deserialization exception handling failure"
}
+
+ testTask "DeserializeDateTypeStringAsString" {
+ let s = ThothSerializer() :> Json.ISerializer
+ let actual = s.Deserialize("\"2020-01-01T00:00:00Z\"")
+
+ Expect.equal actual "2020-01-01T00:00:00Z" "Date type string can be deserialized as string"
+ }
+
+ testTask "DeserializeDateTypeStringAsDateTime" {
+ let s = ThothSerializer() :> Json.ISerializer
+ let actual = s.Deserialize("\"2020-01-01T00:00:00Z\"")
+ let expected = DateTime.Parse("2020-01-01T00:00:00Z").ToUniversalTime()
+
+ Expect.equal actual expected "Date type string can be deserialized as DateTime"
+ }
+
+ testTask "DeserializeDateTypeStringFromBytesAsString" {
+ let s = ThothSerializer() :> Json.ISerializer
+ let bytes = System.Text.Encoding.UTF8.GetBytes("\"2020-01-01T00:00:00Z\"")
+ let actual = s.Deserialize(bytes)
+
+ Expect.equal actual "2020-01-01T00:00:00Z" "Date type string can be deserialized as string"
+ }
+
+ testTask "DeserializeDateTypeStringFromBytesAsDateTime" {
+ let s = ThothSerializer() :> Json.ISerializer
+ let bytes = System.Text.Encoding.UTF8.GetBytes("\"2020-01-01T00:00:00Z\"")
+ let actual = s.Deserialize(bytes)
+ let expected = DateTime.Parse("2020-01-01T00:00:00Z").ToUniversalTime()
+
+ Expect.equal actual expected "Date type string can be deserialized as DateTime"
+ }
+
+ testTask "DeserializeDateTypeStringFromStreamAsString" {
+ let s = ThothSerializer() :> Json.ISerializer
+ use stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("\"2020-01-01T00:00:00Z\""))
+ let! actual = s.DeserializeAsync(stream)
+
+ Expect.equal actual "2020-01-01T00:00:00Z" "Date type string can be deserialized as string"
+ }
+ testTask "DeserializeDateTypeStringFromStreamAsDateTime" {
+ let s = ThothSerializer() :> Json.ISerializer
+ use stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("\"2020-01-01T00:00:00Z\""))
+ let! actual = s.DeserializeAsync(stream)
+ let expected = DateTime.Parse("2020-01-01T00:00:00Z").ToUniversalTime()
+
+ Expect.equal actual expected "Date type string can be deserialized as DateTime"
+ }
]
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index ffcfd95..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,561 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@kwsites/file-exists@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
- integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
- dependencies:
- debug "^4.1.1"
-
-"@kwsites/promise-deferred@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
- integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
-
-ajv@^6.5.5:
- version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-asn1@~0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
- integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
- dependencies:
- safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
- integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
- integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
- integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
- integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
- dependencies:
- tweetnacl "^0.14.3"
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
- integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-changelog-parser@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.7.0.tgz#fb307eb8e74617db9aeb00003dc3a51e4e73213f"
- integrity sha512-6fFD5Q/bzVr4jpAbUe07O+/LBbKFG7yZv1EIH61BbvHTQvbUD6izjC4HBrC6sFgoZtQI4KN5QrfJLRSsLj3o3A==
- dependencies:
- line-reader "^0.2.4"
- remove-markdown "^0.2.2"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
- integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
- dependencies:
- delayed-stream "~1.0.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-
-core-util-is@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
- dependencies:
- assert-plus "^1.0.0"
-
-debug@^4.1.1, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-ecc-jsbn@~0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
- integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
- dependencies:
- jsbn "~0.1.0"
- safer-buffer "^2.1.0"
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-extend@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
- integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
- integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
- integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fast-deep-equal@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
- integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
- integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.6"
- mime-types "^2.1.12"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
- dependencies:
- assert-plus "^1.0.0"
-
-glob@^7.0.0:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
- integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
- 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"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
- integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.0:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
- integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
- dependencies:
- ajv "^6.5.5"
- har-schema "^2.0.0"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-interpret@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
- integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
- integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
- integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
- integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
- integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-line-reader@^0.2.4:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/line-reader/-/line-reader-0.2.4.tgz#c4392b587dea38580c9678570e6e8e49fce52622"
- integrity sha1-xDkrWH3qOFgMlnhXDm6OSfzlJiI=
-
-lodash@^4.17.11:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-mime-db@1.40.0:
- version "1.40.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
- integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
-
-mime-types@^2.1.12, mime-types@~2.1.19:
- version "2.1.24"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
- integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
- dependencies:
- mime-db "1.40.0"
-
-minimatch@^3.0.4:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-oauth-sign@~0.9.0:
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
- integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-once@^1.3.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-parse@^1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-psl@^1.1.24, psl@^1.1.28:
- version "1.1.31"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
- integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0, punycode@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@~6.5.2:
- version "6.5.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
- integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
- dependencies:
- resolve "^1.1.6"
-
-remove-markdown@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.2.2.tgz#66b0ceeba9fb77ca9636bb1b0307ce21a32a12a6"
- integrity sha1-ZrDO66n7d8qWNrsbAwfOIaMqEqY=
-
-request-promise-core@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346"
- integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==
- dependencies:
- lodash "^4.17.11"
-
-request-promise-native@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59"
- integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==
- dependencies:
- request-promise-core "1.1.2"
- stealthy-require "^1.1.1"
- tough-cookie "^2.3.3"
-
-request@^2.88.0:
- version "2.88.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
- integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.8.0"
- caseless "~0.12.0"
- combined-stream "~1.0.6"
- extend "~3.0.2"
- forever-agent "~0.6.1"
- form-data "~2.3.2"
- har-validator "~5.1.0"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.19"
- oauth-sign "~0.9.0"
- performance-now "^2.1.0"
- qs "~6.5.2"
- safe-buffer "^5.1.2"
- tough-cookie "~2.4.3"
- tunnel-agent "^0.6.0"
- uuid "^3.3.2"
-
-resolve@^1.1.6:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
- integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
- dependencies:
- path-parse "^1.0.6"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-shelljs@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
- integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-simple-git@^3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.16.0.tgz#421773e24680f5716999cc4a1d60127b4b6a9dec"
- integrity sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==
- dependencies:
- "@kwsites/file-exists" "^1.1.1"
- "@kwsites/promise-deferred" "^1.1.1"
- debug "^4.3.4"
-
-sshpk@^1.7.0:
- version "1.16.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
- integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- bcrypt-pbkdf "^1.0.0"
- dashdash "^1.12.0"
- ecc-jsbn "~0.1.1"
- getpass "^0.1.1"
- jsbn "~0.1.0"
- safer-buffer "^2.0.2"
- tweetnacl "~0.14.0"
-
-stealthy-require@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
- integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-tough-cookie@^2.3.3:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
- integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
- dependencies:
- psl "^1.1.28"
- punycode "^2.1.1"
-
-tough-cookie@~2.4.3:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
- integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
- dependencies:
- psl "^1.1.24"
- punycode "^1.4.1"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
- integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-uuid@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
- integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=