rails-graphql 0.2.0 → 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (297) hide show
  1. checksums.yaml +4 -4
  2. data/ext/console.rb +18 -0
  3. data/ext/extconf.h +3 -0
  4. data/ext/extconf.rb +1 -54
  5. data/ext/gql_parser.c +646 -0
  6. data/ext/shared.c +482 -0
  7. data/ext/shared.h +177 -0
  8. data/lib/gql_parser.so +0 -0
  9. data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
  10. data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
  11. data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
  12. data/lib/rails/graphql/alternative/field_set.rb +36 -0
  13. data/lib/rails/graphql/alternative/mutation.rb +17 -0
  14. data/lib/rails/graphql/alternative/query.rb +93 -0
  15. data/lib/rails/graphql/alternative/subscription.rb +17 -0
  16. data/lib/rails/graphql/alternative.rb +20 -0
  17. data/lib/rails/graphql/argument.rb +21 -24
  18. data/lib/rails/graphql/callback.rb +24 -9
  19. data/lib/rails/graphql/collectors/hash_collector.rb +14 -6
  20. data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
  21. data/lib/rails/graphql/collectors/json_collector.rb +22 -17
  22. data/lib/rails/graphql/collectors.rb +4 -4
  23. data/lib/rails/graphql/config.rb +130 -15
  24. data/lib/rails/graphql/directive/cached_directive.rb +33 -0
  25. data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
  26. data/lib/rails/graphql/directive/include_directive.rb +5 -4
  27. data/lib/rails/graphql/directive/skip_directive.rb +5 -4
  28. data/lib/rails/graphql/directive.rb +118 -63
  29. data/lib/rails/graphql/errors.rb +33 -4
  30. data/lib/rails/graphql/event.rb +16 -5
  31. data/lib/rails/graphql/field/authorized_field.rb +19 -3
  32. data/lib/rails/graphql/field/input_field.rb +11 -10
  33. data/lib/rails/graphql/field/mutation_field.rb +42 -7
  34. data/lib/rails/graphql/field/output_field.rb +102 -13
  35. data/lib/rails/graphql/field/proxied_field.rb +31 -22
  36. data/lib/rails/graphql/field/resolved_field.rb +26 -24
  37. data/lib/rails/graphql/field/scoped_config.rb +10 -4
  38. data/lib/rails/graphql/field/subscription_field.rb +140 -0
  39. data/lib/rails/graphql/field/typed_field.rb +43 -22
  40. data/lib/rails/graphql/field.rb +70 -56
  41. data/lib/rails/graphql/global_id.rb +85 -0
  42. data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
  43. data/lib/rails/graphql/helpers/inherited_collection/array.rb +50 -0
  44. data/lib/rails/graphql/helpers/inherited_collection/base.rb +43 -0
  45. data/lib/rails/graphql/helpers/inherited_collection/hash.rb +87 -0
  46. data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
  47. data/lib/rails/graphql/helpers/instantiable.rb +15 -0
  48. data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
  49. data/lib/rails/graphql/helpers/registerable.rb +44 -62
  50. data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
  51. data/lib/rails/graphql/helpers/with_arguments.rb +31 -27
  52. data/lib/rails/graphql/helpers/with_assignment.rb +10 -8
  53. data/lib/rails/graphql/helpers/with_callbacks.rb +25 -8
  54. data/lib/rails/graphql/helpers/with_description.rb +71 -0
  55. data/lib/rails/graphql/helpers/with_directives.rb +54 -30
  56. data/lib/rails/graphql/helpers/with_events.rb +21 -23
  57. data/lib/rails/graphql/helpers/with_fields.rb +76 -22
  58. data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
  59. data/lib/rails/graphql/helpers/with_name.rb +43 -0
  60. data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
  61. data/lib/rails/graphql/helpers/with_owner.rb +8 -7
  62. data/lib/rails/graphql/helpers/with_schema_fields.rb +137 -55
  63. data/lib/rails/graphql/helpers/with_validator.rb +9 -9
  64. data/lib/rails/graphql/helpers.rb +10 -3
  65. data/lib/rails/graphql/introspection.rb +43 -36
  66. data/lib/rails/graphql/railtie.rb +88 -33
  67. data/lib/rails/graphql/railties/base_generator.rb +3 -9
  68. data/lib/rails/graphql/railties/channel.rb +157 -0
  69. data/lib/rails/graphql/railties/controller.rb +62 -17
  70. data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
  71. data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
  72. data/lib/rails/graphql/request/arguments.rb +24 -49
  73. data/lib/rails/graphql/request/backtrace.rb +191 -0
  74. data/lib/rails/graphql/request/component/field.rb +86 -65
  75. data/lib/rails/graphql/request/component/fragment.rb +72 -24
  76. data/lib/rails/graphql/request/component/operation/subscription.rb +164 -4
  77. data/lib/rails/graphql/request/component/operation.rb +63 -31
  78. data/lib/rails/graphql/request/component/spread.rb +68 -25
  79. data/lib/rails/graphql/request/component/typename.rb +27 -12
  80. data/lib/rails/graphql/request/component.rb +75 -36
  81. data/lib/rails/graphql/request/context.rb +18 -8
  82. data/lib/rails/graphql/request/errors.rb +16 -6
  83. data/lib/rails/graphql/request/event.rb +19 -8
  84. data/lib/rails/graphql/request/helpers/directives.rb +68 -27
  85. data/lib/rails/graphql/request/helpers/selection_set.rb +51 -25
  86. data/lib/rails/graphql/request/helpers/value_writers.rb +18 -16
  87. data/lib/rails/graphql/request/prepared_data.rb +98 -0
  88. data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
  89. data/lib/rails/graphql/request/steps/organizable.rb +110 -48
  90. data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +20 -7
  91. data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +15 -6
  92. data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
  93. data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
  94. data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
  95. data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
  96. data/lib/rails/graphql/request/strategy.rb +131 -75
  97. data/lib/rails/graphql/request/subscription.rb +80 -0
  98. data/lib/rails/graphql/request.rb +305 -86
  99. data/lib/rails/graphql/schema.rb +240 -48
  100. data/lib/rails/graphql/shortcuts.rb +22 -3
  101. data/lib/rails/graphql/source/active_record/builders.rb +50 -36
  102. data/lib/rails/graphql/source/active_record_source.rb +70 -54
  103. data/lib/rails/graphql/source/base.rb +111 -0
  104. data/lib/rails/graphql/source/builder.rb +128 -0
  105. data/lib/rails/graphql/source/scoped_arguments.rb +31 -19
  106. data/lib/rails/graphql/source.rb +89 -213
  107. data/lib/rails/graphql/subscription/provider/action_cable.rb +112 -0
  108. data/lib/rails/graphql/subscription/provider/base.rb +191 -0
  109. data/lib/rails/graphql/subscription/provider.rb +18 -0
  110. data/lib/rails/graphql/subscription/store/base.rb +145 -0
  111. data/lib/rails/graphql/subscription/store/memory.rb +127 -0
  112. data/lib/rails/graphql/subscription/store.rb +19 -0
  113. data/lib/rails/graphql/subscription.rb +17 -0
  114. data/lib/rails/graphql/to_gql.rb +29 -32
  115. data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
  116. data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
  117. data/lib/rails/graphql/type/enum.rb +34 -48
  118. data/lib/rails/graphql/type/input.rb +74 -23
  119. data/lib/rails/graphql/type/interface.rb +16 -26
  120. data/lib/rails/graphql/type/object/directive_object.rb +4 -4
  121. data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
  122. data/lib/rails/graphql/type/object/field_object.rb +24 -6
  123. data/lib/rails/graphql/type/object/input_value_object.rb +3 -3
  124. data/lib/rails/graphql/type/object/schema_object.rb +5 -8
  125. data/lib/rails/graphql/type/object/type_object.rb +29 -19
  126. data/lib/rails/graphql/type/object.rb +26 -23
  127. data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
  128. data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
  129. data/lib/rails/graphql/type/scalar/binary_scalar.rb +3 -3
  130. data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
  131. data/lib/rails/graphql/type/scalar/date_scalar.rb +3 -3
  132. data/lib/rails/graphql/type/scalar/date_time_scalar.rb +3 -3
  133. data/lib/rails/graphql/type/scalar/decimal_scalar.rb +3 -3
  134. data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
  135. data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
  136. data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
  137. data/lib/rails/graphql/type/scalar/json_scalar.rb +39 -0
  138. data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
  139. data/lib/rails/graphql/type/scalar/time_scalar.rb +5 -5
  140. data/lib/rails/graphql/type/scalar.rb +25 -22
  141. data/lib/rails/graphql/type/union.rb +14 -16
  142. data/lib/rails/graphql/type.rb +34 -25
  143. data/lib/rails/graphql/type_map.rb +257 -165
  144. data/lib/rails/graphql/uri.rb +166 -0
  145. data/lib/rails/graphql/version.rb +15 -3
  146. data/lib/rails/graphql.rake +3 -0
  147. data/lib/rails/graphql.rb +85 -52
  148. data/lib/rails-graphql.rb +1 -1
  149. data/test/assets/en.yml +29 -0
  150. data/test/assets/introspection-mem.txt +1 -1
  151. data/test/assets/mem.gql +18 -45
  152. data/test/assets/mysql.gql +392 -0
  153. data/test/assets/sqlite.gql +21 -12
  154. data/test/assets/translate.gql +335 -0
  155. data/test/config.rb +18 -8
  156. data/test/graphql/schema_test.rb +12 -19
  157. data/test/graphql/source_test.rb +8 -75
  158. data/test/graphql/type/enum_test.rb +207 -203
  159. data/test/graphql/type/input_test.rb +14 -9
  160. data/test/graphql/type/interface_test.rb +4 -4
  161. data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
  162. data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
  163. data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
  164. data/test/graphql/type_map_test.rb +51 -66
  165. data/test/graphql/type_test.rb +0 -19
  166. data/test/graphql_test.rb +1 -1
  167. data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
  168. data/test/integration/config.rb +36 -3
  169. data/test/integration/customization_test.rb +39 -0
  170. data/test/integration/global_id_test.rb +99 -0
  171. data/test/integration/memory/star_wars_introspection_test.rb +24 -16
  172. data/test/integration/memory/star_wars_query_test.rb +54 -3
  173. data/test/integration/memory/star_wars_validation_test.rb +1 -1
  174. data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
  175. data/test/integration/persisted_query_test.rb +87 -0
  176. data/test/integration/resolver_precedence_test.rb +154 -0
  177. data/test/integration/schemas/memory.rb +22 -7
  178. data/test/integration/schemas/mysql.rb +62 -0
  179. data/test/integration/schemas/sqlite.rb +21 -12
  180. data/test/integration/sqlite/star_wars_global_id_test.rb +83 -0
  181. data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
  182. data/test/integration/sqlite/star_wars_query_test.rb +14 -1
  183. data/test/integration/translate_test.rb +61 -0
  184. data/test/test_ext.rb +16 -13
  185. metadata +108 -157
  186. data/ext/depend +0 -3
  187. data/ext/graphqlparser/Ast.cpp +0 -346
  188. data/ext/graphqlparser/Ast.h +0 -1214
  189. data/ext/graphqlparser/AstNode.h +0 -36
  190. data/ext/graphqlparser/AstVisitor.h +0 -137
  191. data/ext/graphqlparser/GraphQLParser.cpp +0 -76
  192. data/ext/graphqlparser/GraphQLParser.h +0 -55
  193. data/ext/graphqlparser/JsonVisitor.cpp +0 -161
  194. data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
  195. data/ext/graphqlparser/JsonVisitor.h +0 -121
  196. data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
  197. data/ext/graphqlparser/VERSION +0 -1
  198. data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
  199. data/ext/graphqlparser/c/GraphQLAst.h +0 -180
  200. data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
  201. data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
  202. data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
  203. data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  204. data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
  205. data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  206. data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
  207. data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
  208. data/ext/graphqlparser/c/GraphQLParser.h +0 -54
  209. data/ext/graphqlparser/dump_json_ast.cpp +0 -48
  210. data/ext/graphqlparser/lexer.lpp +0 -324
  211. data/ext/graphqlparser/parser.ypp +0 -693
  212. data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
  213. data/ext/graphqlparser/parsergen/lexer.h +0 -528
  214. data/ext/graphqlparser/parsergen/location.hh +0 -189
  215. data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
  216. data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
  217. data/ext/graphqlparser/parsergen/position.hh +0 -179
  218. data/ext/graphqlparser/parsergen/stack.hh +0 -156
  219. data/ext/graphqlparser/syntaxdefs.h +0 -19
  220. data/ext/libgraphqlparser/AstNode.h +0 -36
  221. data/ext/libgraphqlparser/CMakeLists.txt +0 -148
  222. data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
  223. data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
  224. data/ext/libgraphqlparser/GraphQLParser.h +0 -55
  225. data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
  226. data/ext/libgraphqlparser/JsonVisitor.h +0 -121
  227. data/ext/libgraphqlparser/LICENSE +0 -22
  228. data/ext/libgraphqlparser/README.clang-tidy +0 -7
  229. data/ext/libgraphqlparser/README.md +0 -84
  230. data/ext/libgraphqlparser/ast/ast.ast +0 -203
  231. data/ext/libgraphqlparser/ast/ast.py +0 -61
  232. data/ext/libgraphqlparser/ast/c.py +0 -100
  233. data/ext/libgraphqlparser/ast/c.pyc +0 -0
  234. data/ext/libgraphqlparser/ast/c_impl.py +0 -61
  235. data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
  236. data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
  237. data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
  238. data/ext/libgraphqlparser/ast/casing.py +0 -26
  239. data/ext/libgraphqlparser/ast/casing.pyc +0 -0
  240. data/ext/libgraphqlparser/ast/cxx.py +0 -197
  241. data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
  242. data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
  243. data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
  244. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
  245. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
  246. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
  247. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
  248. data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
  249. data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
  250. data/ext/libgraphqlparser/ast/js.py +0 -65
  251. data/ext/libgraphqlparser/ast/license.py +0 -10
  252. data/ext/libgraphqlparser/ast/license.pyc +0 -0
  253. data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
  254. data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
  255. data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
  256. data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
  257. data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
  258. data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
  259. data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
  260. data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
  261. data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
  262. data/ext/libgraphqlparser/cmake/version.cmake +0 -16
  263. data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
  264. data/ext/libgraphqlparser/go/README.md +0 -20
  265. data/ext/libgraphqlparser/go/callbacks.go +0 -18
  266. data/ext/libgraphqlparser/go/gotest.go +0 -64
  267. data/ext/libgraphqlparser/lexer.lpp +0 -324
  268. data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
  269. data/ext/libgraphqlparser/parser.ypp +0 -693
  270. data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
  271. data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
  272. data/ext/libgraphqlparser/parsergen/location.hh +0 -189
  273. data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
  274. data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
  275. data/ext/libgraphqlparser/parsergen/position.hh +0 -179
  276. data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
  277. data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
  278. data/ext/libgraphqlparser/python/README.md +0 -5
  279. data/ext/libgraphqlparser/python/example.py +0 -31
  280. data/ext/libgraphqlparser/syntaxdefs.h +0 -19
  281. data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
  282. data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
  283. data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
  284. data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
  285. data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
  286. data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
  287. data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
  288. data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
  289. data/ext/libgraphqlparser/test/valgrind.supp +0 -33
  290. data/ext/version.cpp +0 -21
  291. data/lib/graphqlparser.so +0 -0
  292. data/lib/rails/graphql/native/functions.rb +0 -38
  293. data/lib/rails/graphql/native/location.rb +0 -41
  294. data/lib/rails/graphql/native/pointers.rb +0 -23
  295. data/lib/rails/graphql/native/visitor.rb +0 -349
  296. data/lib/rails/graphql/native.rb +0 -56
  297. data/test/integration/schemas/authorization.rb +0 -12
