rails-graphql 0.2.1 → 1.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +6 -6
  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 +49 -35
  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 +256 -164
  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,65 +0,0 @@
1
- # Copyright 2019-present, GraphQL Foundation
2
- #
3
- # This source code is licensed under the MIT license found in the
4
- # LICENSE file in the root directory of this source tree.
5
-
6
-
7
- class Printer(object):
8
- def __init__(self):
9
- pass
10
-
11
- def start_file(self):
12
- print '''/* @flow */
13
- /* @generated */
14
- /* jshint ignore:start */
15
-
16
- /**
17
- * Copyright 2019-present, GraphQL Foundation
18
- *
19
- * This source code is licensed under the MIT license found in the
20
- * LICENSE file in the root directory of this source tree.
21
- */
22
-
23
- type Node = {
24
- kind: string;
25
- start?: ?number;
26
- end?: ?number;
27
- };
28
-
29
- type OperationKind = 'query' | 'mutation' | 'subscription';'''
30
-
31
- def end_file(self):
32
- pass
33
-
34
- def start_type(self, name):
35
- print
36
- print 'type %s = Node & {' % name
37
- kind = name
38
- if kind == 'GenericType':
39
- kind = 'Type'
40
- print ' kind: \'%s\';' % kind
41
-
42
- def end_type(self, name):
43
- print '}'
44
-
45
- def _js_type(self, type, plural):
46
- if plural:
47
- type = 'Array<%s>' % type
48
- return type
49
-
50
- def field(self, type, name, nullable, plural):
51
- nullable_char = '?' if nullable else ''
52
- js_type = self._js_type(type, plural)
53
- print ' %(name)s%(nullable_char)s: %(nullable_char)s%(js_type)s;' % locals()
54
-
55
- def start_union(self, name):
56
- print ('type %s = ' % name),
57
- self._current_options = []
58
-
59
- def union_option(self, type):
60
- self._current_options.append(type)
61
-
62
- def end_union(self, name):
63
- print '\n | '.join(self._current_options)
64
- print
65
- self._current_options = None
@@ -1,10 +0,0 @@
1
- # Copyright 2019-present GraphQL Foundation
2
- # This source code is licensed under the MIT license found in the
3
- # LICENSE file in the root directory of this source tree.
4
-
5
- C_LICENSE_COMMENT = '''/**
6
- * Copyright 2019-present GraphQL Foundation
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */
10
- '''
Binary file
@@ -1,25 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "GraphQLAstNode.h"
9
- #include "../AstNode.h"
10
-
11
- using facebook::graphql::ast::Node;
12
-
13
- void graphql_node_get_location(const struct GraphQLAstNode *node,
14
- struct GraphQLAstLocation *location) {
15
- const auto *realNode = reinterpret_cast<const Node *>(node);
16
- const auto &loc = realNode->getLocation();
17
- location->beginLine = loc.begin.line;
18
- location->beginColumn = loc.begin.column;
19
- location->endLine = loc.end.line;
20
- location->endColumn = loc.end.column;
21
- }
22
-
23
- void graphql_node_free(struct GraphQLAstNode *node) {
24
- delete reinterpret_cast<Node *>(node);
25
- }
@@ -1,33 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #ifdef __cplusplus
11
- extern "C" {
12
- #endif
13
-
14
- /* Opaque type representing a generic AST node. */
15
- struct GraphQLAstNode;
16
-
17
- /* A location in the AST. */
18
- struct GraphQLAstLocation {
19
- unsigned int beginLine;
20
- unsigned int beginColumn;
21
- unsigned int endLine;
22
- unsigned int endColumn;
23
- };
24
-
25
- /* Fills location with location information for the given node. */
26
- void graphql_node_get_location(const struct GraphQLAstNode *node,
27
- struct GraphQLAstLocation *location);
28
-
29
- void graphql_node_free(struct GraphQLAstNode *node);
30
-
31
- #ifdef __cplusplus
32
- }
33
- #endif
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "GraphQLAstToJSON.h"
9
-
10
- #include <cstring>
11
-
12
- #include "../JsonVisitor.h"
13
- #include "../AstNode.h"
14
-
15
-
16
- const char *graphql_ast_to_json(const struct GraphQLAstNode *node)
17
- {
18
- facebook::graphql::ast::visitor::JsonVisitor visitor;
19
- reinterpret_cast<const facebook::graphql::ast::Node *>(node)->accept(&visitor);
20
- return strdup(visitor.getResult().c_str());
21
- }
@@ -1,24 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #ifdef __cplusplus
11
- extern "C" {
12
- #endif
13
-
14
- struct GraphQLAstNode;
15
-
16
- /**
17
- * Serialize the given AST to JSON. The returned C string must be
18
- * freed with free().
19
- */
20
- const char *graphql_ast_to_json(const struct GraphQLAstNode *node);
21
-
22
- #ifdef __cplusplus
23
- }
24
- #endif
@@ -1,55 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "c/GraphQLAstVisitor.h"
9
- #include "AstVisitor.h"
10
-
11
- using namespace facebook::graphql::ast; // NOLINT
12
-
13
- #include "c/GraphQLAstForEachConcreteType.h"
14
-
15
- #define DECLARE_VISIT(type, snake_type) \
16
- bool visit##type(const type &node) override; \
17
- void endVisit##type(const type &node) override;
18
-
19
- class CVisitorBridge : public visitor::AstVisitor {
20
- const struct GraphQLAstVisitorCallbacks *callbacks_;
21
- void *userData_;
22
- public:
23
- explicit CVisitorBridge(const struct GraphQLAstVisitorCallbacks *callbacks,
24
- void *userData)
25
- : callbacks_(callbacks), userData_(userData) {}
26
-
27
- FOR_EACH_CONCRETE_TYPE(DECLARE_VISIT)
28
- };
29
-
30
- #define IMPLEMENT_VISIT(type, snake_type) \
31
- bool CVisitorBridge::visit##type(const type &node) { \
32
- if (callbacks_->visit_##snake_type) { \
33
- return callbacks_->visit_##snake_type( \
34
- (const struct GraphQLAst##type *)&node, userData_); \
35
- } \
36
- return true; \
37
- } \
38
- void CVisitorBridge::endVisit##type(const type &node) { \
39
- if (callbacks_->end_visit_##snake_type) { \
40
- callbacks_->end_visit_##snake_type( \
41
- (const struct GraphQLAst##type *)&node, userData_); \
42
- } \
43
- }
44
-
45
- FOR_EACH_CONCRETE_TYPE(IMPLEMENT_VISIT)
46
-
47
- void graphql_node_visit(const struct GraphQLAstNode *node,
48
- const struct GraphQLAstVisitorCallbacks *callbacks,
49
- void *userData)
50
- {
51
- CVisitorBridge visitor(callbacks, userData);
52
- if (node) {
53
- reinterpret_cast<const facebook::graphql::ast::Node *>(node)->accept(&visitor);
54
- }
55
- }
@@ -1,53 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #include "c/GraphQLAst.h"
11
- #include "c/GraphQLAstForEachConcreteType.h"
12
-
13
- #ifdef __cplusplus
14
- extern "C" {
15
- #endif
16
-
17
- #define TYPEDEFS(type, snake_type) \
18
- typedef int (*visit_##snake_type##_func)(const struct GraphQLAst##type *snake_type, void *user_data); \
19
- typedef void (*end_visit_##snake_type##_func)(const struct GraphQLAst##type *snake_type, void *user_data);
20
-
21
- FOR_EACH_CONCRETE_TYPE(TYPEDEFS)
22
-
23
- #define FUNC_MEMBER(type, snake_type) \
24
- visit_##snake_type##_func visit_##snake_type; \
25
- end_visit_##snake_type##_func end_visit_##snake_type;
26
- /**
27
- * Functions to be called when particular AST nodes are encountered.
28
- * visit_* functions are called in pre-order, and may return non-zero to
29
- * continue recursing into children (if any), or zero to skip them. end_visit_*
30
- * functions are called in post-order. Any particular function may be set to
31
- * NULL to indicate that the caller is not interested in the corresponding type
32
- * of AST node. (NULL visit_* functions act as though they simply returned
33
- * non-zero.)
34
- */
35
- struct GraphQLAstVisitorCallbacks {
36
- FOR_EACH_CONCRETE_TYPE(FUNC_MEMBER)
37
- };
38
-
39
- struct GraphQLAstNode;
40
-
41
- /**
42
- * Walk the AST rooted at the given node, issuing callbacks from the given
43
- * callbacks struct as appropriate. userData will be passed as the userData
44
- * argument to each callback.
45
- */
46
- void graphql_node_visit(const struct GraphQLAstNode *node,
47
- const struct GraphQLAstVisitorCallbacks *callbacks,
48
- void *userData);
49
-
50
- #ifdef __cplusplus
51
- }
52
- #endif
53
-
@@ -1,35 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "GraphQLParser.h"
9
- #include "../GraphQLParser.h"
10
- #include "../AstNode.h"
11
-
12
- #include <cstdlib>
13
-
14
- struct GraphQLAstNode *graphql_parse_string(const char *text, const char **error) {
15
- return reinterpret_cast<struct GraphQLAstNode *>(facebook::graphql::parseString(text, error).release());
16
- }
17
-
18
- struct GraphQLAstNode *graphql_parse_string_with_experimental_schema_support(
19
- const char *text, const char **error) {
20
- return reinterpret_cast<struct GraphQLAstNode *>(facebook::graphql::parseStringWithExperimentalSchemaSupport(
21
- text, error).release());
22
- }
23
-
24
- struct GraphQLAstNode *graphql_parse_file(FILE *file, const char **error) {
25
- return reinterpret_cast<struct GraphQLAstNode *>(facebook::graphql::parseFile(file, error).release());
26
- }
27
-
28
- struct GraphQLAstNode *graphql_parse_file_with_experimental_schema_support(
29
- FILE *file, const char **error) {
30
- return reinterpret_cast<struct GraphQLAstNode *>(facebook::graphql::parseFileWithExperimentalSchemaSupport(file, error).release());
31
- }
32
-
33
- void graphql_error_free(const char *error) {
34
- std::free((void *)(error)); // NOLINT
35
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #pragma once
9
-
10
- #include <stdio.h>
11
-
12
- #ifdef __cplusplus
13
- extern "C" {
14
- #endif
15
-
16
- /**
17
- * This file provides C wrappers for ../GraphQLParser.h.
18
- */
19
-
20
- struct GraphQLAstNode;
21
-
22
- /**
23
- * Parse the given GraphQL source string, returning an AST. Returns
24
- * NULL on error. Return value must be freed with
25
- * graphql_node_free(). If NULL is returned and error is not NULL, an
26
- * error message is placed in error and must be freed with
27
- * graphql_error_free().
28
- */
29
- struct GraphQLAstNode *graphql_parse_string(
30
- const char *text, const char **error);
31
-
32
- struct GraphQLAstNode *graphql_parse_string_with_experimental_schema_support(
33
- const char *text, const char **error);
34
-
35
- /**
36
- * Read and parse GraphQL source from the given file, returning an
37
- * AST. Returns nullptr on error. Return value must be freed with
38
- * graphql_node_free(). If NULL is returned and error is not NULL, an
39
- * error message is placed in error and must be freed with
40
- * graphql_error_free().
41
- */
42
- struct GraphQLAstNode *graphql_parse_file(FILE *file, const char **error);
43
-
44
- struct GraphQLAstNode *graphql_parse_file_with_experimental_schema_support(
45
- FILE *file, const char **error);
46
-
47
- /**
48
- * Frees an error.
49
- */
50
- void graphql_error_free(const char *error);
51
-
52
- #ifdef __cplusplus
53
- }
54
- #endif
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
- # Copyright 2019-present, GraphQL Foundation
3
- find . -name '*.cpp' | grep -v lexer | grep -v googletest | grep -v tab.cpp | xargs clang-tidy -p build
@@ -1,16 +0,0 @@
1
- # Copyright 2019-present, GraphQL Foundation
2
-
3
- find_package(Git QUIET)
4
-
5
- # default version string
6
- set(LIBGRAPHQLPARSER_VERSION "0.0-dev")
7
-
8
- if(GIT_EXECUTABLE AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
9
- execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags
10
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
11
- OUTPUT_VARIABLE LIBGRAPHQLPARSER_VERSION
12
- ERROR_QUIET
13
- OUTPUT_STRIP_TRAILING_WHITESPACE
14
- )
15
- string(SUBSTRING ${LIBGRAPHQLPARSER_VERSION} 1 -1 LIBGRAPHQLPARSER_VERSION)
16
- endif()
@@ -1,48 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "AstNode.h"
9
- #include "GraphQLParser.h"
10
- #include "c/GraphQLAstToJSON.h"
11
-
12
- #include <cstdio>
13
- #include <cstdlib>
14
- #include <iostream>
15
-
16
-
17
- using std::cout;
18
- using std::cerr;
19
- using std::endl;
20
- using std::fopen;
21
- using std::fclose;
22
- using std::free;
23
-
24
-
25
- int main(int argc, char **argv) {
26
- const char *error;
27
- FILE * in;
28
- if (argc > 1) {
29
- in = fopen(argv[1], "r"); // NOLINT
30
- } else {
31
- in = stdin;
32
- }
33
- auto AST = facebook::graphql::parseFile(in, &error);
34
- if (argc > 1) {
35
- fclose(in);
36
- }
37
- if (!AST) {
38
- cerr << "Parser failed with error: " << error << endl;
39
- free((void *)error); // NOLINT
40
- return 1;
41
- }
42
-
43
- const char *json = graphql_ast_to_json(reinterpret_cast<const struct GraphQLAstNode *>(AST.get()));
44
- puts(json);
45
- free((void *)json); // NOLINT
46
-
47
- return 0;
48
- }
@@ -1,20 +0,0 @@
1
- # About
2
- This directory contains an example using the libgraphqlparser C library from [Go](https://golang.org/project/).
3
-
4
- For an overview of binding to C libraries in Go, please see the [cgo documentation](https://github.com/golang/go/wiki/cgo).
5
- Specifically, please read the overview of [Function pointer callbacks](https://github.com/golang/go/wiki/cgo#function-pointer-callbacks) in Go and C.
6
-
7
- ## Building and Running
8
-
9
- To build with Go, please ensure that you have `pkg-config` installed for your
10
- system.
11
-
12
- Assuming pkg-config has been installed, it should be possible to then build
13
- using Go in the normal fashion:
14
- ```sh
15
- $ cd libgraphqlparser/go
16
- $ go build
17
- $ ./go
18
- field : myfield
19
- Example error: 1.18-19: syntax error, unexpected on, expecting ( or @ or {
20
- ```
@@ -1,18 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- package main
8
-
9
- /*
10
- struct GraphQLAstField;
11
-
12
- int printField(struct GraphQLAstField *field, void *unused);
13
-
14
- int printField_cgo(struct GraphQLAstField *field, void *unused) {
15
- return printField(field, unused);
16
- }
17
- */
18
- import "C"
@@ -1,64 +0,0 @@
1
- /**
2
- * Copyright 2019-present, GraphQL Foundation
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
- package main
8
-
9
- /*
10
- #cgo pkg-config: libgraphqlparser
11
-
12
- #include "c/GraphQLAst.h"
13
- #include "c/GraphQLAstNode.h"
14
- #include "c/GraphQLAstVisitor.h"
15
- #include "c/GraphQLParser.h"
16
- #include <stdlib.h>
17
-
18
- int printField_cgo(struct GraphQLAstField *field, void *unused);
19
- */
20
- import "C"
21
-
22
- import "errors"
23
- import "fmt"
24
- import "unsafe"
25
-
26
- //export printField
27
- func printField(field *C.struct_GraphQLAstField, unused unsafe.Pointer) int {
28
- fmt.Printf("field : %s\n", C.GoString(C.GraphQLAstName_get_value(C.GraphQLAstField_get_name(field))))
29
- return 0
30
- }
31
-
32
- func parse(query string) (*C.struct_GraphQLAstNode, error) {
33
- graphql := C.CString(query)
34
- cError := (*C.char)(nil)
35
- ast := C.graphql_parse_string(graphql, &cError)
36
- C.free(unsafe.Pointer(graphql))
37
-
38
- if ast == nil {
39
- err := errors.New(C.GoString(cError))
40
- C.graphql_error_free(cError)
41
- return nil, err
42
- }
43
- return ast, nil
44
- }
45
-
46
- func main() {
47
- ast, err := parse("query myquery { myfield }")
48
- if err != nil {
49
- fmt.Printf("BUG: unexpected parse error: %s", err)
50
- return
51
- }
52
- visitor_callbacks := C.struct_GraphQLAstVisitorCallbacks{visit_field: (C.visit_field_func)(C.printField_cgo)}
53
- C.graphql_node_visit(ast, &visitor_callbacks, nil)
54
-
55
- C.graphql_node_free(ast)
56
-
57
- ast2, err2 := parse("query errorQuery on oops { myfield }")
58
- if err2 != nil {
59
- fmt.Printf("Example error: %s\n", err2)
60
- }
61
- if ast2 != nil {
62
- fmt.Printf("BUG: we should have got a null AST back, but we got %s\n", ast2)
63
- }
64
- }