mirror of
https://github.com/Smaug123/WoofWare.Myriad
synced 2025-10-08 13:38:39 +00:00
Compare commits
27 Commits
WoofWare.M
...
WoofWare.M
Author | SHA1 | Date | |
---|---|---|---|
|
8d275f0047 | ||
|
682b12fdb2 | ||
|
325f8634a4 | ||
|
3e5d663544 | ||
|
bb88f80c85 | ||
|
71f26930c6 | ||
|
680728a06e | ||
|
cdc6f2d511 | ||
|
3be487c328 | ||
|
a5f4d169ca | ||
|
ce634efff2 | ||
|
1529dd1fb2 | ||
|
59558b0766 | ||
|
8602894efc | ||
|
51d349b365 | ||
|
120df84bbf | ||
|
603f875a12 | ||
|
2df41555de | ||
|
49e31e52b5 | ||
|
277a186fda | ||
|
129687ec1c | ||
|
c7fea55e28 | ||
|
ded7b32771 | ||
|
b272f8b645 | ||
|
b8d60aec90 | ||
|
0e3510e1e5 | ||
|
8a1edd90d5 |
@@ -3,13 +3,13 @@
|
|||||||
"isRoot": true,
|
"isRoot": true,
|
||||||
"tools": {
|
"tools": {
|
||||||
"fantomas": {
|
"fantomas": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.1",
|
||||||
"commands": [
|
"commands": [
|
||||||
"fantomas"
|
"fantomas"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"fsharp-analyzers": {
|
"fsharp-analyzers": {
|
||||||
"version": "0.28.0",
|
"version": "0.30.0",
|
||||||
"commands": [
|
"commands": [
|
||||||
"fsharp-analyzers"
|
"fsharp-analyzers"
|
||||||
]
|
]
|
||||||
|
26
.github/workflows/dotnet.yaml
vendored
26
.github/workflows/dotnet.yaml
vendored
@@ -29,7 +29,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -50,7 +50,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -82,7 +82,7 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -116,7 +116,7 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -129,7 +129,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -142,7 +142,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -156,7 +156,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
fetch-depth: 0 # so that NerdBank.GitVersioning has access to history
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -254,7 +254,7 @@ jobs:
|
|||||||
name: nuget-package-attribute
|
name: nuget-package-attribute
|
||||||
path: packed
|
path: packed
|
||||||
- name: Attest Build Provenance
|
- name: Attest Build Provenance
|
||||||
uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2.1.0
|
uses: actions/attest-build-provenance@c074443f1aee8d4aeeae555aebba3282517141b2 # v2.2.3
|
||||||
with:
|
with:
|
||||||
subject-path: "packed/*.nupkg"
|
subject-path: "packed/*.nupkg"
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ jobs:
|
|||||||
name: nuget-package-plugin
|
name: nuget-package-plugin
|
||||||
path: packed
|
path: packed
|
||||||
- name: Attest Build Provenance
|
- name: Attest Build Provenance
|
||||||
uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2.1.0
|
uses: actions/attest-build-provenance@c074443f1aee8d4aeeae555aebba3282517141b2 # v2.2.3
|
||||||
with:
|
with:
|
||||||
subject-path: "packed/*.nupkg"
|
subject-path: "packed/*.nupkg"
|
||||||
|
|
||||||
@@ -289,7 +289,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -322,7 +322,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v30
|
uses: cachix/install-nix-action@v31
|
||||||
with:
|
with:
|
||||||
extra_nix_config: |
|
extra_nix_config: |
|
||||||
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
|
||||||
|
2
.github/workflows/flake_update.yaml
vendored
2
.github/workflows/flake_update.yaml
vendored
@@ -34,7 +34,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create token
|
- name: Create token
|
||||||
id: generate-token
|
id: generate-token
|
||||||
uses: actions/create-github-app-token@v1
|
uses: actions/create-github-app-token@v2
|
||||||
with:
|
with:
|
||||||
# https://github.com/actions/create-github-app-token/issues/136
|
# https://github.com/actions/create-github-app-token/issues/136
|
||||||
app-id: ${{ secrets.APP_ID }}
|
app-id: ${{ secrets.APP_ID }}
|
||||||
|
@@ -11,6 +11,10 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="myriad.toml"/>
|
<None Include="myriad.toml"/>
|
||||||
|
<Compile Include="JsonParseNullness.fs" />
|
||||||
|
<Compile Include="GeneratedJsonParseNullness.fs">
|
||||||
|
<MyriadFile>JsonParseNullness.fs</MyriadFile>
|
||||||
|
</Compile>
|
||||||
<Compile Include="AssemblyInfo.fs" />
|
<Compile Include="AssemblyInfo.fs" />
|
||||||
<Compile Include="RecordFile.fs"/>
|
<Compile Include="RecordFile.fs"/>
|
||||||
<Compile Include="GeneratedRecord.fs">
|
<Compile Include="GeneratedRecord.fs">
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -71,6 +71,7 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
@@ -84,6 +85,7 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
@@ -109,6 +111,7 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -201,7 +204,15 @@ module ToGetExtensionMethodJsonParseExtension =
|
|||||||
|
|
||||||
/// Parse from a JSON node.
|
/// Parse from a JSON node.
|
||||||
static member jsonParse (node : System.Text.Json.Nodes.JsonNode) : ToGetExtensionMethod =
|
static member jsonParse (node : System.Text.Json.Nodes.JsonNode) : ToGetExtensionMethod =
|
||||||
let arg_20 = System.Numerics.BigInteger.Parse (node.["whiskey"].ToJsonString ())
|
let arg_20 =
|
||||||
|
let v = node.["whiskey"]
|
||||||
|
|
||||||
|
System.Numerics.BigInteger.Parse (
|
||||||
|
(match v with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v)
|
||||||
|
.ToJsonString ()
|
||||||
|
)
|
||||||
|
|
||||||
let arg_19 =
|
let arg_19 =
|
||||||
(match node.["victor"] with
|
(match node.["victor"] with
|
||||||
|
53
ConsumePlugin/GeneratedJsonParseNullness.fs
Normal file
53
ConsumePlugin/GeneratedJsonParseNullness.fs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// This code was generated by myriad.
|
||||||
|
// Changes to this file will be lost when the code is regenerated.
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace ConsumePlugin
|
||||||
|
|
||||||
|
/// Module containing JSON parsing methods for the InnerStruct type
|
||||||
|
[<RequireQualifiedAccess ; CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
|
||||||
|
module InnerStruct =
|
||||||
|
/// Parse from a JSON node.
|
||||||
|
let jsonParse (node : System.Text.Json.Nodes.JsonNode) : InnerStruct =
|
||||||
|
let arg_0 =
|
||||||
|
(match node.["a"] with
|
||||||
|
| null ->
|
||||||
|
raise (
|
||||||
|
System.Collections.Generic.KeyNotFoundException (
|
||||||
|
sprintf "Required key '%s' not found on JSON object" ("a")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
| v -> v)
|
||||||
|
.AsValue()
|
||||||
|
.GetValue<System.Int32> ()
|
||||||
|
|
||||||
|
{
|
||||||
|
A = arg_0
|
||||||
|
}
|
||||||
|
namespace ConsumePlugin
|
||||||
|
|
||||||
|
/// Module containing JSON parsing methods for the ArrayOfInnerStruct type
|
||||||
|
[<RequireQualifiedAccess ; CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
|
||||||
|
module ArrayOfInnerStruct =
|
||||||
|
/// Parse from a JSON node.
|
||||||
|
let jsonParse (node : System.Text.Json.Nodes.JsonNode) : ArrayOfInnerStruct =
|
||||||
|
let arg_0 =
|
||||||
|
(match node.["b"] with
|
||||||
|
| null ->
|
||||||
|
raise (
|
||||||
|
System.Collections.Generic.KeyNotFoundException (
|
||||||
|
sprintf "Required key '%s' not found on JSON object" ("b")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
| v -> v)
|
||||||
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|
|> Seq.map (fun elt -> InnerStruct.jsonParse elt)
|
||||||
|
|> Array.ofSeq
|
||||||
|
|
||||||
|
{
|
||||||
|
B = arg_0
|
||||||
|
}
|
@@ -206,3 +206,34 @@ type internal TypeWithInterfaceMock =
|
|||||||
|
|
||||||
interface System.IDisposable with
|
interface System.IDisposable with
|
||||||
member this.Dispose () : unit = this.Dispose ()
|
member this.Dispose () : unit = this.Dispose ()
|
||||||
|
namespace SomeNamespace
|
||||||
|
|
||||||
|
open System
|
||||||
|
open WoofWare.Myriad.Plugins
|
||||||
|
|
||||||
|
/// Mock record type for an interface
|
||||||
|
type internal TypeWithPropertiesMock =
|
||||||
|
{
|
||||||
|
/// Implementation of IDisposable.Dispose
|
||||||
|
Dispose : unit -> unit
|
||||||
|
Prop1 : unit -> int
|
||||||
|
Prop2 : unit -> unit Async
|
||||||
|
Mem1 : string option -> string[] Async
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An implementation where every method throws.
|
||||||
|
static member Empty : TypeWithPropertiesMock =
|
||||||
|
{
|
||||||
|
Dispose = (fun () -> ())
|
||||||
|
Prop1 = (fun _ -> raise (System.NotImplementedException "Unimplemented mock function: Prop1"))
|
||||||
|
Prop2 = (fun _ -> raise (System.NotImplementedException "Unimplemented mock function: Prop2"))
|
||||||
|
Mem1 = (fun _ -> raise (System.NotImplementedException "Unimplemented mock function: Mem1"))
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TypeWithProperties with
|
||||||
|
member this.Mem1 arg_0_0 = this.Mem1 (arg_0_0)
|
||||||
|
member this.Prop1 = this.Prop1 ()
|
||||||
|
member this.Prop2 = this.Prop2 ()
|
||||||
|
|
||||||
|
interface System.IDisposable with
|
||||||
|
member this.Dispose () : unit = this.Dispose ()
|
||||||
|
@@ -60,6 +60,7 @@ module GymOpeningHours =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -1038,6 +1039,7 @@ module Sessions =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> Visit.jsonParse elt)
|
|> Seq.map (fun elt -> Visit.jsonParse elt)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
|
@@ -48,7 +48,16 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
return jsonNode.AsArray () |> Seq.map (fun elt -> Gym.jsonParse elt) |> List.ofSeq
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
|
return
|
||||||
|
jsonNode.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|
|> Seq.map (fun elt -> Gym.jsonParse elt)
|
||||||
|
|> List.ofSeq
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
|
|
||||||
@@ -82,6 +91,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return GymAttendance.jsonParse jsonNode
|
return GymAttendance.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -116,6 +130,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return GymAttendance.jsonParse jsonNode
|
return GymAttendance.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -146,6 +165,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return Member.jsonParse jsonNode
|
return Member.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -179,6 +203,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return Gym.jsonParse jsonNode
|
return Gym.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -209,6 +238,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return MemberActivityDto.jsonParse jsonNode
|
return MemberActivityDto.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -239,6 +273,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return UriThing.jsonParse jsonNode
|
return UriThing.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -294,6 +333,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return
|
return
|
||||||
match jsonNode with
|
match jsonNode with
|
||||||
| null -> None
|
| null -> None
|
||||||
@@ -346,6 +390,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return Sessions.jsonParse jsonNode
|
return Sessions.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -387,6 +436,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return Sessions.jsonParse jsonNode
|
return Sessions.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -878,6 +932,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return
|
return
|
||||||
new RestEase.Response<_> (
|
new RestEase.Response<_> (
|
||||||
responseString,
|
responseString,
|
||||||
@@ -914,6 +973,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return
|
return
|
||||||
new RestEase.Response<_> (
|
new RestEase.Response<_> (
|
||||||
responseString,
|
responseString,
|
||||||
@@ -950,6 +1014,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return
|
return
|
||||||
new RestEase.Response<_> (
|
new RestEase.Response<_> (
|
||||||
responseString,
|
responseString,
|
||||||
@@ -986,6 +1055,11 @@ module PureGymApi =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return
|
return
|
||||||
new RestEase.Response<_> (
|
new RestEase.Response<_> (
|
||||||
responseString,
|
responseString,
|
||||||
|
@@ -408,6 +408,7 @@ module InnerTypeWithBothJsonParseExtension =
|
|||||||
|
|
||||||
let value =
|
let value =
|
||||||
(kvp.Value).AsArray ()
|
(kvp.Value).AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Char> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Char> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -676,6 +677,7 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
@@ -689,6 +691,7 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
@@ -714,6 +717,7 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
|
@@ -94,6 +94,7 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -107,6 +108,7 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -120,6 +122,7 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|
|> Seq.cast<System.Text.Json.Nodes.JsonNode>
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
@@ -496,6 +499,11 @@ module VaultClient =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtSecretResponse.jsonParse jsonNode
|
return JwtSecretResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -532,6 +540,11 @@ module VaultClient =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtVaultResponse.jsonParse jsonNode
|
return JwtVaultResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -590,6 +603,11 @@ module VaultClientNonExtensionMethod =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtSecretResponse.jsonParse jsonNode
|
return JwtSecretResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -626,6 +644,11 @@ module VaultClientNonExtensionMethod =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtVaultResponse.jsonParse jsonNode
|
return JwtVaultResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -687,6 +710,11 @@ module VaultClientExtensionMethodHttpClientExtension =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtSecretResponse.jsonParse jsonNode
|
return JwtSecretResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
@@ -723,6 +751,11 @@ module VaultClientExtensionMethodHttpClientExtension =
|
|||||||
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
System.Text.Json.Nodes.JsonNode.ParseAsync (responseStream, cancellationToken = ct)
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let jsonNode =
|
||||||
|
match jsonNode with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| v -> v
|
||||||
|
|
||||||
return JwtVaultResponse.jsonParse jsonNode
|
return JwtVaultResponse.jsonParse jsonNode
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
|
13
ConsumePlugin/JsonParseNullness.fs
Normal file
13
ConsumePlugin/JsonParseNullness.fs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
namespace ConsumePlugin
|
||||||
|
|
||||||
|
[<WoofWare.Myriad.Plugins.JsonParse>]
|
||||||
|
type InnerStruct =
|
||||||
|
{
|
||||||
|
A : int
|
||||||
|
}
|
||||||
|
|
||||||
|
[<WoofWare.Myriad.Plugins.JsonParse>]
|
||||||
|
type ArrayOfInnerStruct =
|
||||||
|
{
|
||||||
|
B : InnerStruct array
|
||||||
|
}
|
@@ -48,3 +48,10 @@ type TypeWithInterface =
|
|||||||
inherit IDisposable
|
inherit IDisposable
|
||||||
abstract Mem1 : string option -> string[] Async
|
abstract Mem1 : string option -> string[] Async
|
||||||
abstract Mem2 : unit -> string[] Async
|
abstract Mem2 : unit -> string[] Async
|
||||||
|
|
||||||
|
[<GenerateMock>]
|
||||||
|
type TypeWithProperties =
|
||||||
|
inherit IDisposable
|
||||||
|
abstract Mem1 : string option -> string[] Async
|
||||||
|
abstract Prop1 : int
|
||||||
|
abstract Prop2 : unit Async
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<WarnOn>FS3388,FS3559</WarnOn>
|
<WarnOn>FS3388,FS3559</WarnOn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Nerdbank.GitVersioning" Version="3.7.115" PrivateAssets="all"/>
|
<PackageReference Include="Nerdbank.GitVersioning" Version="3.8.38-alpha" PrivateAssets="all"/>
|
||||||
<SourceLinkGitHubHost Include="github.com" ContentUrl="https://raw.githubusercontent.com"/>
|
<SourceLinkGitHubHost Include="github.com" ContentUrl="https://raw.githubusercontent.com"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition="'$(GITHUB_ACTION)' != ''">
|
<PropertyGroup Condition="'$(GITHUB_ACTION)' != ''">
|
||||||
|
@@ -26,6 +26,11 @@ type ArgParserAttribute (isExtensionMethod : bool) =
|
|||||||
/// an argument which looks like a flag but which we don't recognise.)
|
/// an argument which looks like a flag but which we don't recognise.)
|
||||||
/// We will still interpret `--help` as requesting help, unless it comes after
|
/// We will still interpret `--help` as requesting help, unless it comes after
|
||||||
/// a standalone `--` separator.
|
/// a standalone `--` separator.
|
||||||
|
///
|
||||||
|
/// If the type of the PositionalArgs field is `Choice<'a, 'a>`, then we will
|
||||||
|
/// tell you whether each arg came before or after a standalone `--` separator.
|
||||||
|
/// For example, `MyApp foo bar -- baz` with PositionalArgs of `Choice<string, string>`
|
||||||
|
/// would yield `Choice1Of2 foo, Choice1Of2 bar, Choice2Of2 baz`.
|
||||||
type PositionalArgsAttribute (includeFlagLike : bool) =
|
type PositionalArgsAttribute (includeFlagLike : bool) =
|
||||||
inherit Attribute ()
|
inherit Attribute ()
|
||||||
|
|
||||||
|
@@ -17,10 +17,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ApiSurface" Version="4.1.16" />
|
<PackageReference Include="ApiSurface" Version="4.1.20" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0"/>
|
||||||
<PackageReference Include="NUnit" Version="4.3.2"/>
|
<PackageReference Include="NUnit" Version="4.3.2"/>
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
namespace WoofWare.Myriad.Plugins.Test
|
||||||
|
|
||||||
|
open System.Text.Json.Nodes
|
||||||
|
open FsUnitTyped
|
||||||
|
open NUnit.Framework
|
||||||
|
open ConsumePlugin
|
||||||
|
|
||||||
|
[<TestFixture>]
|
||||||
|
module TestJsonNullability =
|
||||||
|
|
||||||
|
[<Test>]
|
||||||
|
let ``Can consume JsonParseNullness`` () =
|
||||||
|
let options = JsonNodeOptions (PropertyNameCaseInsensitive = true)
|
||||||
|
|
||||||
|
"""{
|
||||||
|
"b": null
|
||||||
|
}"""
|
||||||
|
|> fun s -> JsonNode.Parse (s, options)
|
||||||
|
|> ArrayOfInnerStruct.jsonParse
|
||||||
|
|> shouldEqual
|
||||||
|
{
|
||||||
|
B = null
|
||||||
|
}
|
@@ -34,3 +34,16 @@ module TestMockGenerator =
|
|||||||
mock.Mem1 3 'a' |> shouldEqual "aaa"
|
mock.Mem1 3 'a' |> shouldEqual "aaa"
|
||||||
mock.Mem2 (3, "hi") 'a' |> shouldEqual "hiahiahi"
|
mock.Mem2 (3, "hi") 'a' |> shouldEqual "hiahiahi"
|
||||||
mock.Mem3 (3, "hi") 'a' |> shouldEqual "hiahiahi"
|
mock.Mem3 (3, "hi") 'a' |> shouldEqual "hiahiahi"
|
||||||
|
|
||||||
|
[<Test>]
|
||||||
|
let ``Example of use: properties`` () =
|
||||||
|
let mock : TypeWithProperties =
|
||||||
|
{ TypeWithPropertiesMock.Empty with
|
||||||
|
Mem1 = fun i -> async { return Option.toArray i }
|
||||||
|
Prop1 = fun () -> 44
|
||||||
|
}
|
||||||
|
:> _
|
||||||
|
|
||||||
|
mock.Mem1 (Some "hi") |> Async.RunSynchronously |> shouldEqual [| "hi" |]
|
||||||
|
|
||||||
|
mock.Prop1 |> shouldEqual 44
|
||||||
|
@@ -9,6 +9,7 @@
|
|||||||
I have not yet seen a single instance where I care about this warning
|
I have not yet seen a single instance where I care about this warning
|
||||||
-->
|
-->
|
||||||
<NoWarn>$(NoWarn),NU1903</NoWarn>
|
<NoWarn>$(NoWarn),NU1903</NoWarn>
|
||||||
|
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -17,6 +18,7 @@
|
|||||||
<Compile Include="TestJsonParse\TestJsonParse.fs" />
|
<Compile Include="TestJsonParse\TestJsonParse.fs" />
|
||||||
<Compile Include="TestJsonParse\TestPureGymJson.fs" />
|
<Compile Include="TestJsonParse\TestPureGymJson.fs" />
|
||||||
<Compile Include="TestJsonParse\TestExtensionMethod.fs" />
|
<Compile Include="TestJsonParse\TestExtensionMethod.fs" />
|
||||||
|
<Compile Include="TestJsonParse\TestJsonNullability.fs" />
|
||||||
<Compile Include="TestHttpClient\TestPureGymRestApi.fs" />
|
<Compile Include="TestHttpClient\TestPureGymRestApi.fs" />
|
||||||
<Compile Include="TestHttpClient\TestPathParam.fs" />
|
<Compile Include="TestHttpClient\TestPathParam.fs" />
|
||||||
<Compile Include="TestHttpClient\TestReturnTypes.fs" />
|
<Compile Include="TestHttpClient\TestReturnTypes.fs" />
|
||||||
@@ -41,12 +43,12 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ApiSurface" Version="4.1.16"/>
|
<PackageReference Include="ApiSurface" Version="4.1.20"/>
|
||||||
<PackageReference Include="FsCheck" Version="3.0.0"/>
|
<PackageReference Include="FsCheck" Version="3.2.0"/>
|
||||||
<PackageReference Include="FsUnit" Version="6.0.1"/>
|
<PackageReference Include="FsUnit" Version="7.0.1"/>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0"/>
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0"/>
|
||||||
<PackageReference Include="NUnit" Version="4.3.2"/>
|
<PackageReference Include="NUnit" Version="4.3.2"/>
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"/>
|
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@@ -673,7 +673,7 @@ module internal ArgParserGenerator =
|
|||||||
args
|
args
|
||||||
|> Map.toList
|
|> Map.toList
|
||||||
|> List.map (fun (ident, expr) -> SynLongIdent.create [ Ident.create ident ], expr)
|
|> List.map (fun (ident, expr) -> SynLongIdent.create [ Ident.create ident ], expr)
|
||||||
|> AstHelper.instantiateRecord
|
|> SynExpr.createRecord None
|
||||||
)
|
)
|
||||||
|
|
||||||
tree, counter
|
tree, counter
|
||||||
|
@@ -36,13 +36,6 @@ module internal AstHelper =
|
|||||||
| SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.Enum _, _) -> true
|
| SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.Enum _, _) -> true
|
||||||
| _ -> false
|
| _ -> false
|
||||||
|
|
||||||
let instantiateRecord (fields : (SynLongIdent * SynExpr) list) : SynExpr =
|
|
||||||
let fields =
|
|
||||||
fields
|
|
||||||
|> List.map (fun (rfn, synExpr) -> SynExprRecordField ((rfn, true), Some range0, Some synExpr, None))
|
|
||||||
|
|
||||||
SynExpr.Record (None, None, fields, range0)
|
|
||||||
|
|
||||||
let defineRecordType (record : RecordType) : SynTypeDefn =
|
let defineRecordType (record : RecordType) : SynTypeDefn =
|
||||||
let name =
|
let name =
|
||||||
SynComponentInfo.create record.Name
|
SynComponentInfo.create record.Name
|
||||||
@@ -363,3 +356,19 @@ module internal AstHelper =
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
| _ -> failwithf "Failed to get record elements for type that was: %+A" repr
|
| _ -> failwithf "Failed to get record elements for type that was: %+A" repr
|
||||||
|
|
||||||
|
let raiseIfNull (variable : Ident) : SynExpr =
|
||||||
|
SynExpr.createMatch
|
||||||
|
(SynExpr.createIdent' variable)
|
||||||
|
[
|
||||||
|
SynMatchClause.create
|
||||||
|
SynPat.createNull
|
||||||
|
(SynExpr.applyFunction
|
||||||
|
(SynExpr.createIdent "raise")
|
||||||
|
(SynExpr.paren (
|
||||||
|
SynExpr.applyFunction
|
||||||
|
(SynExpr.createLongIdent [ "System" ; "ArgumentNullException" ])
|
||||||
|
(SynExpr.CreateConst ())
|
||||||
|
)))
|
||||||
|
SynMatchClause.create (SynPat.named "v") (SynExpr.createIdent "v")
|
||||||
|
]
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
namespace WoofWare.Myriad.Plugins
|
namespace WoofWare.Myriad.Plugins
|
||||||
|
|
||||||
open System.IO
|
|
||||||
open System.Net.Http
|
open System.Net.Http
|
||||||
open Fantomas.FCS.Syntax
|
open Fantomas.FCS.Syntax
|
||||||
open WoofWare.Whippet.Fantomas
|
open WoofWare.Whippet.Fantomas
|
||||||
@@ -14,17 +13,6 @@ type internal HttpClientGeneratorOutputSpec =
|
|||||||
module internal HttpClientGenerator =
|
module internal HttpClientGenerator =
|
||||||
open Fantomas.FCS.Text.Range
|
open Fantomas.FCS.Text.Range
|
||||||
|
|
||||||
let outputFile = FileInfo "/tmp/output.txt"
|
|
||||||
|
|
||||||
// do
|
|
||||||
// use _ = File.Create outputFile.FullName
|
|
||||||
// ()
|
|
||||||
|
|
||||||
let log (line : string) =
|
|
||||||
// use w = outputFile.AppendText ()
|
|
||||||
// w.WriteLine line
|
|
||||||
()
|
|
||||||
|
|
||||||
[<RequireQualifiedAccess>]
|
[<RequireQualifiedAccess>]
|
||||||
type PathSpec =
|
type PathSpec =
|
||||||
| Verbatim of string
|
| Verbatim of string
|
||||||
@@ -568,6 +556,9 @@ module internal HttpClientGenerator =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
let jsonNodeNotNull =
|
||||||
|
Let ("jsonNode", AstHelper.raiseIfNull (Ident.create "jsonNode"))
|
||||||
|
|
||||||
let setVariableHeaders =
|
let setVariableHeaders =
|
||||||
variableHeaders
|
variableHeaders
|
||||||
|> List.map (fun (headerName, callToGetValue) ->
|
|> List.map (fun (headerName, callToGetValue) ->
|
||||||
@@ -642,6 +633,7 @@ module internal HttpClientGenerator =
|
|||||||
yield responseString
|
yield responseString
|
||||||
yield responseStream
|
yield responseStream
|
||||||
yield jsonNode
|
yield jsonNode
|
||||||
|
yield jsonNodeNotNull
|
||||||
| String -> yield responseString
|
| String -> yield responseString
|
||||||
| Stream -> yield responseStream
|
| Stream -> yield responseStream
|
||||||
| UnitType ->
|
| UnitType ->
|
||||||
@@ -650,6 +642,7 @@ module internal HttpClientGenerator =
|
|||||||
| _ ->
|
| _ ->
|
||||||
yield responseStream
|
yield responseStream
|
||||||
yield jsonNode
|
yield jsonNode
|
||||||
|
yield jsonNodeNotNull
|
||||||
]
|
]
|
||||||
|> SynExpr.createCompExpr "async" returnExpr
|
|> SynExpr.createCompExpr "async" returnExpr
|
||||||
|> SynExpr.startAsTask cancellationTokenArg
|
|> SynExpr.startAsTask cancellationTokenArg
|
||||||
@@ -914,10 +907,6 @@ module internal HttpClientGenerator =
|
|||||||
"Create a REST client. The input functions will be re-evaluated on every HTTP request to obtain the required values for the corresponding header properties."
|
"Create a REST client. The input functions will be re-evaluated on every HTTP request to obtain the required values for the corresponding header properties."
|
||||||
|> PreXmlDoc.create
|
|> PreXmlDoc.create
|
||||||
|
|
||||||
let functionName = Ident.create "client"
|
|
||||||
|
|
||||||
let pattern = SynLongIdent.createS "make"
|
|
||||||
|
|
||||||
let returnInfo = SynType.createLongIdent interfaceType.Name
|
let returnInfo = SynType.createLongIdent interfaceType.Name
|
||||||
|
|
||||||
let nameWithoutLeadingI =
|
let nameWithoutLeadingI =
|
||||||
|
@@ -89,7 +89,7 @@ module internal InterfaceMockGenerator =
|
|||||||
[]
|
[]
|
||||||
else
|
else
|
||||||
[ SynPat.unit ])
|
[ SynPat.unit ])
|
||||||
(AstHelper.instantiateRecord constructorFields)
|
(SynExpr.createRecord None constructorFields)
|
||||||
|> SynBinding.withXmlDoc (PreXmlDoc.create "An implementation where every method throws.")
|
|> SynBinding.withXmlDoc (PreXmlDoc.create "An implementation where every method throws.")
|
||||||
|> SynBinding.withReturnAnnotation constructorReturnType
|
|> SynBinding.withReturnAnnotation constructorReturnType
|
||||||
|> SynMemberDefn.staticMember
|
|> SynMemberDefn.staticMember
|
||||||
@@ -159,6 +159,15 @@ module internal InterfaceMockGenerator =
|
|||||||
|> SynMemberDefn.memberImplementation
|
|> SynMemberDefn.memberImplementation
|
||||||
)
|
)
|
||||||
|
|
||||||
|
let properties =
|
||||||
|
interfaceType.Properties
|
||||||
|
|> List.map (fun pi ->
|
||||||
|
SynExpr.createLongIdent' [ Ident.create "this" ; pi.Identifier ]
|
||||||
|
|> SynExpr.applyTo (SynExpr.CreateConst ())
|
||||||
|
|> SynBinding.basic [ Ident.create "this" ; pi.Identifier ] []
|
||||||
|
|> SynMemberDefn.memberImplementation
|
||||||
|
)
|
||||||
|
|
||||||
let interfaceName =
|
let interfaceName =
|
||||||
let baseName = SynType.createLongIdent interfaceType.Name
|
let baseName = SynType.createLongIdent interfaceType.Name
|
||||||
|
|
||||||
@@ -174,7 +183,7 @@ module internal InterfaceMockGenerator =
|
|||||||
|
|
||||||
SynType.app' baseName generics
|
SynType.app' baseName generics
|
||||||
|
|
||||||
SynMemberDefn.Interface (interfaceName, Some range0, Some members, range0)
|
SynMemberDefn.Interface (interfaceName, Some range0, Some (members @ properties), range0)
|
||||||
|
|
||||||
let access =
|
let access =
|
||||||
match interfaceType.Accessibility, spec.IsInternal with
|
match interfaceType.Accessibility, spec.IsInternal with
|
||||||
@@ -248,6 +257,15 @@ module internal InterfaceMockGenerator =
|
|||||||
|> SynField.make
|
|> SynField.make
|
||||||
|> SynField.withDocString (mem.XmlDoc |> Option.defaultValue PreXmlDoc.Empty)
|
|> SynField.withDocString (mem.XmlDoc |> Option.defaultValue PreXmlDoc.Empty)
|
||||||
|
|
||||||
|
let constructProperty (prop : PropertyInfo) : SynField =
|
||||||
|
{
|
||||||
|
Attrs = []
|
||||||
|
Ident = Some prop.Identifier
|
||||||
|
Type = SynType.toFun [ SynType.unit ] prop.Type
|
||||||
|
}
|
||||||
|
|> SynField.make
|
||||||
|
|> SynField.withDocString (prop.XmlDoc |> Option.defaultValue PreXmlDoc.Empty)
|
||||||
|
|
||||||
let createRecord
|
let createRecord
|
||||||
(namespaceId : LongIdent)
|
(namespaceId : LongIdent)
|
||||||
(opens : SynOpenDeclTarget list)
|
(opens : SynOpenDeclTarget list)
|
||||||
@@ -255,7 +273,12 @@ module internal InterfaceMockGenerator =
|
|||||||
: SynModuleOrNamespace
|
: SynModuleOrNamespace
|
||||||
=
|
=
|
||||||
let interfaceType = AstHelper.parseInterface interfaceType
|
let interfaceType = AstHelper.parseInterface interfaceType
|
||||||
let fields = interfaceType.Members |> List.map constructMember
|
|
||||||
|
let fields =
|
||||||
|
interfaceType.Members
|
||||||
|
|> List.map constructMember
|
||||||
|
|> List.append (interfaceType.Properties |> List.map constructProperty)
|
||||||
|
|
||||||
let docString = PreXmlDoc.create "Mock record type for an interface"
|
let docString = PreXmlDoc.create "Mock record type for an interface"
|
||||||
|
|
||||||
let name =
|
let name =
|
||||||
|
@@ -78,6 +78,7 @@ module internal JsonParseGenerator =
|
|||||||
/// collectionType is e.g. "List"; we'll be calling `ofSeq` on it.
|
/// collectionType is e.g. "List"; we'll be calling `ofSeq` on it.
|
||||||
/// body is the body of a lambda which takes a parameter `elt`.
|
/// body is the body of a lambda which takes a parameter `elt`.
|
||||||
/// {assertNotNull node}.AsArray()
|
/// {assertNotNull node}.AsArray()
|
||||||
|
/// |> Seq.cast<JsonNode>
|
||||||
/// |> Seq.map (fun elt -> {body})
|
/// |> Seq.map (fun elt -> {body})
|
||||||
/// |> {collectionType}.ofSeq
|
/// |> {collectionType}.ofSeq
|
||||||
let asArrayMapped
|
let asArrayMapped
|
||||||
@@ -91,6 +92,13 @@ module internal JsonParseGenerator =
|
|||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertNotNull propertyName node
|
||||||
|> SynExpr.callMethod "AsArray"
|
|> SynExpr.callMethod "AsArray"
|
||||||
|
|> SynExpr.pipeThroughFunction (
|
||||||
|
SynExpr.createLongIdent [ "Seq" ; "cast" ]
|
||||||
|
|> SynExpr.typeApp
|
||||||
|
[
|
||||||
|
SynType.createLongIdent' [ "System" ; "Text" ; "Json" ; "Nodes" ; "JsonNode" ]
|
||||||
|
]
|
||||||
|
)
|
||||||
|> SynExpr.pipeThroughFunction (
|
|> SynExpr.pipeThroughFunction (
|
||||||
SynExpr.applyFunction (SynExpr.createLongIdent [ "Seq" ; "map" ]) (SynExpr.createLambda "elt" body)
|
SynExpr.applyFunction (SynExpr.createLongIdent [ "Seq" ; "map" ]) (SynExpr.createLambda "elt" body)
|
||||||
)
|
)
|
||||||
@@ -273,10 +281,12 @@ module internal JsonParseGenerator =
|
|||||||
)
|
)
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "Map" ; "ofSeq" ])
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "Map" ; "ofSeq" ])
|
||||||
| BigInt ->
|
| BigInt ->
|
||||||
node
|
AstHelper.raiseIfNull (Ident.create "v")
|
||||||
|
|> SynExpr.paren
|
||||||
|> SynExpr.callMethod "ToJsonString"
|
|> SynExpr.callMethod "ToJsonString"
|
||||||
|> SynExpr.paren
|
|> SynExpr.paren
|
||||||
|> SynExpr.applyFunction (SynExpr.createLongIdent [ "System" ; "Numerics" ; "BigInteger" ; "Parse" ])
|
|> SynExpr.applyFunction (SynExpr.createLongIdent [ "System" ; "Numerics" ; "BigInteger" ; "Parse" ])
|
||||||
|
|> SynExpr.createLet [ SynBinding.basic [ Ident.create "v" ] [] node ]
|
||||||
| Measure (_measure, primType) ->
|
| Measure (_measure, primType) ->
|
||||||
parseNumberType options propertyName node primType
|
parseNumberType options propertyName node primType
|
||||||
|> SynExpr.pipeThroughFunction (Measure.getLanguagePrimitivesMeasure primType)
|
|> SynExpr.pipeThroughFunction (Measure.getLanguagePrimitivesMeasure primType)
|
||||||
@@ -480,7 +490,7 @@ module internal JsonParseGenerator =
|
|||||||
let finalConstruction =
|
let finalConstruction =
|
||||||
fields
|
fields
|
||||||
|> List.mapi (fun i fieldData -> SynLongIdent.createI fieldData.Ident, SynExpr.createIdent $"arg_%i{i}")
|
|> List.mapi (fun i fieldData -> SynLongIdent.createI fieldData.Ident, SynExpr.createIdent $"arg_%i{i}")
|
||||||
|> AstHelper.instantiateRecord
|
|> SynExpr.createRecord None
|
||||||
|
|
||||||
(finalConstruction, assignments)
|
(finalConstruction, assignments)
|
||||||
||> List.fold (fun final assignment -> SynExpr.createLet [ assignment ] final)
|
||> List.fold (fun final assignment -> SynExpr.createLet [ assignment ] final)
|
||||||
|
@@ -97,7 +97,7 @@ module internal RemoveOptionsGenerator =
|
|||||||
|
|
||||||
SynLongIdent.createI fieldData.Ident, body
|
SynLongIdent.createI fieldData.Ident, body
|
||||||
)
|
)
|
||||||
|> AstHelper.instantiateRecord
|
|> SynExpr.createRecord None
|
||||||
|
|
||||||
SynBinding.basic
|
SynBinding.basic
|
||||||
[ functionName ]
|
[ functionName ]
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Myriad.Core" Version="0.8.3" />
|
<PackageReference Include="Myriad.Core" Version="0.8.3" />
|
||||||
<PackageReference Include="TypeEquality" Version="0.3.0" />
|
<PackageReference Include="TypeEquality" Version="0.3.0" />
|
||||||
<PackageReference Include="WoofWare.Whippet.Fantomas" Version="0.3.1" />
|
<PackageReference Include="WoofWare.Whippet.Fantomas" Version="0.5.1" />
|
||||||
<!-- the lowest version allowed by Myriad.Core -->
|
<!-- the lowest version allowed by Myriad.Core -->
|
||||||
<PackageReference Update="FSharp.Core" Version="6.0.1" PrivateAssets="all"/>
|
<PackageReference Update="FSharp.Core" Version="6.0.1" PrivateAssets="all"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageDownload Include="G-Research.FSharp.Analyzers" Version="[0.12.0]" />
|
<PackageDownload Include="G-Research.FSharp.Analyzers" Version="[0.14.0]" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
6
flake.lock
generated
6
flake.lock
generated
@@ -20,11 +20,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736420959,
|
"lastModified": 1744868846,
|
||||||
"narHash": "sha256-dMGNa5UwdtowEqQac+Dr0d2tFO/60ckVgdhZU9q2E2o=",
|
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "32af3611f6f05655ca166a0b1f47b57c762b5192",
|
"rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
141
nix/deps.json
141
nix/deps.json
@@ -1,13 +1,13 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"pname": "ApiSurface",
|
"pname": "ApiSurface",
|
||||||
"version": "4.1.16",
|
"version": "4.1.20",
|
||||||
"hash": "sha256-3F+dY2nZMFukUjIGrvB/h3ZsZYdLJ9jvQKRxX33qk2E="
|
"hash": "sha256-koWgO9FC9ax+Ij56ug8kxeyknl0yhLqnNLOUdxtqqo4="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "fantomas",
|
"pname": "fantomas",
|
||||||
"version": "7.0.0",
|
"version": "7.0.1",
|
||||||
"hash": "sha256-v4bXmvjZOYxl5RSIHuqVfDzBQdRz5SrmzZtD6SeEYTY="
|
"hash": "sha256-2aGD6Kjh83gmssRqqZ/Uihi7VbNqNUelX4otIfCuhTI="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Fantomas.Core",
|
"pname": "Fantomas.Core",
|
||||||
@@ -21,29 +21,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FsCheck",
|
"pname": "FsCheck",
|
||||||
"version": "3.0.0",
|
"version": "3.2.0",
|
||||||
"hash": "sha256-/5FqiNeTVFairRtInS0cjQ3uGlqVfVJG2FsKIo8mdZ4="
|
"hash": "sha256-ksZ4vLgWwyQOzFuK2BczdtDtWWYmedG7UBAg4pYuI8g="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "fsharp-analyzers",
|
"pname": "fsharp-analyzers",
|
||||||
"version": "0.28.0",
|
"version": "0.30.0",
|
||||||
"hash": "sha256-BqGk9MzHHA3oRPNfWuANcM1YELsdhzWI+kLF4mUDUx8="
|
"hash": "sha256-7oaSwpHAU1opzpz4szLU/gDaJC/ww9eiFkPu0nr4Mj4="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FSharp.Core",
|
"pname": "FSharp.Core",
|
||||||
"version": "4.3.4",
|
"version": "4.3.4",
|
||||||
"hash": "sha256-styyo+6mJy+yxE0NZG/b1hxkAjPOnJfMgd9zWzCJ5uk="
|
"hash": "sha256-styyo+6mJy+yxE0NZG/b1hxkAjPOnJfMgd9zWzCJ5uk="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "FSharp.Core",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"hash": "sha256-7+B+8rsm/dMKvNBty8z5qB+kOxMwUzExy0F04xM88sk="
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"pname": "FSharp.Core",
|
|
||||||
"version": "5.0.2",
|
|
||||||
"hash": "sha256-YOoosLEiszPsOOaNAkWhFGU04JJKDOFVoA/ggrZMN10="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "FSharp.Core",
|
"pname": "FSharp.Core",
|
||||||
"version": "6.0.1",
|
"version": "6.0.1",
|
||||||
@@ -51,13 +41,18 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FSharp.Core",
|
"pname": "FSharp.Core",
|
||||||
"version": "9.0.100",
|
"version": "9.0.202",
|
||||||
"hash": "sha256-V1q3CjbRvWZqxpi6cXD/R0F7pyXGGtH83M5Z/ITDrp8="
|
"hash": "sha256-64Gub0qemmCoMa1tDus6TeTuB1+5sHfE6KD2j4o84mA="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "FsUnit",
|
"pname": "FsUnit",
|
||||||
"version": "6.0.1",
|
"version": "7.0.1",
|
||||||
"hash": "sha256-vka/aAgWhDCl5tu+kgO7GtSaHOOvlSaWxG+tExwGXpI="
|
"hash": "sha256-K85CIdxMeFSHEKZk6heIXp/oFjWAn7dBILKrw49pJUY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.ApplicationInsights",
|
||||||
|
"version": "2.22.0",
|
||||||
|
"hash": "sha256-mUQ63atpT00r49ca50uZu2YCiLg3yd6r3HzTryqcuEA="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.AspNetCore.App.Ref",
|
"pname": "Microsoft.AspNetCore.App.Ref",
|
||||||
@@ -86,13 +81,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.CodeCoverage",
|
"pname": "Microsoft.CodeCoverage",
|
||||||
"version": "17.12.0",
|
"version": "17.13.0",
|
||||||
"hash": "sha256-lGjifppD0OBMBp28pjUfPipaeXg739n8cPhtHWoo5RE="
|
"hash": "sha256-GKrIxeyQo5Az1mztfQgea1kGtJwonnNOrXK/0ULfu8o="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NET.Test.Sdk",
|
"pname": "Microsoft.NET.Test.Sdk",
|
||||||
"version": "17.12.0",
|
"version": "17.13.0",
|
||||||
"hash": "sha256-DKFEbhh2wPzahNeHdEoFig8tZh/LEVrFc5+zpT43Btg="
|
"hash": "sha256-sc2wvyV8cGm1FrNP2GGHEI584RCvRPu15erYCsgw5QY="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.NETCore.App.Host.linux-arm64",
|
"pname": "Microsoft.NETCore.App.Host.linux-arm64",
|
||||||
@@ -164,15 +159,45 @@
|
|||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"hash": "sha256-WLsf1NuUfRWyr7C7Rl9jiua9jximnVvzy6nk2D2bVRc="
|
"hash": "sha256-WLsf1NuUfRWyr7C7Rl9jiua9jximnVvzy6nk2D2bVRc="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.Testing.Extensions.Telemetry",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"hash": "sha256-bIXwPSa3jkr2b6xINOqMUs6/uj/r4oVFM7xq3uVIZDU="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.Testing.Extensions.TrxReport.Abstractions",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"hash": "sha256-IfMRfcyaIKEMRtx326ICKtinDBEfGw/Sv8ZHawJ96Yc="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.Testing.Extensions.VSTestBridge",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"hash": "sha256-XpM/yFjhLSsuzyDV+xKubs4V1zVVYiV05E0+N4S1h0g="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.Testing.Platform",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"hash": "sha256-y61Iih6w5D79dmrj2V675mcaeIiHoj1HSa1FRit2BLM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.Testing.Platform.MSBuild",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"hash": "sha256-YspvjE5Jfi587TAfsvfDVJXNrFOkx1B3y1CKV6m7YLY="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.TestPlatform.ObjectModel",
|
"pname": "Microsoft.TestPlatform.ObjectModel",
|
||||||
"version": "17.12.0",
|
"version": "17.12.0",
|
||||||
"hash": "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w="
|
"hash": "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.TestPlatform.ObjectModel",
|
||||||
|
"version": "17.13.0",
|
||||||
|
"hash": "sha256-6S0fjfj8vA+h6dJVNwLi6oZhYDO/I/6hBZaq2VTW+Uk="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "Microsoft.TestPlatform.TestHost",
|
"pname": "Microsoft.TestPlatform.TestHost",
|
||||||
"version": "17.12.0",
|
"version": "17.13.0",
|
||||||
"hash": "sha256-rf8Sh0fQq44Sneuvs64unkkIHg8kOjDGWE35j9iLx5I="
|
"hash": "sha256-L/CJzou7dhmShUgXq3aXL3CaLTJll17Q+JY2DBdUUpo="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Myriad.Core",
|
"pname": "Myriad.Core",
|
||||||
@@ -186,8 +211,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "Nerdbank.GitVersioning",
|
"pname": "Nerdbank.GitVersioning",
|
||||||
"version": "3.7.115",
|
"version": "3.8.38-alpha",
|
||||||
"hash": "sha256-sqn+i7vvBgBUtm7j82mH+SpApgI2hsmL5DYfLm1Z7gw="
|
"hash": "sha256-gPMrVbjOZxXoofczF/pn6eVkLhjVSJIyQrLO2oljrDc="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NETStandard.Library",
|
"pname": "NETStandard.Library",
|
||||||
@@ -206,38 +231,33 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Common",
|
"pname": "NuGet.Common",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-k6JAFqHFinTakwNuW666aXYPhR7TpI/rb+KbHm1S2TM="
|
"hash": "sha256-ASLa/Jigg5Eop0ZrXPl98RW2rxnJRC7pbbxhuV74hFw="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Configuration",
|
"pname": "NuGet.Configuration",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-e/4lvyl7o7g4aWTAtr9S2yiGgk7V0E9p6DXpsy7GgVw="
|
"hash": "sha256-z8VW1YdRDanyyRTDYRvRkSv/XPR3c/hMM1y8cNNjx0Y="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Frameworks",
|
"pname": "NuGet.Frameworks",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-GGpkbas+PNLx35vvr3nyAVz5lY/aeoMx6qjmT368Lpg="
|
"hash": "sha256-caDyc+WgYOo43AUTjtbP0MyvYDb6JweEKDdIul61Cac="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Packaging",
|
"pname": "NuGet.Packaging",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-3h8Nmjpt383+dCg9GJ1BJ26UirwEQsWCPcTiT0+wGeI="
|
"hash": "sha256-lhO+SFwIYZ4aPHxIGm5ubkkE2a5Ve2xgtroRbNh7hpw="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Protocol",
|
"pname": "NuGet.Protocol",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-l+CHnAcit6Y9OjBxereRP5JzOuWbuZZQYkFOKsUkdQ8="
|
"hash": "sha256-5lnAHHZjy7A4vgv65AeBAs64mSNpuoUjxW3HnrMpuzY="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NuGet.Versioning",
|
"pname": "NuGet.Versioning",
|
||||||
"version": "6.12.1",
|
"version": "6.13.2",
|
||||||
"hash": "sha256-f/ejCuzCAwKs4N4Ec6yf2RovrhBT0nj0hRDP+03/Iy4="
|
"hash": "sha256-gmpyBpKnt+GHqgx/2uFKp+J2csbxEAy1E7WdVT117sw="
|
||||||
},
|
|
||||||
{
|
|
||||||
"pname": "NUnit",
|
|
||||||
"version": "4.0.1",
|
|
||||||
"hash": "sha256-jd1CD5nHVXkpvBNpVDJcJyfTggCHLyDBySVSvtrA8Uk="
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NUnit",
|
"pname": "NUnit",
|
||||||
@@ -246,8 +266,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "NUnit3TestAdapter",
|
"pname": "NUnit3TestAdapter",
|
||||||
"version": "4.6.0",
|
"version": "5.0.0",
|
||||||
"hash": "sha256-9Yav2fYhC4w0OgsyUwU4/5rDy4FVDTpKnWHuwl/uKJQ="
|
"hash": "sha256-7jZM4qAbIzne3AcdFfMbvbgogqpxvVe6q2S7Ls8xQy0="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "RestEase",
|
"pname": "RestEase",
|
||||||
@@ -269,6 +289,16 @@
|
|||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs="
|
"hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs="
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Collections.Immutable",
|
||||||
|
"version": "8.0.0",
|
||||||
|
"hash": "sha256-F7OVjKNwpqbUh8lTidbqJWYi476nsq9n+6k0+QVRo3w="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Diagnostics.DiagnosticSource",
|
||||||
|
"version": "5.0.0",
|
||||||
|
"hash": "sha256-6mW3N6FvcdNH/pB58pl+pFSCGWgyaP4hfVtC/SMWDV4="
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pname": "System.Diagnostics.DiagnosticSource",
|
"pname": "System.Diagnostics.DiagnosticSource",
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
@@ -339,15 +369,10 @@
|
|||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
"hash": "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY="
|
"hash": "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY="
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pname": "System.Text.Encodings.Web",
|
|
||||||
"version": "8.0.0",
|
|
||||||
"hash": "sha256-IUQkQkV9po1LC0QsqrilqwNzPvnc+4eVvq+hCvq8fvE="
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pname": "System.Text.Json",
|
"pname": "System.Text.Json",
|
||||||
"version": "8.0.4",
|
"version": "8.0.5",
|
||||||
"hash": "sha256-g5oT7fbXxQ9Iah1nMCr4UUX/a2l+EVjJyTrw3FTbIaI="
|
"hash": "sha256-yKxo54w5odWT6nPruUVsaX53oPRe+gKzGvLnnxtwP68="
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "TypeEquality",
|
"pname": "TypeEquality",
|
||||||
@@ -356,7 +381,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pname": "WoofWare.Whippet.Fantomas",
|
"pname": "WoofWare.Whippet.Fantomas",
|
||||||
"version": "0.3.1",
|
"version": "0.5.1",
|
||||||
"hash": "sha256-i5oiqcrxzM90Ocuq5MIu2Ha5lV0aYu5nCvuwmFqp6NA="
|
"hash": "sha256-59CwnOZQAq5ZJoUkd87OiP8KUwx8xYDLMimMMTlKeZA="
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
Reference in New Issue
Block a user