From edb12e3e0a2a3721ebf658034defabc1ce9914ef Mon Sep 17 00:00:00 2001 From: Ben Kraft Date: Fri, 2 Apr 2021 16:01:52 -0700 Subject: [PATCH] pretty-print JSON in query-export --- generate/generate.go | 15 ++++++++------- .../testdata/queries/InputObject.graphql.json | 10 +++++++++- .../queries/InterfaceNoFragments.graphql.json | 10 +++++++++- generate/testdata/queries/ListInput.graphql.json | 10 +++++++++- .../testdata/queries/QueryWithAlias.graphql.json | 10 +++++++++- .../queries/QueryWithDoubleAlias.graphql.json | 10 +++++++++- .../testdata/queries/QueryWithEnums.graphql.json | 10 +++++++++- .../testdata/queries/QueryWithSlices.graphql.json | 10 +++++++++- .../queries/QueryWithStructs.graphql.json | 10 +++++++++- .../testdata/queries/SimpleInput.graphql.json | 10 +++++++++- .../testdata/queries/SimpleQuery.graphql.json | 10 +++++++++- generate/testdata/queries/TypeName.graphql.json | 10 +++++++++- .../queries/UnionNoFragments.graphql.json | 10 +++++++++- .../testdata/queries/UsesEnumTwice.graphql.json | 10 +++++++++- generate/testdata/queries/unexported.graphql.json | 10 +++++++++- 15 files changed, 134 insertions(+), 21 deletions(-) diff --git a/generate/generate.go b/generate/generate.go index 46b2a08..019ca88 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -113,12 +113,9 @@ func (g *generator) getDocComment(op *ast.OperationDefinition) string { } func (g *generator) addOperation(op *ast.OperationDefinition) error { - // TODO: we may have to actually get the precise query text, in case we - // want to be hashing it or something like that. This is a bit tricky - // because gqlparser's ast doesn't provide node end-position (only - // token end-position). var builder strings.Builder f := formatter.NewFormatter(&builder) + // TODO: this could even get minifed. f.FormatQueryDocument(&ast.QueryDocument{ Operations: ast.OperationList{op}, // TODO: handle fragments @@ -142,7 +139,7 @@ func (g *generator) addOperation(op *ast.OperationDefinition) error { Type: op.Operation, Name: op.Name, Doc: g.getDocComment(op), - // The newline just makes it format a little nicer + // The newline just makes it format a little nicer. Body: "\n" + builder.String(), Args: args, ResponseName: responseName, @@ -196,8 +193,12 @@ func Generate(config *Config) (map[string][]byte, error) { } if config.ExportOperations != "" { - retval[config.ExportOperations], err = json.Marshal( - exportedOperations{Operations: g.Operations}) + // We use MarshalIndent so that the file is human-readable and + // slightly more likely to be git-mergeable (if you check it in). In + // general it's never going to be used anywhere where space is an + // issue -- it doesn't go in your binary or anything. + retval[config.ExportOperations], err = json.MarshalIndent( + exportedOperations{Operations: g.Operations}, "", " ") if err != nil { return nil, fmt.Errorf("unable to export queries: %v", err) } diff --git a/generate/testdata/queries/InputObject.graphql.json b/generate/testdata/queries/InputObject.graphql.json index 2407912..58588a6 100644 --- a/generate/testdata/queries/InputObject.graphql.json +++ b/generate/testdata/queries/InputObject.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"InputObjectQuery","query":"\nquery InputObjectQuery ($query: UserQueryInput) {\n\tuser(query: $query) {\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/InputObject.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "InputObjectQuery", + "query": "\nquery InputObjectQuery ($query: UserQueryInput) {\n\tuser(query: $query) {\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/InputObject.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/InterfaceNoFragments.graphql.json b/generate/testdata/queries/InterfaceNoFragments.graphql.json index 62a9e28..598769e 100644 --- a/generate/testdata/queries/InterfaceNoFragments.graphql.json +++ b/generate/testdata/queries/InterfaceNoFragments.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"InterfaceNoFragmentsQuery","query":"\nquery InterfaceNoFragmentsQuery {\n\troot {\n\t\tid\n\t\tname\n\t\tchildren {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t}\n}\n","sourceLocation":"testdata/queries/InterfaceNoFragments.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "InterfaceNoFragmentsQuery", + "query": "\nquery InterfaceNoFragmentsQuery {\n\troot {\n\t\tid\n\t\tname\n\t\tchildren {\n\t\t\tid\n\t\t\tname\n\t\t}\n\t}\n}\n", + "sourceLocation": "testdata/queries/InterfaceNoFragments.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/ListInput.graphql.json b/generate/testdata/queries/ListInput.graphql.json index 7d7fc93..5bd96b0 100644 --- a/generate/testdata/queries/ListInput.graphql.json +++ b/generate/testdata/queries/ListInput.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"ListInputQuery","query":"\nquery ListInputQuery ($names: [String]) {\n\tuser(query: {names:$names}) {\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/ListInput.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "ListInputQuery", + "query": "\nquery ListInputQuery ($names: [String]) {\n\tuser(query: {names:$names}) {\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/ListInput.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/QueryWithAlias.graphql.json b/generate/testdata/queries/QueryWithAlias.graphql.json index eff1df1..5e22fad 100644 --- a/generate/testdata/queries/QueryWithAlias.graphql.json +++ b/generate/testdata/queries/QueryWithAlias.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"QueryWithAlias","query":"\nquery QueryWithAlias {\n\tUser: user {\n\t\tID: id\n\t}\n}\n","sourceLocation":"testdata/queries/QueryWithAlias.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "QueryWithAlias", + "query": "\nquery QueryWithAlias {\n\tUser: user {\n\t\tID: id\n\t}\n}\n", + "sourceLocation": "testdata/queries/QueryWithAlias.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/QueryWithDoubleAlias.graphql.json b/generate/testdata/queries/QueryWithDoubleAlias.graphql.json index 5534d22..af143c6 100644 --- a/generate/testdata/queries/QueryWithDoubleAlias.graphql.json +++ b/generate/testdata/queries/QueryWithDoubleAlias.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"QueryWithDoubleAlias","query":"\nquery QueryWithDoubleAlias {\n\tuser {\n\t\tID: id\n\t\tAlsoID: id\n\t}\n}\n","sourceLocation":"testdata/queries/QueryWithDoubleAlias.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "QueryWithDoubleAlias", + "query": "\nquery QueryWithDoubleAlias {\n\tuser {\n\t\tID: id\n\t\tAlsoID: id\n\t}\n}\n", + "sourceLocation": "testdata/queries/QueryWithDoubleAlias.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/QueryWithEnums.graphql.json b/generate/testdata/queries/QueryWithEnums.graphql.json index 723a380..43346ad 100644 --- a/generate/testdata/queries/QueryWithEnums.graphql.json +++ b/generate/testdata/queries/QueryWithEnums.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"QueryWithEnums","query":"\nquery QueryWithEnums {\n\tuser {\n\t\troles\n\t}\n\totherUser: user {\n\t\troles\n\t}\n}\n","sourceLocation":"testdata/queries/QueryWithEnums.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "QueryWithEnums", + "query": "\nquery QueryWithEnums {\n\tuser {\n\t\troles\n\t}\n\totherUser: user {\n\t\troles\n\t}\n}\n", + "sourceLocation": "testdata/queries/QueryWithEnums.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/QueryWithSlices.graphql.json b/generate/testdata/queries/QueryWithSlices.graphql.json index c198a16..b549b70 100644 --- a/generate/testdata/queries/QueryWithSlices.graphql.json +++ b/generate/testdata/queries/QueryWithSlices.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"QueryWithSlices","query":"\nquery QueryWithSlices {\n\tuser {\n\t\temails\n\t\temailsOrNull\n\t\temailsWithNulls\n\t\temailsWithNullsOrNull\n\t}\n}\n","sourceLocation":"testdata/queries/QueryWithSlices.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "QueryWithSlices", + "query": "\nquery QueryWithSlices {\n\tuser {\n\t\temails\n\t\temailsOrNull\n\t\temailsWithNulls\n\t\temailsWithNullsOrNull\n\t}\n}\n", + "sourceLocation": "testdata/queries/QueryWithSlices.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/QueryWithStructs.graphql.json b/generate/testdata/queries/QueryWithStructs.graphql.json index 5186bcb..52e9c9b 100644 --- a/generate/testdata/queries/QueryWithStructs.graphql.json +++ b/generate/testdata/queries/QueryWithStructs.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"QueryWithStructs","query":"\nquery QueryWithStructs {\n\tuser {\n\t\tauthMethods {\n\t\t\tprovider\n\t\t\temail\n\t\t}\n\t}\n}\n","sourceLocation":"testdata/queries/QueryWithStructs.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "QueryWithStructs", + "query": "\nquery QueryWithStructs {\n\tuser {\n\t\tauthMethods {\n\t\t\tprovider\n\t\t\temail\n\t\t}\n\t}\n}\n", + "sourceLocation": "testdata/queries/QueryWithStructs.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/SimpleInput.graphql.json b/generate/testdata/queries/SimpleInput.graphql.json index bb963b5..d929f60 100644 --- a/generate/testdata/queries/SimpleInput.graphql.json +++ b/generate/testdata/queries/SimpleInput.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"SimpleInputQuery","query":"\nquery SimpleInputQuery ($name: String!) {\n\tuser(query: {name:$name}) {\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/SimpleInput.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "SimpleInputQuery", + "query": "\nquery SimpleInputQuery ($name: String!) {\n\tuser(query: {name:$name}) {\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/SimpleInput.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/SimpleQuery.graphql.json b/generate/testdata/queries/SimpleQuery.graphql.json index ba9de31..3029ca4 100644 --- a/generate/testdata/queries/SimpleQuery.graphql.json +++ b/generate/testdata/queries/SimpleQuery.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"SimpleQuery","query":"\nquery SimpleQuery {\n\tuser {\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/SimpleQuery.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "SimpleQuery", + "query": "\nquery SimpleQuery {\n\tuser {\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/SimpleQuery.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/TypeName.graphql.json b/generate/testdata/queries/TypeName.graphql.json index e416744..cb25421 100644 --- a/generate/testdata/queries/TypeName.graphql.json +++ b/generate/testdata/queries/TypeName.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"TypeNameQuery","query":"\nquery TypeNameQuery {\n\tuser {\n\t\t__typename\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/TypeName.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "TypeNameQuery", + "query": "\nquery TypeNameQuery {\n\tuser {\n\t\t__typename\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/TypeName.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/UnionNoFragments.graphql.json b/generate/testdata/queries/UnionNoFragments.graphql.json index 87a0aa9..c9971b4 100644 --- a/generate/testdata/queries/UnionNoFragments.graphql.json +++ b/generate/testdata/queries/UnionNoFragments.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"UnionNoFragmentsQuery","query":"\nquery UnionNoFragmentsQuery {\n\trandomLeaf {\n\t\t__typename\n\t}\n}\n","sourceLocation":"testdata/queries/UnionNoFragments.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "UnionNoFragmentsQuery", + "query": "\nquery UnionNoFragmentsQuery {\n\trandomLeaf {\n\t\t__typename\n\t}\n}\n", + "sourceLocation": "testdata/queries/UnionNoFragments.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/UsesEnumTwice.graphql.json b/generate/testdata/queries/UsesEnumTwice.graphql.json index 0054ffe..647821d 100644 --- a/generate/testdata/queries/UsesEnumTwice.graphql.json +++ b/generate/testdata/queries/UsesEnumTwice.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"UsesEnumTwiceQuery","query":"\nquery UsesEnumTwiceQuery {\n\tMe: user {\n\t\troles\n\t}\n\tOtherUser: user {\n\t\troles\n\t}\n}\n","sourceLocation":"testdata/queries/UsesEnumTwice.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "UsesEnumTwiceQuery", + "query": "\nquery UsesEnumTwiceQuery {\n\tMe: user {\n\t\troles\n\t}\n\tOtherUser: user {\n\t\troles\n\t}\n}\n", + "sourceLocation": "testdata/queries/UsesEnumTwice.graphql" + } + ] +} \ No newline at end of file diff --git a/generate/testdata/queries/unexported.graphql.json b/generate/testdata/queries/unexported.graphql.json index b4887f4..28089e7 100644 --- a/generate/testdata/queries/unexported.graphql.json +++ b/generate/testdata/queries/unexported.graphql.json @@ -1 +1,9 @@ -{"operations":[{"operationName":"unexported","query":"\nquery unexported ($query: UserQueryInput) {\n\tuser(query: $query) {\n\t\tid\n\t}\n}\n","sourceLocation":"testdata/queries/unexported.graphql"}]} \ No newline at end of file +{ + "operations": [ + { + "operationName": "unexported", + "query": "\nquery unexported ($query: UserQueryInput) {\n\tuser(query: $query) {\n\t\tid\n\t}\n}\n", + "sourceLocation": "testdata/queries/unexported.graphql" + } + ] +} \ No newline at end of file