mirror of
https://github.com/Smaug123/WoofWare.Myriad
synced 2025-10-09 05:58:39 +00:00
Compare commits
41 Commits
WoofWare.M
...
WoofWare.M
Author | SHA1 | Date | |
---|---|---|---|
|
0fe97da788 | ||
|
f944953384 | ||
|
7930039ad1 | ||
|
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 | ||
|
74fdd7c0a9 | ||
|
23f55814f9 | ||
|
15c04bb373 | ||
|
a860a93f9c | ||
|
b056af348e | ||
|
b44c8db6e9 | ||
|
7d6a2cea01 | ||
|
d779a602f4 | ||
|
23cd5272fb | ||
|
93538ee6b4 | ||
|
8a29c2f444 |
@@ -3,13 +3,13 @@
|
|||||||
"isRoot": true,
|
"isRoot": true,
|
||||||
"tools": {
|
"tools": {
|
||||||
"fantomas": {
|
"fantomas": {
|
||||||
"version": "6.3.16",
|
"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"
|
||||||
]
|
]
|
||||||
|
98
.github/workflows/dotnet.yaml
vendored
98
.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 }}
|
||||||
@@ -198,27 +198,40 @@ jobs:
|
|||||||
# Verify that there is exactly one nupkg in the artifact that would be NuGet published
|
# Verify that there is exactly one nupkg in the artifact that would be NuGet published
|
||||||
run: if [[ $(find packed-attribute -maxdepth 1 -name 'WoofWare.Myriad.Plugins.Attributes.*.nupkg' -printf c | wc -c) -ne "1" ]]; then exit 1; fi
|
run: if [[ $(find packed-attribute -maxdepth 1 -name 'WoofWare.Myriad.Plugins.Attributes.*.nupkg' -printf c | wc -c) -ne "1" ]]; then exit 1; fi
|
||||||
|
|
||||||
github-release-plugin-dry-run:
|
github-release-dry-run:
|
||||||
needs: [nuget-pack]
|
strategy:
|
||||||
|
matrix:
|
||||||
|
artifact:
|
||||||
|
- nuget-package-plugin
|
||||||
|
- nuget-package-attribute
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
needs: [nuget-pack]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Download NuGet artifact (plugin)
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: nuget-package-plugin
|
name: ${{ matrix.artifact }}
|
||||||
- name: Download NuGet artifact (attribute)
|
- name: Compute package path
|
||||||
uses: actions/download-artifact@v4
|
id: compute-path
|
||||||
with:
|
run: |
|
||||||
name: nuget-package-attribute
|
find . -maxdepth 1 -type f -name 'WoofWare.Myriad.*.nupkg' -exec sh -c 'echo "output=$(basename "$1")" >> $GITHUB_OUTPUT' shell {} \;
|
||||||
- name: Tag and release plugin
|
- name: Compute tag name
|
||||||
|
id: compute-tag
|
||||||
env:
|
env:
|
||||||
DRY_RUN: 1
|
NUPKG_PATH: ${{ steps.compute-path.outputs.output }}
|
||||||
GITHUB_TOKEN: mock-token
|
run: echo "output=$(basename "$NUPKG_PATH" .nupkg)" >> $GITHUB_OUTPUT
|
||||||
run: sh .github/workflows/tag.sh
|
- name: Tag and release
|
||||||
|
uses: G-Research/common-actions/github-release@19d7281a0f9f83e13c78f99a610dbc80fc59ba3b
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
target-commitish: ${{ github.sha }}
|
||||||
|
tag: ${{ steps.compute-tag.outputs.output }}
|
||||||
|
binary-contents: ${{ steps.compute-path.outputs.output }}
|
||||||
|
dry-run: true
|
||||||
|
|
||||||
all-required-checks-complete:
|
all-required-checks-complete:
|
||||||
needs: [check-dotnet-format, check-nix-format, check-accurate-generations, build, build-nix, linkcheck, flake-check, analyzers, nuget-pack, expected-pack, github-release-plugin-dry-run]
|
needs: [check-dotnet-format, check-nix-format, check-accurate-generations, build, build-nix, linkcheck, flake-check, analyzers, nuget-pack, expected-pack, github-release-dry-run]
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
@@ -241,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"
|
||||||
|
|
||||||
@@ -260,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"
|
||||||
|
|
||||||
@@ -276,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 }}
|
||||||
@@ -309,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 }}
|
||||||
@@ -330,7 +343,12 @@ jobs:
|
|||||||
nupkg-dir: packed/
|
nupkg-dir: packed/
|
||||||
dotnet: ${{ steps.dotnet-identify.outputs.dotnet }}
|
dotnet: ${{ steps.dotnet-identify.outputs.dotnet }}
|
||||||
|
|
||||||
github-release-plugin:
|
github-release:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
artifact:
|
||||||
|
- nuget-package-attribute
|
||||||
|
- nuget-package-plugin
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ !github.event.repository.fork && github.ref == 'refs/heads/main' }}
|
if: ${{ !github.event.repository.fork && github.ref == 'refs/heads/main' }}
|
||||||
needs: [all-required-checks-complete]
|
needs: [all-required-checks-complete]
|
||||||
@@ -339,15 +357,23 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Download NuGet artifact (plugin)
|
- name: Download NuGet artifact
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: nuget-package-plugin
|
name: ${{ matrix.artifact }}
|
||||||
- name: Download NuGet artifact (attribute)
|
- name: Compute package path
|
||||||
uses: actions/download-artifact@v4
|
id: compute-path
|
||||||
with:
|
run: |
|
||||||
name: nuget-package-attribute
|
find . -maxdepth 1 -type f -name 'WoofWare.Myriad.*.nupkg' -exec sh -c 'echo "output=$(basename "$1")" >> $GITHUB_OUTPUT' shell {} \;
|
||||||
- name: Tag and release plugin
|
- name: Compute tag name
|
||||||
|
id: compute-tag
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
NUPKG_PATH: ${{ steps.compute-path.outputs.output }}
|
||||||
run: sh .github/workflows/tag.sh
|
run: echo "output=$(basename "$NUPKG_PATH" .nupkg)" >> $GITHUB_OUTPUT
|
||||||
|
- name: Tag and release
|
||||||
|
uses: G-Research/common-actions/github-release@19d7281a0f9f83e13c78f99a610dbc80fc59ba3b
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
target-commitish: ${{ github.sha }}
|
||||||
|
tag: ${{ steps.compute-tag.outputs.output }}
|
||||||
|
binary-contents: ${{ steps.compute-path.outputs.output }}
|
||||||
|
10
.github/workflows/flake_update.yaml
vendored
10
.github/workflows/flake_update.yaml
vendored
@@ -21,20 +21,20 @@ jobs:
|
|||||||
- name: Update Nix flake
|
- name: Update Nix flake
|
||||||
run: 'nix flake update'
|
run: 'nix flake update'
|
||||||
|
|
||||||
- name: Build passthru
|
- name: Build fetch-deps
|
||||||
run: 'nix build ".#default.passthru.fetch-deps"'
|
run: 'nix build ".#default.fetch-deps"'
|
||||||
|
|
||||||
- name: Run passthru
|
- name: Run fetch-deps
|
||||||
run: |
|
run: |
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
./result nix/deps.nix
|
./result nix/deps.json
|
||||||
|
|
||||||
- name: Format
|
- name: Format
|
||||||
run: 'nix develop --command alejandra .'
|
run: 'nix develop --command alejandra .'
|
||||||
|
|
||||||
- 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 }}
|
||||||
|
120
.github/workflows/tag.sh
vendored
120
.github/workflows/tag.sh
vendored
@@ -1,120 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "Dry-run? $DRY_RUN!"
|
|
||||||
|
|
||||||
find . -maxdepth 1 -type f ! -name "$(printf "*\n*")" -name '*.nupkg' | while IFS= read -r file
|
|
||||||
do
|
|
||||||
tag=$(basename "$file" .nupkg)
|
|
||||||
git tag "$tag"
|
|
||||||
${DRY_RUN:+echo} git push origin "$tag"
|
|
||||||
done
|
|
||||||
|
|
||||||
export TAG
|
|
||||||
TAG=$(find . -maxdepth 1 -type f -name 'WoofWare.Myriad.Plugins.*.nupkg' -exec sh -c 'basename "$1" .nupkg' shell {} \; | grep -v Attributes)
|
|
||||||
|
|
||||||
case "$TAG" in
|
|
||||||
*"
|
|
||||||
"*)
|
|
||||||
echo "Error: TAG contains a newline; multiple plugins found."
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# target_commitish empty indicates the repo default branch
|
|
||||||
curl_body='{"tag_name":"'"$TAG"'","target_commitish":"","name":"'"$TAG"'","draft":false,"prerelease":false,"generate_release_notes":false}'
|
|
||||||
|
|
||||||
echo "cURL body: $curl_body"
|
|
||||||
|
|
||||||
failed_output=$(cat <<'EOF'
|
|
||||||
{
|
|
||||||
"message": "Validation Failed",
|
|
||||||
"errors": [
|
|
||||||
{
|
|
||||||
"resource": "Release",
|
|
||||||
"code": "already_exists",
|
|
||||||
"field": "tag_name"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"documentation_url": "https://docs.github.com/rest/releases/releases#create-a-release"
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
success_output=$(cat <<'EOF'
|
|
||||||
{
|
|
||||||
"url": "https://api.github.com/repos/Smaug123/WoofWare.Myriad/releases/158152116",
|
|
||||||
"assets_url": "https://api.github.com/repos/Smaug123/WoofWare.Myriad/releases/158152116/assets",
|
|
||||||
"upload_url": "https://uploads.github.com/repos/Smaug123/WoofWare.Myriad/releases/158152116/assets{?name,label}",
|
|
||||||
"html_url": "https://github.com/Smaug123/WoofWare.Myriad/releases/tag/WoofWare.Myriad.Plugins.2.1.30",
|
|
||||||
"id": 158152116,
|
|
||||||
"author": {
|
|
||||||
"login": "github-actions[bot]",
|
|
||||||
"id": 41898282,
|
|
||||||
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
|
||||||
"gravatar_id": "",
|
|
||||||
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
|
||||||
"html_url": "https://github.com/apps/github-actions",
|
|
||||||
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
|
||||||
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
|
||||||
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
|
||||||
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
|
||||||
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
|
||||||
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
|
||||||
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
|
||||||
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
|
||||||
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
|
||||||
"type": "Bot",
|
|
||||||
"site_admin": false
|
|
||||||
},
|
|
||||||
"node_id": "RE_kwDOJfksgc4JbTW0",
|
|
||||||
"tag_name": "WoofWare.Myriad.Plugins.2.1.30",
|
|
||||||
"target_commitish": "main",
|
|
||||||
"name": "WoofWare.Myriad.Plugins.2.1.30",
|
|
||||||
"draft": false,
|
|
||||||
"prerelease": false,
|
|
||||||
"created_at": "2024-05-30T11:00:55Z",
|
|
||||||
"published_at": "2024-05-30T11:03:02Z",
|
|
||||||
"assets": [
|
|
||||||
|
|
||||||
],
|
|
||||||
"tarball_url": "https://api.github.com/repos/Smaug123/WoofWare.Myriad/tarball/WoofWare.Myriad.Plugins.2.1.30",
|
|
||||||
"zipball_url": "https://api.github.com/repos/Smaug123/WoofWare.Myriad/zipball/WoofWare.Myriad.Plugins.2.1.30",
|
|
||||||
"body": null
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
HANDLE_OUTPUT=''
|
|
||||||
handle_error() {
|
|
||||||
ERROR_OUTPUT="$1"
|
|
||||||
exit_message=$(echo "$ERROR_OUTPUT" | jq -r --exit-status 'if .errors | length == 1 then .errors[0].code else null end')
|
|
||||||
if [ "$exit_message" = "already_exists" ] ; then
|
|
||||||
HANDLE_OUTPUT="Did not create GitHub release because it already exists at this version."
|
|
||||||
else
|
|
||||||
echo "Unexpected error output from curl: $(cat curl_output.json)"
|
|
||||||
echo "JQ output: $(exit_message)"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
run_tests() {
|
|
||||||
handle_error "$failed_output"
|
|
||||||
if [ "$HANDLE_OUTPUT" != "Did not create GitHub release because it already exists at this version." ]; then
|
|
||||||
echo "Bad output from handler: $HANDLE_OUTPUT"
|
|
||||||
exit 3
|
|
||||||
fi
|
|
||||||
HANDLE_OUTPUT=''
|
|
||||||
echo "Tests passed."
|
|
||||||
}
|
|
||||||
|
|
||||||
run_tests
|
|
||||||
|
|
||||||
if [ "$DRY_RUN" != 1 ] ; then
|
|
||||||
if curl --fail-with-body -L -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $GITHUB_TOKEN" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/Smaug123/WoofWare.Myriad/releases -d "$curl_body" > curl_output.json; then
|
|
||||||
echo "Curl succeeded."
|
|
||||||
else
|
|
||||||
handle_error "$(cat curl_output.json)"
|
|
||||||
echo "$HANDLE_OUTPUT"
|
|
||||||
fi
|
|
||||||
fi
|
|
12
CHANGELOG.md
12
CHANGELOG.md
@@ -1,5 +1,17 @@
|
|||||||
Notable changes are recorded here.
|
Notable changes are recorded here.
|
||||||
|
|
||||||
|
# WoofWare.Myriad.Plugins 6.0.1
|
||||||
|
|
||||||
|
The `ArgParser` generator's type signatures have changed.
|
||||||
|
The `parse'` method no longer takes `getEnvironmentVariable : string -> string`; it's now `getEnvironmentVariable : string -> string option`.
|
||||||
|
This is to permit satisfying the `<Nullable>enable</Nullable>` compiler setting.
|
||||||
|
If you're calling `parse'`, give it `Environment.GetEnvironmentVariable >> Option.ofObj` instead.
|
||||||
|
|
||||||
|
# WoofWare.Myriad.Plugins 5.0.1
|
||||||
|
|
||||||
|
We now enforce non-nullability on more types during JSON parse.
|
||||||
|
We have always expected you to consume nullable types wrapped in an `option`, but now we enforce this in more cases by throwing `ArgumentNullException`.
|
||||||
|
|
||||||
# WoofWare.Myriad.Plugins 3.0.1
|
# WoofWare.Myriad.Plugins 3.0.1
|
||||||
|
|
||||||
Semantics of `HttpClient`'s URI component composition changed:
|
Semantics of `HttpClient`'s URI component composition changed:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,7 @@ module BasicNoPositionals =
|
|||||||
/// Waiting to receive a value for the key we've already consumed
|
/// Waiting to receive a value for the key we've already consumed
|
||||||
| AwaitingValue of key : string
|
| AwaitingValue of key : string
|
||||||
|
|
||||||
let parse' (getEnvironmentVariable : string -> string) (args : string list) : BasicNoPositionals =
|
let parse' (getEnvironmentVariable : string -> string option) (args : string list) : BasicNoPositionals =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -223,7 +223,7 @@ module BasicNoPositionals =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
let parse (args : string list) : BasicNoPositionals =
|
let parse (args : string list) : BasicNoPositionals =
|
||||||
parse' System.Environment.GetEnvironmentVariable args
|
parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -239,7 +239,7 @@ module Basic =
|
|||||||
/// Waiting to receive a value for the key we've already consumed
|
/// Waiting to receive a value for the key we've already consumed
|
||||||
| AwaitingValue of key : string
|
| AwaitingValue of key : string
|
||||||
|
|
||||||
let parse' (getEnvironmentVariable : string -> string) (args : string list) : Basic =
|
let parse' (getEnvironmentVariable : string -> string option) (args : string list) : Basic =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -430,7 +430,7 @@ module Basic =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
let parse (args : string list) : Basic =
|
let parse (args : string list) : Basic =
|
||||||
parse' System.Environment.GetEnvironmentVariable args
|
parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -446,7 +446,7 @@ module BasicWithIntPositionals =
|
|||||||
/// Waiting to receive a value for the key we've already consumed
|
/// Waiting to receive a value for the key we've already consumed
|
||||||
| AwaitingValue of key : string
|
| AwaitingValue of key : string
|
||||||
|
|
||||||
let parse' (getEnvironmentVariable : string -> string) (args : string list) : BasicWithIntPositionals =
|
let parse' (getEnvironmentVariable : string -> string option) (args : string list) : BasicWithIntPositionals =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -633,7 +633,7 @@ module BasicWithIntPositionals =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
let parse (args : string list) : BasicWithIntPositionals =
|
let parse (args : string list) : BasicWithIntPositionals =
|
||||||
parse' System.Environment.GetEnvironmentVariable args
|
parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -649,7 +649,7 @@ module LoadsOfTypes =
|
|||||||
/// Waiting to receive a value for the key we've already consumed
|
/// Waiting to receive a value for the key we've already consumed
|
||||||
| AwaitingValue of key : string
|
| AwaitingValue of key : string
|
||||||
|
|
||||||
let parse' (getEnvironmentVariable : string -> string) (args : string list) : LoadsOfTypes =
|
let parse' (getEnvironmentVariable : string -> string option) (args : string list) : LoadsOfTypes =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -1038,7 +1038,7 @@ module LoadsOfTypes =
|
|||||||
match arg_10 with
|
match arg_10 with
|
||||||
| None ->
|
| None ->
|
||||||
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
||||||
| null ->
|
| None ->
|
||||||
sprintf
|
sprintf
|
||||||
"No value was supplied for %s, nor was environment variable %s set"
|
"No value was supplied for %s, nor was environment variable %s set"
|
||||||
(sprintf "--%s" "yet-another-optional-thing")
|
(sprintf "--%s" "yet-another-optional-thing")
|
||||||
@@ -1046,7 +1046,7 @@ module LoadsOfTypes =
|
|||||||
|> ArgParser_errors.Add
|
|> ArgParser_errors.Add
|
||||||
|
|
||||||
Unchecked.defaultof<_>
|
Unchecked.defaultof<_>
|
||||||
| x -> x |> (fun x -> x)
|
| Some x -> x |> (fun x -> x)
|
||||||
|> Choice2Of2
|
|> Choice2Of2
|
||||||
| Some x -> Choice1Of2 x
|
| Some x -> Choice1Of2 x
|
||||||
|
|
||||||
@@ -1068,7 +1068,7 @@ module LoadsOfTypes =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
let parse (args : string list) : LoadsOfTypes =
|
let parse (args : string list) : LoadsOfTypes =
|
||||||
parse' System.Environment.GetEnvironmentVariable args
|
parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -1084,7 +1084,7 @@ module LoadsOfTypesNoPositionals =
|
|||||||
/// Waiting to receive a value for the key we've already consumed
|
/// Waiting to receive a value for the key we've already consumed
|
||||||
| AwaitingValue of key : string
|
| AwaitingValue of key : string
|
||||||
|
|
||||||
let parse' (getEnvironmentVariable : string -> string) (args : string list) : LoadsOfTypesNoPositionals =
|
let parse' (getEnvironmentVariable : string -> string option) (args : string list) : LoadsOfTypesNoPositionals =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -1476,7 +1476,7 @@ module LoadsOfTypesNoPositionals =
|
|||||||
match arg_9 with
|
match arg_9 with
|
||||||
| None ->
|
| None ->
|
||||||
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
||||||
| null ->
|
| None ->
|
||||||
sprintf
|
sprintf
|
||||||
"No value was supplied for %s, nor was environment variable %s set"
|
"No value was supplied for %s, nor was environment variable %s set"
|
||||||
(sprintf "--%s" "yet-another-optional-thing")
|
(sprintf "--%s" "yet-another-optional-thing")
|
||||||
@@ -1484,7 +1484,7 @@ module LoadsOfTypesNoPositionals =
|
|||||||
|> ArgParser_errors.Add
|
|> ArgParser_errors.Add
|
||||||
|
|
||||||
Unchecked.defaultof<_>
|
Unchecked.defaultof<_>
|
||||||
| x -> x |> (fun x -> x)
|
| Some x -> x |> (fun x -> x)
|
||||||
|> Choice2Of2
|
|> Choice2Of2
|
||||||
| Some x -> Choice1Of2 x
|
| Some x -> Choice1Of2 x
|
||||||
|
|
||||||
@@ -1505,7 +1505,7 @@ module LoadsOfTypesNoPositionals =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
let parse (args : string list) : LoadsOfTypesNoPositionals =
|
let parse (args : string list) : LoadsOfTypesNoPositionals =
|
||||||
parse' System.Environment.GetEnvironmentVariable args
|
parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -1524,7 +1524,7 @@ module DatesAndTimesArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type DatesAndTimes with
|
type DatesAndTimes with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : DatesAndTimes =
|
static member parse' (getEnvironmentVariable : string -> string option) (args : string list) : DatesAndTimes =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -1787,7 +1787,7 @@ module DatesAndTimesArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : DatesAndTimes =
|
static member parse (args : string list) : DatesAndTimes =
|
||||||
DatesAndTimes.parse' System.Environment.GetEnvironmentVariable args
|
DatesAndTimes.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -1806,7 +1806,7 @@ module ParentRecordArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ParentRecord with
|
type ParentRecord with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ParentRecord =
|
static member parse' (getEnvironmentVariable : string -> string option) (args : string list) : ParentRecord =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2016,7 +2016,7 @@ module ParentRecordArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ParentRecord =
|
static member parse (args : string list) : ParentRecord =
|
||||||
ParentRecord.parse' System.Environment.GetEnvironmentVariable args
|
ParentRecord.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2035,7 +2035,11 @@ module ParentRecordChildPosArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ParentRecordChildPos with
|
type ParentRecordChildPos with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ParentRecordChildPos =
|
static member parse'
|
||||||
|
(getEnvironmentVariable : string -> string option)
|
||||||
|
(args : string list)
|
||||||
|
: ParentRecordChildPos
|
||||||
|
=
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2209,7 +2213,7 @@ module ParentRecordChildPosArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ParentRecordChildPos =
|
static member parse (args : string list) : ParentRecordChildPos =
|
||||||
ParentRecordChildPos.parse' System.Environment.GetEnvironmentVariable args
|
ParentRecordChildPos.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2228,7 +2232,11 @@ module ParentRecordSelfPosArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ParentRecordSelfPos with
|
type ParentRecordSelfPos with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ParentRecordSelfPos =
|
static member parse'
|
||||||
|
(getEnvironmentVariable : string -> string option)
|
||||||
|
(args : string list)
|
||||||
|
: ParentRecordSelfPos
|
||||||
|
=
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2388,7 +2396,7 @@ module ParentRecordSelfPosArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ParentRecordSelfPos =
|
static member parse (args : string list) : ParentRecordSelfPos =
|
||||||
ParentRecordSelfPos.parse' System.Environment.GetEnvironmentVariable args
|
ParentRecordSelfPos.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2407,7 +2415,11 @@ module ChoicePositionalsArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ChoicePositionals with
|
type ChoicePositionals with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ChoicePositionals =
|
static member parse'
|
||||||
|
(getEnvironmentVariable : string -> string option)
|
||||||
|
(args : string list)
|
||||||
|
: ChoicePositionals
|
||||||
|
=
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2502,7 +2514,7 @@ module ChoicePositionalsArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ChoicePositionals =
|
static member parse (args : string list) : ChoicePositionals =
|
||||||
ChoicePositionals.parse' System.Environment.GetEnvironmentVariable args
|
ChoicePositionals.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2521,7 +2533,11 @@ module ContainsBoolEnvVarArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ContainsBoolEnvVar with
|
type ContainsBoolEnvVar with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ContainsBoolEnvVar =
|
static member parse'
|
||||||
|
(getEnvironmentVariable : string -> string option)
|
||||||
|
(args : string list)
|
||||||
|
: ContainsBoolEnvVar
|
||||||
|
=
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2653,7 +2669,7 @@ module ContainsBoolEnvVarArgParse =
|
|||||||
match arg_0 with
|
match arg_0 with
|
||||||
| None ->
|
| None ->
|
||||||
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
||||||
| null ->
|
| None ->
|
||||||
sprintf
|
sprintf
|
||||||
"No value was supplied for %s, nor was environment variable %s set"
|
"No value was supplied for %s, nor was environment variable %s set"
|
||||||
(sprintf "--%s" "bool-var")
|
(sprintf "--%s" "bool-var")
|
||||||
@@ -2661,7 +2677,7 @@ module ContainsBoolEnvVarArgParse =
|
|||||||
|> ArgParser_errors.Add
|
|> ArgParser_errors.Add
|
||||||
|
|
||||||
Unchecked.defaultof<_>
|
Unchecked.defaultof<_>
|
||||||
| x ->
|
| Some x ->
|
||||||
if System.String.Equals (x, "1", System.StringComparison.OrdinalIgnoreCase) then
|
if System.String.Equals (x, "1", System.StringComparison.OrdinalIgnoreCase) then
|
||||||
true
|
true
|
||||||
else if System.String.Equals (x, "0", System.StringComparison.OrdinalIgnoreCase) then
|
else if System.String.Equals (x, "0", System.StringComparison.OrdinalIgnoreCase) then
|
||||||
@@ -2679,7 +2695,7 @@ module ContainsBoolEnvVarArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ContainsBoolEnvVar =
|
static member parse (args : string list) : ContainsBoolEnvVar =
|
||||||
ContainsBoolEnvVar.parse' System.Environment.GetEnvironmentVariable args
|
ContainsBoolEnvVar.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2698,7 +2714,7 @@ module WithFlagDuArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type WithFlagDu with
|
type WithFlagDu with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : WithFlagDu =
|
static member parse' (getEnvironmentVariable : string -> string option) (args : string list) : WithFlagDu =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -2852,7 +2868,7 @@ module WithFlagDuArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : WithFlagDu =
|
static member parse (args : string list) : WithFlagDu =
|
||||||
WithFlagDu.parse' System.Environment.GetEnvironmentVariable args
|
WithFlagDu.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -2871,7 +2887,11 @@ module ContainsFlagEnvVarArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ContainsFlagEnvVar with
|
type ContainsFlagEnvVar with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ContainsFlagEnvVar =
|
static member parse'
|
||||||
|
(getEnvironmentVariable : string -> string option)
|
||||||
|
(args : string list)
|
||||||
|
: ContainsFlagEnvVar
|
||||||
|
=
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -3018,7 +3038,7 @@ module ContainsFlagEnvVarArgParse =
|
|||||||
match arg_0 with
|
match arg_0 with
|
||||||
| None ->
|
| None ->
|
||||||
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
match "CONSUMEPLUGIN_THINGS" |> getEnvironmentVariable with
|
||||||
| null ->
|
| None ->
|
||||||
sprintf
|
sprintf
|
||||||
"No value was supplied for %s, nor was environment variable %s set"
|
"No value was supplied for %s, nor was environment variable %s set"
|
||||||
(sprintf "--%s" "dry-run")
|
(sprintf "--%s" "dry-run")
|
||||||
@@ -3026,7 +3046,7 @@ module ContainsFlagEnvVarArgParse =
|
|||||||
|> ArgParser_errors.Add
|
|> ArgParser_errors.Add
|
||||||
|
|
||||||
Unchecked.defaultof<_>
|
Unchecked.defaultof<_>
|
||||||
| x ->
|
| Some x ->
|
||||||
if System.String.Equals (x, "1", System.StringComparison.OrdinalIgnoreCase) then
|
if System.String.Equals (x, "1", System.StringComparison.OrdinalIgnoreCase) then
|
||||||
if true = Consts.FALSE then
|
if true = Consts.FALSE then
|
||||||
DryRunMode.Wet
|
DryRunMode.Wet
|
||||||
@@ -3056,7 +3076,7 @@ module ContainsFlagEnvVarArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ContainsFlagEnvVar =
|
static member parse (args : string list) : ContainsFlagEnvVar =
|
||||||
ContainsFlagEnvVar.parse' System.Environment.GetEnvironmentVariable args
|
ContainsFlagEnvVar.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -3076,7 +3096,7 @@ module ContainsFlagDefaultValueArgParse =
|
|||||||
type ContainsFlagDefaultValue with
|
type ContainsFlagDefaultValue with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: ContainsFlagDefaultValue
|
: ContainsFlagDefaultValue
|
||||||
=
|
=
|
||||||
@@ -3239,7 +3259,7 @@ module ContainsFlagDefaultValueArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ContainsFlagDefaultValue =
|
static member parse (args : string list) : ContainsFlagDefaultValue =
|
||||||
ContainsFlagDefaultValue.parse' System.Environment.GetEnvironmentVariable args
|
ContainsFlagDefaultValue.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -3258,7 +3278,7 @@ module ManyLongFormsArgParse =
|
|||||||
/// Extension methods for argument parsing
|
/// Extension methods for argument parsing
|
||||||
type ManyLongForms with
|
type ManyLongForms with
|
||||||
|
|
||||||
static member parse' (getEnvironmentVariable : string -> string) (args : string list) : ManyLongForms =
|
static member parse' (getEnvironmentVariable : string -> string option) (args : string list) : ManyLongForms =
|
||||||
let ArgParser_errors = ResizeArray ()
|
let ArgParser_errors = ResizeArray ()
|
||||||
|
|
||||||
let helpText () =
|
let helpText () =
|
||||||
@@ -3504,7 +3524,7 @@ module ManyLongFormsArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : ManyLongForms =
|
static member parse (args : string list) : ManyLongForms =
|
||||||
ManyLongForms.parse' System.Environment.GetEnvironmentVariable args
|
ManyLongForms.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -3524,7 +3544,7 @@ module FlagsIntoPositionalArgsArgParse =
|
|||||||
type FlagsIntoPositionalArgs with
|
type FlagsIntoPositionalArgs with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: FlagsIntoPositionalArgs
|
: FlagsIntoPositionalArgs
|
||||||
=
|
=
|
||||||
@@ -3668,7 +3688,7 @@ module FlagsIntoPositionalArgsArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : FlagsIntoPositionalArgs =
|
static member parse (args : string list) : FlagsIntoPositionalArgs =
|
||||||
FlagsIntoPositionalArgs.parse' System.Environment.GetEnvironmentVariable args
|
FlagsIntoPositionalArgs.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -3688,7 +3708,7 @@ module FlagsIntoPositionalArgsChoiceArgParse =
|
|||||||
type FlagsIntoPositionalArgsChoice with
|
type FlagsIntoPositionalArgsChoice with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: FlagsIntoPositionalArgsChoice
|
: FlagsIntoPositionalArgsChoice
|
||||||
=
|
=
|
||||||
@@ -3832,7 +3852,7 @@ module FlagsIntoPositionalArgsChoiceArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : FlagsIntoPositionalArgsChoice =
|
static member parse (args : string list) : FlagsIntoPositionalArgsChoice =
|
||||||
FlagsIntoPositionalArgsChoice.parse' System.Environment.GetEnvironmentVariable args
|
FlagsIntoPositionalArgsChoice.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -3852,7 +3872,7 @@ module FlagsIntoPositionalArgsIntArgParse =
|
|||||||
type FlagsIntoPositionalArgsInt with
|
type FlagsIntoPositionalArgsInt with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: FlagsIntoPositionalArgsInt
|
: FlagsIntoPositionalArgsInt
|
||||||
=
|
=
|
||||||
@@ -3996,7 +4016,7 @@ module FlagsIntoPositionalArgsIntArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : FlagsIntoPositionalArgsInt =
|
static member parse (args : string list) : FlagsIntoPositionalArgsInt =
|
||||||
FlagsIntoPositionalArgsInt.parse' System.Environment.GetEnvironmentVariable args
|
FlagsIntoPositionalArgsInt.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -4016,7 +4036,7 @@ module FlagsIntoPositionalArgsIntChoiceArgParse =
|
|||||||
type FlagsIntoPositionalArgsIntChoice with
|
type FlagsIntoPositionalArgsIntChoice with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: FlagsIntoPositionalArgsIntChoice
|
: FlagsIntoPositionalArgsIntChoice
|
||||||
=
|
=
|
||||||
@@ -4160,7 +4180,7 @@ module FlagsIntoPositionalArgsIntChoiceArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : FlagsIntoPositionalArgsIntChoice =
|
static member parse (args : string list) : FlagsIntoPositionalArgsIntChoice =
|
||||||
FlagsIntoPositionalArgsIntChoice.parse' System.Environment.GetEnvironmentVariable args
|
FlagsIntoPositionalArgsIntChoice.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
namespace ConsumePlugin
|
namespace ConsumePlugin
|
||||||
|
|
||||||
open System
|
open System
|
||||||
@@ -4180,7 +4200,7 @@ module FlagsIntoPositionalArgs'ArgParse =
|
|||||||
type FlagsIntoPositionalArgs' with
|
type FlagsIntoPositionalArgs' with
|
||||||
|
|
||||||
static member parse'
|
static member parse'
|
||||||
(getEnvironmentVariable : string -> string)
|
(getEnvironmentVariable : string -> string option)
|
||||||
(args : string list)
|
(args : string list)
|
||||||
: FlagsIntoPositionalArgs'
|
: FlagsIntoPositionalArgs'
|
||||||
=
|
=
|
||||||
@@ -4324,4 +4344,4 @@ module FlagsIntoPositionalArgs'ArgParse =
|
|||||||
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
ArgParser_errors |> String.concat "\n" |> failwithf "Errors during parse!\n%s"
|
||||||
|
|
||||||
static member parse (args : string list) : FlagsIntoPositionalArgs' =
|
static member parse (args : string list) : FlagsIntoPositionalArgs' =
|
||||||
FlagsIntoPositionalArgs'.parse' System.Environment.GetEnvironmentVariable args
|
FlagsIntoPositionalArgs'.parse' (System.Environment.GetEnvironmentVariable >> Option.ofObj) args
|
||||||
|
@@ -71,7 +71,11 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|
)
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
let arg_4 =
|
let arg_4 =
|
||||||
@@ -84,7 +88,11 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
let arg_3 =
|
let arg_3 =
|
||||||
@@ -109,7 +117,11 @@ module JsonRecordType =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_1 =
|
let arg_1 =
|
||||||
|
@@ -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,7 +60,11 @@ module GymOpeningHours =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_0 =
|
let arg_0 =
|
||||||
@@ -1038,7 +1042,11 @@ module Sessions =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> Visit.jsonParse elt)
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> Visit.jsonParse elt)
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_0 =
|
let arg_0 =
|
||||||
|
@@ -48,7 +48,14 @@ 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
|
return
|
||||||
|
jsonNode.AsArray ()
|
||||||
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> Gym.jsonParse elt)
|
||||||
|
)
|
||||||
|
|> List.ofSeq
|
||||||
}
|
}
|
||||||
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
|> (fun a -> Async.StartAsTask (a, ?cancellationToken = ct))
|
||||||
|
|
||||||
@@ -160,8 +167,7 @@ module PureGymApi =
|
|||||||
| null -> System.Uri "https://whatnot.com/"
|
| null -> System.Uri "https://whatnot.com/"
|
||||||
| v -> v),
|
| v -> v),
|
||||||
System.Uri (
|
System.Uri (
|
||||||
"v1/gyms/{gym}"
|
"v1/gyms/{gym}".Replace ("{gym}", gym.ToString () |> System.Uri.EscapeDataString),
|
||||||
.Replace ("{gym}", gym.ToString () |> System.Uri.EscapeDataString),
|
|
||||||
System.UriKind.Relative
|
System.UriKind.Relative
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@@ -408,7 +408,11 @@ module InnerTypeWithBothJsonParseExtension =
|
|||||||
|
|
||||||
let value =
|
let value =
|
||||||
(kvp.Value).AsArray ()
|
(kvp.Value).AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Char> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.Char> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
key, value
|
key, value
|
||||||
@@ -676,7 +680,11 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|
)
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
let arg_4 =
|
let arg_4 =
|
||||||
@@ -689,7 +697,11 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> Array.ofSeq
|
|> Array.ofSeq
|
||||||
|
|
||||||
let arg_3 =
|
let arg_3 =
|
||||||
@@ -714,7 +726,11 @@ module JsonRecordTypeWithBothJsonParseExtension =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.Int32> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.Int32> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_1 =
|
let arg_1 =
|
||||||
|
@@ -94,7 +94,11 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_3 =
|
let arg_3 =
|
||||||
@@ -107,7 +111,11 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_2 =
|
let arg_2 =
|
||||||
@@ -120,7 +128,11 @@ module JwtVaultAuthResponse =
|
|||||||
)
|
)
|
||||||
| v -> v)
|
| v -> v)
|
||||||
.AsArray ()
|
.AsArray ()
|
||||||
|> Seq.map (fun elt -> elt.AsValue().GetValue<System.String> ())
|
|> Seq.map (fun elt ->
|
||||||
|
(match elt with
|
||||||
|
| null -> raise (System.ArgumentNullException ())
|
||||||
|
| elt -> elt.AsValue().GetValue<System.String> ())
|
||||||
|
)
|
||||||
|> List.ofSeq
|
|> List.ofSeq
|
||||||
|
|
||||||
let arg_1 =
|
let arg_1 =
|
||||||
|
@@ -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.112" 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.14" />
|
<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.0"/>
|
<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>
|
||||||
|
@@ -68,7 +68,7 @@ module TestArgParser =
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envCalls |> ignore<int>
|
Interlocked.Increment envCalls |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let args = [ "--foo=3" ; "--non-existent" ; "--bar=4" ; "--baz=true" ]
|
let args = [ "--foo=3" ; "--non-existent" ; "--bar=4" ; "--baz=true" ]
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ module TestArgParser =
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envCalls |> ignore<int>
|
Interlocked.Increment envCalls |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let property (args : (int * bool) list) (afterDoubleDash : int list option) =
|
let property (args : (int * bool) list) (afterDoubleDash : int list option) =
|
||||||
let flatArgs =
|
let flatArgs =
|
||||||
@@ -127,7 +127,7 @@ module TestArgParser =
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envCalls |> ignore<int>
|
Interlocked.Increment envCalls |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let args = [ "--foo=3" ; "--rest" ; "7" ; "--bar=4" ; "--baz=true" ; "--rest=8" ]
|
let args = [ "--foo=3" ; "--rest" ; "7" ; "--bar=4" ; "--baz=true" ; "--rest=8" ]
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ module TestArgParser =
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envCalls |> ignore<int>
|
Interlocked.Increment envCalls |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let args = [ "--foo=3" ; "--foo" ; "9" ; "--bar=4" ; "--baz=true" ; "--baz=false" ]
|
let args = [ "--foo=3" ; "--foo" ; "9" ; "--bar=4" ; "--baz=true" ; "--baz=false" ]
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ Argument '--baz' was supplied multiple times: True and false"""
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envCalls |> ignore<int>
|
Interlocked.Increment envCalls |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let args = [ "--" ; "--foo=3" ; "--bar=4" ; "--baz=true" ]
|
let args = [ "--" ; "--foo=3" ; "--bar=4" ; "--baz=true" ]
|
||||||
|
|
||||||
@@ -191,7 +191,7 @@ Required argument '--baz' received no value"""
|
|||||||
let ``Help text`` () =
|
let ``Help text`` () =
|
||||||
let getEnvVar (s : string) =
|
let getEnvVar (s : string) =
|
||||||
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
||||||
"hi!"
|
Some "hi!"
|
||||||
|
|
||||||
let exc =
|
let exc =
|
||||||
Assert.Throws<exn> (fun () -> Basic.parse' getEnvVar [ "--help" ] |> ignore<Basic>)
|
Assert.Throws<exn> (fun () -> Basic.parse' getEnvVar [ "--help" ] |> ignore<Basic>)
|
||||||
@@ -210,7 +210,7 @@ Required argument '--baz' received no value"""
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment envVars |> ignore<int>
|
Interlocked.Increment envVars |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let exc =
|
let exc =
|
||||||
Assert.Throws<exn> (fun () -> LoadsOfTypes.parse' getEnvVar [ "--help" ] |> ignore<LoadsOfTypes>)
|
Assert.Throws<exn> (fun () -> LoadsOfTypes.parse' getEnvVar [ "--help" ] |> ignore<LoadsOfTypes>)
|
||||||
@@ -236,7 +236,7 @@ Required argument '--baz' received no value"""
|
|||||||
let ``Default values`` () =
|
let ``Default values`` () =
|
||||||
let getEnvVar (s : string) =
|
let getEnvVar (s : string) =
|
||||||
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
||||||
"hi!"
|
Some "hi!"
|
||||||
|
|
||||||
let args =
|
let args =
|
||||||
[
|
[
|
||||||
@@ -264,7 +264,7 @@ Required argument '--baz' received no value"""
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment count |> ignore<int>
|
Interlocked.Increment count |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let exc =
|
let exc =
|
||||||
Assert.Throws<exn> (fun () -> DatesAndTimes.parse' getEnvVar [ "--help" ] |> ignore<DatesAndTimes>)
|
Assert.Throws<exn> (fun () -> DatesAndTimes.parse' getEnvVar [ "--help" ] |> ignore<DatesAndTimes>)
|
||||||
@@ -285,7 +285,7 @@ Required argument '--baz' received no value"""
|
|||||||
|
|
||||||
let getEnvVar (_ : string) =
|
let getEnvVar (_ : string) =
|
||||||
Interlocked.Increment count |> ignore<int>
|
Interlocked.Increment count |> ignore<int>
|
||||||
""
|
None
|
||||||
|
|
||||||
let parsed =
|
let parsed =
|
||||||
DatesAndTimes.parse'
|
DatesAndTimes.parse'
|
||||||
@@ -448,7 +448,7 @@ Required argument '--exact' received no value"""
|
|||||||
let ``Bool env vars can be populated`` (envValue : string, boolValue : bool) =
|
let ``Bool env vars can be populated`` (envValue : string, boolValue : bool) =
|
||||||
let getEnvVar (s : string) =
|
let getEnvVar (s : string) =
|
||||||
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
||||||
envValue
|
Some envValue
|
||||||
|
|
||||||
ContainsBoolEnvVar.parse' getEnvVar []
|
ContainsBoolEnvVar.parse' getEnvVar []
|
||||||
|> shouldEqual
|
|> shouldEqual
|
||||||
@@ -470,7 +470,7 @@ Required argument '--exact' received no value"""
|
|||||||
let ``Flag DUs can be parsed from env var`` (envValue : string, boolValue : bool) =
|
let ``Flag DUs can be parsed from env var`` (envValue : string, boolValue : bool) =
|
||||||
let getEnvVar (s : string) =
|
let getEnvVar (s : string) =
|
||||||
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
s |> shouldEqual "CONSUMEPLUGIN_THINGS"
|
||||||
envValue
|
Some envValue
|
||||||
|
|
||||||
let boolValue = if boolValue then DryRunMode.Dry else DryRunMode.Wet
|
let boolValue = if boolValue then DryRunMode.Dry else DryRunMode.Wet
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ namespace WoofWare.Myriad.Plugins.Test
|
|||||||
open System
|
open System
|
||||||
open System.Collections.Generic
|
open System.Collections.Generic
|
||||||
open System.Text.Json.Nodes
|
open System.Text.Json.Nodes
|
||||||
open FsCheck.Random
|
open FsCheck.FSharp
|
||||||
open Microsoft.FSharp.Reflection
|
open Microsoft.FSharp.Reflection
|
||||||
open NUnit.Framework
|
open NUnit.Framework
|
||||||
open FsCheck
|
open FsCheck
|
||||||
@@ -15,21 +15,21 @@ module TestJsonSerde =
|
|||||||
|
|
||||||
let uriGen : Gen<Uri> =
|
let uriGen : Gen<Uri> =
|
||||||
gen {
|
gen {
|
||||||
let! suffix = Arb.generate<int>
|
let! suffix = ArbMap.generate<int> ArbMap.defaults
|
||||||
return Uri $"https://example.com/%i{suffix}"
|
return Uri $"https://example.com/%i{suffix}"
|
||||||
}
|
}
|
||||||
|
|
||||||
let rec innerGen (count : int) : Gen<InnerTypeWithBoth> =
|
let rec innerGen (count : int) : Gen<InnerTypeWithBoth> =
|
||||||
gen {
|
gen {
|
||||||
let! guid = Arb.generate<Guid>
|
let! guid = ArbMap.generate<Guid> ArbMap.defaults
|
||||||
let! mapKeys = Gen.listOf Arb.generate<NonNull<string>>
|
let! mapKeys = Gen.listOf (ArbMap.generate<NonNull<string>> ArbMap.defaults)
|
||||||
let mapKeys = mapKeys |> List.map _.Get |> List.distinct
|
let mapKeys = mapKeys |> List.map _.Get |> List.distinct
|
||||||
let! mapValues = Gen.listOfLength mapKeys.Length uriGen
|
let! mapValues = Gen.listOfLength mapKeys.Length uriGen
|
||||||
let map = List.zip mapKeys mapValues |> Map.ofList
|
let map = List.zip mapKeys mapValues |> Map.ofList
|
||||||
|
|
||||||
let! concreteDictKeys =
|
let! concreteDictKeys =
|
||||||
if count > 0 then
|
if count > 0 then
|
||||||
Gen.listOf Arb.generate<NonNull<string>>
|
Gen.listOf (ArbMap.generate<NonNull<string>> ArbMap.defaults)
|
||||||
else
|
else
|
||||||
Gen.constant []
|
Gen.constant []
|
||||||
|
|
||||||
@@ -50,13 +50,16 @@ module TestJsonSerde =
|
|||||||
|> List.map KeyValuePair
|
|> List.map KeyValuePair
|
||||||
|> Dictionary
|
|> Dictionary
|
||||||
|
|
||||||
let! readOnlyDictKeys = Gen.listOf Arb.generate<NonNull<string>>
|
let! readOnlyDictKeys = Gen.listOf (ArbMap.generate<NonNull<string>> ArbMap.defaults)
|
||||||
let readOnlyDictKeys = readOnlyDictKeys |> List.map _.Get |> List.distinct
|
let readOnlyDictKeys = readOnlyDictKeys |> List.map _.Get |> List.distinct
|
||||||
let! readOnlyDictValues = Gen.listOfLength readOnlyDictKeys.Length (Gen.listOf Arb.generate<char>)
|
|
||||||
|
let! readOnlyDictValues =
|
||||||
|
Gen.listOfLength readOnlyDictKeys.Length (Gen.listOf (ArbMap.generate<char> ArbMap.defaults))
|
||||||
|
|
||||||
let readOnlyDict = List.zip readOnlyDictKeys readOnlyDictValues |> readOnlyDict
|
let readOnlyDict = List.zip readOnlyDictKeys readOnlyDictValues |> readOnlyDict
|
||||||
|
|
||||||
let! dictKeys = Gen.listOf uriGen
|
let! dictKeys = Gen.listOf uriGen
|
||||||
let! dictValues = Gen.listOfLength dictKeys.Length Arb.generate<bool>
|
let! dictValues = Gen.listOfLength dictKeys.Length (ArbMap.generate<bool> ArbMap.defaults)
|
||||||
let dict = List.zip dictKeys dictValues |> dict
|
let dict = List.zip dictKeys dictValues |> dict
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -71,28 +74,38 @@ module TestJsonSerde =
|
|||||||
|
|
||||||
let outerGen : Gen<JsonRecordTypeWithBoth> =
|
let outerGen : Gen<JsonRecordTypeWithBoth> =
|
||||||
gen {
|
gen {
|
||||||
let! a = Arb.generate<int>
|
let! a = ArbMap.generate<int> ArbMap.defaults
|
||||||
let! b = Arb.generate<NonNull<string>>
|
let! b = ArbMap.generate<NonNull<string>> ArbMap.defaults
|
||||||
let! c = Gen.listOf Arb.generate<int>
|
let! c = Gen.listOf (ArbMap.generate<int> ArbMap.defaults)
|
||||||
let! depth = Gen.choose (0, 2)
|
let! depth = Gen.choose (0, 2)
|
||||||
let! d = innerGen depth
|
let! d = innerGen depth
|
||||||
let! e = Gen.arrayOf Arb.generate<NonNull<string>>
|
let! e = Gen.arrayOf (ArbMap.generate<NonNull<string>> ArbMap.defaults)
|
||||||
let! arr = Gen.arrayOf Arb.generate<int>
|
let! arr = Gen.arrayOf (ArbMap.generate<int> ArbMap.defaults)
|
||||||
let! byte = Arb.generate
|
let! byte = ArbMap.generate ArbMap.defaults
|
||||||
let! sbyte = Arb.generate
|
let! sbyte = ArbMap.generate ArbMap.defaults
|
||||||
let! i = Arb.generate
|
let! i = ArbMap.generate ArbMap.defaults
|
||||||
let! i32 = Arb.generate
|
let! i32 = ArbMap.generate ArbMap.defaults
|
||||||
let! i64 = Arb.generate
|
let! i64 = ArbMap.generate ArbMap.defaults
|
||||||
let! u = Arb.generate
|
let! u = ArbMap.generate ArbMap.defaults
|
||||||
let! u32 = Arb.generate
|
let! u32 = ArbMap.generate ArbMap.defaults
|
||||||
let! u64 = Arb.generate
|
let! u64 = ArbMap.generate ArbMap.defaults
|
||||||
let! f = Arb.generate |> Gen.filter (fun s -> Double.IsFinite (s / 1.0<measure>))
|
|
||||||
let! f32 = Arb.generate |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f<measure>))
|
let! f =
|
||||||
let! single = Arb.generate |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f<measure>))
|
ArbMap.generate ArbMap.defaults
|
||||||
let! intMeasureOption = Arb.generate
|
|> Gen.filter (fun s -> Double.IsFinite (s / 1.0<measure>))
|
||||||
let! intMeasureNullable = Arb.generate
|
|
||||||
|
let! f32 =
|
||||||
|
ArbMap.generate ArbMap.defaults
|
||||||
|
|> Gen.filter (fun s -> Single.IsFinite (s / 1.0f<measure>))
|
||||||
|
|
||||||
|
let! single =
|
||||||
|
ArbMap.generate ArbMap.defaults
|
||||||
|
|> Gen.filter (fun s -> Single.IsFinite (s / 1.0f<measure>))
|
||||||
|
|
||||||
|
let! intMeasureOption = ArbMap.generate ArbMap.defaults
|
||||||
|
let! intMeasureNullable = ArbMap.generate ArbMap.defaults
|
||||||
let! someEnum = Gen.choose (0, 1)
|
let! someEnum = Gen.choose (0, 1)
|
||||||
let! timestamp = Arb.generate
|
let! timestamp = ArbMap.generate ArbMap.defaults
|
||||||
|
|
||||||
return
|
return
|
||||||
{
|
{
|
||||||
@@ -270,10 +283,10 @@ module TestJsonSerde =
|
|||||||
match case with
|
match case with
|
||||||
| 0 -> return FirstDu.EmptyCase
|
| 0 -> return FirstDu.EmptyCase
|
||||||
| 1 ->
|
| 1 ->
|
||||||
let! s = Arb.generate<NonNull<string>>
|
let! s = ArbMap.generate<NonNull<string>> ArbMap.defaults
|
||||||
return FirstDu.Case1 s.Get
|
return FirstDu.Case1 s.Get
|
||||||
| 2 ->
|
| 2 ->
|
||||||
let! i = Arb.generate<int>
|
let! i = ArbMap.generate<int> ArbMap.defaults
|
||||||
let! record = outerGen
|
let! record = outerGen
|
||||||
return FirstDu.Case2 (record, i)
|
return FirstDu.Case2 (record, i)
|
||||||
| _ -> return failwith $"unexpected: %i{case}"
|
| _ -> return failwith $"unexpected: %i{case}"
|
||||||
@@ -293,7 +306,6 @@ module TestJsonSerde =
|
|||||||
|
|
||||||
[<Test>]
|
[<Test>]
|
||||||
let ``DU generator covers all cases`` () =
|
let ``DU generator covers all cases`` () =
|
||||||
let rand = Random ()
|
|
||||||
let cases = FSharpType.GetUnionCases typeof<FirstDu>
|
let cases = FSharpType.GetUnionCases typeof<FirstDu>
|
||||||
let counts = Array.zeroCreate<int> cases.Length
|
let counts = Array.zeroCreate<int> cases.Length
|
||||||
|
|
||||||
@@ -301,11 +313,13 @@ module TestJsonSerde =
|
|||||||
|
|
||||||
let mutable i = 0
|
let mutable i = 0
|
||||||
|
|
||||||
while i < 10_000 && Array.exists (fun i -> i = 0) counts do
|
let property (du : FirstDu) =
|
||||||
let du = Gen.eval 10 (StdGen.StdGen (rand.Next (), rand.Next ())) duGen
|
|
||||||
let tag = decompose du
|
let tag = decompose du
|
||||||
counts.[tag] <- counts.[tag] + 1
|
counts.[tag] <- counts.[tag] + 1
|
||||||
i <- i + 1
|
i <- i + 1
|
||||||
|
true
|
||||||
|
|
||||||
|
Check.One (Config.Quick, Prop.forAll (Arb.fromGen duGen) property)
|
||||||
|
|
||||||
for i in counts do
|
for i in counts do
|
||||||
i |> shouldBeGreaterThan 0
|
i |> shouldBeGreaterThan 0
|
||||||
|
@@ -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>
|
||||||
@@ -41,12 +42,12 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ApiSurface" Version="4.1.14"/>
|
<PackageReference Include="ApiSurface" Version="4.1.20"/>
|
||||||
<PackageReference Include="FsCheck" Version="2.16.6"/>
|
<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.0"/>
|
<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
|
||||||
@@ -1396,7 +1396,7 @@ module internal ArgParserGenerator =
|
|||||||
|
|
||||||
[
|
[
|
||||||
SynMatchClause.create
|
SynMatchClause.create
|
||||||
SynPat.createNull
|
(SynPat.named "None")
|
||||||
(SynExpr.sequential
|
(SynExpr.sequential
|
||||||
[
|
[
|
||||||
errorMessage
|
errorMessage
|
||||||
@@ -1406,7 +1406,7 @@ module internal ArgParserGenerator =
|
|||||||
unchecked
|
unchecked
|
||||||
])
|
])
|
||||||
|
|
||||||
SynMatchClause.create (SynPat.named "x") parser
|
SynMatchClause.create (SynPat.nameWithArgs "Some" [ SynPat.named "x" ]) parser
|
||||||
]
|
]
|
||||||
|> SynExpr.createMatch result
|
|> SynExpr.createMatch result
|
||||||
| ArgumentDefaultSpec.FunctionCall name ->
|
| ArgumentDefaultSpec.FunctionCall name ->
|
||||||
@@ -1694,7 +1694,7 @@ module internal ArgParserGenerator =
|
|||||||
[ Ident.create "parse'" ]
|
[ Ident.create "parse'" ]
|
||||||
[
|
[
|
||||||
SynPat.named "getEnvironmentVariable"
|
SynPat.named "getEnvironmentVariable"
|
||||||
|> SynPat.annotateType (SynType.funFromDomain SynType.string SynType.string)
|
|> SynPat.annotateType (SynType.funFromDomain SynType.string (SynType.option SynType.string))
|
||||||
argsParam
|
argsParam
|
||||||
]
|
]
|
||||||
|> SynBinding.withReturnAnnotation (SynType.createLongIdent [ taggedType.Name ])
|
|> SynBinding.withReturnAnnotation (SynType.createLongIdent [ taggedType.Name ])
|
||||||
@@ -1708,7 +1708,12 @@ module internal ArgParserGenerator =
|
|||||||
|
|
||||||
let parse =
|
let parse =
|
||||||
SynExpr.createLongIdent' parsePrimeCall
|
SynExpr.createLongIdent' parsePrimeCall
|
||||||
|> SynExpr.applyTo (SynExpr.createLongIdent [ "System" ; "Environment" ; "GetEnvironmentVariable" ])
|
|> SynExpr.applyTo (
|
||||||
|
SynExpr.paren (
|
||||||
|
SynExpr.createLongIdent [ "System" ; "Environment" ; "GetEnvironmentVariable" ]
|
||||||
|
|> SynExpr.composeWith (SynExpr.createLongIdent [ "Option" ; "ofObj" ])
|
||||||
|
)
|
||||||
|
)
|
||||||
|> SynExpr.applyTo (SynExpr.createIdent "args")
|
|> SynExpr.applyTo (SynExpr.createIdent "args")
|
||||||
|> SynBinding.basic [ Ident.create "parse" ] [ argsParam ]
|
|> SynBinding.basic [ Ident.create "parse" ] [ argsParam ]
|
||||||
|> SynBinding.withReturnAnnotation (SynType.createLongIdent [ taggedType.Name ])
|
|> SynBinding.withReturnAnnotation (SynType.createLongIdent [ taggedType.Name ])
|
||||||
|
@@ -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
|
||||||
|
@@ -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 =
|
||||||
|
@@ -26,7 +26,7 @@ module internal JsonParseGenerator =
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// (match {indexed} with | null -> raise (System.Collections.Generic.KeyNotFoundException ({propertyName} not found)) | v -> v)
|
/// (match {indexed} with | null -> raise (System.Collections.Generic.KeyNotFoundException ({propertyName} not found)) | v -> v)
|
||||||
let assertNotNull (propertyName : SynExpr) (indexed : SynExpr) =
|
let assertPropertyExists (propertyName : SynExpr) (indexed : SynExpr) =
|
||||||
let raiseExpr =
|
let raiseExpr =
|
||||||
SynExpr.applyFunction
|
SynExpr.applyFunction
|
||||||
(SynExpr.createIdent "sprintf")
|
(SynExpr.createIdent "sprintf")
|
||||||
@@ -46,28 +46,42 @@ module internal JsonParseGenerator =
|
|||||||
|> SynExpr.createMatch indexed
|
|> SynExpr.createMatch indexed
|
||||||
|> SynExpr.paren
|
|> SynExpr.paren
|
||||||
|
|
||||||
|
let assertNotNull (boundIdent : Ident) (body : SynExpr) : SynExpr =
|
||||||
|
let raiseExpr =
|
||||||
|
SynExpr.CreateConst ()
|
||||||
|
|> SynExpr.applyFunction (SynExpr.createLongIdent [ "System" ; "ArgumentNullException" ])
|
||||||
|
|> SynExpr.paren
|
||||||
|
|> SynExpr.applyFunction (SynExpr.createIdent "raise")
|
||||||
|
|
||||||
|
[
|
||||||
|
SynMatchClause.create SynPat.createNull raiseExpr
|
||||||
|
SynMatchClause.create (SynPat.namedI boundIdent) body
|
||||||
|
]
|
||||||
|
|> SynExpr.createMatch (SynExpr.createIdent' boundIdent)
|
||||||
|
|> SynExpr.paren
|
||||||
|
|
||||||
/// {node}.AsValue().GetValue<{typeName}> ()
|
/// {node}.AsValue().GetValue<{typeName}> ()
|
||||||
/// If `propertyName` is Some, uses `assertNotNull {node}` instead of `{node}`.
|
/// If `propertyName` is Some, uses `assertPropertyExists {node}` instead of `{node}`.
|
||||||
let asValueGetValue (propertyName : SynExpr option) (typeName : string) (node : SynExpr) : SynExpr =
|
let asValueGetValue (propertyName : SynExpr option) (typeName : string) (node : SynExpr) : SynExpr =
|
||||||
match propertyName with
|
match propertyName with
|
||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertPropertyExists propertyName node
|
||||||
|> SynExpr.callMethod "AsValue"
|
|> SynExpr.callMethod "AsValue"
|
||||||
|> SynExpr.callGenericMethod' "GetValue" typeName
|
|> SynExpr.callGenericMethod' "GetValue" typeName
|
||||||
|
|
||||||
let asValueGetValueIdent (propertyName : SynExpr option) (typeName : LongIdent) (node : SynExpr) : SynExpr =
|
let asValueGetValueIdent (propertyName : SynExpr option) (typeName : LongIdent) (node : SynExpr) : SynExpr =
|
||||||
match propertyName with
|
match propertyName with
|
||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertPropertyExists propertyName node
|
||||||
|> SynExpr.callMethod "AsValue"
|
|> SynExpr.callMethod "AsValue"
|
||||||
|> SynExpr.callGenericMethod (SynLongIdent.createS "GetValue") [ SynType.createLongIdent typeName ]
|
|> SynExpr.callGenericMethod (SynLongIdent.createS "GetValue") [ SynType.createLongIdent typeName ]
|
||||||
|
|
||||||
/// {node}.AsObject()
|
/// {node}.AsObject()
|
||||||
/// If `propertyName` is Some, uses `assertNotNull {node}` instead of `{node}`.
|
/// If `propertyName` is Some, uses `assertPropertyExists {node}` instead of `{node}`.
|
||||||
let asObject (propertyName : SynExpr option) (node : SynExpr) : SynExpr =
|
let asObject (propertyName : SynExpr option) (node : SynExpr) : SynExpr =
|
||||||
match propertyName with
|
match propertyName with
|
||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertPropertyExists propertyName node
|
||||||
|> SynExpr.callMethod "AsObject"
|
|> SynExpr.callMethod "AsObject"
|
||||||
|
|
||||||
/// {type}.jsonParse {node}
|
/// {type}.jsonParse {node}
|
||||||
@@ -77,8 +91,8 @@ 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()
|
/// {assertPropertyExists node}.AsArray()
|
||||||
/// |> Seq.map (fun elt -> {body})
|
/// |> Seq.map (fun elt -> {assertNotNull} {body})
|
||||||
/// |> {collectionType}.ofSeq
|
/// |> {collectionType}.ofSeq
|
||||||
let asArrayMapped
|
let asArrayMapped
|
||||||
(propertyName : SynExpr option)
|
(propertyName : SynExpr option)
|
||||||
@@ -89,10 +103,12 @@ module internal JsonParseGenerator =
|
|||||||
=
|
=
|
||||||
match propertyName with
|
match propertyName with
|
||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertPropertyExists propertyName node
|
||||||
|> SynExpr.callMethod "AsArray"
|
|> SynExpr.callMethod "AsArray"
|
||||||
|> SynExpr.pipeThroughFunction (
|
|> SynExpr.pipeThroughFunction (
|
||||||
SynExpr.applyFunction (SynExpr.createLongIdent [ "Seq" ; "map" ]) (SynExpr.createLambda "elt" body)
|
SynExpr.applyFunction
|
||||||
|
(SynExpr.createLongIdent [ "Seq" ; "map" ])
|
||||||
|
(SynExpr.createLambda "elt" (assertNotNull (Ident.create "elt") body))
|
||||||
)
|
)
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ collectionType ; "ofSeq" ])
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ collectionType ; "ofSeq" ])
|
||||||
|
|
||||||
@@ -177,27 +193,29 @@ module internal JsonParseGenerator =
|
|||||||
=
|
=
|
||||||
// TODO: parsing format for DateTime etc
|
// TODO: parsing format for DateTime etc
|
||||||
match fieldType with
|
match fieldType with
|
||||||
|
// Struct types
|
||||||
| DateOnly ->
|
| DateOnly ->
|
||||||
node
|
node
|
||||||
|> asValueGetValue propertyName "string"
|
|> asValueGetValue propertyName "string"
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateOnly" ; "Parse" ])
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateOnly" ; "Parse" ])
|
||||||
| Uri ->
|
|
||||||
node
|
|
||||||
|> asValueGetValue propertyName "string"
|
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "Uri" ])
|
|
||||||
| Guid ->
|
|
||||||
node
|
|
||||||
|> asValueGetValue propertyName "string"
|
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "Guid" ; "Parse" ])
|
|
||||||
| DateTime ->
|
| DateTime ->
|
||||||
node
|
node
|
||||||
|> asValueGetValue propertyName "string"
|
|> asValueGetValue propertyName "string"
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateTime" ; "Parse" ])
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateTime" ; "Parse" ])
|
||||||
|
| NumberType typeName -> parseNumberType options propertyName node typeName
|
||||||
|
| Guid ->
|
||||||
|
node
|
||||||
|
|> asValueGetValue propertyName "string"
|
||||||
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "Guid" ; "Parse" ])
|
||||||
|
// Reference types
|
||||||
|
| Uri ->
|
||||||
|
node
|
||||||
|
|> asValueGetValue propertyName "string"
|
||||||
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "Uri" ])
|
||||||
| DateTimeOffset ->
|
| DateTimeOffset ->
|
||||||
node
|
node
|
||||||
|> asValueGetValue propertyName "string"
|
|> asValueGetValue propertyName "string"
|
||||||
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateTimeOffset" ; "Parse" ])
|
|> SynExpr.pipeThroughFunction (SynExpr.createLongIdent [ "System" ; "DateTimeOffset" ; "Parse" ])
|
||||||
| NumberType typeName -> parseNumberType options propertyName node typeName
|
|
||||||
| PrimitiveType typeName -> asValueGetValueIdent propertyName typeName node
|
| PrimitiveType typeName -> asValueGetValueIdent propertyName typeName node
|
||||||
| OptionType ty ->
|
| OptionType ty ->
|
||||||
let someClause =
|
let someClause =
|
||||||
@@ -291,7 +309,7 @@ module internal JsonParseGenerator =
|
|||||||
|
|
||||||
match propertyName with
|
match propertyName with
|
||||||
| None -> node
|
| None -> node
|
||||||
| Some propertyName -> assertNotNull propertyName node
|
| Some propertyName -> assertPropertyExists propertyName node
|
||||||
|> typeJsonParse typeName
|
|> typeJsonParse typeName
|
||||||
|
|
||||||
/// propertyName is probably a string literal, but it could be a [<Literal>] variable
|
/// propertyName is probably a string literal, but it could be a [<Literal>] variable
|
||||||
@@ -351,10 +369,7 @@ module internal JsonParseGenerator =
|
|||||||
let getParseOptions (fieldAttrs : SynAttribute list) =
|
let getParseOptions (fieldAttrs : SynAttribute list) =
|
||||||
(JsonParseOption.None, fieldAttrs)
|
(JsonParseOption.None, fieldAttrs)
|
||||||
||> List.fold (fun options attr ->
|
||> List.fold (fun options attr ->
|
||||||
if
|
if (SynLongIdent.toString attr.TypeName).EndsWith ("JsonNumberHandling", StringComparison.Ordinal) then
|
||||||
(SynLongIdent.toString attr.TypeName)
|
|
||||||
.EndsWith ("JsonNumberHandling", StringComparison.Ordinal)
|
|
||||||
then
|
|
||||||
let qualifiedEnumValue =
|
let qualifiedEnumValue =
|
||||||
match SynExpr.stripOptionalParen attr.ArgExpr with
|
match SynExpr.stripOptionalParen attr.ArgExpr with
|
||||||
| SynExpr.LongIdent (_, SynLongIdent (ident, _, _), _, _) when isJsonNumberHandling ident ->
|
| SynExpr.LongIdent (_, SynLongIdent (ident, _, _), _, _) when isJsonNumberHandling ident ->
|
||||||
@@ -384,15 +399,13 @@ module internal JsonParseGenerator =
|
|||||||
let propertyNameAttr =
|
let propertyNameAttr =
|
||||||
fieldData.Attrs
|
fieldData.Attrs
|
||||||
|> List.tryFind (fun attr ->
|
|> List.tryFind (fun attr ->
|
||||||
(SynLongIdent.toString attr.TypeName)
|
(SynLongIdent.toString attr.TypeName).EndsWith ("JsonPropertyName", StringComparison.Ordinal)
|
||||||
.EndsWith ("JsonPropertyName", StringComparison.Ordinal)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
let extensionDataAttr =
|
let extensionDataAttr =
|
||||||
fieldData.Attrs
|
fieldData.Attrs
|
||||||
|> List.tryFind (fun attr ->
|
|> List.tryFind (fun attr ->
|
||||||
(SynLongIdent.toString attr.TypeName)
|
(SynLongIdent.toString attr.TypeName).EndsWith ("JsonExtensionData", StringComparison.Ordinal)
|
||||||
.EndsWith ("JsonExtensionData", StringComparison.Ordinal)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
let propertyName =
|
let propertyName =
|
||||||
@@ -485,7 +498,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)
|
||||||
@@ -510,7 +523,7 @@ module internal JsonParseGenerator =
|
|||||||
|> SynExpr.createLet
|
|> SynExpr.createLet
|
||||||
[
|
[
|
||||||
SynExpr.index (SynExpr.CreateConst "data") (SynExpr.createIdent "node")
|
SynExpr.index (SynExpr.CreateConst "data") (SynExpr.createIdent "node")
|
||||||
|> assertNotNull (SynExpr.CreateConst "data")
|
|> assertPropertyExists (SynExpr.CreateConst "data")
|
||||||
|> SynBinding.basic [ Ident.create "node" ] []
|
|> SynBinding.basic [ Ident.create "node" ] []
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -558,7 +571,7 @@ module internal JsonParseGenerator =
|
|||||||
|
|
||||||
SynExpr.createIdent "node"
|
SynExpr.createIdent "node"
|
||||||
|> SynExpr.index property
|
|> SynExpr.index property
|
||||||
|> assertNotNull property
|
|> assertPropertyExists property
|
||||||
|> SynExpr.pipeThroughFunction (
|
|> SynExpr.pipeThroughFunction (
|
||||||
SynExpr.createLambda "v" (SynExpr.callGenericMethod' "GetValue" "string" (SynExpr.createIdent "v"))
|
SynExpr.createLambda "v" (SynExpr.callGenericMethod' "GetValue" "string" (SynExpr.createIdent "v"))
|
||||||
)
|
)
|
||||||
|
@@ -180,8 +180,7 @@ module internal JsonSerializeGenerator =
|
|||||||
let propertyNameAttr =
|
let propertyNameAttr =
|
||||||
attrs
|
attrs
|
||||||
|> List.tryFind (fun attr ->
|
|> List.tryFind (fun attr ->
|
||||||
(SynLongIdent.toString attr.TypeName)
|
(SynLongIdent.toString attr.TypeName).EndsWith ("JsonPropertyName", StringComparison.Ordinal)
|
||||||
.EndsWith ("JsonPropertyName", StringComparison.Ordinal)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
match propertyNameAttr with
|
match propertyNameAttr with
|
||||||
@@ -198,8 +197,7 @@ module internal JsonSerializeGenerator =
|
|||||||
let getIsJsonExtension (attrs : SynAttribute list) : bool =
|
let getIsJsonExtension (attrs : SynAttribute list) : bool =
|
||||||
attrs
|
attrs
|
||||||
|> List.tryFind (fun attr ->
|
|> List.tryFind (fun attr ->
|
||||||
(SynLongIdent.toString attr.TypeName)
|
(SynLongIdent.toString attr.TypeName).EndsWith ("JsonExtensionData", StringComparison.Ordinal)
|
||||||
.EndsWith ("JsonExtensionData", StringComparison.Ordinal)
|
|
||||||
)
|
)
|
||||||
|> Option.isSome
|
|> Option.isSome
|
||||||
|
|
||||||
|
@@ -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.6.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>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "4.0",
|
"version": "6.0",
|
||||||
"publicReleaseRefSpec": [
|
"publicReleaseRefSpec": [
|
||||||
"^refs/heads/main$"
|
"^refs/heads/main$"
|
||||||
],
|
],
|
||||||
@@ -11,4 +11,4 @@
|
|||||||
":/README.md",
|
":/README.md",
|
||||||
":/Directory.Build.props"
|
":/Directory.Build.props"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -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": 1734126203,
|
"lastModified": 1744868846,
|
||||||
"narHash": "sha256-0XovF7BYP50rTD2v4r55tR5MuBLet7q4xIz6Rgh3BBU=",
|
"narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "71a6392e367b08525ee710a93af2e80083b5b3e2",
|
"rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
10
flake.nix
10
flake.nix
@@ -44,9 +44,11 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
packages = {
|
packages = let
|
||||||
fantomas = dotnetTool null "fantomas" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fantomas.version (builtins.head (builtins.filter (elem: elem.pname == "fantomas") ((import ./nix/deps.nix) {fetchNuGet = x: x;}))).hash;
|
deps = builtins.fromJSON (builtins.readFile ./nix/deps.json);
|
||||||
fsharp-analyzers = dotnetTool "FSharp.Analyzers.Cli" "fsharp-analyzers" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fsharp-analyzers.version (builtins.head (builtins.filter (elem: elem.pname == "fsharp-analyzers") ((import ./nix/deps.nix) {fetchNuGet = x: x;}))).hash;
|
in {
|
||||||
|
fantomas = dotnetTool null "fantomas" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fantomas.version (builtins.head (builtins.filter (elem: elem.pname == "fantomas") deps)).hash;
|
||||||
|
fsharp-analyzers = dotnetTool "FSharp.Analyzers.Cli" "fsharp-analyzers" (builtins.fromJSON (builtins.readFile ./.config/dotnet-tools.json)).tools.fsharp-analyzers.version (builtins.head (builtins.filter (elem: elem.pname == "fsharp-analyzers") deps)).hash;
|
||||||
default = pkgs.buildDotnetModule {
|
default = pkgs.buildDotnetModule {
|
||||||
inherit pname version dotnet-sdk dotnet-runtime;
|
inherit pname version dotnet-sdk dotnet-runtime;
|
||||||
name = "WoofWare.Myriad.Plugins";
|
name = "WoofWare.Myriad.Plugins";
|
||||||
@@ -54,7 +56,7 @@
|
|||||||
projectFile = "./WoofWare.Myriad.Plugins/WoofWare.Myriad.Plugins.fsproj";
|
projectFile = "./WoofWare.Myriad.Plugins/WoofWare.Myriad.Plugins.fsproj";
|
||||||
testProjectFile = "./WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj";
|
testProjectFile = "./WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj";
|
||||||
disabledTests = ["WoofWare.Myriad.Plugins.Test.TestSurface.CheckVersionAgainstRemote"];
|
disabledTests = ["WoofWare.Myriad.Plugins.Test.TestSurface.CheckVersionAgainstRemote"];
|
||||||
nugetDeps = ./nix/deps.nix; # `nix build .#default.passthru.fetch-deps && ./result nix/deps.nix`
|
nugetDeps = ./nix/deps.json; # `nix build .#default.fetch-deps && ./result nix/deps.json`
|
||||||
doCheck = true;
|
doCheck = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
387
nix/deps.json
Normal file
387
nix/deps.json
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"pname": "ApiSurface",
|
||||||
|
"version": "4.1.20",
|
||||||
|
"hash": "sha256-koWgO9FC9ax+Ij56ug8kxeyknl0yhLqnNLOUdxtqqo4="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "fantomas",
|
||||||
|
"version": "7.0.1",
|
||||||
|
"hash": "sha256-2aGD6Kjh83gmssRqqZ/Uihi7VbNqNUelX4otIfCuhTI="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Fantomas.Core",
|
||||||
|
"version": "6.1.1",
|
||||||
|
"hash": "sha256-FcTLHQFvKkQY/kV08jhhy/St/+FmXpp3epp/R3zUXMA="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Fantomas.FCS",
|
||||||
|
"version": "6.1.1",
|
||||||
|
"hash": "sha256-NuZ8msPEHYA8T3EYREB28F1RcNgUU8V54eg2+UttYxw="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FsCheck",
|
||||||
|
"version": "3.2.0",
|
||||||
|
"hash": "sha256-ksZ4vLgWwyQOzFuK2BczdtDtWWYmedG7UBAg4pYuI8g="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "fsharp-analyzers",
|
||||||
|
"version": "0.30.0",
|
||||||
|
"hash": "sha256-7oaSwpHAU1opzpz4szLU/gDaJC/ww9eiFkPu0nr4Mj4="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FSharp.Core",
|
||||||
|
"version": "4.3.4",
|
||||||
|
"hash": "sha256-styyo+6mJy+yxE0NZG/b1hxkAjPOnJfMgd9zWzCJ5uk="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FSharp.Core",
|
||||||
|
"version": "6.0.1",
|
||||||
|
"hash": "sha256-Ehsgt3nCJijpaVuJguC1TPVEKSkJd6PSc07D2ZQSemI="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FSharp.Core",
|
||||||
|
"version": "9.0.202",
|
||||||
|
"hash": "sha256-64Gub0qemmCoMa1tDus6TeTuB1+5sHfE6KD2j4o84mA="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "FsUnit",
|
||||||
|
"version": "7.0.1",
|
||||||
|
"hash": "sha256-K85CIdxMeFSHEKZk6heIXp/oFjWAn7dBILKrw49pJUY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.ApplicationInsights",
|
||||||
|
"version": "2.22.0",
|
||||||
|
"hash": "sha256-mUQ63atpT00r49ca50uZu2YCiLg3yd6r3HzTryqcuEA="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Ref",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.AspNetCore.App.Runtime.osx-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.CodeCoverage",
|
||||||
|
"version": "17.13.0",
|
||||||
|
"hash": "sha256-GKrIxeyQo5Az1mztfQgea1kGtJwonnNOrXK/0ULfu8o="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NET.Test.Sdk",
|
||||||
|
"version": "17.13.0",
|
||||||
|
"hash": "sha256-sc2wvyV8cGm1FrNP2GGHEI584RCvRPu15erYCsgw5QY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.linux-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.linux-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.osx-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Host.osx-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Ref",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.linux-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.linux-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.osx-arm64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.App.Runtime.osx-x64",
|
||||||
|
"version": "6.0.36",
|
||||||
|
"hash": "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Platforms",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Platforms",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"hash": "sha256-8hLiUKvy/YirCWlFwzdejD2Db3DaXhHxT7GSZx/znJg="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Platforms",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"hash": "sha256-IEvBk6wUXSdyCnkj6tHahOJv290tVVT8tyemYcR0Yro="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Targets",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.NETCore.Targets",
|
||||||
|
"version": "1.1.3",
|
||||||
|
"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",
|
||||||
|
"version": "17.12.0",
|
||||||
|
"hash": "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.TestPlatform.ObjectModel",
|
||||||
|
"version": "17.13.0",
|
||||||
|
"hash": "sha256-6S0fjfj8vA+h6dJVNwLi6oZhYDO/I/6hBZaq2VTW+Uk="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Microsoft.TestPlatform.TestHost",
|
||||||
|
"version": "17.13.0",
|
||||||
|
"hash": "sha256-L/CJzou7dhmShUgXq3aXL3CaLTJll17Q+JY2DBdUUpo="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Myriad.Core",
|
||||||
|
"version": "0.8.3",
|
||||||
|
"hash": "sha256-vBOxfq8QriX/yUtaXN69rEQaY/psRNJWxqATLidrt2g="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Myriad.Sdk",
|
||||||
|
"version": "0.8.3",
|
||||||
|
"hash": "sha256-7O397WKhskKOvE3MkJT37BvxorDWngDR6gTUogtDZ2M="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Nerdbank.GitVersioning",
|
||||||
|
"version": "3.8.38-alpha",
|
||||||
|
"hash": "sha256-gPMrVbjOZxXoofczF/pn6eVkLhjVSJIyQrLO2oljrDc="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NETStandard.Library",
|
||||||
|
"version": "2.0.3",
|
||||||
|
"hash": "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Newtonsoft.Json",
|
||||||
|
"version": "13.0.1",
|
||||||
|
"hash": "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "Newtonsoft.Json",
|
||||||
|
"version": "13.0.3",
|
||||||
|
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Common",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-ASLa/Jigg5Eop0ZrXPl98RW2rxnJRC7pbbxhuV74hFw="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Configuration",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-z8VW1YdRDanyyRTDYRvRkSv/XPR3c/hMM1y8cNNjx0Y="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Frameworks",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-caDyc+WgYOo43AUTjtbP0MyvYDb6JweEKDdIul61Cac="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Packaging",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-lhO+SFwIYZ4aPHxIGm5ubkkE2a5Ve2xgtroRbNh7hpw="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Protocol",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-5lnAHHZjy7A4vgv65AeBAs64mSNpuoUjxW3HnrMpuzY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NuGet.Versioning",
|
||||||
|
"version": "6.13.2",
|
||||||
|
"hash": "sha256-gmpyBpKnt+GHqgx/2uFKp+J2csbxEAy1E7WdVT117sw="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NUnit",
|
||||||
|
"version": "4.3.2",
|
||||||
|
"hash": "sha256-0RWe8uFoxYp6qhPlDDEghOMcKJgyw2ybvEoAqBLebeE="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "NUnit3TestAdapter",
|
||||||
|
"version": "5.0.0",
|
||||||
|
"hash": "sha256-7jZM4qAbIzne3AcdFfMbvbgogqpxvVe6q2S7Ls8xQy0="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "RestEase",
|
||||||
|
"version": "1.6.4",
|
||||||
|
"hash": "sha256-FFmqFwlHhIln46k56Z8KM1G+xuPEh/bceKCQnJcdcdc="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "runtime.any.System.Runtime",
|
||||||
|
"version": "4.3.0",
|
||||||
|
"hash": "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "runtime.native.System",
|
||||||
|
"version": "4.3.0",
|
||||||
|
"hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "runtime.unix.System.Private.Uri",
|
||||||
|
"version": "4.3.0",
|
||||||
|
"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",
|
||||||
|
"version": "7.0.0",
|
||||||
|
"hash": "sha256-9Wk8cHSkjKtqkN6xW7KnXoQVtF/VNbKeBq79WqDesMs="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Formats.Asn1",
|
||||||
|
"version": "6.0.0",
|
||||||
|
"hash": "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Formats.Asn1",
|
||||||
|
"version": "8.0.1",
|
||||||
|
"hash": "sha256-may/Wg+esmm1N14kQTG4ESMBi+GQKPp0ZrrBo/o6OXM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.IO.Abstractions",
|
||||||
|
"version": "4.2.13",
|
||||||
|
"hash": "sha256-nkC/PiqE6+c1HJ2yTwg3x+qdBh844Z8n3ERWDW8k6Gg="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.IO.FileSystem.AccessControl",
|
||||||
|
"version": "4.5.0",
|
||||||
|
"hash": "sha256-ck44YBQ0M+2Im5dw0VjBgFD1s0XuY54cujrodjjSBL8="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Memory",
|
||||||
|
"version": "4.5.5",
|
||||||
|
"hash": "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Private.Uri",
|
||||||
|
"version": "4.3.0",
|
||||||
|
"hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Reflection.Metadata",
|
||||||
|
"version": "1.6.0",
|
||||||
|
"hash": "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Runtime",
|
||||||
|
"version": "4.3.1",
|
||||||
|
"hash": "sha256-R9T68AzS1PJJ7v6ARz9vo88pKL1dWqLOANg4pkQjkA0="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Runtime.CompilerServices.Unsafe",
|
||||||
|
"version": "6.0.0",
|
||||||
|
"hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Security.AccessControl",
|
||||||
|
"version": "4.5.0",
|
||||||
|
"hash": "sha256-AFsKPb/nTk2/mqH/PYpaoI8PLsiKKimaXf+7Mb5VfPM="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Security.Cryptography.Pkcs",
|
||||||
|
"version": "6.0.4",
|
||||||
|
"hash": "sha256-2e0aRybote+OR66bHaNiYpF//4fCiaO3zbR2e9GABUI="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Security.Cryptography.ProtectedData",
|
||||||
|
"version": "4.4.0",
|
||||||
|
"hash": "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Security.Principal.Windows",
|
||||||
|
"version": "4.5.0",
|
||||||
|
"hash": "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "System.Text.Json",
|
||||||
|
"version": "8.0.5",
|
||||||
|
"hash": "sha256-yKxo54w5odWT6nPruUVsaX53oPRe+gKzGvLnnxtwP68="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "TypeEquality",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"hash": "sha256-V50xAOzzyUJrY+MYPRxtnqW5MVeATXCes89wPprv1r4="
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pname": "WoofWare.Whippet.Fantomas",
|
||||||
|
"version": "0.6.1",
|
||||||
|
"hash": "sha256-UTK+WbHR83zbMZ+2BzecIrKvp/5ZppHToIZ/oHTIF1k="
|
||||||
|
}
|
||||||
|
]
|
369
nix/deps.nix
369
nix/deps.nix
@@ -1,369 +0,0 @@
|
|||||||
# This file was automatically generated by passthru.fetch-deps.
|
|
||||||
# Please dont edit it manually, your changes might get overwritten!
|
|
||||||
{fetchNuGet}: [
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "ApiSurface";
|
|
||||||
version = "4.1.14";
|
|
||||||
hash = "sha256-Ly7XqGeqseQqu+EcBISzVySZvBQ28rj7JUke1qN7Yw8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "fantomas";
|
|
||||||
version = "6.3.16";
|
|
||||||
hash = "sha256-4tRdYf+/Q1iedx+DDuIKVGlIWQdr6erM51VdKzZkhCs=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Fantomas.Core";
|
|
||||||
version = "6.1.1";
|
|
||||||
hash = "sha256-FcTLHQFvKkQY/kV08jhhy/St/+FmXpp3epp/R3zUXMA=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Fantomas.FCS";
|
|
||||||
version = "6.1.1";
|
|
||||||
hash = "sha256-NuZ8msPEHYA8T3EYREB28F1RcNgUU8V54eg2+UttYxw=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FsCheck";
|
|
||||||
version = "2.16.6";
|
|
||||||
hash = "sha256-1hR2SaJTkqBzU3D955MvLNVzkQHkx0Z/QzOXZfzk2Zw=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "fsharp-analyzers";
|
|
||||||
version = "0.28.0";
|
|
||||||
hash = "sha256-BqGk9MzHHA3oRPNfWuANcM1YELsdhzWI+kLF4mUDUx8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "4.2.3";
|
|
||||||
hash = "sha256-yMGMrMUY+4Lwnh9JIbD2/3FBGIFcSK7leGURWaSQsLQ=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "4.3.4";
|
|
||||||
hash = "sha256-styyo+6mJy+yxE0NZG/b1hxkAjPOnJfMgd9zWzCJ5uk=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "4.5.0";
|
|
||||||
hash = "sha256-7+B+8rsm/dMKvNBty8z5qB+kOxMwUzExy0F04xM88sk=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "5.0.2";
|
|
||||||
hash = "sha256-YOoosLEiszPsOOaNAkWhFGU04JJKDOFVoA/ggrZMN10=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "6.0.1";
|
|
||||||
hash = "sha256-Ehsgt3nCJijpaVuJguC1TPVEKSkJd6PSc07D2ZQSemI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FSharp.Core";
|
|
||||||
version = "9.0.100";
|
|
||||||
hash = "sha256-V1q3CjbRvWZqxpi6cXD/R0F7pyXGGtH83M5Z/ITDrp8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "FsUnit";
|
|
||||||
version = "6.0.1";
|
|
||||||
hash = "sha256-vka/aAgWhDCl5tu+kgO7GtSaHOOvlSaWxG+tExwGXpI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.AspNetCore.App.Ref";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-9jDkWbjw/nd8yqdzVTagCuqr6owJ/DUMi4BlUZT4hWU=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-JQULJyF0ivLoUU1JaFfK/HHg+/qzpN7V2RR2Cc+WlQ4=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.AspNetCore.App.Runtime.linux-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-zUsVIpV481vMLAXaLEEUpEMA9/f1HGOnvaQnaWdzlyY=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-2seqZcz0JeUjkzh3QcGa9TcJ4LUafpFjTRk+Nm8T6T0=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.AspNetCore.App.Runtime.osx-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-yxLafxiBKkvfkDggPk0P9YZIHBkDJOsFTO7/V9mEHuU=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.CodeCoverage";
|
|
||||||
version = "17.12.0";
|
|
||||||
hash = "sha256-lGjifppD0OBMBp28pjUfPipaeXg739n8cPhtHWoo5RE=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NET.Test.Sdk";
|
|
||||||
version = "17.12.0";
|
|
||||||
hash = "sha256-DKFEbhh2wPzahNeHdEoFig8tZh/LEVrFc5+zpT43Btg=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Host.linux-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-9lC/LYnthYhjkWWz2kkFCvlA5LJOv11jdt59SDnpdy0=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Host.linux-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-VFRDzx7LJuvI5yzKdGmw/31NYVbwHWPKQvueQt5xc10=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Host.osx-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-DaSWwYACJGolEBuMhzDVCj/rQTdDt061xCVi+gyQnuo=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Host.osx-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-FrRny9EI6HKCKQbu6mcLj5w4ooSRrODD4Vj2ZMGnMd4=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Ref";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-9LZgVoIFF8qNyUu8kdJrYGLutMF/cL2K82HN2ywwlx8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Runtime.linux-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-k3rxvUhCEU0pVH8KgEMtkPiSOibn+nBh+0zT2xIfId8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Runtime.linux-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-U8wJ2snSDFqeAgDVLXjnniidC7Cr5aJ1/h/BMSlyu0c=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Runtime.osx-arm64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-UfLcrL2Gj/OLz0s92Oo+OCJeDpZFAcQLPLiSNND8D5Y=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.App.Runtime.osx-x64";
|
|
||||||
version = "6.0.36";
|
|
||||||
hash = "sha256-0xIJYFzxdMcnCj3wzkFRQZSnQcPHzPHMzePRIOA3oJs=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.Platforms";
|
|
||||||
version = "1.1.0";
|
|
||||||
hash = "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.Platforms";
|
|
||||||
version = "1.1.1";
|
|
||||||
hash = "sha256-8hLiUKvy/YirCWlFwzdejD2Db3DaXhHxT7GSZx/znJg=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.Platforms";
|
|
||||||
version = "2.0.0";
|
|
||||||
hash = "sha256-IEvBk6wUXSdyCnkj6tHahOJv290tVVT8tyemYcR0Yro=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.Targets";
|
|
||||||
version = "1.1.0";
|
|
||||||
hash = "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.NETCore.Targets";
|
|
||||||
version = "1.1.3";
|
|
||||||
hash = "sha256-WLsf1NuUfRWyr7C7Rl9jiua9jximnVvzy6nk2D2bVRc=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.TestPlatform.ObjectModel";
|
|
||||||
version = "17.12.0";
|
|
||||||
hash = "sha256-3XBHBSuCxggAIlHXmKNQNlPqMqwFlM952Av6RrLw1/w=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Microsoft.TestPlatform.TestHost";
|
|
||||||
version = "17.12.0";
|
|
||||||
hash = "sha256-rf8Sh0fQq44Sneuvs64unkkIHg8kOjDGWE35j9iLx5I=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Myriad.Core";
|
|
||||||
version = "0.8.3";
|
|
||||||
hash = "sha256-vBOxfq8QriX/yUtaXN69rEQaY/psRNJWxqATLidrt2g=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Myriad.Sdk";
|
|
||||||
version = "0.8.3";
|
|
||||||
hash = "sha256-7O397WKhskKOvE3MkJT37BvxorDWngDR6gTUogtDZ2M=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Nerdbank.GitVersioning";
|
|
||||||
version = "3.7.112";
|
|
||||||
hash = "sha256-vrItlaH5MpBHa4MI1cQgI11NAe4W3XsxR9DizFE7fus=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NETStandard.Library";
|
|
||||||
version = "2.0.3";
|
|
||||||
hash = "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Newtonsoft.Json";
|
|
||||||
version = "13.0.1";
|
|
||||||
hash = "sha256-K2tSVW4n4beRPzPu3rlVaBEMdGvWSv/3Q1fxaDh4Mjo=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "Newtonsoft.Json";
|
|
||||||
version = "13.0.3";
|
|
||||||
hash = "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Common";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-k6JAFqHFinTakwNuW666aXYPhR7TpI/rb+KbHm1S2TM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Configuration";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-e/4lvyl7o7g4aWTAtr9S2yiGgk7V0E9p6DXpsy7GgVw=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Frameworks";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-GGpkbas+PNLx35vvr3nyAVz5lY/aeoMx6qjmT368Lpg=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Packaging";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-3h8Nmjpt383+dCg9GJ1BJ26UirwEQsWCPcTiT0+wGeI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Protocol";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-l+CHnAcit6Y9OjBxereRP5JzOuWbuZZQYkFOKsUkdQ8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NuGet.Versioning";
|
|
||||||
version = "6.12.1";
|
|
||||||
hash = "sha256-f/ejCuzCAwKs4N4Ec6yf2RovrhBT0nj0hRDP+03/Iy4=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NUnit";
|
|
||||||
version = "4.0.1";
|
|
||||||
hash = "sha256-jd1CD5nHVXkpvBNpVDJcJyfTggCHLyDBySVSvtrA8Uk=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NUnit";
|
|
||||||
version = "4.3.0";
|
|
||||||
hash = "sha256-dL8+6yL7nwgQKZR3wo2hAOUt3d2EFN10GJH1LzY89I8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "NUnit3TestAdapter";
|
|
||||||
version = "4.6.0";
|
|
||||||
hash = "sha256-9Yav2fYhC4w0OgsyUwU4/5rDy4FVDTpKnWHuwl/uKJQ=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "RestEase";
|
|
||||||
version = "1.6.4";
|
|
||||||
hash = "sha256-FFmqFwlHhIln46k56Z8KM1G+xuPEh/bceKCQnJcdcdc=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "runtime.any.System.Runtime";
|
|
||||||
version = "4.3.0";
|
|
||||||
hash = "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "runtime.native.System";
|
|
||||||
version = "4.3.0";
|
|
||||||
hash = "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "runtime.unix.System.Private.Uri";
|
|
||||||
version = "4.3.0";
|
|
||||||
hash = "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Diagnostics.DiagnosticSource";
|
|
||||||
version = "7.0.0";
|
|
||||||
hash = "sha256-9Wk8cHSkjKtqkN6xW7KnXoQVtF/VNbKeBq79WqDesMs=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Formats.Asn1";
|
|
||||||
version = "6.0.0";
|
|
||||||
hash = "sha256-KaMHgIRBF7Nf3VwOo+gJS1DcD+41cJDPWFh+TDQ8ee8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Formats.Asn1";
|
|
||||||
version = "8.0.1";
|
|
||||||
hash = "sha256-may/Wg+esmm1N14kQTG4ESMBi+GQKPp0ZrrBo/o6OXM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.IO.Abstractions";
|
|
||||||
version = "4.2.13";
|
|
||||||
hash = "sha256-nkC/PiqE6+c1HJ2yTwg3x+qdBh844Z8n3ERWDW8k6Gg=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.IO.FileSystem.AccessControl";
|
|
||||||
version = "4.5.0";
|
|
||||||
hash = "sha256-ck44YBQ0M+2Im5dw0VjBgFD1s0XuY54cujrodjjSBL8=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Memory";
|
|
||||||
version = "4.5.5";
|
|
||||||
hash = "sha256-EPQ9o1Kin7KzGI5O3U3PUQAZTItSbk9h/i4rViN3WiI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Private.Uri";
|
|
||||||
version = "4.3.0";
|
|
||||||
hash = "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Reflection.Metadata";
|
|
||||||
version = "1.6.0";
|
|
||||||
hash = "sha256-JJfgaPav7UfEh4yRAQdGhLZF1brr0tUWPl6qmfNWq/E=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Runtime";
|
|
||||||
version = "4.3.1";
|
|
||||||
hash = "sha256-R9T68AzS1PJJ7v6ARz9vo88pKL1dWqLOANg4pkQjkA0=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Runtime.CompilerServices.Unsafe";
|
|
||||||
version = "6.0.0";
|
|
||||||
hash = "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Security.AccessControl";
|
|
||||||
version = "4.5.0";
|
|
||||||
hash = "sha256-AFsKPb/nTk2/mqH/PYpaoI8PLsiKKimaXf+7Mb5VfPM=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Security.Cryptography.Pkcs";
|
|
||||||
version = "6.0.4";
|
|
||||||
hash = "sha256-2e0aRybote+OR66bHaNiYpF//4fCiaO3zbR2e9GABUI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Security.Cryptography.ProtectedData";
|
|
||||||
version = "4.4.0";
|
|
||||||
hash = "sha256-Ri53QmFX8I8UH0x4PikQ1ZA07ZSnBUXStd5rBfGWFOE=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Security.Principal.Windows";
|
|
||||||
version = "4.5.0";
|
|
||||||
hash = "sha256-BkUYNguz0e4NJp1kkW7aJBn3dyH9STwB5N8XqnlCsmY=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Text.Encodings.Web";
|
|
||||||
version = "8.0.0";
|
|
||||||
hash = "sha256-IUQkQkV9po1LC0QsqrilqwNzPvnc+4eVvq+hCvq8fvE=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "System.Text.Json";
|
|
||||||
version = "8.0.4";
|
|
||||||
hash = "sha256-g5oT7fbXxQ9Iah1nMCr4UUX/a2l+EVjJyTrw3FTbIaI=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "TypeEquality";
|
|
||||||
version = "0.3.0";
|
|
||||||
hash = "sha256-V50xAOzzyUJrY+MYPRxtnqW5MVeATXCes89wPprv1r4=";
|
|
||||||
})
|
|
||||||
(fetchNuGet {
|
|
||||||
pname = "WoofWare.Whippet.Fantomas";
|
|
||||||
version = "0.3.1";
|
|
||||||
hash = "sha256-i5oiqcrxzM90Ocuq5MIu2Ha5lV0aYu5nCvuwmFqp6NA=";
|
|
||||||
})
|
|
||||||
]
|
|
Reference in New Issue
Block a user