Skip to content

Commit 8e1d83d

Browse files
committed
Fixed double variables coercion
1 parent 891e36d commit 8e1d83d

5 files changed

Lines changed: 35 additions & 22 deletions

File tree

src/FSharp.Data.GraphQL.Server.Middleware/MiddlewareDefinitions.fs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ type internal ObjectListFilterMiddleware<'ObjectType, 'ListType>(reportToMetadat
9090
match x.Name with
9191
| "filter" -> ObjectListFilter.CoerceInput (InlineConstant x.Value)
9292
| _ -> Ok NoFilter)
93+
|> Seq.toList
9394
match filterResults |> splitSeqErrorsList with
9495
| Error errs -> Error errs
9596
| Ok filters ->

src/FSharp.Data.GraphQL.Server.Middleware/SchemaDefinitions.fs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ module SchemaDefinitions =
6969

7070
let rec mapFilter (name : string, value : InputValue) =
7171
let mapFilters fields =
72-
let coerceResults = fields |> Seq.map coerceObjectListFilterInput |> splitSeqErrorsList
72+
let coerceResults =
73+
fields |> Seq.map coerceObjectListFilterInput |> Seq.toList |> splitSeqErrorsList
7374
match coerceResults with
7475
| Error errs -> Error errs
7576
| Ok coerced -> coerced |> removeNoFilter |> Seq.toList |> Ok
@@ -95,7 +96,8 @@ module SchemaDefinitions =
9596
| _ -> Ok NoFilter
9697

9798
and mapInput value =
98-
let filterResults = value |> Map.toSeq |> Seq.map mapFilter |> splitSeqErrorsList
99+
let filterResults =
100+
value |> Map.toSeq |> Seq.map mapFilter |> Seq.toList |> splitSeqErrorsList
99101
match filterResults with
100102
| Error errs -> Error errs
101103
| Ok filters ->

src/FSharp.Data.GraphQL.Server/ErrorsProcessing.fs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ open FsToolkit.ErrorHandling
1111