@@ -1 +0,0 @@
1
- {"kind":"Document","loc":{"start": {"line": 8,"column":1}, "end": {"line":78,"column":21}},"definitions":[{"kind":"SchemaDefinition","loc":{"start": {"line": 8,"column":1}, "end": {"line":11,"column":2}},"directives":null,"operationTypes":[{"kind":"OperationTypeDefinition","loc":{"start": {"line": 9,"column":3}, "end": {"line":9,"column":19}},"operation":"query","type":{"kind":"NamedType","loc":{"start": {"line": 9,"column":10}, "end": {"line":9,"column":19}},"name":{"kind":"Name","loc":{"start": {"line": 9,"column":10}, "end": {"line":9,"column":19}},"value":"QueryType"}}},{"kind":"OperationTypeDefinition","loc":{"start": {"line": 10,"column":3}, "end": {"line":10,"column":25}},"operation":"mutation","type":{"kind":"NamedType","loc":{"start": {"line": 10,"column":13}, "end": {"line":10,"column":25}},"name":{"kind":"Name","loc":{"start": {"line": 10,"column":13}, "end": {"line":10,"column":25}},"value":"MutationType"}}}]},{"kind":"ObjectTypeDefinition","loc":{"start": {"line": 13,"column":1}, "end": {"line":21,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 13,"column":6}, "end": {"line":13,"column":9}},"value":"Foo"},"interfaces":[{"kind":"NamedType","loc":{"start": {"line": 13,"column":21}, "end": {"line":13,"column":24}},"name":{"kind":"Name","loc":{"start": {"line": 13,"column":21}, "end": {"line":13,"column":24}},"value":"Bar"}}],"directives":null,"fields":[{"kind":"FieldDefinition","loc":{"start": {"line": 14,"column":3}, "end": {"line":14,"column":12}},"name":{"kind":"Name","loc":{"start": {"line": 14,"column":3}, "end": {"line":14,"column":6}},"value":"one"},"arguments":null,"type":{"kind":"NamedType","loc":{"start": {"line": 14,"column":8}, "end": {"line":14,"column":12}},"name":{"kind":"Name","loc":{"start": {"line": 14,"column":8}, "end": {"line":14,"column":12}},"value":"Type"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 15,"column":3}, "end": {"line":15,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 15,"column":3}, "end": {"line":15,"column":6}},"value":"two"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 15,"column":7}, "end": {"line":15,"column":27}},"name":{"kind":"Name","loc":{"start": {"line": 15,"column":7}, "end": {"line":15,"column":15}},"value":"argument"},"type":{"kind":"NonNullType","loc":{"start": {"line": 15,"column":17}, "end": {"line":15,"column":27}},"type":{"kind":"NamedType","loc":{"start": {"line": 15,"column":17}, "end": {"line":15,"column":26}},"name":{"kind":"Name","loc":{"start": {"line": 15,"column":17}, "end": {"line":15,"column":26}},"value":"InputType"}}},"defaultValue":null,"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 15,"column":30}, "end": {"line":15,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 15,"column":30}, "end": {"line":15,"column":34}},"value":"Type"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 16,"column":3}, "end": {"line":16,"column":49}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":3}, "end": {"line":16,"column":8}},"value":"three"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 16,"column":9}, "end": {"line":16,"column":28}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":9}, "end": {"line":16,"column":17}},"value":"argument"},"type":{"kind":"NamedType","loc":{"start": {"line": 16,"column":19}, "end": {"line":16,"column":28}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":19}, "end": {"line":16,"column":28}},"value":"InputType"}},"defaultValue":null,"directives":null},{"kind":"InputValueDefinition","loc":{"start": {"line": 16,"column":30}, "end": {"line":16,"column":43}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":30}, "end": {"line":16,"column":35}},"value":"other"},"type":{"kind":"NamedType","loc":{"start": {"line": 16,"column":37}, "end": {"line":16,"column":43}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":37}, "end": {"line":16,"column":43}},"value":"String"}},"defaultValue":null,"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 16,"column":46}, "end": {"line":16,"column":49}},"name":{"kind":"Name","loc":{"start": {"line": 16,"column":46}, "end": {"line":16,"column":49}},"value":"Int"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 17,"column":3}, "end": {"line":17,"column":44}},"name":{"kind":"Name","loc":{"start": {"line": 17,"column":3}, "end": {"line":17,"column":7}},"value":"four"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 17,"column":8}, "end": {"line":17,"column":35}},"name":{"kind":"Name","loc":{"start": {"line": 17,"column":8}, "end": {"line":17,"column":16}},"value":"argument"},"type":{"kind":"NamedType","loc":{"start": {"line": 17,"column":18}, "end": {"line":17,"column":24}},"name":{"kind":"Name","loc":{"start": {"line": 17,"column":18}, "end": {"line":17,"column":24}},"value":"String"}},"defaultValue":{"kind":"StringValue","loc":{"start": {"line": 17,"column":27}, "end": {"line":17,"column":35}},"value":"string"},"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 17,"column":38}, "end": {"line":17,"column":44}},"name":{"kind":"Name","loc":{"start": {"line": 17,"column":38}, "end": {"line":17,"column":44}},"value":"String"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 18,"column":3}, "end": {"line":18,"column":58}},"name":{"kind":"Name","loc":{"start": {"line": 18,"column":3}, "end": {"line":18,"column":7}},"value":"five"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 18,"column":8}, "end": {"line":18,"column":49}},"name":{"kind":"Name","loc":{"start": {"line": 18,"column":8}, "end": {"line":18,"column":16}},"value":"argument"},"type":{"kind":"ListType","loc":{"start": {"line": 18,"column":18}, "end": {"line":18,"column":26}},"type":{"kind":"NamedType","loc":{"start": {"line": 18,"column":19}, "end": {"line":18,"column":25}},"name":{"kind":"Name","loc":{"start": {"line": 18,"column":19}, "end": {"line":18,"column":25}},"value":"String"}}},"defaultValue":{"kind":"ListValue","loc":{"start": {"line": 18,"column":29}, "end": {"line":18,"column":49}},"values":[{"kind":"StringValue","loc":{"start": {"line": 18,"column":30}, "end": {"line":18,"column":38}},"value":"string"},{"kind":"StringValue","loc":{"start": {"line": 18,"column":40}, "end": {"line":18,"column":48}},"value":"string"}]},"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 18,"column":52}, "end": {"line":18,"column":58}},"name":{"kind":"Name","loc":{"start": {"line": 18,"column":52}, "end": {"line":18,"column":58}},"value":"String"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 19,"column":3}, "end": {"line":19,"column":50}},"name":{"kind":"Name","loc":{"start": {"line": 19,"column":3}, "end": {"line":19,"column":6}},"value":"six"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 19,"column":7}, "end": {"line":19,"column":43}},"name":{"kind":"Name","loc":{"start": {"line": 19,"column":7}, "end": {"line":19,"column":15}},"value":"argument"},"type":{"kind":"NamedType","loc":{"start": {"line": 19,"column":17}, "end": {"line":19,"column":26}},"name":{"kind":"Name","loc":{"start": {"line": 19,"column":17}, "end": {"line":19,"column":26}},"value":"InputType"}},"defaultValue":{"kind":"ObjectValue","loc":{"start": {"line": 19,"column":29}, "end": {"line":19,"column":43}},"fields":[{"kind":"ObjectField","loc":{"start": {"line": 19,"column":30}, "end": {"line":19,"column":42}},"name":{"kind":"Name","loc":{"start": {"line": 19,"column":30}, "end": {"line":19,"column":33}},"value":"key"},"value":{"kind":"StringValue","loc":{"start": {"line": 19,"column":35}, "end": {"line":19,"column":42}},"value":"value"}}]},"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 19,"column":46}, "end": {"line":19,"column":50}},"name":{"kind":"Name","loc":{"start": {"line": 19,"column":46}, "end": {"line":19,"column":50}},"value":"Type"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 20,"column":3}, "end": {"line":20,"column":36}},"name":{"kind":"Name","loc":{"start": {"line": 20,"column":3}, "end": {"line":20,"column":8}},"value":"seven"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 20,"column":9}, "end": {"line":20,"column":29}},"name":{"kind":"Name","loc":{"start": {"line": 20,"column":9}, "end": {"line":20,"column":17}},"value":"argument"},"type":{"kind":"NamedType","loc":{"start": {"line": 20,"column":19}, "end": {"line":20,"column":22}},"name":{"kind":"Name","loc":{"start": {"line": 20,"column":19}, "end": {"line":20,"column":22}},"value":"Int"}},"defaultValue":{"kind":"NullValue","loc":{"start": {"line": 20,"column":25}, "end": {"line":20,"column":29}}},"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 20,"column":32}, "end": {"line":20,"column":36}},"name":{"kind":"Name","loc":{"start": {"line": 20,"column":32}, "end": {"line":20,"column":36}},"value":"Type"}},"directives":null}]},{"kind":"ObjectTypeDefinition","loc":{"start": {"line": 23,"column":1}, "end": {"line":25,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 23,"column":6}, "end": {"line":23,"column":21}},"value":"AnnotatedObject"},"interfaces":null,"directives":[{"kind":"Directive","loc":{"start": {"line": 23,"column":22}, "end": {"line":23,"column":45}},"name":{"kind":"Name","loc":{"start": {"line": 23,"column":23}, "end": {"line":23,"column":31}},"value":"onObject"},"arguments":[{"kind":"Argument","loc":{"start": {"line": 23,"column":32}, "end": {"line":23,"column":44}},"name":{"kind":"Name","loc":{"start": {"line": 23,"column":32}, "end": {"line":23,"column":35}},"value":"arg"},"value":{"kind":"StringValue","loc":{"start": {"line": 23,"column":37}, "end": {"line":23,"column":44}},"value":"value"}}]}],"fields":[{"kind":"FieldDefinition","loc":{"start": {"line": 24,"column":3}, "end": {"line":24,"column":62}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":3}, "end": {"line":24,"column":17}},"value":"annotatedField"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 24,"column":18}, "end": {"line":24,"column":46}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":18}, "end": {"line":24,"column":21}},"value":"arg"},"type":{"kind":"NamedType","loc":{"start": {"line": 24,"column":23}, "end": {"line":24,"column":27}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":23}, "end": {"line":24,"column":27}},"value":"Type"}},"defaultValue":{"kind":"StringValue","loc":{"start": {"line": 24,"column":30}, "end": {"line":24,"column":39}},"value":"default"},"directives":[{"kind":"Directive","loc":{"start": {"line": 24,"column":40}, "end": {"line":24,"column":46}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":41}, "end": {"line":24,"column":46}},"value":"onArg"},"arguments":null}]}],"type":{"kind":"NamedType","loc":{"start": {"line": 24,"column":49}, "end": {"line":24,"column":53}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":49}, "end": {"line":24,"column":53}},"value":"Type"}},"directives":[{"kind":"Directive","loc":{"start": {"line": 24,"column":54}, "end": {"line":24,"column":62}},"name":{"kind":"Name","loc":{"start": {"line": 24,"column":55}, "end": {"line":24,"column":62}},"value":"onField"},"arguments":null}]}]},{"kind":"InterfaceTypeDefinition","loc":{"start": {"line": 27,"column":1}, "end": {"line":30,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 27,"column":11}, "end": {"line":27,"column":14}},"value":"Bar"},"directives":null,"fields":[{"kind":"FieldDefinition","loc":{"start": {"line": 28,"column":3}, "end": {"line":28,"column":12}},"name":{"kind":"Name","loc":{"start": {"line": 28,"column":3}, "end": {"line":28,"column":6}},"value":"one"},"arguments":null,"type":{"kind":"NamedType","loc":{"start": {"line": 28,"column":8}, "end": {"line":28,"column":12}},"name":{"kind":"Name","loc":{"start": {"line": 28,"column":8}, "end": {"line":28,"column":12}},"value":"Type"}},"directives":null},{"kind":"FieldDefinition","loc":{"start": {"line": 29,"column":3}, "end": {"line":29,"column":44}},"name":{"kind":"Name","loc":{"start": {"line": 29,"column":3}, "end": {"line":29,"column":7}},"value":"four"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 29,"column":8}, "end": {"line":29,"column":35}},"name":{"kind":"Name","loc":{"start": {"line": 29,"column":8}, "end": {"line":29,"column":16}},"value":"argument"},"type":{"kind":"NamedType","loc":{"start": {"line": 29,"column":18}, "end": {"line":29,"column":24}},"name":{"kind":"Name","loc":{"start": {"line": 29,"column":18}, "end": {"line":29,"column":24}},"value":"String"}},"defaultValue":{"kind":"StringValue","loc":{"start": {"line": 29,"column":27}, "end": {"line":29,"column":35}},"value":"string"},"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 29,"column":38}, "end": {"line":29,"column":44}},"name":{"kind":"Name","loc":{"start": {"line": 29,"column":38}, "end": {"line":29,"column":44}},"value":"String"}},"directives":null}]},{"kind":"InterfaceTypeDefinition","loc":{"start": {"line": 32,"column":1}, "end": {"line":34,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 32,"column":11}, "end": {"line":32,"column":29}},"value":"AnnotatedInterface"},"directives":[{"kind":"Directive","loc":{"start": {"line": 32,"column":30}, "end": {"line":32,"column":42}},"name":{"kind":"Name","loc":{"start": {"line": 32,"column":31}, "end": {"line":32,"column":42}},"value":"onInterface"},"arguments":null}],"fields":[{"kind":"FieldDefinition","loc":{"start": {"line": 33,"column":3}, "end": {"line":33,"column":50}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":3}, "end": {"line":33,"column":17}},"value":"annotatedField"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 33,"column":18}, "end": {"line":33,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":18}, "end": {"line":33,"column":21}},"value":"arg"},"type":{"kind":"NamedType","loc":{"start": {"line": 33,"column":23}, "end": {"line":33,"column":27}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":23}, "end": {"line":33,"column":27}},"value":"Type"}},"defaultValue":null,"directives":[{"kind":"Directive","loc":{"start": {"line": 33,"column":28}, "end": {"line":33,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":29}, "end": {"line":33,"column":34}},"value":"onArg"},"arguments":null}]}],"type":{"kind":"NamedType","loc":{"start": {"line": 33,"column":37}, "end": {"line":33,"column":41}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":37}, "end": {"line":33,"column":41}},"value":"Type"}},"directives":[{"kind":"Directive","loc":{"start": {"line": 33,"column":42}, "end": {"line":33,"column":50}},"name":{"kind":"Name","loc":{"start": {"line": 33,"column":43}, "end": {"line":33,"column":50}},"value":"onField"},"arguments":null}]}]},{"kind":"UnionTypeDefinition","loc":{"start": {"line": 36,"column":1}, "end": {"line":36,"column":38}},"name":{"kind":"Name","loc":{"start": {"line": 36,"column":7}, "end": {"line":36,"column":11}},"value":"Feed"},"directives":null,"types":[{"kind":"NamedType","loc":{"start": {"line": 36,"column":14}, "end": {"line":36,"column":19}},"name":{"kind":"Name","loc":{"start": {"line": 36,"column":14}, "end": {"line":36,"column":19}},"value":"Story"}},{"kind":"NamedType","loc":{"start": {"line": 36,"column":22}, "end": {"line":36,"column":29}},"name":{"kind":"Name","loc":{"start": {"line": 36,"column":22}, "end": {"line":36,"column":29}},"value":"Article"}},{"kind":"NamedType","loc":{"start": {"line": 36,"column":32}, "end": {"line":36,"column":38}},"name":{"kind":"Name","loc":{"start": {"line": 36,"column":32}, "end": {"line":36,"column":38}},"value":"Advert"}}]},{"kind":"UnionTypeDefinition","loc":{"start": {"line": 38,"column":1}, "end": {"line":38,"column":38}},"name":{"kind":"Name","loc":{"start": {"line": 38,"column":7}, "end": {"line":38,"column":21}},"value":"AnnotatedUnion"},"directives":[{"kind":"Directive","loc":{"start": {"line": 38,"column":22}, "end": {"line":38,"column":30}},"name":{"kind":"Name","loc":{"start": {"line": 38,"column":23}, "end": {"line":38,"column":30}},"value":"onUnion"},"arguments":null}],"types":[{"kind":"NamedType","loc":{"start": {"line": 38,"column":33}, "end": {"line":38,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 38,"column":33}, "end": {"line":38,"column":34}},"value":"A"}},{"kind":"NamedType","loc":{"start": {"line": 38,"column":37}, "end": {"line":38,"column":38}},"name":{"kind":"Name","loc":{"start": {"line": 38,"column":37}, "end": {"line":38,"column":38}},"value":"B"}}]},{"kind":"ScalarTypeDefinition","loc":{"start": {"line": 40,"column":1}, "end": {"line":40,"column":20}},"name":{"kind":"Name","loc":{"start": {"line": 40,"column":8}, "end": {"line":40,"column":20}},"value":"CustomScalar"},"directives":null},{"kind":"ScalarTypeDefinition","loc":{"start": {"line": 42,"column":1}, "end": {"line":42,"column":33}},"name":{"kind":"Name","loc":{"start": {"line": 42,"column":8}, "end": {"line":42,"column":23}},"value":"AnnotatedScalar"},"directives":[{"kind":"Directive","loc":{"start": {"line": 42,"column":24}, "end": {"line":42,"column":33}},"name":{"kind":"Name","loc":{"start": {"line": 42,"column":25}, "end": {"line":42,"column":33}},"value":"onScalar"},"arguments":null}]},{"kind":"EnumTypeDefinition","loc":{"start": {"line": 44,"column":1}, "end": {"line":47,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 44,"column":6}, "end": {"line":44,"column":10}},"value":"Site"},"directives":null,"values":[{"kind":"EnumValueDefinition","loc":{"start": {"line": 45,"column":3}, "end": {"line":45,"column":10}},"name":{"kind":"Name","loc":{"start": {"line": 45,"column":3}, "end": {"line":45,"column":10}},"value":"DESKTOP"},"directives":null},{"kind":"EnumValueDefinition","loc":{"start": {"line": 46,"column":3}, "end": {"line":46,"column":9}},"name":{"kind":"Name","loc":{"start": {"line": 46,"column":3}, "end": {"line":46,"column":9}},"value":"MOBILE"},"directives":null}]},{"kind":"EnumTypeDefinition","loc":{"start": {"line": 49,"column":1}, "end": {"line":52,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 49,"column":6}, "end": {"line":49,"column":19}},"value":"AnnotatedEnum"},"directives":[{"kind":"Directive","loc":{"start": {"line": 49,"column":20}, "end": {"line":49,"column":27}},"name":{"kind":"Name","loc":{"start": {"line": 49,"column":21}, "end": {"line":49,"column":27}},"value":"onEnum"},"arguments":null}],"values":[{"kind":"EnumValueDefinition","loc":{"start": {"line": 50,"column":3}, "end": {"line":50,"column":31}},"name":{"kind":"Name","loc":{"start": {"line": 50,"column":3}, "end": {"line":50,"column":18}},"value":"ANNOTATED_VALUE"},"directives":[{"kind":"Directive","loc":{"start": {"line": 50,"column":19}, "end": {"line":50,"column":31}},"name":{"kind":"Name","loc":{"start": {"line": 50,"column":20}, "end": {"line":50,"column":31}},"value":"onEnumValue"},"arguments":null}]},{"kind":"EnumValueDefinition","loc":{"start": {"line": 51,"column":3}, "end": {"line":51,"column":14}},"name":{"kind":"Name","loc":{"start": {"line": 51,"column":3}, "end": {"line":51,"column":14}},"value":"OTHER_VALUE"},"directives":null}]},{"kind":"InputObjectTypeDefinition","loc":{"start": {"line": 54,"column":1}, "end": {"line":57,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 54,"column":7}, "end": {"line":54,"column":16}},"value":"InputType"},"directives":null,"fields":[{"kind":"InputValueDefinition","loc":{"start": {"line": 55,"column":3}, "end": {"line":55,"column":15}},"name":{"kind":"Name","loc":{"start": {"line": 55,"column":3}, "end": {"line":55,"column":6}},"value":"key"},"type":{"kind":"NonNullType","loc":{"start": {"line": 55,"column":8}, "end": {"line":55,"column":15}},"type":{"kind":"NamedType","loc":{"start": {"line": 55,"column":8}, "end": {"line":55,"column":14}},"name":{"kind":"Name","loc":{"start": {"line": 55,"column":8}, "end": {"line":55,"column":14}},"value":"String"}}},"defaultValue":null,"directives":null},{"kind":"InputValueDefinition","loc":{"start": {"line": 56,"column":3}, "end": {"line":56,"column":19}},"name":{"kind":"Name","loc":{"start": {"line": 56,"column":3}, "end": {"line":56,"column":9}},"value":"answer"},"type":{"kind":"NamedType","loc":{"start": {"line": 56,"column":11}, "end": {"line":56,"column":14}},"name":{"kind":"Name","loc":{"start": {"line": 56,"column":11}, "end": {"line":56,"column":14}},"value":"Int"}},"defaultValue":{"kind":"IntValue","loc":{"start": {"line": 56,"column":17}, "end": {"line":56,"column":19}},"value":"42"},"directives":null}]},{"kind":"InputObjectTypeDefinition","loc":{"start": {"line": 59,"column":1}, "end": {"line":61,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 59,"column":7}, "end": {"line":59,"column":21}},"value":"AnnotatedInput"},"directives":[{"kind":"Directive","loc":{"start": {"line": 59,"column":22}, "end": {"line":59,"column":40}},"name":{"kind":"Name","loc":{"start": {"line": 59,"column":23}, "end": {"line":59,"column":40}},"value":"onInputObjectType"},"arguments":null}],"fields":[{"kind":"InputValueDefinition","loc":{"start": {"line": 60,"column":3}, "end": {"line":60,"column":32}},"name":{"kind":"Name","loc":{"start": {"line": 60,"column":3}, "end": {"line":60,"column":17}},"value":"annotatedField"},"type":{"kind":"NamedType","loc":{"start": {"line": 60,"column":19}, "end": {"line":60,"column":23}},"name":{"kind":"Name","loc":{"start": {"line": 60,"column":19}, "end": {"line":60,"column":23}},"value":"Type"}},"defaultValue":null,"directives":[{"kind":"Directive","loc":{"start": {"line": 60,"column":24}, "end": {"line":60,"column":32}},"name":{"kind":"Name","loc":{"start": {"line": 60,"column":25}, "end": {"line":60,"column":32}},"value":"onField"},"arguments":null}]}]},{"kind":"TypeExtensionDefinition","loc":{"start": {"line": 63,"column":1}, "end": {"line":65,"column":2}},"definition":{"kind":"ObjectTypeDefinition","loc":{"start": {"line": 63,"column":8}, "end": {"line":65,"column":2}},"name":{"kind":"Name","loc":{"start": {"line": 63,"column":13}, "end": {"line":63,"column":16}},"value":"Foo"},"interfaces":null,"directives":null,"fields":[{"kind":"FieldDefinition","loc":{"start": {"line": 64,"column":3}, "end": {"line":64,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 64,"column":3}, "end": {"line":64,"column":8}},"value":"seven"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 64,"column":9}, "end": {"line":64,"column":27}},"name":{"kind":"Name","loc":{"start": {"line": 64,"column":9}, "end": {"line":64,"column":17}},"value":"argument"},"type":{"kind":"ListType","loc":{"start": {"line": 64,"column":19}, "end": {"line":64,"column":27}},"type":{"kind":"NamedType","loc":{"start": {"line": 64,"column":20}, "end": {"line":64,"column":26}},"name":{"kind":"Name","loc":{"start": {"line": 64,"column":20}, "end": {"line":64,"column":26}},"value":"String"}}},"defaultValue":null,"directives":null}],"type":{"kind":"NamedType","loc":{"start": {"line": 64,"column":30}, "end": {"line":64,"column":34}},"name":{"kind":"Name","loc":{"start": {"line": 64,"column":30}, "end": {"line":64,"column":34}},"value":"Type"}},"directives":null}]}},{"kind":"DirectiveDefinition","loc":{"start": {"line": 73,"column":1}, "end": {"line":73,"column":75}},"name":{"kind":"Name","loc":{"start": {"line": 73,"column":12}, "end": {"line":73,"column":16}},"value":"skip"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 73,"column":17}, "end": {"line":73,"column":29}},"name":{"kind":"Name","loc":{"start": {"line": 73,"column":17}, "end": {"line":73,"column":19}},"value":"if"},"type":{"kind":"NonNullType","loc":{"start": {"line": 73,"column":21}, "end": {"line":73,"column":29}},"type":{"kind":"NamedType","loc":{"start": {"line": 73,"column":21}, "end": {"line":73,"column":28}},"name":{"kind":"Name","loc":{"start": {"line": 73,"column":21}, "end": {"line":73,"column":28}},"value":"Boolean"}}},"defaultValue":null,"directives":null}],"locations":[{"kind":"Name","loc":{"start": {"line": 73,"column":34}, "end": {"line":73,"column":39}},"value":"FIELD"},{"kind":"Name","loc":{"start": {"line": 73,"column":42}, "end": {"line":73,"column":57}},"value":"FRAGMENT_SPREAD"},{"kind":"Name","loc":{"start": {"line": 73,"column":60}, "end": {"line":73,"column":75}},"value":"INLINE_FRAGMENT"}]},{"kind":"DirectiveDefinition","loc":{"start": {"line": 75,"column":1}, "end": {"line":78,"column":21}},"name":{"kind":"Name","loc":{"start": {"line": 75,"column":12}, "end": {"line":75,"column":19}},"value":"include"},"arguments":[{"kind":"InputValueDefinition","loc":{"start": {"line": 75,"column":20}, "end": {"line":75,"column":32}},"name":{"kind":"Name","loc":{"start": {"line": 75,"column":20}, "end": {"line":75,"column":22}},"value":"if"},"type":{"kind":"NonNullType","loc":{"start": {"line": 75,"column":24}, "end": {"line":75,"column":32}},"type":{"kind":"NamedType","loc":{"start": {"line": 75,"column":24}, "end": {"line":75,"column":31}},"name":{"kind":"Name","loc":{"start": {"line": 75,"column":24}, "end": {"line":75,"column":31}},"value":"Boolean"}}},"defaultValue":null,"directives":null}],"locations":[{"kind":"Name","loc":{"start": {"line": 76,"column":6}, "end": {"line":76,"column":11}},"value":"FIELD"},{"kind":"Name","loc":{"start": {"line": 77,"column":6}, "end": {"line":77,"column":21}},"value":"FRAGMENT_SPREAD"},{"kind":"Name","loc":{"start": {"line": 78,"column":6}, "end": {"line":78,"column":21}},"value":"INLINE_FRAGMENT"}]}]}
@@ -1,33 +0,0 @@
1
- {
2
- <osx_strdup_query_string>
3
- Memcheck:Cond
4
- fun:strlen
5
- fun:strdup
6
- fun:_ZN2yy17GraphQLParserImpl5parseEv
7
- fun:_ZN8facebook7graphqlL7doParseEPPKcPv
8
- fun:_ZN8facebook7graphql11parseStringEPKcPS2_
9
- fun:_ZL11expectErrorPKcS0_
10
- fun:_ZN44ParserTests_TracksLocationAcrossStrings_Test8TestBodyEv
11
- fun:_ZN7testing8internal38HandleSehExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc
12
- fun:_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc
13
- fun:_ZN7testing4Test3RunEv
14
- fun:_ZN7testing8TestInfo3RunEv
15
- fun:_ZN7testing8TestCase3RunEv
16
- }
17
-
18
- {
19
- <unix_strdup_query_string>
20
- Memcheck:Cond
21
- fun:__GI_strlen
22
- fun:strdup
23
- fun:_ZN2yy17GraphQLParserImpl5parseEv
24
- fun:_ZN8facebook7graphqlL7doParseEPPKcPv
25
- fun:_ZN8facebook7graphql11parseStringEPKcPS2_
26
- fun:_ZL11expectErrorPKcS0_
27
- fun:_ZN44ParserTests_TracksLocationAcrossStrings_Test8TestBodyEv
28
- fun:_ZN7testing8internal38HandleSehExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc
29
- fun:_ZN7testing8internal35HandleExceptionsInMethodIfSupportedINS_4TestEvEET0_PT_MS4_FS3_vEPKc
30
- fun:_ZN7testing4Test3RunEv
31
- fun:_ZN7testing8TestInfo3RunEv
32
- fun:_ZN7testing8TestCase3RunEv
33
- }
data/ext/version.cpp DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright 2020-present, VirtualShield
3
- *
4
- * This ensures GraphQL headers and provides minimal ruby initialization
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
-
10
- #include "ruby.h"
11
-
12
- #include "c/GraphQLParser.cpp"
13
-
14
- extern "C" {
15
- void Init_graphqlparser() {
16
- const char *version = GRAPHQLPARSER_VERSION;
17
-
18
- VALUE mod = rb_define_module("GQLAst");
19
- rb_define_const(mod, "VERSION", rb_str_new(version, strlen(version)));
20
- }
21
- }
data/lib/graphqlparser.so DELETED
Binary file
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rails # :nodoc:
4
- module GraphQL # :nodoc:
5
- module Native # :nodoc:
6
- def self.attach_operation(method_name, function_name, result: :string)
7
- attach_function(method_name, function_name, [:pointer], result)
8
- end
9
-
10
- attach_operation :operation_type, :GraphQLAstOperationDefinition_get_operation
11
- attach_operation :node_name, :GraphQLAstName_get_value
12
-
13
- attach_operation :get_int_value, :GraphQLAstIntValue_get_value
14
- attach_operation :get_float_value, :GraphQLAstFloatValue_get_value
15
- attach_operation :get_string_value, :GraphQLAstStringValue_get_value
16
- attach_operation :get_enum_value, :GraphQLAstEnumValue_get_value
17
-
18
- with_options(result: :pointer) do
19
- attach_operation :default_value, :GraphQLAstVariableDefinition_get_default_value
20
- attach_operation :type_name, :GraphQLAstNamedType_get_name
21
-
22
- attach_operation :argument_name, :GraphQLAstArgument_get_name
23
- attach_operation :argument_value, :GraphQLAstArgument_get_value
24
-
25
- attach_operation :ofield_name, :GraphQLAstObjectField_get_name
26
- attach_operation :ofield_value, :GraphQLAstObjectField_get_value
27
-
28
- attach_operation :variable_name, :GraphQLAstVariable_get_name
29
- end
30
-
31
- with_options(result: :int) do
32
- attach_operation :list_size, :GraphQLAstListValue_get_values_size
33
-
34
- attach_operation :get_boolean_value, :GraphQLAstBooleanValue_get_value
35
- end
36
- end
37
- end
38
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rails # :nodoc:
4
- module GraphQL # :nodoc:
5
- module Native # :nodoc:
6
- class Location < FFI::Struct # :nodoc:
7
- layout(
8
- beginLine: :uint,
9
- beginColumn: :uint,
10
- endLine: :uint,
11
- endColumn: :uint,
12
- )
13
-
14
- def begin_line
15
- self[:beginLine]
16
- end
17
-
18
- def begin_column
19
- self[:beginColumn]
20
- end
21
-
22
- def end_line
23
- self[:endLine]
24
- end
25
-
26
- def end_column
27
- self[:endColumn]
28
- end
29
-
30
- def to_errors
31
- [
32
- { 'line' => begin_line, 'column' => begin_column },
33
- { 'line' => end_line, 'column' => end_column },
34
- ]
35
- end
36
-
37
- private :[], :[]=
38
- end
39
- end
40
- end
41
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rails # :nodoc:
4
- module GraphQL # :nodoc:
5
- module Native # :nodoc:
6
- # This helps to make sure that any parser error is correctly initialized
7
- # and easy to ready. It also release the error using GC.
8
- class ParseError < FFI::MemoryPointer
9
- def initialize(*)
10
- super(:pointer)
11
- end
12
-
13
- def to_s
14
- empty? ? '' : read_pointer.read_string
15
- end
16
-
17
- def empty?
18
- read_pointer.null?
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,349 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rails # :nodoc:
4
- module GraphQL # :nodoc:
5
- module Native # :nodoc:
6
- class Visitor < FFI::Struct # :nodoc:
7
- CALLBACK_LAYOUT = %i[pointer pointer].freeze
8
-
9
- MACROS = %w[
10
- document operation_definition variable_definition selection_set field argument
11
- fragment_spread inline_fragment fragment_definition variable int_value float_value
12
- string_value boolean_value null_value enum_value list_value object_value object_field
13
- directive named_type list_type non_null_type name schema_definition
14
- operation_type_definition scalar_type_definition object_type_definition
15
- field_definition input_value_definition interface_type_definition
16
- union_type_definition enum_type_definition enum_value_definition
17
- input_object_type_definition type_extension_definition directive_definition
18
- ].freeze
19
-
20
- AUTO_NESTED = %w[document object_value list_type non_null_type].freeze
21
-
22
- ArgumentObject = Struct.new(:name, :value, :variable)
23
- DirectiveObject = Struct.new(:name, :arguments)
24
- FieldObject = Struct.new(:name, :alias, :arguments, :directives, :selection)
25
- FragmentObject = Struct.new(:name, :type, :directives, :selection)
26
- OperationObject = Struct.new(:name, :kind, :variables, :directives, :selection)
27
- SpreadObject = Struct.new(:name, :type, :inline, :directives, :selection)
28
- VariableObject = Struct.new(:name, :type, :null, :array, :nullable, :default)
29
-
30
- macros = MACROS.map do |key|
31
- [
32
- [ "visit_#{key}", callback(CALLBACK_LAYOUT, :bool)],
33
- ["end_visit_#{key}", callback(CALLBACK_LAYOUT, :void)],
34
- ]
35
- end.flatten(1).to_h
36
- layout(macros)
37
-
38
- @@callbacks = Visitor.new
39
- @@instances = Concurrent::Map.new
40
-
41
- MACROS.each do |key|
42
- @@callbacks["visit_#{key}".to_sym] = ->(node, ref) do
43
- Visitor.ref_send(key, node, ref)
44
- end
45
-
46
- @@callbacks["end_visit_#{key}".to_sym] = ->(node, ref) do
47
- Visitor.ref_send(key, node, ref, prefix: 'end')
48
- end
49
- end
50
-
51
- def self.ref_send(key, node, ref, prefix: nil)
52
- instance = @@instances[ref.read_string]
53
- method_name = [prefix, 'visit', key].compact.join('_')
54
-
55
- catch :override do
56
- instance.try(method_name, node)
57
- prefix.nil? && instance.visit_nested?(key)
58
- end
59
- end
60
-
61
- delegate_missing_to('Rails::GraphQL::Native')
62
-
63
- attr_reader :stack, :block
64
-
65
- def initialize
66
- @data = FFI::MemoryPointer.from_string(SecureRandom.uuid)
67
- @stack = []
68
- @visit = nil
69
- @block = nil
70
- @error = nil
71
-
72
- @@instances[uuid] = self
73
- end
74
-
75
- # Remove the instance for the set of instances
76
- def terminate
77
- @@instances.delete(uuid)
78
- end
79
-
80
- # Get the uuid from the string pointer
81
- def uuid
82
- @data.read_string
83
- end
84
-
85
- # Check if it should go deeper into the node
86
- def visit_nested?(key)
87
- @error.nil? && (AUTO_NESTED.include?(key) || @visit&.include?(key))
88
- end
89
-
90
- # Return the last object on the stack being visited
91
- def object
92
- stack.last
93
- end
94
-
95
- # Send the extra needed arguments to the original visitor
96
- def visit(node)
97
- Native.visit(node, @@callbacks, @data)
98
- end
99
-
100
- # Catches if an exception happens inside the block, because visitors on
101
- # the C lib does not pop such expections
102
- def safe_call_block(*args)
103
- block.call(*args)
104
- rescue Exception => err
105
- @error ||= err
106
- end
107
-
108
- # Pre caller for calling the visitor on nodes
109
- def dispatch(visitors, nodes, &block)
110
- @visit = visitors
111
- @block = block
112
-
113
- nodes.each(&method(:visit))
114
- raise @error unless @error.nil?
115
- ensure
116
- @error = @block = @visit = nil
117
- end
118
-
119
- # ENTRY POINTS
120
-
121
- DEFINITION_VISITORS = %w[operation_definition fragment_definition].freeze
122
- def collect_definitions(*nodes, &block)
123
- dispatch(DEFINITION_VISITORS, nodes, &block)
124
- end
125
-
126
- DIRECTIVES_VISITORS = %w[directive].freeze
127
- def collect_directives(*nodes, &block)
128
- dispatch(DIRECTIVES_VISITORS, nodes, &block)
129
- end
130
-
131
- ARGUMENTS_VISITORS = %w[argument].freeze
132
- def collect_arguments(*nodes, &block)
133
- dispatch(ARGUMENTS_VISITORS, nodes, &block)
134
- end
135
-
136
- VARIABLES_VISITORS = %w[variable_definition].freeze
137
- def collect_variables(*nodes, &block)
138
- dispatch(VARIABLES_VISITORS, nodes, &block)
139
- end
140
-
141
- FIELDS_VISITORS = %w[field fragment_spread inline_fragment].freeze
142
- def collect_fields(*nodes, &block)
143
- dispatch(FIELDS_VISITORS, nodes, &block)
144
- end
145
-
146
- # MAIN VISITORS
147
-
148
- # Add an operation object to the stack
149
- def visit_operation_definition(node)
150
- stack << OperationObject.new.tap { |obj| obj.kind = operation_type(node) }
151
- end
152
-
153
- # Add a fragment object to the stack
154
- def visit_fragment_definition(_)
155
- stack << FragmentObject.new
156
- end
157
-
158
- # Add a field object to the stack
159
- def visit_field(_)
160
- stack << FieldObject.new
161
- end
162
-
163
- # Add a spread object to the stack
164
- def visit_fragment_spread(_)
165
- stack << SpreadObject.new
166
- end
167
-
168
- # Add a spread object to the stack
169
- def visit_inline_fragment(_)
170
- stack << SpreadObject.new.tap { |obj| obj.inline = true }
171
- end
172
-
173
- # BLOCK DISPATCHER VISITORS
174
-
175
- # Send the operation object to the set block
176
- def end_visit_operation_definition(node)
177
- safe_call_block(:operation, node, stack.pop)
178
- end
179
-
180
- # Send the fragment object to the set block
181
- def end_visit_fragment_definition(node)
182
- safe_call_block(:fragment, node, stack.pop)
183
- end
184
-
185
- # Send the directive object to the set block
186
- def end_visit_directive(_)
187
- return unless @visit&.include?('directive')
188
-
189
- safe_call_block(stack.pop)
190
- end
191
-
192
- # Send the argument object to the set block
193
- def end_visit_argument(_)
194
- return unless @visit&.include?('argument')
195
-
196
- stack[-2][:value] = stack.pop if stack.size > 1
197
- safe_call_block(stack.pop)
198
- end
199
-
200
- # Send the variable object to the set block
201
- def end_visit_variable_definition(node)
202
- return unless @visit&.include?('variable_definition')
203
-
204
- stack[-2][:default] = stack.pop unless default_value(node).null?
205
- safe_call_block(stack.pop, node)
206
- end
207
-
208
- # Send the field object to the set block
209
- def end_visit_field(node)
210
- safe_call_block(:field, node, stack.pop)
211
- end
212
-
213
- # Send the spread object to the set block
214
- def end_visit_fragment_spread(node)
215
- safe_call_block(:spread, node, stack.pop)
216
- end
217
-
218
- # Send the spread object to the set block
219
- def end_visit_inline_fragment(node)
220
- safe_call_block(:spread, node, stack.pop)
221
- end
222
-
223
- # SECONDARY VISITORS
224
-
225
- # Add a variable definition to the current object
226
- def visit_variable_definition(node)
227
- if @visit&.include?('variable_definition')
228
- stack << VariableObject.new.tap do |obj|
229
- obj.null = true
230
- obj.array = false
231
- obj.nullable = true
232
- end
233
- else
234
- (object[:variables] ||= []) << node
235
- end
236
- end
237
-
238
- # Add a directive to the current object
239
- def visit_directive(node)
240
- if @visit&.include?('directive')
241
- stack << DirectiveObject.new
242
- else
243
- (object[:directives] ||= []) << node
244
- end
245
- end
246
-
247
- # Add a selection set to the current object
248
- def visit_selection_set(node)
249
- throw(:override, true) if object.nil?
250
- object[:selection] = node
251
- end
252
-
253
- # SHARED VISITORS
254
-
255
- # Set a name into the object
256
- def visit_name(node)
257
- object[:alias] = object[:name] unless object[:name].nil?
258
- object[:name] = node_name(node)
259
- end
260
-
261
- # Get the type of the object
262
- def visit_named_type(node)
263
- object[:type] = node_name(type_name(node))
264
- end
265
-
266
- # Set the object as an array
267
- def visit_list_type(_)
268
- object[:array] = true
269
- end
270
-
271
- # Set the object as non null or non nullable
272
- def visit_non_null_type(_)
273
- object[object[:array] ? :nullable : :null] = false
274
- end
275
-
276
- # Get an argument information with its given written value
277
- def visit_argument(node)
278
- if @visit&.include?('argument')
279
- stack << ArgumentObject.new
280
- elsif @visit&.include?('field')
281
- (object[:arguments] ||= []) << node
282
- else
283
- visit(argument_value(node))
284
- arg_name = node_name(argument_name(node))
285
- (stack[-2][:arguments] ||= {})[arg_name] = stack.pop
286
- end
287
- end
288
-
289
- # Add a variable to the stack
290
- def visit_variable(node)
291
- if @visit&.include?('argument')
292
- object[:variable] = variable_name(node)
293
- elsif @visit&.include?('variable_definition')
294
- object[:name] = visit_name(variable_name(node))
295
- else
296
- stack << variable_name(node)
297
- end
298
- end
299
-
300
- # Add a integer value to the stack
301
- def visit_int_value(node)
302
- stack << get_int_value(node)
303
- end
304
-
305
- # Add a float value to the stack
306
- def visit_float_value(node)
307
- stack << get_float_value(node)
308
- end
309
-
310
- # Add a string value to the stack
311
- def visit_string_value(node)
312
- stack << get_string_value(node)
313
- end
314
-
315
- # Add a boolean value to the stack
316
- def visit_boolean_value(node)
317
- stack << get_boolean_value(node).eql?(1)
318
- end
319
-
320
- # Add a nil value to the stack
321
- def visit_null_value(*)
322
- stack << nil
323
- end
324
-
325
- # Add a enum string-like value to the stack
326
- def visit_enum_value(node)
327
- stack << get_enum_value(node)
328
- end
329
-
330
- # Add a hash value to the stack
331
- def visit_object_value(*)
332
- stack << {}
333
- end
334
-
335
- # Add a hash key value pair to a hash on the stack
336
- def visit_object_field(node)
337
- visit(ofield_value(node))
338
- key = node_name(ofield_name(node))
339
- stack[-2][key] = stack.pop
340
- end
341
-
342
- # At the end of a list, change the stack based on the size of the list
343
- def end_visit_list_value(node)
344
- stack << size.zero? ? [] : stack.slice!(-list_size(node)..-1)
345
- end
346
- end
347
- end
348
- end
349
- end