├── .gitignore ├── .paket ├── Paket.Restore.targets └── paket.exe ├── README.md ├── Uno.Tests ├── Tests.fs ├── Uno.Tests.fsproj └── paket.references ├── Uno ├── .vs │ └── Uno │ │ └── v15 │ │ └── .suo ├── CommandHandler.fs ├── EventStore.fs ├── Game.fs ├── Model.fs ├── Program.fs ├── Serialization.fs ├── Uno.fsproj └── paket.references ├── UnoCore.sln ├── build.cmd ├── paket.dependencies └── paket.lock /.gitignore: -------------------------------------------------------------------------------- 1 | **/bin/ 2 | **/obj/ 3 | packages/ 4 | paket-files/ 5 | .paket/.store 6 | **~ 7 | .paket/load/ 8 | .vs/ 9 | **.user 10 | -------------------------------------------------------------------------------- /.paket/Paket.Restore.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 8 | 9 | true 10 | $(MSBuildThisFileDirectory) 11 | $(MSBuildThisFileDirectory)..\ 12 | $(PaketRootPath)paket-files\paket.restore.cached 13 | $(PaketRootPath)paket.lock 14 | classic 15 | proj 16 | assembly 17 | native 18 | /Library/Frameworks/Mono.framework/Commands/mono 19 | mono 20 | 21 | 22 | $(PaketRootPath)paket.bootstrapper.exe 23 | $(PaketToolsPath)paket.bootstrapper.exe 24 | $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\ 25 | 26 | 27 | 28 | 29 | $(PaketRootPath)paket.exe 30 | $(PaketToolsPath)paket.exe 31 | $(PaketToolsPath)paket.exe 32 | $(_PaketBootStrapperExeDir)paket.exe 33 | paket.exe 34 | 35 | 36 | $(PaketRootPath)paket 37 | $(PaketToolsPath)paket 38 | $(PaketToolsPath)paket 39 | 40 | 41 | $(PaketRootPath)paket.exe 42 | $(PaketToolsPath)paket.exe 43 | 44 | 45 | $(PaketBootStrapperExeDir)paket.exe 46 | 47 | 48 | paket 49 | 50 | 51 | <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)")) 52 | dotnet "$(PaketExePath)" 53 | $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)" 54 | "$(PaketExePath)" 55 | 56 | 57 | "$(PaketBootStrapperExePath)" 58 | $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)" 59 | 60 | 61 | 62 | 63 | true 64 | true 65 | 66 | 67 | True 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | true 79 | $(NoWarn);NU1603;NU1604;NU1605;NU1608 80 | 81 | 82 | 83 | 84 | /usr/bin/shasum "$(PaketRestoreCacheFile)" | /usr/bin/awk '{ print $1 }' 85 | /usr/bin/shasum "$(PaketLockFilePath)" | /usr/bin/awk '{ print $1 }' 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)')) 102 | $([System.IO.File]::ReadAllText('$(PaketLockFilePath)')) 103 | true 104 | false 105 | true 106 | 107 | 108 | 112 | 113 | true 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | $(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached 130 | 131 | $(MSBuildProjectFullPath).paket.references 132 | 133 | $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references 134 | 135 | $(MSBuildProjectDirectory)\paket.references 136 | 137 | false 138 | true 139 | true 140 | references-file-or-cache-not-found 141 | 142 | 143 | 144 | 145 | $([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)')) 146 | $([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)')) 147 | references-file 148 | false 149 | 150 | 151 | 152 | 153 | false 154 | 155 | 156 | 157 | 158 | true 159 | target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths) 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | false 170 | true 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length) 182 | $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0]) 183 | $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1]) 184 | $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4]) 185 | $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5]) 186 | 187 | 188 | %(PaketReferencesFileLinesInfo.PackageVersion) 189 | All 190 | runtime 191 | runtime 192 | true 193 | true 194 | 195 | 196 | 197 | 198 | $(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0]) 208 | $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1]) 209 | 210 | 211 | %(PaketCliToolFileLinesInfo.PackageVersion) 212 | 213 | 214 | 215 | 219 | 220 | 221 | 222 | 223 | 224 | false 225 | $(MSBuildVersion) 226 | 15.8.0 227 | 228 | 229 | 230 | 231 | 232 | <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/> 233 | 234 | 235 | 236 | 237 | 238 | $(MSBuildProjectDirectory)/$(MSBuildProjectFile) 239 | true 240 | false 241 | true 242 | false 243 | true 244 | false 245 | true 246 | $(BaseIntermediateOutputPath)$(Configuration) 247 | $(BaseIntermediateOutputPath) 248 | 249 | 250 | 251 | <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/> 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 304 | 305 | 347 | 348 | 389 | 390 | 391 | 392 | -------------------------------------------------------------------------------- /.paket/paket.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkbeforecoding/UnoCore/47ab2518334d1596c956894eb68e25b5ac071b15/.paket/paket.exe -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Uno Core 2 | 3 | This repository has moved to Codeberg: https://codeberg.org/thinkbeforecoding/UnoCore 4 | 5 | this is the dotnet core implementation base of the F# Uno Sample 6 | -------------------------------------------------------------------------------- /Uno.Tests/Tests.fs: -------------------------------------------------------------------------------- 1 | module Tests 2 | 3 | #if INTERACTIVE 4 | #load "../.paket/load/netstandard2.0/main.group.fsx" 5 | #I "../Uno" 6 | #load "Model.fs" "Game.fs" 7 | #endif 8 | 9 | open Game 10 | open Swensen.Unquote 11 | open Xunit 12 | 13 | // Step 3: 14 | // Implement => to make the test run 15 | let (=>) events command = failwith "Not implemented" 16 | 17 | let (==) = (=) 18 | 19 | 20 | // Step 4: 21 | // Change the decide function to make this test pass 22 | [] 23 | let ``04: Game should start``() = 24 | test 25 | <@ [] 26 | => StartGame { Players = PlayerCount 3; FirstCard = Digit(Three, Red)} 27 | == [ GameStarted { Players = PlayerCount 3; FirstCard = Digit(Three, Red) } ] @> 28 | 29 | // Step 5: 30 | // Change the decide function to make this test pass 31 | [] 32 | let ``05: Playing alone is not fun``() = 33 | raises 34 | <@ 35 | [] 36 | => StartGame { Players = PlayerCount 1; FirstCard = Digit( Seven, Yellow)} @> 37 | 38 | // Step 6: 39 | // What should you change to make this test pass ? 40 | [] 41 | let ``06: Game should not be started twice``() = 42 | raises 43 | <@ [ GameStarted { Players= PlayerCount 2; FirstCard = Digit(Nine, Yellow) } ] 44 | => StartGame { Players = PlayerCount 3; FirstCard = Digit(Three, Red)} @> 45 | 46 | 47 | // Step 7: 48 | // Make this two tests pass... doing the simplest thing that work 49 | [] 50 | let ``07a: Card with same value can be played``() = 51 | failwith "Not implemented" 52 | 53 | [] 54 | let ``07b: Card with same color can be played``() = 55 | failwith "Not implemented" 56 | 57 | // Step 8: 58 | // Make this test pass 59 | [] 60 | let ``08: Card can be played only once game is started``() = 61 | failwith "Not implemented" 62 | 63 | // Step 9: 64 | // What happens here ?! 65 | [] 66 | let ``09: Card should be same color or same value``() = 67 | failwith "Not implemented" 68 | // ... 69 | 70 | // Step 10: 71 | // What happens here ?! 72 | [] 73 | let ``10: Player should play during his turn``() = 74 | failwith "Not implemented" 75 | 76 | // Step 11: 77 | // Testing a full round 78 | [] 79 | let ``11a: The after a table round, the dealer plays``() = 80 | failwith "Not implemented" 81 | 82 | [] 83 | let ``11b: The after a table round, the dealer turn start``() = 84 | failwith "Not implemented" 85 | // Step 12: 86 | // Look at the evolve function... 87 | // It starts to contains logic. 88 | // Try to remove the logic from the evolve function 89 | // to put it back in the decide function 90 | 91 | // Step 13: 92 | // Make this test pass 93 | [] 94 | let ``13: Player can interrupt``() = 95 | failwith "Not implemented" 96 | 97 | // Step 14: 98 | // Missing an interrupt is not concidered as playing at the wrong turn. 99 | // So what happens here ? 100 | [] 101 | let ``14: Player get no penalty when missing an interrupt``() = 102 | failwith "Not implemented" 103 | 104 | 105 | // Step 15: 106 | // Uncomment the Kickback card and implement it. 107 | // The kickback changes the direction of the game. 108 | 109 | -------------------------------------------------------------------------------- /Uno.Tests/Uno.Tests.fsproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Library 4 | netcoreapp2.2 5 | true 6 | 7 | 8 | 9 | Uno.fsproj 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Uno.Tests/paket.references: -------------------------------------------------------------------------------- 1 | FSharp.Core 2 | Unquote 3 | Microsoft.NET.Test.Sdk 4 | xunit 5 | xunit.runner.visualstudio -------------------------------------------------------------------------------- /Uno/.vs/Uno/v15/.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thinkbeforecoding/UnoCore/47ab2518334d1596c956894eb68e25b5ac071b15/Uno/.vs/Uno/v15/.suo -------------------------------------------------------------------------------- /Uno/CommandHandler.fs: -------------------------------------------------------------------------------- 1 | module CommandHandler 2 | 3 | 4 | [] 5 | type StreamId = StreamId of string 6 | 7 | [] 8 | type EventNumber = EventNumber of int64 9 | with 10 | static member Start = EventNumber 0L 11 | 12 | 13 | type Stream<'e> = Slice<'e> Async 14 | 15 | and Slice<'e> = Slice of 'e list * Continuation<'e> 16 | 17 | and Continuation<'e> = 18 | | Next of Stream<'e> 19 | | Last of EventNumber 20 | 21 | module EventStream = 22 | 23 | let rec fold f state (sliced: _ Stream) = 24 | async { 25 | let! (Slice (es, continuation)) = sliced 26 | let s' = List.fold f state es 27 | match continuation with 28 | | Last v -> return s',v 29 | | Next next -> return! fold f s' next } 30 | 31 | 32 | type Read<'e> = StreamId -> EventNumber -> 'e Stream 33 | type Append<'e> = StreamId -> EventNumber -> 'e list -> EventNumber Async 34 | 35 | 36 | open Game 37 | 38 | // Step 16: 39 | // Implement the command handler 40 | let handler (read: _ Read) (append: _ Append) stream command = 41 | failwith "Not implemented" 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | // let rec load initialState startVersion = 62 | // read stream startVersion 63 | // |>EventStream.fold evolve initialState 64 | 65 | // async { 66 | // let! game, version = load InitialState EventNumber.Start 67 | // match decide command game with 68 | // | Ok newEvents -> 69 | // let! _ = append stream version newEvents 70 | // return Ok() 71 | // | Error error -> 72 | // return Error error } 73 | 74 | 75 | 76 | // Step 17: 77 | // Add keep state in memory 78 | // Step 18: 79 | // Implement Snapshoting 80 | 81 | 82 | // type Agent<'t> = MailboxProcessor<'t> 83 | 84 | // module EventNumber = 85 | // let dist (EventNumber x) (EventNumber y) = x - y 86 | 87 | // let game read append loadSnapshot writeSnapshot stream = 88 | // Agent.Start (fun mailbox -> 89 | // let rec loop state version snapshotVersion = 90 | // async { 91 | // let! command, reply = mailbox.Receive() 92 | // let newEvents = decide command state 93 | // match newEvents with 94 | // |Ok newEvents -> 95 | // let! newVersion = append stream version newEvents 96 | // let newState = List.fold evolve state newEvents 97 | // reply (Ok()) 98 | 99 | // let newSnapshotVersion = 100 | // if EventNumber.dist newVersion snapshotVersion > 1000L then 101 | // writeSnapshot "snap-game" newState newVersion 102 | // newVersion 103 | // else 104 | // snapshotVersion 105 | 106 | // return! loop newState newVersion newSnapshotVersion 107 | // | Error err -> 108 | // reply (Error err) 109 | // return! loop state version snapshotVersion } 110 | // let rec load initialState startVersion = 111 | // read stream startVersion 112 | // |> EventStream.fold evolve initialState 113 | 114 | // async { 115 | // let! snapshotState, snapshotVersion = loadSnapshot "snap-game" 116 | // let! state, version = load snapshotState snapshotVersion 117 | // return! loop state version snapshotVersion }) 118 | 119 | 120 | -------------------------------------------------------------------------------- /Uno/EventStore.fs: -------------------------------------------------------------------------------- 1 | module EventStore 2 | 3 | open System 4 | open EventStore.ClientAPI 5 | open Serialisation 6 | open Game 7 | open CommandHandler 8 | 9 | let utf8 = System.Text.Encoding.UTF8 10 | 11 | let ofEvent (event: ResolvedEvent) : SerializedEvent = 12 | let eventType = event.Event.EventType 13 | let data = utf8.GetString(event.Event.Data) 14 | eventType, data 15 | 16 | let toEvent ((eventType, data): SerializedEvent) = 17 | EventData( 18 | Guid.NewGuid(), 19 | eventType, 20 | true, 21 | utf8.GetBytes(data: string), 22 | null) 23 | 24 | /// Read events from the event store 25 | let read (store:IEventStoreConnection) deserialize: Read<_> = 26 | fun (StreamId stream) (EventNumber version) -> 27 | let rec readSlice version = 28 | async { 29 | let! slice = 30 | store.ReadStreamEventsForwardAsync(stream, version, 1000, true ) 31 | |> Async.AwaitTask 32 | 33 | let events = 34 | slice.Events 35 | |> Array.toList 36 | |> List.collect(ofEvent >> deserialize) 37 | 38 | if slice.IsEndOfStream then 39 | return Slice(events, Last(EventNumber slice.LastEventNumber)) 40 | else 41 | return Slice(events, Next (readSlice slice.NextEventNumber) ) 42 | } 43 | readSlice version 44 | 45 | /// Append events to the event store 46 | let append (store: IEventStoreConnection) serialize : _ Append = 47 | fun (StreamId stream) (EventNumber expectedVersion) (events: Event list) -> 48 | async { 49 | let eventData = 50 | events 51 | |> List.map (serialize >> toEvent) 52 | |> List.toArray 53 | 54 | let! result = 55 | store.AppendToStreamAsync(stream,expectedVersion,null,eventData) 56 | |> Async.AwaitTask 57 | return EventNumber result.NextExpectedVersion 58 | } 59 | -------------------------------------------------------------------------------- /Uno/Game.fs: -------------------------------------------------------------------------------- 1 | module Game 2 | 3 | type [] PlayerCount = PlayerCount of int 4 | 5 | 6 | type [] PlayerId = PlayerId of int 7 | 8 | 9 | 10 | 11 | 12 | 13 | type Command = 14 | | StartGame of StartGame 15 | 16 | and StartGame = { 17 | Players: PlayerCount 18 | FirstCard: Card 19 | } 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | type Event = 31 | | GameStarted of GameStarted 32 | 33 | and GameStarted = { 34 | Players: PlayerCount 35 | FirstCard: Card 36 | } 37 | 38 | type State = 39 | | InitialState 40 | 41 | 42 | exception TooFewPlayers 43 | exception GameAlreadyStarted 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | type Decide = Command -> State -> Event list 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | type Evolve = State -> Event -> State 74 | 75 | // Step 1: 76 | // Make the simplest implementation for the following signature 77 | // Command -> State -> Event list Result 78 | 79 | let decide : Decide = 80 | fun command state -> failwith "Not Implemented" 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | // Step 2: 107 | // Make the simplest implementation for the following signature 108 | // State -> Event list -> State 109 | // s -> Event [] -> sbyte 110 | 111 | // (s + ([a;b;c] @ [e;f;g])) = (s + [a;b;c]) + [e; f; g]) 112 | let evolve : Evolve = 113 | fun state event -> failwith "Not Implemented" 114 | 115 | -------------------------------------------------------------------------------- /Uno/Model.fs: -------------------------------------------------------------------------------- 1 | [] 2 | module Model 3 | 4 | type Color = 5 | | Red 6 | | Green 7 | | Blue 8 | | Yellow 9 | 10 | type Digit = 11 | | Zero | One | Two | Three |Four 12 | | Five | Six | Seven | Eight | Nine 13 | 14 | type Card = 15 | | Digit of Digit * Color 16 | //| Skip of Color 17 | -------------------------------------------------------------------------------- /Uno/Program.fs: -------------------------------------------------------------------------------- 1 | module Uno 2 | open EventStore.ClientAPI 3 | open EventStore.ClientAPI.SystemData 4 | open Game 5 | open System 6 | open Serialisation 7 | 8 | [] 9 | let main argv = 10 | printfn "%A" argv 11 | 12 | async { 13 | let settings = 14 | ConnectionSettings 15 | .Create() 16 | .SetDefaultUserCredentials(UserCredentials("admin", "changeit")) 17 | .Build() 18 | 19 | let store = EventStoreConnection.Create(settings, Uri "tcp://localhost:1113") 20 | do! store.ConnectAsync() |> Async.AwaitTask 21 | let read = EventStore.read store GameEvents.deserialize 22 | let append = EventStore.append store GameEvents.serialize 23 | let handler = CommandHandler.handler read append 24 | 25 | let! result = handler (CommandHandler.StreamId "Game-1") (StartGame { Players = PlayerCount 4; FirstCard = Digit(Five, Blue)}) 26 | 27 | match result with 28 | | Ok () -> printfn "Ok done" 29 | | Error err -> printfn "Error: %A" err 30 | 31 | } |> Async.RunSynchronously 32 | 33 | 0 // return an integer exit code 34 | -------------------------------------------------------------------------------- /Uno/Serialization.fs: -------------------------------------------------------------------------------- 1 | module Serialisation 2 | 3 | open Game 4 | open Newtonsoft.Json 5 | open System 6 | type SerializedEvent = (string * string) 7 | 8 | let serializer = JsonSerializer.Create() 9 | 10 | let serialize o = 11 | use stream = new IO.StringWriter() 12 | serializer.Serialize(stream, o) 13 | stream.ToString() 14 | 15 | let deserialize s = 16 | use stream = new IO.StringReader(s) 17 | use reader = new JsonTextReader(stream) 18 | serializer.Deserialize<'t>(reader) 19 | 20 | type GameId = GameId of int 21 | 22 | type CardDto = { 23 | Value: string 24 | Color: string 25 | } 26 | 27 | type GameStartedDto = { 28 | Players: int 29 | FirstCard: CardDto 30 | } 31 | 32 | type CardPlayedDto = { 33 | Player: int 34 | Card: CardDto 35 | } 36 | 37 | module GameEvents = 38 | open Game 39 | 40 | let toCardDto = function 41 | | Digit(d, c ) -> { Value = string d; Color = string c} 42 | //| Skip(c) -> { Value = "Skip"; Color = string c } 43 | 44 | let (|Color|_|) c = 45 | match c with 46 | | "Red" -> Some Red 47 | | "Green" -> Some Green 48 | | "Blue" -> Some Blue 49 | | "Yellow" -> Some Yellow 50 | | _ -> None 51 | 52 | let (|Digit|_|) d = 53 | match d with 54 | | "Zero" -> Some Zero 55 | | "One" -> Some One 56 | | "Two" -> Some Two 57 | | "Three" -> Some Three 58 | | "Four" -> Some Four 59 | | "Five" -> Some Five 60 | | "Six" -> Some Six 61 | | "Seven" -> Some Seven 62 | | "Eight" -> Some Eight 63 | | "Nine" -> Some Nine 64 | | _ -> None 65 | 66 | let (|Card|_|) = 67 | function 68 | //| { Value = "Skip"; Color = Color c } -> Some (Skip(c)) 69 | | { Value = Digit d; Color = Color c } -> Some (Digit(d,c)) 70 | | _ -> None 71 | 72 | let (|Players|_|) n = 73 | if n < 0 || n > 10 then 74 | None 75 | else 76 | Some (PlayerCount n) 77 | 78 | let (|Player|_|) n = 79 | if n < 0 || n > 10 then 80 | None 81 | else 82 | Some (PlayerId n) 83 | 84 | let serialize event = 85 | match event with 86 | | GameStarted e -> 87 | "GameStarted", 88 | { GameStartedDto.Players = let (PlayerCount p) = e.Players in p 89 | FirstCard = toCardDto e.FirstCard } 90 | |> serialize 91 | //| CardPlayed e -> 92 | // "CardPlayed", 93 | // { CardPlayedDto.Player = let (PlayerId p) = e.Player in p 94 | // Card = toCardDto e.Card } 95 | // |> serialize 96 | 97 | 98 | let deserialize (eventType, data) = 99 | match eventType with 100 | //| "CardPlayed" -> 101 | // data 102 | // |> deserialize 103 | // |> function 104 | // | { CardPlayedDto.Player = Player player; Card = Card card } -> 105 | // [CardPlayed { Player = player; Card = card }] 106 | // | _ -> [] 107 | 108 | | "GameStarted" -> 109 | data 110 | |> deserialize 111 | |> function 112 | | { GameStartedDto.Players = Players players; FirstCard = Card card } -> 113 | [GameStarted { Players = players; FirstCard = card }] 114 | | _ -> [] 115 | | _ -> [] 116 | -------------------------------------------------------------------------------- /Uno/Uno.fsproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Exe 4 | netcoreapp2.2 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Uno/paket.references: -------------------------------------------------------------------------------- 1 | EventStore.ClientAPI.NetCore 2 | Newtonsoft.Json 3 | FSharp.Core -------------------------------------------------------------------------------- /UnoCore.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.28721.148 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Uno", "Uno\Uno.fsproj", "{500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}" 7 | EndProject 8 | Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Uno.Tests", "Uno.Tests\Uno.Tests.fsproj", "{80715249-37C6-4E02-B72E-E6F1BE0FBF94}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".build", ".build", "{CE18673A-0298-4ACE-A3A4-F2832B7A8DCC}" 11 | ProjectSection(SolutionItems) = preProject 12 | paket.dependencies = paket.dependencies 13 | README.md = README.md 14 | EndProjectSection 15 | EndProject 16 | Global 17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 18 | Debug|Any CPU = Debug|Any CPU 19 | Debug|x64 = Debug|x64 20 | Debug|x86 = Debug|x86 21 | Release|Any CPU = Release|Any CPU 22 | Release|x64 = Release|x64 23 | Release|x86 = Release|x86 24 | EndGlobalSection 25 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 26 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|x64.ActiveCfg = Debug|Any CPU 29 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|x64.Build.0 = Debug|Any CPU 30 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|x86.ActiveCfg = Debug|Any CPU 31 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Debug|x86.Build.0 = Debug|Any CPU 32 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|Any CPU.ActiveCfg = Release|Any CPU 33 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|Any CPU.Build.0 = Release|Any CPU 34 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|x64.ActiveCfg = Release|Any CPU 35 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|x64.Build.0 = Release|Any CPU 36 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|x86.ActiveCfg = Release|Any CPU 37 | {500A94EB-56C1-46BF-BFEB-6F4AA498BBE7}.Release|x86.Build.0 = Release|Any CPU 38 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|Any CPU.Build.0 = Debug|Any CPU 40 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|x64.ActiveCfg = Debug|Any CPU 41 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|x64.Build.0 = Debug|Any CPU 42 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|x86.ActiveCfg = Debug|Any CPU 43 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Debug|x86.Build.0 = Debug|Any CPU 44 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|Any CPU.ActiveCfg = Release|Any CPU 45 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|Any CPU.Build.0 = Release|Any CPU 46 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|x64.ActiveCfg = Release|Any CPU 47 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|x64.Build.0 = Release|Any CPU 48 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|x86.ActiveCfg = Release|Any CPU 49 | {80715249-37C6-4E02-B72E-E6F1BE0FBF94}.Release|x86.Build.0 = Release|Any CPU 50 | EndGlobalSection 51 | GlobalSection(SolutionProperties) = preSolution 52 | HideSolutionNode = FALSE 53 | EndGlobalSection 54 | GlobalSection(ExtensibilityGlobals) = postSolution 55 | SolutionGuid = {5716F173-FC4A-4687-9CCC-5586ECDEC188} 56 | EndGlobalSection 57 | EndGlobal 58 | -------------------------------------------------------------------------------- /build.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | if not exist .paket\paket.exe ( 4 | del .paket\paket.exe 5 | dotnet tool install paket --tool-path .paket 6 | ) 7 | 8 | dotnet build 9 | -------------------------------------------------------------------------------- /paket.dependencies: -------------------------------------------------------------------------------- 1 | framework: netcoreapp2.2, netstandard2.0 2 | storage: none 3 | generate_load_scripts: true 4 | 5 | source https://api.nuget.org/v3/index.json 6 | 7 | nuget EventStore.ClientAPI.NetCore 8 | nuget FSharp.Core 9 | nuget Microsoft.NET.Test.Sdk 10 | nuget Newtonsoft.Json 11 | nuget Unquote 12 | nuget xunit 13 | nuget xunit.runner.visualstudio -------------------------------------------------------------------------------- /paket.lock: -------------------------------------------------------------------------------- 1 | GENERATE-LOAD-SCRIPTS: ON 2 | STORAGE: NONE 3 | RESTRICTION: || (== netcoreapp2.2) (== netstandard2.0) 4 | NUGET 5 | remote: https://api.nuget.org/v3/index.json 6 | EventStore.ClientAPI.NetCore (4.1.0.23) 7 | Newtonsoft.Json (>= 10.0.3) 8 | protobuf-net (>= 2.3.2) 9 | FSharp.Core (4.6.2) 10 | Microsoft.CodeCoverage (16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) 11 | Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 12 | System.AppContext (>= 4.1) 13 | System.Collections (>= 4.0.11) 14 | System.IO (>= 4.1) 15 | System.IO.FileSystem (>= 4.0.1) 16 | System.Reflection.TypeExtensions (>= 4.1) 17 | System.Runtime.Extensions (>= 4.1) 18 | System.Runtime.InteropServices (>= 4.1) 19 | System.Runtime.InteropServices.RuntimeInformation (>= 4.0) 20 | Microsoft.Extensions.DependencyModel (2.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 21 | Microsoft.DotNet.PlatformAbstractions (>= 2.1) 22 | Newtonsoft.Json (>= 9.0.1) 23 | System.Diagnostics.Debug (>= 4.0.11) 24 | System.Dynamic.Runtime (>= 4.0.11) 25 | System.Linq (>= 4.1) 26 | Microsoft.NET.Test.Sdk (16.0.1) 27 | Microsoft.CodeCoverage (>= 16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) 28 | Microsoft.TestPlatform.TestHost (>= 16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 29 | Microsoft.NETCore.Platforms (2.2) 30 | Microsoft.NETCore.Targets (2.1) 31 | Microsoft.TestPlatform.ObjectModel (16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 32 | NETStandard.Library (>= 1.6) 33 | System.ComponentModel.EventBasedAsync (>= 4.0.11) 34 | System.ComponentModel.TypeConverter (>= 4.1) 35 | System.Diagnostics.Process (>= 4.1) 36 | System.Diagnostics.TextWriterTraceListener (>= 4.0) 37 | System.Diagnostics.TraceSource (>= 4.0) 38 | System.Reflection.Metadata (>= 1.3) 39 | System.Reflection.TypeExtensions (>= 4.1) 40 | System.Runtime.InteropServices.RuntimeInformation (>= 4.0) 41 | System.Runtime.Loader (>= 4.0) 42 | System.Runtime.Serialization.Json (>= 4.0.2) 43 | System.Runtime.Serialization.Primitives (>= 4.1.1) 44 | System.Threading.Thread (>= 4.0) 45 | System.Xml.XPath.XmlDocument (>= 4.0.1) 46 | Microsoft.TestPlatform.TestHost (16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 47 | Microsoft.Extensions.DependencyModel (>= 1.0.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 48 | Microsoft.TestPlatform.ObjectModel (>= 16.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= uap10.0)) 49 | Newtonsoft.Json (>= 9.0.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= uap10.0)) 50 | Microsoft.Win32.Primitives (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 51 | Microsoft.NETCore.Platforms (>= 1.1) 52 | Microsoft.NETCore.Targets (>= 1.1) 53 | System.Runtime (>= 4.3) 54 | Microsoft.Win32.Registry (4.5) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 55 | System.Security.AccessControl (>= 4.5) 56 | System.Security.Principal.Windows (>= 4.5) 57 | NETStandard.Library (2.0.3) 58 | Microsoft.NETCore.Platforms (>= 1.1) 59 | Newtonsoft.Json (12.0.1) 60 | protobuf-net (2.4) 61 | System.Reflection.Emit (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard2.0)) (== netstandard2.0) 62 | System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard2.0)) (== netstandard2.0) 63 | System.Reflection.TypeExtensions (>= 4.4) - restriction: || (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard2.0)) (== netstandard2.0) 64 | System.ServiceModel.Primitives (>= 4.5.3) 65 | System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard2.0)) (== netstandard2.0) 66 | runtime.native.System (4.3.1) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 67 | Microsoft.NETCore.Platforms (>= 1.1.1) 68 | Microsoft.NETCore.Targets (>= 1.1.3) 69 | System.AppContext (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 70 | System.Runtime (>= 4.3) 71 | System.Collections (4.3) 72 | Microsoft.NETCore.Platforms (>= 1.1) 73 | Microsoft.NETCore.Targets (>= 1.1) 74 | System.Runtime (>= 4.3) 75 | System.Collections.Concurrent (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 76 | System.Collections (>= 4.3) 77 | System.Diagnostics.Debug (>= 4.3) 78 | System.Diagnostics.Tracing (>= 4.3) 79 | System.Globalization (>= 4.3) 80 | System.Reflection (>= 4.3) 81 | System.Resources.ResourceManager (>= 4.3) 82 | System.Runtime (>= 4.3) 83 | System.Runtime.Extensions (>= 4.3) 84 | System.Threading (>= 4.3) 85 | System.Threading.Tasks (>= 4.3) 86 | System.Collections.NonGeneric (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 87 | System.Diagnostics.Debug (>= 4.3) 88 | System.Globalization (>= 4.3) 89 | System.Resources.ResourceManager (>= 4.3) 90 | System.Runtime (>= 4.3) 91 | System.Runtime.Extensions (>= 4.3) 92 | System.Threading (>= 4.3) 93 | System.Collections.Specialized (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 94 | System.Collections.NonGeneric (>= 4.3) 95 | System.Globalization (>= 4.3) 96 | System.Globalization.Extensions (>= 4.3) 97 | System.Resources.ResourceManager (>= 4.3) 98 | System.Runtime (>= 4.3) 99 | System.Runtime.Extensions (>= 4.3) 100 | System.Threading (>= 4.3) 101 | System.ComponentModel (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 102 | System.Runtime (>= 4.3) 103 | System.ComponentModel.EventBasedAsync (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 104 | System.Resources.ResourceManager (>= 4.3) 105 | System.Runtime (>= 4.3) 106 | System.Threading (>= 4.3) 107 | System.Threading.Tasks (>= 4.3) 108 | System.ComponentModel.Primitives (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 109 | System.ComponentModel (>= 4.3) 110 | System.Resources.ResourceManager (>= 4.3) 111 | System.Runtime (>= 4.3) 112 | System.ComponentModel.TypeConverter (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 113 | System.Collections (>= 4.3) 114 | System.Collections.NonGeneric (>= 4.3) 115 | System.Collections.Specialized (>= 4.3) 116 | System.ComponentModel (>= 4.3) 117 | System.ComponentModel.Primitives (>= 4.3) 118 | System.Globalization (>= 4.3) 119 | System.Linq (>= 4.3) 120 | System.Reflection (>= 4.3) 121 | System.Reflection.Extensions (>= 4.3) 122 | System.Reflection.Primitives (>= 4.3) 123 | System.Reflection.TypeExtensions (>= 4.3) 124 | System.Resources.ResourceManager (>= 4.3) 125 | System.Runtime (>= 4.3) 126 | System.Runtime.Extensions (>= 4.3) 127 | System.Threading (>= 4.3) 128 | System.Diagnostics.Debug (4.3) 129 | Microsoft.NETCore.Platforms (>= 1.1) 130 | Microsoft.NETCore.Targets (>= 1.1) 131 | System.Runtime (>= 4.3) 132 | System.Diagnostics.Process (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 133 | Microsoft.NETCore.Platforms (>= 1.1) 134 | Microsoft.Win32.Primitives (>= 4.3) 135 | Microsoft.Win32.Registry (>= 4.3) 136 | runtime.native.System (>= 4.3) 137 | System.Collections (>= 4.3) 138 | System.Diagnostics.Debug (>= 4.3) 139 | System.Globalization (>= 4.3) 140 | System.IO (>= 4.3) 141 | System.IO.FileSystem (>= 4.3) 142 | System.IO.FileSystem.Primitives (>= 4.3) 143 | System.Resources.ResourceManager (>= 4.3) 144 | System.Runtime (>= 4.3) 145 | System.Runtime.Extensions (>= 4.3) 146 | System.Runtime.Handles (>= 4.3) 147 | System.Runtime.InteropServices (>= 4.3) 148 | System.Text.Encoding (>= 4.3) 149 | System.Text.Encoding.Extensions (>= 4.3) 150 | System.Threading (>= 4.3) 151 | System.Threading.Tasks (>= 4.3) 152 | System.Threading.Thread (>= 4.3) 153 | System.Threading.ThreadPool (>= 4.3) 154 | System.Diagnostics.TextWriterTraceListener (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 155 | System.Diagnostics.TraceSource (>= 4.3) 156 | System.Globalization (>= 4.3) 157 | System.IO (>= 4.3) 158 | System.Resources.ResourceManager (>= 4.3) 159 | System.Runtime (>= 4.3) 160 | System.Threading (>= 4.3) 161 | System.Diagnostics.Tools (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 162 | Microsoft.NETCore.Platforms (>= 1.1) 163 | Microsoft.NETCore.Targets (>= 1.1) 164 | System.Runtime (>= 4.3) 165 | System.Diagnostics.TraceSource (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 166 | Microsoft.NETCore.Platforms (>= 1.1) 167 | runtime.native.System (>= 4.3) 168 | System.Collections (>= 4.3) 169 | System.Diagnostics.Debug (>= 4.3) 170 | System.Globalization (>= 4.3) 171 | System.Resources.ResourceManager (>= 4.3) 172 | System.Runtime (>= 4.3) 173 | System.Runtime.Extensions (>= 4.3) 174 | System.Threading (>= 4.3) 175 | System.Diagnostics.Tracing (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 176 | Microsoft.NETCore.Platforms (>= 1.1) 177 | Microsoft.NETCore.Targets (>= 1.1) 178 | System.Runtime (>= 4.3) 179 | System.Dynamic.Runtime (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 180 | System.Collections (>= 4.3) 181 | System.Diagnostics.Debug (>= 4.3) 182 | System.Linq (>= 4.3) 183 | System.Linq.Expressions (>= 4.3) 184 | System.ObjectModel (>= 4.3) 185 | System.Reflection (>= 4.3) 186 | System.Reflection.Emit (>= 4.3) 187 | System.Reflection.Emit.ILGeneration (>= 4.3) 188 | System.Reflection.Primitives (>= 4.3) 189 | System.Reflection.TypeExtensions (>= 4.3) 190 | System.Resources.ResourceManager (>= 4.3) 191 | System.Runtime (>= 4.3) 192 | System.Runtime.Extensions (>= 4.3) 193 | System.Threading (>= 4.3) 194 | System.Globalization (4.3) 195 | Microsoft.NETCore.Platforms (>= 1.1) 196 | Microsoft.NETCore.Targets (>= 1.1) 197 | System.Runtime (>= 4.3) 198 | System.Globalization.Extensions (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 199 | Microsoft.NETCore.Platforms (>= 1.1) 200 | System.Globalization (>= 4.3) 201 | System.Resources.ResourceManager (>= 4.3) 202 | System.Runtime (>= 4.3) 203 | System.Runtime.Extensions (>= 4.3) 204 | System.Runtime.InteropServices (>= 4.3) 205 | System.IO (4.3) 206 | Microsoft.NETCore.Platforms (>= 1.1) 207 | Microsoft.NETCore.Targets (>= 1.1) 208 | System.Runtime (>= 4.3) 209 | System.Text.Encoding (>= 4.3) 210 | System.Threading.Tasks (>= 4.3) 211 | System.IO.FileSystem (4.3) 212 | Microsoft.NETCore.Platforms (>= 1.1) 213 | Microsoft.NETCore.Targets (>= 1.1) 214 | System.IO (>= 4.3) 215 | System.IO.FileSystem.Primitives (>= 4.3) 216 | System.Runtime (>= 4.3) 217 | System.Runtime.Handles (>= 4.3) 218 | System.Text.Encoding (>= 4.3) 219 | System.Threading.Tasks (>= 4.3) 220 | System.IO.FileSystem.Primitives (4.3) 221 | System.Runtime (>= 4.3) 222 | System.Linq (4.3) 223 | System.Collections (>= 4.3) 224 | System.Diagnostics.Debug (>= 4.3) 225 | System.Resources.ResourceManager (>= 4.3) 226 | System.Runtime (>= 4.3) 227 | System.Runtime.Extensions (>= 4.3) 228 | System.Linq.Expressions (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 229 | System.Collections (>= 4.3) 230 | System.Diagnostics.Debug (>= 4.3) 231 | System.Globalization (>= 4.3) 232 | System.IO (>= 4.3) 233 | System.Linq (>= 4.3) 234 | System.ObjectModel (>= 4.3) 235 | System.Reflection (>= 4.3) 236 | System.Reflection.Emit (>= 4.3) 237 | System.Reflection.Emit.ILGeneration (>= 4.3) 238 | System.Reflection.Emit.Lightweight (>= 4.3) 239 | System.Reflection.Extensions (>= 4.3) 240 | System.Reflection.Primitives (>= 4.3) 241 | System.Reflection.TypeExtensions (>= 4.3) 242 | System.Resources.ResourceManager (>= 4.3) 243 | System.Runtime (>= 4.3) 244 | System.Runtime.Extensions (>= 4.3) 245 | System.Threading (>= 4.3) 246 | System.ObjectModel (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 247 | System.Collections (>= 4.3) 248 | System.Diagnostics.Debug (>= 4.3) 249 | System.Resources.ResourceManager (>= 4.3) 250 | System.Runtime (>= 4.3) 251 | System.Threading (>= 4.3) 252 | System.Private.DataContractSerialization (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 253 | System.Collections (>= 4.3) 254 | System.Collections.Concurrent (>= 4.3) 255 | System.Diagnostics.Debug (>= 4.3) 256 | System.Globalization (>= 4.3) 257 | System.IO (>= 4.3) 258 | System.Linq (>= 4.3) 259 | System.Reflection (>= 4.3) 260 | System.Reflection.Emit.ILGeneration (>= 4.3) 261 | System.Reflection.Emit.Lightweight (>= 4.3) 262 | System.Reflection.Extensions (>= 4.3) 263 | System.Reflection.Primitives (>= 4.3) 264 | System.Reflection.TypeExtensions (>= 4.3) 265 | System.Resources.ResourceManager (>= 4.3) 266 | System.Runtime (>= 4.3) 267 | System.Runtime.Extensions (>= 4.3) 268 | System.Runtime.Serialization.Primitives (>= 4.3) 269 | System.Text.Encoding (>= 4.3) 270 | System.Text.Encoding.Extensions (>= 4.3) 271 | System.Text.RegularExpressions (>= 4.3) 272 | System.Threading (>= 4.3) 273 | System.Threading.Tasks (>= 4.3) 274 | System.Xml.ReaderWriter (>= 4.3) 275 | System.Xml.XDocument (>= 4.3) 276 | System.Xml.XmlDocument (>= 4.3) 277 | System.Xml.XmlSerializer (>= 4.3) 278 | System.Private.ServiceModel (4.5.3) 279 | Microsoft.NETCore.Platforms (>= 2.1) 280 | System.Reflection.DispatchProxy (>= 4.5) 281 | System.Security.Principal.Windows (>= 4.5) 282 | System.Reflection (4.3) 283 | Microsoft.NETCore.Platforms (>= 1.1) 284 | Microsoft.NETCore.Targets (>= 1.1) 285 | System.IO (>= 4.3) 286 | System.Reflection.Primitives (>= 4.3) 287 | System.Runtime (>= 4.3) 288 | System.Reflection.DispatchProxy (4.5.1) 289 | System.Reflection.Emit (4.3) 290 | System.IO (>= 4.3) 291 | System.Reflection (>= 4.3) 292 | System.Reflection.Emit.ILGeneration (>= 4.3) 293 | System.Reflection.Primitives (>= 4.3) 294 | System.Runtime (>= 4.3) 295 | System.Reflection.Emit.ILGeneration (4.3) 296 | System.Reflection (>= 4.3) 297 | System.Reflection.Primitives (>= 4.3) 298 | System.Runtime (>= 4.3) 299 | System.Reflection.Emit.Lightweight (4.3) 300 | System.Reflection (>= 4.3) 301 | System.Reflection.Emit.ILGeneration (>= 4.3) 302 | System.Reflection.Primitives (>= 4.3) 303 | System.Runtime (>= 4.3) 304 | System.Reflection.Extensions (4.3) 305 | Microsoft.NETCore.Platforms (>= 1.1) 306 | Microsoft.NETCore.Targets (>= 1.1) 307 | System.Reflection (>= 4.3) 308 | System.Runtime (>= 4.3) 309 | System.Reflection.Metadata (1.6) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 310 | System.Reflection.Primitives (4.3) 311 | Microsoft.NETCore.Platforms (>= 1.1) 312 | Microsoft.NETCore.Targets (>= 1.1) 313 | System.Runtime (>= 4.3) 314 | System.Reflection.TypeExtensions (4.5.1) 315 | System.Resources.ResourceManager (4.3) 316 | Microsoft.NETCore.Platforms (>= 1.1) 317 | Microsoft.NETCore.Targets (>= 1.1) 318 | System.Globalization (>= 4.3) 319 | System.Reflection (>= 4.3) 320 | System.Runtime (>= 4.3) 321 | System.Runtime (4.3.1) 322 | Microsoft.NETCore.Platforms (>= 1.1.1) 323 | Microsoft.NETCore.Targets (>= 1.1.3) 324 | System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (>= net45)) (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard1.0)) (&& (== netcoreapp2.2) (< netstandard1.3)) (&& (== netcoreapp2.2) (< netstandard2.0)) (&& (== netcoreapp2.2) (>= wp8)) (== netstandard2.0) 325 | System.Runtime.Extensions (4.3.1) 326 | Microsoft.NETCore.Platforms (>= 1.1.1) 327 | Microsoft.NETCore.Targets (>= 1.1.3) 328 | System.Runtime (>= 4.3.1) 329 | System.Runtime.Handles (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 330 | Microsoft.NETCore.Platforms (>= 1.1) 331 | Microsoft.NETCore.Targets (>= 1.1) 332 | System.Runtime (>= 4.3) 333 | System.Runtime.InteropServices (4.3) 334 | Microsoft.NETCore.Platforms (>= 1.1) 335 | Microsoft.NETCore.Targets (>= 1.1) 336 | System.Reflection (>= 4.3) 337 | System.Reflection.Primitives (>= 4.3) 338 | System.Runtime (>= 4.3) 339 | System.Runtime.Handles (>= 4.3) 340 | System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 341 | runtime.native.System (>= 4.3) 342 | System.Reflection (>= 4.3) 343 | System.Reflection.Extensions (>= 4.3) 344 | System.Resources.ResourceManager (>= 4.3) 345 | System.Runtime (>= 4.3) 346 | System.Runtime.InteropServices (>= 4.3) 347 | System.Threading (>= 4.3) 348 | System.Runtime.Loader (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 349 | System.IO (>= 4.3) 350 | System.Reflection (>= 4.3) 351 | System.Runtime (>= 4.3) 352 | System.Runtime.Serialization.Json (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 353 | System.IO (>= 4.3) 354 | System.Private.DataContractSerialization (>= 4.3) 355 | System.Runtime (>= 4.3) 356 | System.Runtime.Serialization.Primitives (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 357 | System.Resources.ResourceManager (>= 4.3) 358 | System.Runtime (>= 4.3) 359 | System.Security.AccessControl (4.5) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= netcoreapp2.0)) 360 | Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp2.0)) 361 | System.Security.Principal.Windows (>= 4.5) 362 | System.Security.Principal.Windows (4.5.1) 363 | Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp2.0)) 364 | System.ServiceModel.Primitives (4.5.3) 365 | System.Private.ServiceModel (>= 4.5.3) 366 | System.Text.Encoding (4.3) 367 | Microsoft.NETCore.Platforms (>= 1.1) 368 | Microsoft.NETCore.Targets (>= 1.1) 369 | System.Runtime (>= 4.3) 370 | System.Text.Encoding.Extensions (4.3) 371 | Microsoft.NETCore.Platforms (>= 1.1) 372 | Microsoft.NETCore.Targets (>= 1.1) 373 | System.Runtime (>= 4.3) 374 | System.Text.Encoding (>= 4.3) 375 | System.Text.RegularExpressions (4.3) 376 | System.Collections (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp1.1)) (== netstandard2.0) 377 | System.Globalization (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp1.1)) (== netstandard2.0) 378 | System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp1.1)) (== netstandard2.0) 379 | System.Runtime (>= 4.3) 380 | System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp1.1)) (== netstandard2.0) 381 | System.Threading (>= 4.3) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp1.1)) (== netstandard2.0) 382 | System.Threading (4.3) 383 | System.Runtime (>= 4.3) 384 | System.Threading.Tasks (>= 4.3) 385 | System.Threading.Tasks (4.3) 386 | Microsoft.NETCore.Platforms (>= 1.1) 387 | Microsoft.NETCore.Targets (>= 1.1) 388 | System.Runtime (>= 4.3) 389 | System.Threading.Tasks.Extensions (4.5.2) - restriction: || (&& (== netcoreapp2.2) (>= dnxcore50)) (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard1.3)) (&& (== netcoreapp2.2) (< netstandard2.0)) (== netstandard2.0) 390 | System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (== netcoreapp2.2) (>= net45)) (&& (== netcoreapp2.2) (< netcoreapp2.1)) (&& (== netcoreapp2.2) (< netstandard1.0)) (&& (== netcoreapp2.2) (< netstandard2.0)) (&& (== netcoreapp2.2) (>= wp8)) (== netstandard2.0) 391 | System.Threading.Thread (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 392 | System.Runtime (>= 4.3) 393 | System.Threading.ThreadPool (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 394 | System.Runtime (>= 4.3) 395 | System.Runtime.Handles (>= 4.3) 396 | System.Xml.ReaderWriter (4.3.1) 397 | System.Collections (>= 4.3) 398 | System.Diagnostics.Debug (>= 4.3) 399 | System.Globalization (>= 4.3) 400 | System.IO (>= 4.3) 401 | System.IO.FileSystem (>= 4.3) 402 | System.IO.FileSystem.Primitives (>= 4.3) 403 | System.Resources.ResourceManager (>= 4.3) 404 | System.Runtime (>= 4.3) 405 | System.Runtime.Extensions (>= 4.3) 406 | System.Runtime.InteropServices (>= 4.3) 407 | System.Text.Encoding (>= 4.3) 408 | System.Text.Encoding.Extensions (>= 4.3) 409 | System.Text.RegularExpressions (>= 4.3) 410 | System.Threading.Tasks (>= 4.3) 411 | System.Threading.Tasks.Extensions (>= 4.3) 412 | System.Xml.XDocument (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 413 | System.Collections (>= 4.3) 414 | System.Diagnostics.Debug (>= 4.3) 415 | System.Diagnostics.Tools (>= 4.3) 416 | System.Globalization (>= 4.3) 417 | System.IO (>= 4.3) 418 | System.Reflection (>= 4.3) 419 | System.Resources.ResourceManager (>= 4.3) 420 | System.Runtime (>= 4.3) 421 | System.Runtime.Extensions (>= 4.3) 422 | System.Text.Encoding (>= 4.3) 423 | System.Threading (>= 4.3) 424 | System.Xml.ReaderWriter (>= 4.3) 425 | System.Xml.XmlDocument (4.3) 426 | System.Collections (>= 4.3) 427 | System.Diagnostics.Debug (>= 4.3) 428 | System.Globalization (>= 4.3) 429 | System.IO (>= 4.3) 430 | System.Resources.ResourceManager (>= 4.3) 431 | System.Runtime (>= 4.3) 432 | System.Runtime.Extensions (>= 4.3) 433 | System.Text.Encoding (>= 4.3) 434 | System.Threading (>= 4.3) 435 | System.Xml.ReaderWriter (>= 4.3) 436 | System.Xml.XmlSerializer (4.3) 437 | System.Collections (>= 4.3) 438 | System.Globalization (>= 4.3) 439 | System.IO (>= 4.3) 440 | System.Linq (>= 4.3) 441 | System.Reflection (>= 4.3) 442 | System.Reflection.Emit (>= 4.3) 443 | System.Reflection.Emit.ILGeneration (>= 4.3) 444 | System.Reflection.Extensions (>= 4.3) 445 | System.Reflection.Primitives (>= 4.3) 446 | System.Reflection.TypeExtensions (>= 4.3) 447 | System.Resources.ResourceManager (>= 4.3) 448 | System.Runtime (>= 4.3) 449 | System.Runtime.Extensions (>= 4.3) 450 | System.Text.RegularExpressions (>= 4.3) 451 | System.Threading (>= 4.3) 452 | System.Xml.ReaderWriter (>= 4.3) 453 | System.Xml.XmlDocument (>= 4.3) 454 | System.Xml.XPath (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 455 | System.Collections (>= 4.3) 456 | System.Diagnostics.Debug (>= 4.3) 457 | System.Globalization (>= 4.3) 458 | System.IO (>= 4.3) 459 | System.Resources.ResourceManager (>= 4.3) 460 | System.Runtime (>= 4.3) 461 | System.Runtime.Extensions (>= 4.3) 462 | System.Threading (>= 4.3) 463 | System.Xml.ReaderWriter (>= 4.3) 464 | System.Xml.XPath.XmlDocument (4.3) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 465 | System.Collections (>= 4.3) 466 | System.Globalization (>= 4.3) 467 | System.IO (>= 4.3) 468 | System.Resources.ResourceManager (>= 4.3) 469 | System.Runtime (>= 4.3) 470 | System.Runtime.Extensions (>= 4.3) 471 | System.Threading (>= 4.3) 472 | System.Xml.ReaderWriter (>= 4.3) 473 | System.Xml.XmlDocument (>= 4.3) 474 | System.Xml.XPath (>= 4.3) 475 | Unquote (4.0) 476 | FSharp.Core (>= 4.2.3) 477 | xunit (2.4.1) 478 | xunit.analyzers (>= 0.10) 479 | xunit.assert (2.4.1) 480 | xunit.core (2.4.1) 481 | xunit.abstractions (2.0.3) 482 | xunit.analyzers (0.10) 483 | xunit.assert (2.4.1) 484 | NETStandard.Library (>= 1.6.1) 485 | xunit.core (2.4.1) 486 | xunit.extensibility.core (2.4.1) 487 | xunit.extensibility.execution (2.4.1) 488 | xunit.extensibility.core (2.4.1) 489 | NETStandard.Library (>= 1.6.1) 490 | xunit.abstractions (>= 2.0.3) 491 | xunit.extensibility.execution (2.4.1) 492 | NETStandard.Library (>= 1.6.1) 493 | xunit.extensibility.core (2.4.1) 494 | xunit.runner.visualstudio (2.4.1) 495 | Microsoft.NET.Test.Sdk (>= 15.0) - restriction: || (== netcoreapp2.2) (&& (== netstandard2.0) (>= netcoreapp1.0)) 496 | --------------------------------------------------------------------------------