rails-graphql 0.1.0

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 (266) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +19 -0
  4. data/Rakefile +31 -0
  5. data/ext/depend +3 -0
  6. data/ext/extconf.rb +57 -0
  7. data/ext/graphqlparser/Ast.cpp +346 -0
  8. data/ext/graphqlparser/Ast.h +1214 -0
  9. data/ext/graphqlparser/AstNode.h +36 -0
  10. data/ext/graphqlparser/AstVisitor.h +137 -0
  11. data/ext/graphqlparser/GraphQLParser.cpp +76 -0
  12. data/ext/graphqlparser/GraphQLParser.h +55 -0
  13. data/ext/graphqlparser/JsonVisitor.cpp +161 -0
  14. data/ext/graphqlparser/JsonVisitor.cpp.inc +456 -0
  15. data/ext/graphqlparser/JsonVisitor.h +121 -0
  16. data/ext/graphqlparser/JsonVisitor.h.inc +110 -0
  17. data/ext/graphqlparser/VERSION +1 -0
  18. data/ext/graphqlparser/c/GraphQLAst.cpp +324 -0
  19. data/ext/graphqlparser/c/GraphQLAst.h +180 -0
  20. data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +44 -0
  21. data/ext/graphqlparser/c/GraphQLAstNode.cpp +25 -0
  22. data/ext/graphqlparser/c/GraphQLAstNode.h +33 -0
  23. data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +21 -0
  24. data/ext/graphqlparser/c/GraphQLAstToJSON.h +24 -0
  25. data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +55 -0
  26. data/ext/graphqlparser/c/GraphQLAstVisitor.h +53 -0
  27. data/ext/graphqlparser/c/GraphQLParser.cpp +35 -0
  28. data/ext/graphqlparser/c/GraphQLParser.h +54 -0
  29. data/ext/graphqlparser/dump_json_ast.cpp +48 -0
  30. data/ext/graphqlparser/lexer.lpp +324 -0
  31. data/ext/graphqlparser/parser.ypp +693 -0
  32. data/ext/graphqlparser/parsergen/lexer.cpp +2633 -0
  33. data/ext/graphqlparser/parsergen/lexer.h +528 -0
  34. data/ext/graphqlparser/parsergen/location.hh +189 -0
  35. data/ext/graphqlparser/parsergen/parser.tab.cpp +3300 -0
  36. data/ext/graphqlparser/parsergen/parser.tab.hpp +646 -0
  37. data/ext/graphqlparser/parsergen/position.hh +179 -0
  38. data/ext/graphqlparser/parsergen/stack.hh +156 -0
  39. data/ext/graphqlparser/syntaxdefs.h +19 -0
  40. data/ext/libgraphqlparser/AstNode.h +36 -0
  41. data/ext/libgraphqlparser/CMakeLists.txt +148 -0
  42. data/ext/libgraphqlparser/CONTRIBUTING.md +23 -0
  43. data/ext/libgraphqlparser/GraphQLParser.cpp +76 -0
  44. data/ext/libgraphqlparser/GraphQLParser.h +55 -0
  45. data/ext/libgraphqlparser/JsonVisitor.cpp +161 -0
  46. data/ext/libgraphqlparser/JsonVisitor.h +121 -0
  47. data/ext/libgraphqlparser/LICENSE +22 -0
  48. data/ext/libgraphqlparser/README.clang-tidy +7 -0
  49. data/ext/libgraphqlparser/README.md +84 -0
  50. data/ext/libgraphqlparser/ast/ast.ast +203 -0
  51. data/ext/libgraphqlparser/ast/ast.py +61 -0
  52. data/ext/libgraphqlparser/ast/c.py +100 -0
  53. data/ext/libgraphqlparser/ast/c.pyc +0 -0
  54. data/ext/libgraphqlparser/ast/c_impl.py +61 -0
  55. data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
  56. data/ext/libgraphqlparser/ast/c_visitor_impl.py +39 -0
  57. data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
  58. data/ext/libgraphqlparser/ast/casing.py +26 -0
  59. data/ext/libgraphqlparser/ast/casing.pyc +0 -0
  60. data/ext/libgraphqlparser/ast/cxx.py +197 -0
  61. data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
  62. data/ext/libgraphqlparser/ast/cxx_impl.py +61 -0
  63. data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
  64. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +42 -0
  65. data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
  66. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +80 -0
  67. data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
  68. data/ext/libgraphqlparser/ast/cxx_visitor.py +64 -0
  69. data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
  70. data/ext/libgraphqlparser/ast/js.py +65 -0
  71. data/ext/libgraphqlparser/ast/license.py +10 -0
  72. data/ext/libgraphqlparser/ast/license.pyc +0 -0
  73. data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +25 -0
  74. data/ext/libgraphqlparser/c/GraphQLAstNode.h +33 -0
  75. data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +21 -0
  76. data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +24 -0
  77. data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +55 -0
  78. data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +53 -0
  79. data/ext/libgraphqlparser/c/GraphQLParser.cpp +35 -0
  80. data/ext/libgraphqlparser/c/GraphQLParser.h +54 -0
  81. data/ext/libgraphqlparser/clang-tidy-all.sh +3 -0
  82. data/ext/libgraphqlparser/cmake/version.cmake +16 -0
  83. data/ext/libgraphqlparser/dump_json_ast.cpp +48 -0
  84. data/ext/libgraphqlparser/go/README.md +20 -0
  85. data/ext/libgraphqlparser/go/callbacks.go +18 -0
  86. data/ext/libgraphqlparser/go/gotest.go +64 -0
  87. data/ext/libgraphqlparser/lexer.lpp +324 -0
  88. data/ext/libgraphqlparser/libgraphqlparser.pc.in +11 -0
  89. data/ext/libgraphqlparser/parser.ypp +693 -0
  90. data/ext/libgraphqlparser/parsergen/lexer.cpp +2633 -0
  91. data/ext/libgraphqlparser/parsergen/lexer.h +528 -0
  92. data/ext/libgraphqlparser/parsergen/location.hh +189 -0
  93. data/ext/libgraphqlparser/parsergen/parser.tab.cpp +3300 -0
  94. data/ext/libgraphqlparser/parsergen/parser.tab.hpp +646 -0
  95. data/ext/libgraphqlparser/parsergen/position.hh +179 -0
  96. data/ext/libgraphqlparser/parsergen/stack.hh +156 -0
  97. data/ext/libgraphqlparser/python/CMakeLists.txt +14 -0
  98. data/ext/libgraphqlparser/python/README.md +5 -0
  99. data/ext/libgraphqlparser/python/example.py +31 -0
  100. data/ext/libgraphqlparser/syntaxdefs.h +19 -0
  101. data/ext/libgraphqlparser/test/BuildCAPI.c +5 -0
  102. data/ext/libgraphqlparser/test/CMakeLists.txt +25 -0
  103. data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +28 -0
  104. data/ext/libgraphqlparser/test/ParserTests.cpp +352 -0
  105. data/ext/libgraphqlparser/test/kitchen-sink.graphql +59 -0
  106. data/ext/libgraphqlparser/test/kitchen-sink.json +1 -0
  107. data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +78 -0
  108. data/ext/libgraphqlparser/test/schema-kitchen-sink.json +1 -0
  109. data/ext/libgraphqlparser/test/valgrind.supp +33 -0
  110. data/ext/version.cpp +21 -0
  111. data/lib/generators/graphql/controller_generator.rb +22 -0
  112. data/lib/generators/graphql/schema_generator.rb +22 -0
  113. data/lib/generators/graphql/templates/controller.erb +5 -0
  114. data/lib/generators/graphql/templates/schema.erb +6 -0
  115. data/lib/graphqlparser.so +0 -0
  116. data/lib/rails-graphql.rb +2 -0
  117. data/lib/rails/graphql.rake +1 -0
  118. data/lib/rails/graphql.rb +185 -0
  119. data/lib/rails/graphql/adapters/mysql_adapter.rb +0 -0
  120. data/lib/rails/graphql/adapters/pg_adapter.rb +50 -0
  121. data/lib/rails/graphql/adapters/sqlite_adapter.rb +39 -0
  122. data/lib/rails/graphql/argument.rb +220 -0
  123. data/lib/rails/graphql/callback.rb +124 -0
  124. data/lib/rails/graphql/collectors.rb +14 -0
  125. data/lib/rails/graphql/collectors/hash_collector.rb +83 -0
  126. data/lib/rails/graphql/collectors/idented_collector.rb +73 -0
  127. data/lib/rails/graphql/collectors/json_collector.rb +114 -0
  128. data/lib/rails/graphql/config.rb +61 -0
  129. data/lib/rails/graphql/directive.rb +203 -0
  130. data/lib/rails/graphql/directive/deprecated_directive.rb +59 -0
  131. data/lib/rails/graphql/directive/include_directive.rb +24 -0
  132. data/lib/rails/graphql/directive/skip_directive.rb +24 -0
  133. data/lib/rails/graphql/errors.rb +42 -0
  134. data/lib/rails/graphql/event.rb +141 -0
  135. data/lib/rails/graphql/field.rb +318 -0
  136. data/lib/rails/graphql/field/input_field.rb +92 -0
  137. data/lib/rails/graphql/field/mutation_field.rb +52 -0
  138. data/lib/rails/graphql/field/output_field.rb +96 -0
  139. data/lib/rails/graphql/field/proxied_field.rb +131 -0
  140. data/lib/rails/graphql/field/resolved_field.rb +96 -0
  141. data/lib/rails/graphql/field/scoped_config.rb +22 -0
  142. data/lib/rails/graphql/field/typed_field.rb +104 -0
  143. data/lib/rails/graphql/helpers.rb +40 -0
  144. data/lib/rails/graphql/helpers/attribute_delegator.rb +39 -0
  145. data/lib/rails/graphql/helpers/inherited_collection.rb +152 -0
  146. data/lib/rails/graphql/helpers/leaf_from_ar.rb +141 -0
  147. data/lib/rails/graphql/helpers/registerable.rb +103 -0
  148. data/lib/rails/graphql/helpers/with_arguments.rb +125 -0
  149. data/lib/rails/graphql/helpers/with_assignment.rb +113 -0
  150. data/lib/rails/graphql/helpers/with_callbacks.rb +55 -0
  151. data/lib/rails/graphql/helpers/with_directives.rb +126 -0
  152. data/lib/rails/graphql/helpers/with_events.rb +81 -0
  153. data/lib/rails/graphql/helpers/with_fields.rb +141 -0
  154. data/lib/rails/graphql/helpers/with_namespace.rb +40 -0
  155. data/lib/rails/graphql/helpers/with_owner.rb +35 -0
  156. data/lib/rails/graphql/helpers/with_schema_fields.rb +230 -0
  157. data/lib/rails/graphql/helpers/with_validator.rb +52 -0
  158. data/lib/rails/graphql/introspection.rb +53 -0
  159. data/lib/rails/graphql/native.rb +56 -0
  160. data/lib/rails/graphql/native/functions.rb +38 -0
  161. data/lib/rails/graphql/native/location.rb +41 -0
  162. data/lib/rails/graphql/native/pointers.rb +23 -0
  163. data/lib/rails/graphql/native/visitor.rb +349 -0
  164. data/lib/rails/graphql/railtie.rb +85 -0
  165. data/lib/rails/graphql/railties/base_generator.rb +35 -0
  166. data/lib/rails/graphql/railties/controller.rb +101 -0
  167. data/lib/rails/graphql/railties/controller_runtime.rb +40 -0
  168. data/lib/rails/graphql/railties/log_subscriber.rb +62 -0
  169. data/lib/rails/graphql/request.rb +343 -0
  170. data/lib/rails/graphql/request/arguments.rb +93 -0
  171. data/lib/rails/graphql/request/component.rb +100 -0
  172. data/lib/rails/graphql/request/component/field.rb +225 -0
  173. data/lib/rails/graphql/request/component/fragment.rb +118 -0
  174. data/lib/rails/graphql/request/component/operation.rb +178 -0
  175. data/lib/rails/graphql/request/component/operation/subscription.rb +16 -0
  176. data/lib/rails/graphql/request/component/spread.rb +119 -0
  177. data/lib/rails/graphql/request/component/typename.rb +82 -0
  178. data/lib/rails/graphql/request/context.rb +51 -0
  179. data/lib/rails/graphql/request/errors.rb +54 -0
  180. data/lib/rails/graphql/request/event.rb +112 -0
  181. data/lib/rails/graphql/request/helpers/directives.rb +64 -0
  182. data/lib/rails/graphql/request/helpers/selection_set.rb +87 -0
  183. data/lib/rails/graphql/request/helpers/value_writers.rb +115 -0
  184. data/lib/rails/graphql/request/steps/organizable.rb +146 -0
  185. data/lib/rails/graphql/request/steps/prepareable.rb +33 -0
  186. data/lib/rails/graphql/request/steps/resolveable.rb +32 -0
  187. data/lib/rails/graphql/request/strategy.rb +249 -0
  188. data/lib/rails/graphql/request/strategy/dynamic_instance.rb +41 -0
  189. data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +36 -0
  190. data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +28 -0
  191. data/lib/rails/graphql/schema.rb +272 -0
  192. data/lib/rails/graphql/shortcuts.rb +77 -0
  193. data/lib/rails/graphql/source.rb +371 -0
  194. data/lib/rails/graphql/source/active_record/builders.rb +154 -0
  195. data/lib/rails/graphql/source/active_record_source.rb +231 -0
  196. data/lib/rails/graphql/source/scoped_arguments.rb +87 -0
  197. data/lib/rails/graphql/to_gql.rb +368 -0
  198. data/lib/rails/graphql/type.rb +138 -0
  199. data/lib/rails/graphql/type/enum.rb +206 -0
  200. data/lib/rails/graphql/type/enum/directive_location_enum.rb +30 -0
  201. data/lib/rails/graphql/type/enum/type_kind_enum.rb +57 -0
  202. data/lib/rails/graphql/type/input.rb +134 -0
  203. data/lib/rails/graphql/type/interface.rb +82 -0
  204. data/lib/rails/graphql/type/object.rb +111 -0
  205. data/lib/rails/graphql/type/object/directive_object.rb +34 -0
  206. data/lib/rails/graphql/type/object/enum_value_object.rb +25 -0
  207. data/lib/rails/graphql/type/object/field_object.rb +54 -0
  208. data/lib/rails/graphql/type/object/input_value_object.rb +49 -0
  209. data/lib/rails/graphql/type/object/schema_object.rb +40 -0
  210. data/lib/rails/graphql/type/object/type_object.rb +136 -0
  211. data/lib/rails/graphql/type/scalar.rb +71 -0
  212. data/lib/rails/graphql/type/scalar/bigint_scalar.rb +34 -0
  213. data/lib/rails/graphql/type/scalar/binary_scalar.rb +30 -0
  214. data/lib/rails/graphql/type/scalar/boolean_scalar.rb +37 -0
  215. data/lib/rails/graphql/type/scalar/date_scalar.rb +34 -0
  216. data/lib/rails/graphql/type/scalar/date_time_scalar.rb +32 -0
  217. data/lib/rails/graphql/type/scalar/decimal_scalar.rb +35 -0
  218. data/lib/rails/graphql/type/scalar/float_scalar.rb +32 -0
  219. data/lib/rails/graphql/type/scalar/id_scalar.rb +39 -0
  220. data/lib/rails/graphql/type/scalar/int_scalar.rb +36 -0
  221. data/lib/rails/graphql/type/scalar/string_scalar.rb +28 -0
  222. data/lib/rails/graphql/type/scalar/time_scalar.rb +40 -0
  223. data/lib/rails/graphql/type/union.rb +87 -0
  224. data/lib/rails/graphql/type_map.rb +347 -0
  225. data/lib/rails/graphql/version.rb +7 -0
  226. data/test/assets/introspection-db.json +0 -0
  227. data/test/assets/introspection-mem.txt +1 -0
  228. data/test/assets/introspection.gql +91 -0
  229. data/test/assets/luke.jpg +0 -0
  230. data/test/assets/mem.gql +428 -0
  231. data/test/assets/sqlite.gql +423 -0
  232. data/test/config.rb +80 -0
  233. data/test/graphql/request/context_test.rb +70 -0
  234. data/test/graphql/schema_test.rb +190 -0
  235. data/test/graphql/source_test.rb +237 -0
  236. data/test/graphql/type/enum_test.rb +203 -0
  237. data/test/graphql/type/input_test.rb +138 -0
  238. data/test/graphql/type/interface_test.rb +72 -0
  239. data/test/graphql/type/object_test.rb +104 -0
  240. data/test/graphql/type/scalar/bigint_scalar_test.rb +42 -0
  241. data/test/graphql/type/scalar/binary_scalar_test.rb +17 -0
  242. data/test/graphql/type/scalar/boolean_scalar_test.rb +40 -0
  243. data/test/graphql/type/scalar/date_scalar_test.rb +29 -0
  244. data/test/graphql/type/scalar/date_time_scalar_test.rb +29 -0
  245. data/test/graphql/type/scalar/decimal_scalar_test.rb +28 -0
  246. data/test/graphql/type/scalar/float_scalar_test.rb +22 -0
  247. data/test/graphql/type/scalar/id_scalar_test.rb +26 -0
  248. data/test/graphql/type/scalar/int_scalar_test.rb +26 -0
  249. data/test/graphql/type/scalar/string_scalar_test.rb +17 -0
  250. data/test/graphql/type/scalar/time_scalar_test.rb +36 -0
  251. data/test/graphql/type/scalar_test.rb +45 -0
  252. data/test/graphql/type/union_test.rb +82 -0
  253. data/test/graphql/type_map_test.rb +362 -0
  254. data/test/graphql/type_test.rb +68 -0
  255. data/test/graphql_test.rb +55 -0
  256. data/test/integration/config.rb +56 -0
  257. data/test/integration/memory/star_wars_introspection_test.rb +144 -0
  258. data/test/integration/memory/star_wars_query_test.rb +184 -0
  259. data/test/integration/memory/star_wars_validation_test.rb +99 -0
  260. data/test/integration/schemas/memory.rb +232 -0
  261. data/test/integration/schemas/sqlite.rb +82 -0
  262. data/test/integration/sqlite/star_wars_introspection_test.rb +15 -0
  263. data/test/integration/sqlite/star_wars_mutation_test.rb +82 -0
  264. data/test/integration/sqlite/star_wars_query_test.rb +71 -0
  265. data/test/test_ext.rb +48 -0
  266. metadata +509 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Copyright 2019-present GraphQL Foundation
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
+ /** @generated */
7
+
8
+ #pragma once
9
+
10
+ #ifdef __cplusplus
11
+ extern "C" {
12
+ #endif
13
+
14
+
15
+ struct GraphQLAstDefinition;
16
+
17
+ struct GraphQLAstDocument;
18
+ int GraphQLAstDocument_get_definitions_size(const struct GraphQLAstDocument *node);
19
+
20
+ struct GraphQLAstOperationDefinition;
21
+ const char * GraphQLAstOperationDefinition_get_operation(const struct GraphQLAstOperationDefinition *node);
22
+ const struct GraphQLAstName * GraphQLAstOperationDefinition_get_name(const struct GraphQLAstOperationDefinition *node);
23
+ int GraphQLAstOperationDefinition_get_variable_definitions_size(const struct GraphQLAstOperationDefinition *node);
24
+ int GraphQLAstOperationDefinition_get_directives_size(const struct GraphQLAstOperationDefinition *node);
25
+ const struct GraphQLAstSelectionSet * GraphQLAstOperationDefinition_get_selection_set(const struct GraphQLAstOperationDefinition *node);
26
+
27
+ struct GraphQLAstVariableDefinition;
28
+ const struct GraphQLAstVariable * GraphQLAstVariableDefinition_get_variable(const struct GraphQLAstVariableDefinition *node);
29
+ const struct GraphQLAstType * GraphQLAstVariableDefinition_get_type(const struct GraphQLAstVariableDefinition *node);
30
+ const struct GraphQLAstValue * GraphQLAstVariableDefinition_get_default_value(const struct GraphQLAstVariableDefinition *node);
31
+
32
+ struct GraphQLAstSelectionSet;
33
+ int GraphQLAstSelectionSet_get_selections_size(const struct GraphQLAstSelectionSet *node);
34
+
35
+ struct GraphQLAstSelection;
36
+
37
+ struct GraphQLAstField;
38
+ const struct GraphQLAstName * GraphQLAstField_get_alias(const struct GraphQLAstField *node);
39
+ const struct GraphQLAstName * GraphQLAstField_get_name(const struct GraphQLAstField *node);
40
+ int GraphQLAstField_get_arguments_size(const struct GraphQLAstField *node);
41
+ int GraphQLAstField_get_directives_size(const struct GraphQLAstField *node);
42
+ const struct GraphQLAstSelectionSet * GraphQLAstField_get_selection_set(const struct GraphQLAstField *node);
43
+
44
+ struct GraphQLAstArgument;
45
+ const struct GraphQLAstName * GraphQLAstArgument_get_name(const struct GraphQLAstArgument *node);
46
+ const struct GraphQLAstValue * GraphQLAstArgument_get_value(const struct GraphQLAstArgument *node);
47
+
48
+ struct GraphQLAstFragmentSpread;
49
+ const struct GraphQLAstName * GraphQLAstFragmentSpread_get_name(const struct GraphQLAstFragmentSpread *node);
50
+ int GraphQLAstFragmentSpread_get_directives_size(const struct GraphQLAstFragmentSpread *node);
51
+
52
+ struct GraphQLAstInlineFragment;
53
+ const struct GraphQLAstNamedType * GraphQLAstInlineFragment_get_type_condition(const struct GraphQLAstInlineFragment *node);
54
+ int GraphQLAstInlineFragment_get_directives_size(const struct GraphQLAstInlineFragment *node);
55
+ const struct GraphQLAstSelectionSet * GraphQLAstInlineFragment_get_selection_set(const struct GraphQLAstInlineFragment *node);
56
+
57
+ struct GraphQLAstFragmentDefinition;
58
+ const struct GraphQLAstName * GraphQLAstFragmentDefinition_get_name(const struct GraphQLAstFragmentDefinition *node);
59
+ const struct GraphQLAstNamedType * GraphQLAstFragmentDefinition_get_type_condition(const struct GraphQLAstFragmentDefinition *node);
60
+ int GraphQLAstFragmentDefinition_get_directives_size(const struct GraphQLAstFragmentDefinition *node);
61
+ const struct GraphQLAstSelectionSet * GraphQLAstFragmentDefinition_get_selection_set(const struct GraphQLAstFragmentDefinition *node);
62
+
63
+ struct GraphQLAstValue;
64
+
65
+ struct GraphQLAstVariable;
66
+ const struct GraphQLAstName * GraphQLAstVariable_get_name(const struct GraphQLAstVariable *node);
67
+
68
+ struct GraphQLAstIntValue;
69
+ const char * GraphQLAstIntValue_get_value(const struct GraphQLAstIntValue *node);
70
+
71
+ struct GraphQLAstFloatValue;
72
+ const char * GraphQLAstFloatValue_get_value(const struct GraphQLAstFloatValue *node);
73
+
74
+ struct GraphQLAstStringValue;
75
+ const char * GraphQLAstStringValue_get_value(const struct GraphQLAstStringValue *node);
76
+
77
+ struct GraphQLAstBooleanValue;
78
+ int GraphQLAstBooleanValue_get_value(const struct GraphQLAstBooleanValue *node);
79
+
80
+ struct GraphQLAstNullValue;
81
+
82
+ struct GraphQLAstEnumValue;
83
+ const char * GraphQLAstEnumValue_get_value(const struct GraphQLAstEnumValue *node);
84
+
85
+ struct GraphQLAstListValue;
86
+ int GraphQLAstListValue_get_values_size(const struct GraphQLAstListValue *node);
87
+
88
+ struct GraphQLAstObjectValue;
89
+ int GraphQLAstObjectValue_get_fields_size(const struct GraphQLAstObjectValue *node);
90
+
91
+ struct GraphQLAstObjectField;
92
+ const struct GraphQLAstName * GraphQLAstObjectField_get_name(const struct GraphQLAstObjectField *node);
93
+ const struct GraphQLAstValue * GraphQLAstObjectField_get_value(const struct GraphQLAstObjectField *node);
94
+
95
+ struct GraphQLAstDirective;
96
+ const struct GraphQLAstName * GraphQLAstDirective_get_name(const struct GraphQLAstDirective *node);
97
+ int GraphQLAstDirective_get_arguments_size(const struct GraphQLAstDirective *node);
98
+
99
+ struct GraphQLAstType;
100
+
101
+ struct GraphQLAstNamedType;
102
+ const struct GraphQLAstName * GraphQLAstNamedType_get_name(const struct GraphQLAstNamedType *node);
103
+
104
+ struct GraphQLAstListType;
105
+ const struct GraphQLAstType * GraphQLAstListType_get_type(const struct GraphQLAstListType *node);
106
+
107
+ struct GraphQLAstNonNullType;
108
+ const struct GraphQLAstType * GraphQLAstNonNullType_get_type(const struct GraphQLAstNonNullType *node);
109
+
110
+ struct GraphQLAstName;
111
+ const char * GraphQLAstName_get_value(const struct GraphQLAstName *node);
112
+
113
+ struct GraphQLAstSchemaDefinition;
114
+ int GraphQLAstSchemaDefinition_get_directives_size(const struct GraphQLAstSchemaDefinition *node);
115
+ int GraphQLAstSchemaDefinition_get_operation_types_size(const struct GraphQLAstSchemaDefinition *node);
116
+
117
+ struct GraphQLAstOperationTypeDefinition;
118
+ const char * GraphQLAstOperationTypeDefinition_get_operation(const struct GraphQLAstOperationTypeDefinition *node);
119
+ const struct GraphQLAstNamedType * GraphQLAstOperationTypeDefinition_get_type(const struct GraphQLAstOperationTypeDefinition *node);
120
+
121
+ struct GraphQLAstScalarTypeDefinition;
122
+ const struct GraphQLAstName * GraphQLAstScalarTypeDefinition_get_name(const struct GraphQLAstScalarTypeDefinition *node);
123
+ int GraphQLAstScalarTypeDefinition_get_directives_size(const struct GraphQLAstScalarTypeDefinition *node);
124
+
125
+ struct GraphQLAstObjectTypeDefinition;
126
+ const struct GraphQLAstName * GraphQLAstObjectTypeDefinition_get_name(const struct GraphQLAstObjectTypeDefinition *node);
127
+ int GraphQLAstObjectTypeDefinition_get_interfaces_size(const struct GraphQLAstObjectTypeDefinition *node);
128
+ int GraphQLAstObjectTypeDefinition_get_directives_size(const struct GraphQLAstObjectTypeDefinition *node);
129
+ int GraphQLAstObjectTypeDefinition_get_fields_size(const struct GraphQLAstObjectTypeDefinition *node);
130
+
131
+ struct GraphQLAstFieldDefinition;
132
+ const struct GraphQLAstName * GraphQLAstFieldDefinition_get_name(const struct GraphQLAstFieldDefinition *node);
133
+ int GraphQLAstFieldDefinition_get_arguments_size(const struct GraphQLAstFieldDefinition *node);
134
+ const struct GraphQLAstType * GraphQLAstFieldDefinition_get_type(const struct GraphQLAstFieldDefinition *node);
135
+ int GraphQLAstFieldDefinition_get_directives_size(const struct GraphQLAstFieldDefinition *node);
136
+
137
+ struct GraphQLAstInputValueDefinition;
138
+ const struct GraphQLAstName * GraphQLAstInputValueDefinition_get_name(const struct GraphQLAstInputValueDefinition *node);
139
+ const struct GraphQLAstType * GraphQLAstInputValueDefinition_get_type(const struct GraphQLAstInputValueDefinition *node);
140
+ const struct GraphQLAstValue * GraphQLAstInputValueDefinition_get_default_value(const struct GraphQLAstInputValueDefinition *node);
141
+ int GraphQLAstInputValueDefinition_get_directives_size(const struct GraphQLAstInputValueDefinition *node);
142
+
143
+ struct GraphQLAstInterfaceTypeDefinition;
144
+ const struct GraphQLAstName * GraphQLAstInterfaceTypeDefinition_get_name(const struct GraphQLAstInterfaceTypeDefinition *node);
145
+ int GraphQLAstInterfaceTypeDefinition_get_directives_size(const struct GraphQLAstInterfaceTypeDefinition *node);
146
+ int GraphQLAstInterfaceTypeDefinition_get_fields_size(const struct GraphQLAstInterfaceTypeDefinition *node);
147
+
148
+ struct GraphQLAstUnionTypeDefinition;
149
+ const struct GraphQLAstName * GraphQLAstUnionTypeDefinition_get_name(const struct GraphQLAstUnionTypeDefinition *node);
150
+ int GraphQLAstUnionTypeDefinition_get_directives_size(const struct GraphQLAstUnionTypeDefinition *node);
151
+ int GraphQLAstUnionTypeDefinition_get_types_size(const struct GraphQLAstUnionTypeDefinition *node);
152
+
153
+ struct GraphQLAstEnumTypeDefinition;
154
+ const struct GraphQLAstName * GraphQLAstEnumTypeDefinition_get_name(const struct GraphQLAstEnumTypeDefinition *node);
155
+ int GraphQLAstEnumTypeDefinition_get_directives_size(const struct GraphQLAstEnumTypeDefinition *node);
156
+ int GraphQLAstEnumTypeDefinition_get_values_size(const struct GraphQLAstEnumTypeDefinition *node);
157
+
158
+ struct GraphQLAstEnumValueDefinition;
159
+ const struct GraphQLAstName * GraphQLAstEnumValueDefinition_get_name(const struct GraphQLAstEnumValueDefinition *node);
160
+ int GraphQLAstEnumValueDefinition_get_directives_size(const struct GraphQLAstEnumValueDefinition *node);
161
+
162
+ struct GraphQLAstInputObjectTypeDefinition;
163
+ const struct GraphQLAstName * GraphQLAstInputObjectTypeDefinition_get_name(const struct GraphQLAstInputObjectTypeDefinition *node);
164
+ int GraphQLAstInputObjectTypeDefinition_get_directives_size(const struct GraphQLAstInputObjectTypeDefinition *node);
165
+ int GraphQLAstInputObjectTypeDefinition_get_fields_size(const struct GraphQLAstInputObjectTypeDefinition *node);
166
+
167
+ struct GraphQLAstTypeExtensionDefinition;
168
+ const struct GraphQLAstObjectTypeDefinition * GraphQLAstTypeExtensionDefinition_get_definition(const struct GraphQLAstTypeExtensionDefinition *node);
169
+
170
+ struct GraphQLAstDirectiveDefinition;
171
+ const struct GraphQLAstName * GraphQLAstDirectiveDefinition_get_name(const struct GraphQLAstDirectiveDefinition *node);
172
+ int GraphQLAstDirectiveDefinition_get_arguments_size(const struct GraphQLAstDirectiveDefinition *node);
173
+ int GraphQLAstDirectiveDefinition_get_locations_size(const struct GraphQLAstDirectiveDefinition *node);
174
+
175
+
176
+
177
+ #ifdef __cplusplus
178
+ }
179
+ #endif
180
+
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Copyright 2019-present GraphQL Foundation
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
+ /** @generated */
7
+ #define FOR_EACH_CONCRETE_TYPE(MACRO) \
8
+ MACRO(Document, document) \
9
+ MACRO(OperationDefinition, operation_definition) \
10
+ MACRO(VariableDefinition, variable_definition) \
11
+ MACRO(SelectionSet, selection_set) \
12
+ MACRO(Field, field) \
13
+ MACRO(Argument, argument) \
14
+ MACRO(FragmentSpread, fragment_spread) \
15
+ MACRO(InlineFragment, inline_fragment) \
16
+ MACRO(FragmentDefinition, fragment_definition) \
17
+ MACRO(Variable, variable) \
18
+ MACRO(IntValue, int_value) \
19
+ MACRO(FloatValue, float_value) \
20
+ MACRO(StringValue, string_value) \
21
+ MACRO(BooleanValue, boolean_value) \
22
+ MACRO(NullValue, null_value) \
23
+ MACRO(EnumValue, enum_value) \
24
+ MACRO(ListValue, list_value) \
25
+ MACRO(ObjectValue, object_value) \
26
+ MACRO(ObjectField, object_field) \
27
+ MACRO(Directive, directive) \
28
+ MACRO(NamedType, named_type) \
29
+ MACRO(ListType, list_type) \
30
+ MACRO(NonNullType, non_null_type) \
31
+ MACRO(Name, name) \
32
+ MACRO(SchemaDefinition, schema_definition) \
33
+ MACRO(OperationTypeDefinition, operation_type_definition) \
34
+ MACRO(ScalarTypeDefinition, scalar_type_definition) \
35
+ MACRO(ObjectTypeDefinition, object_type_definition) \
36
+ MACRO(FieldDefinition, field_definition) \
37
+ MACRO(InputValueDefinition, input_value_definition) \
38
+ MACRO(InterfaceTypeDefinition, interface_type_definition) \
39
+ MACRO(UnionTypeDefinition, union_type_definition) \
40
+ MACRO(EnumTypeDefinition, enum_type_definition) \
41
+ MACRO(EnumValueDefinition, enum_value_definition) \
42
+ MACRO(InputObjectTypeDefinition, input_object_type_definition) \
43
+ MACRO(TypeExtensionDefinition, type_extension_definition) \
44
+ MACRO(DirectiveDefinition, directive_definition)
@@ -0,0 +1,25 @@
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
+ }
@@ -0,0 +1,33 @@
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
@@ -0,0 +1,21 @@
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
+ }
@@ -0,0 +1,24 @@
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
@@ -0,0 +1,55 @@
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
+ }
@@ -0,0 +1,53 @@
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
+
@@ -0,0 +1,35 @@
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
+ }