@@ -3,7 +3,7 @@ module Graphql.Document.Field exposing (hashedAliasName, serializeChildren)
33import Graphql.Document.Argument as Argument
44import Graphql.Document.Hash exposing (hashString )
55import Graphql.Document.Indent as Indent
6- import Graphql.RawField exposing (RawField (..) )
6+ import Graphql.RawField exposing (RawField (..) , name )
77import OrderedDict as Dict
88
99
@@ -15,7 +15,7 @@ hashedAliasName : RawField -> String
1515hashedAliasName field =
1616 field
1717 |> alias
18- |> Maybe . withDefault ( Graphql . RawField . name field)
18+ |> Maybe . withDefault ( name field)
1919
2020
2121maybeAliasHash : RawField -> Maybe Int
@@ -52,7 +52,7 @@ alias : RawField -> Maybe String
5252alias field =
5353 field
5454 |> maybeAliasHash
55- |> Maybe . map ( \ aliasHash -> Graphql . RawField . name field ++ String . fromInt aliasHash)
55+ |> Maybe . map ( \ aliasHash -> name field ++ String . fromInt aliasHash)
5656
5757
5858serialize : Maybe String -> Maybe Int -> RawField -> Maybe String
@@ -112,9 +112,10 @@ serializeChildren indentationLevel children =
112112 children
113113 |> mergedFields
114114 |> nonemptyChildren
115+ |> canAllowHashing
115116 |> List . map
116- ( \ field ->
117- serialize ( alias field ) ( indentationLevel |> Maybe . map ( (+) 1 )) field
117+ ( \ ( field, maybeAlias ) ->
118+ serialize maybeAlias ( indentationLevel |> Maybe . map ( (+) 1 )) field
118119 )
119120 |> List . filterMap identity
120121 |> String . join
@@ -127,6 +128,42 @@ serializeChildren indentationLevel children =
127128 )
128129
129130
131+ canAllowHashing : List RawField -> List ( RawField , Maybe String )
132+ canAllowHashing rawFields =
133+ let
134+ fieldCounts =
135+ rawFields
136+ |> List . map name
137+ |> List . foldl
138+ ( \ fld acc ->
139+ acc
140+ |> Dict . update fld
141+ ( \ val ->
142+ Just
143+ ( case val of
144+ Nothing ->
145+ 0
146+
147+ Just count ->
148+ count + 1
149+ )
150+ )
151+ )
152+ Dict . empty
153+ in
154+ rawFields
155+ |> List . map
156+ ( \ field ->
157+ ( field
158+ , if ( fieldCounts |> Dict . get ( name field) |> Maybe . withDefault 0 ) == 0 then
159+ Nothing
160+
161+ else
162+ alias field
163+ )
164+ )
165+
166+
130167mergedFields : List RawField -> List RawField
131168mergedFields children =
132169 Dict . values ( mergeFields children)
0 commit comments