1212
let getObjectErrors (object: IReadOnlyDictionary<string, Result<'t, IGQLError>>) =
1313
object
14-
|> Seq.choose (fun kvp ->
14+
|> Seq.vchoose (fun kvp ->
1515
match kvp.Value with
16-
| Ok _ -> None
17-
| Error err -> Some err)
16+
| Ok _ -> ValueNone
17+
| Error err -> ValueSome err)
1818
|> Seq.toList
1919

2020
let getObjectValues (object: IReadOnlyDictionary<string, Result<'t, IGQLError>>) =
@@ -30,18 +30,19 @@ let getObjectValues (object: IReadOnlyDictionary<string, Result<'t, IGQLError>>)
3030
let splitObjectErrors (object: IReadOnlyDictionary<string, Result<'t, IGQLError>>) =
3131
let errors = object |> getObjectErrors
3232

33-
if not <| List.isEmpty errors then
33+
if not errors.IsEmpty then
3434
Error errors
3535
else
3636
let values = object |> getObjectValues
3737
Ok values
3838

3939
let getObjectErrorsList (object: IReadOnlyDictionary<string, Result<'t, IGQLError list>>) =
4040
object
41-
|> Seq.choose (fun kvp ->
41+
|> Seq.vchoose (fun kvp ->
4242
match kvp.Value with
43-
| Ok _ -> None
44-
| Error err -> Some err)
43+
| Ok _ -> ValueNone
44+
| Error err -> ValueSome err)
45+
|> Seq.collect id
4546
|> Seq.toList
4647

4748
let getObjectValuesList (object: IReadOnlyDictionary<string, Result<'t, IGQLError list>>) =
@@ -57,18 +58,18 @@ let getObjectValuesList (object: IReadOnlyDictionary<string, Result<'t, IGQLErro
5758
let splitObjectErrorsList (object: IReadOnlyDictionary<string, Result<'t, IGQLError list>>) =
5859
let errors = object |> getObjectErrorsList
5960

60-
if not <| List.isEmpty errors then
61-
Error (errors |> List.collect id)
61+
if not errors.IsEmpty then
62+
Error errors
6263
else
6364
let values = object |> getObjectValuesList
6465
Ok values
6566

6667
let getSeqErrors (items: Result<'t, IGQLError> seq) =
6768
items
68-
|> Seq.choose (fun result ->
69+
|> Seq.vchoose (fun result ->
6970
match result with
70-
| Ok _ -> None
71-
| Error err -> Some err)
71+
| Ok _ -> ValueNone
72+
| Error err -> ValueSome err)
7273
|> Seq.toList
7374

7475
let getSeqValues (items: Result<'t, IGQLError> seq) =
@@ -79,21 +80,22 @@ let getSeqValues (items: Result<'t, IGQLError> seq) =
7980
| Error _ -> raise <| ArgumentException())
8081
|> Seq.toArray
8182

82-
let splitSeqErrors (items: Result<'t, IGQLError> seq) =
83+
let splitSeqErrors (items: Result<'t, IGQLError> list) =
8384
let errors = items |> getSeqErrors
8485

85-
if not <| List.isEmpty errors then
86+
if not errors.IsEmpty then
8687
Error errors
8788
else
8889
let values = items |> getSeqValues
8990
Ok values
9091

9192
let getSeqErrorsList (items: Result<'t, IGQLError list> seq) =
9293
items
93-
|> Seq.choose (fun result ->
94+
|> Seq.vchoose (fun result ->
9495
match result with
95-
| Ok _ -> None
96-
| Error err -> Some err)
96+
| Ok _ -> ValueNone
97+
| Error err -> ValueSome err)
98+
|> Seq.collect id
9799
|> Seq.toList
98100

99101
let getSeqValuesList (items: Result<'t, IGQLError list> seq) =
@@ -104,11 +106,11 @@ let getSeqValuesList (items: Result<'t, IGQLError list> seq) =
104106
| Error _ -> raise <| ArgumentException())
105107
|> Seq.toArray
106108

107-
let splitSeqErrorsList (items: Result<'t, IGQLError list> seq) =
109+
let splitSeqErrorsList (items: Result<'t, IGQLError list> list) =
108110
let errors = items |> getSeqErrorsList
109111

110-
if not <| List.isEmpty errors then
111-
Error (errors |> List.collect id)
112+
if not errors.IsEmpty then
113+
Error errors
112114
else
113115
let values = items |> getSeqValuesList
114116
Ok values

src/FSharp.Data.GraphQL.Server/Values.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ let rec internal compileByType
208208
|> Result.map (normalizeOptional param.ParameterType)
209209
|> attachErrorExtensionsIfScalar inputSource inputObjectPath originalInputDef field
210210
| ValueNone -> Ok <| wrapOptionalNone param.ParameterType typeof<obj>)
211+
|> Seq.toList
211212

212213
let! args = argResults |> splitSeqErrorsList
213214

@@ -237,6 +238,7 @@ let rec internal compileByType
237238
return normalizeOptional param.ParameterType value
238239
| ValueNone -> return wrapOptionalNone param.ParameterType typeof<obj>
239240
})
241+
|> Seq.toList
240242

241243
let! args = argResults |> splitSeqErrorsList
242244

@@ -280,6 +282,7 @@ let rec internal compileByType
280282
let! mappedValues =
281283
list
282284
|> Seq.mapi (fun i value -> inner i value variables)
285+
|> Seq.toList
283286
|> splitSeqErrorsList
284287
let mappedValues =
285288
mappedValues
@@ -430,6 +433,7 @@ let rec internal coerceVariableValue
430433
input.EnumerateArray ()
431434
|> Seq.mapi (fun i elem ->
432435
coerceVariableValue areItemsNullable ((box i) :: inputObjectPath) ValueNone (originalTypeDef, innerDef) varDef elem)
436+
|> Seq.toList
433437
|> splitSeqErrorsList
434438
if areItemsNullable then
435439
let some, none, _ = ReflectionHelper.optionOfType innerDef.Type.GenericTypeArguments[0]

src/FSharp.Data.GraphQL.Shared/Helpers/ObjAndStructConversions.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,7 @@ module internal Seq =
2727
module internal List =
2828

2929
let vchoose mapping list = list |> Seq.vchoose mapping |> List.ofSeq
30+
31+
module internal Array =
32+
33+
let vchoose mapping array = array |> Seq.vchoose mapping |> Array.ofSeq

0 commit comments

Comments
 (0)