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.
- checksums.yaml +4 -4
- data/ext/console.rb +18 -0
- data/ext/extconf.h +3 -0
- data/ext/extconf.rb +1 -54
- data/ext/gql_parser.c +646 -0
- data/ext/shared.c +482 -0
- data/ext/shared.h +177 -0
- data/lib/gql_parser.so +0 -0
- data/lib/rails/graphql/adapters/mysql_adapter.rb +59 -0
- data/lib/rails/graphql/adapters/pg_adapter.rb +25 -22
- data/lib/rails/graphql/adapters/sqlite_adapter.rb +17 -14
- data/lib/rails/graphql/alternative/field_set.rb +36 -0
- data/lib/rails/graphql/alternative/mutation.rb +17 -0
- data/lib/rails/graphql/alternative/query.rb +93 -0
- data/lib/rails/graphql/alternative/subscription.rb +17 -0
- data/lib/rails/graphql/alternative.rb +20 -0
- data/lib/rails/graphql/argument.rb +21 -24
- data/lib/rails/graphql/callback.rb +24 -9
- data/lib/rails/graphql/collectors/hash_collector.rb +14 -6
- data/lib/rails/graphql/collectors/idented_collector.rb +10 -7
- data/lib/rails/graphql/collectors/json_collector.rb +22 -17
- data/lib/rails/graphql/collectors.rb +4 -4
- data/lib/rails/graphql/config.rb +130 -15
- data/lib/rails/graphql/directive/cached_directive.rb +33 -0
- data/lib/rails/graphql/directive/deprecated_directive.rb +10 -10
- data/lib/rails/graphql/directive/include_directive.rb +5 -4
- data/lib/rails/graphql/directive/skip_directive.rb +5 -4
- data/lib/rails/graphql/directive.rb +118 -63
- data/lib/rails/graphql/errors.rb +33 -4
- data/lib/rails/graphql/event.rb +16 -5
- data/lib/rails/graphql/field/authorized_field.rb +19 -3
- data/lib/rails/graphql/field/input_field.rb +11 -10
- data/lib/rails/graphql/field/mutation_field.rb +42 -7
- data/lib/rails/graphql/field/output_field.rb +102 -13
- data/lib/rails/graphql/field/proxied_field.rb +31 -22
- data/lib/rails/graphql/field/resolved_field.rb +26 -24
- data/lib/rails/graphql/field/scoped_config.rb +10 -4
- data/lib/rails/graphql/field/subscription_field.rb +140 -0
- data/lib/rails/graphql/field/typed_field.rb +43 -22
- data/lib/rails/graphql/field.rb +70 -56
- data/lib/rails/graphql/global_id.rb +85 -0
- data/lib/rails/graphql/helpers/attribute_delegator.rb +5 -5
- data/lib/rails/graphql/helpers/inherited_collection/array.rb +50 -0
- data/lib/rails/graphql/helpers/inherited_collection/base.rb +43 -0
- data/lib/rails/graphql/helpers/inherited_collection/hash.rb +87 -0
- data/lib/rails/graphql/helpers/inherited_collection.rb +25 -76
- data/lib/rails/graphql/helpers/instantiable.rb +15 -0
- data/lib/rails/graphql/helpers/leaf_from_ar.rb +7 -7
- data/lib/rails/graphql/helpers/registerable.rb +44 -62
- data/lib/rails/graphql/helpers/unregisterable.rb +16 -0
- data/lib/rails/graphql/helpers/with_arguments.rb +31 -27
- data/lib/rails/graphql/helpers/with_assignment.rb +6 -6
- data/lib/rails/graphql/helpers/with_callbacks.rb +25 -8
- data/lib/rails/graphql/helpers/with_description.rb +71 -0
- data/lib/rails/graphql/helpers/with_directives.rb +54 -30
- data/lib/rails/graphql/helpers/with_events.rb +21 -23
- data/lib/rails/graphql/helpers/with_fields.rb +76 -22
- data/lib/rails/graphql/helpers/with_global_id.rb +22 -0
- data/lib/rails/graphql/helpers/with_name.rb +43 -0
- data/lib/rails/graphql/helpers/with_namespace.rb +7 -4
- data/lib/rails/graphql/helpers/with_owner.rb +8 -7
- data/lib/rails/graphql/helpers/with_schema_fields.rb +137 -55
- data/lib/rails/graphql/helpers/with_validator.rb +9 -9
- data/lib/rails/graphql/helpers.rb +10 -3
- data/lib/rails/graphql/introspection.rb +43 -36
- data/lib/rails/graphql/railtie.rb +88 -33
- data/lib/rails/graphql/railties/base_generator.rb +3 -9
- data/lib/rails/graphql/railties/channel.rb +157 -0
- data/lib/rails/graphql/railties/controller.rb +62 -17
- data/lib/rails/graphql/railties/controller_runtime.rb +5 -5
- data/lib/rails/graphql/railties/log_subscriber.rb +81 -14
- data/lib/rails/graphql/request/arguments.rb +24 -49
- data/lib/rails/graphql/request/backtrace.rb +191 -0
- data/lib/rails/graphql/request/component/field.rb +86 -65
- data/lib/rails/graphql/request/component/fragment.rb +72 -24
- data/lib/rails/graphql/request/component/operation/subscription.rb +164 -4
- data/lib/rails/graphql/request/component/operation.rb +63 -31
- data/lib/rails/graphql/request/component/spread.rb +68 -25
- data/lib/rails/graphql/request/component/typename.rb +27 -12
- data/lib/rails/graphql/request/component.rb +75 -36
- data/lib/rails/graphql/request/context.rb +18 -8
- data/lib/rails/graphql/request/errors.rb +16 -6
- data/lib/rails/graphql/request/event.rb +19 -8
- data/lib/rails/graphql/request/helpers/directives.rb +68 -27
- data/lib/rails/graphql/request/helpers/selection_set.rb +51 -25
- data/lib/rails/graphql/request/helpers/value_writers.rb +18 -16
- data/lib/rails/graphql/request/prepared_data.rb +98 -0
- data/lib/rails/graphql/request/steps/authorizable.rb +24 -14
- data/lib/rails/graphql/request/steps/organizable.rb +110 -48
- data/lib/rails/graphql/request/steps/{prepareable.rb → preparable.rb} +20 -7
- data/lib/rails/graphql/request/steps/{resolveable.rb → resolvable.rb} +15 -6
- data/lib/rails/graphql/request/strategy/cached_strategy.rb +64 -0
- data/lib/rails/graphql/request/strategy/dynamic_instance.rb +6 -6
- data/lib/rails/graphql/request/strategy/multi_query_strategy.rb +6 -13
- data/lib/rails/graphql/request/strategy/sequenced_strategy.rb +9 -9
- data/lib/rails/graphql/request/strategy.rb +131 -75
- data/lib/rails/graphql/request/subscription.rb +80 -0
- data/lib/rails/graphql/request.rb +305 -86
- data/lib/rails/graphql/schema.rb +240 -48
- data/lib/rails/graphql/shortcuts.rb +22 -3
- data/lib/rails/graphql/source/active_record/builders.rb +49 -35
- data/lib/rails/graphql/source/active_record_source.rb +70 -54
- data/lib/rails/graphql/source/base.rb +111 -0
- data/lib/rails/graphql/source/builder.rb +128 -0
- data/lib/rails/graphql/source/scoped_arguments.rb +31 -19
- data/lib/rails/graphql/source.rb +89 -213
- data/lib/rails/graphql/subscription/provider/action_cable.rb +112 -0
- data/lib/rails/graphql/subscription/provider/base.rb +191 -0
- data/lib/rails/graphql/subscription/provider.rb +18 -0
- data/lib/rails/graphql/subscription/store/base.rb +145 -0
- data/lib/rails/graphql/subscription/store/memory.rb +127 -0
- data/lib/rails/graphql/subscription/store.rb +19 -0
- data/lib/rails/graphql/subscription.rb +17 -0
- data/lib/rails/graphql/to_gql.rb +29 -32
- data/lib/rails/graphql/type/enum/directive_location_enum.rb +11 -11
- data/lib/rails/graphql/type/enum/type_kind_enum.rb +3 -3
- data/lib/rails/graphql/type/enum.rb +34 -48
- data/lib/rails/graphql/type/input.rb +74 -23
- data/lib/rails/graphql/type/interface.rb +16 -26
- data/lib/rails/graphql/type/object/directive_object.rb +4 -4
- data/lib/rails/graphql/type/object/enum_value_object.rb +3 -3
- data/lib/rails/graphql/type/object/field_object.rb +24 -6
- data/lib/rails/graphql/type/object/input_value_object.rb +3 -3
- data/lib/rails/graphql/type/object/schema_object.rb +5 -8
- data/lib/rails/graphql/type/object/type_object.rb +29 -19
- data/lib/rails/graphql/type/object.rb +26 -23
- data/lib/rails/graphql/type/scalar/any_scalar.rb +30 -0
- data/lib/rails/graphql/type/scalar/bigint_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/binary_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/boolean_scalar.rb +8 -8
- data/lib/rails/graphql/type/scalar/date_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/date_time_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/decimal_scalar.rb +3 -3
- data/lib/rails/graphql/type/scalar/float_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar/id_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/int_scalar.rb +6 -5
- data/lib/rails/graphql/type/scalar/json_scalar.rb +39 -0
- data/lib/rails/graphql/type/scalar/string_scalar.rb +18 -4
- data/lib/rails/graphql/type/scalar/time_scalar.rb +5 -5
- data/lib/rails/graphql/type/scalar.rb +25 -22
- data/lib/rails/graphql/type/union.rb +14 -16
- data/lib/rails/graphql/type.rb +34 -25
- data/lib/rails/graphql/type_map.rb +256 -164
- data/lib/rails/graphql/uri.rb +166 -0
- data/lib/rails/graphql/version.rb +15 -3
- data/lib/rails/graphql.rake +3 -0
- data/lib/rails/graphql.rb +85 -52
- data/lib/rails-graphql.rb +1 -1
- data/test/assets/en.yml +29 -0
- data/test/assets/introspection-mem.txt +1 -1
- data/test/assets/mem.gql +18 -45
- data/test/assets/mysql.gql +392 -0
- data/test/assets/sqlite.gql +21 -12
- data/test/assets/translate.gql +335 -0
- data/test/config.rb +18 -8
- data/test/graphql/schema_test.rb +12 -19
- data/test/graphql/source_test.rb +8 -75
- data/test/graphql/type/enum_test.rb +207 -203
- data/test/graphql/type/input_test.rb +14 -9
- data/test/graphql/type/interface_test.rb +4 -4
- data/test/graphql/type/scalar/any_scalar_test.rb +38 -0
- data/test/graphql/type/scalar/boolean_scalar_test.rb +6 -3
- data/test/graphql/type/scalar/json_scalar_test.rb +23 -0
- data/test/graphql/type_map_test.rb +51 -66
- data/test/graphql/type_test.rb +0 -19
- data/test/graphql_test.rb +1 -1
- data/test/integration/{authorization/authorization_test.rb → authorization_test.rb} +40 -14
- data/test/integration/config.rb +36 -3
- data/test/integration/customization_test.rb +39 -0
- data/test/integration/global_id_test.rb +99 -0
- data/test/integration/memory/star_wars_introspection_test.rb +24 -16
- data/test/integration/memory/star_wars_query_test.rb +54 -3
- data/test/integration/memory/star_wars_validation_test.rb +1 -1
- data/test/integration/mysql/star_wars_introspection_test.rb +25 -0
- data/test/integration/persisted_query_test.rb +87 -0
- data/test/integration/resolver_precedence_test.rb +154 -0
- data/test/integration/schemas/memory.rb +22 -7
- data/test/integration/schemas/mysql.rb +62 -0
- data/test/integration/schemas/sqlite.rb +21 -12
- data/test/integration/sqlite/star_wars_global_id_test.rb +83 -0
- data/test/integration/sqlite/star_wars_introspection_test.rb +10 -0
- data/test/integration/sqlite/star_wars_query_test.rb +14 -1
- data/test/integration/translate_test.rb +61 -0
- data/test/test_ext.rb +16 -13
- metadata +108 -157
- data/ext/depend +0 -3
- data/ext/graphqlparser/Ast.cpp +0 -346
- data/ext/graphqlparser/Ast.h +0 -1214
- data/ext/graphqlparser/AstNode.h +0 -36
- data/ext/graphqlparser/AstVisitor.h +0 -137
- data/ext/graphqlparser/GraphQLParser.cpp +0 -76
- data/ext/graphqlparser/GraphQLParser.h +0 -55
- data/ext/graphqlparser/JsonVisitor.cpp +0 -161
- data/ext/graphqlparser/JsonVisitor.cpp.inc +0 -456
- data/ext/graphqlparser/JsonVisitor.h +0 -121
- data/ext/graphqlparser/JsonVisitor.h.inc +0 -110
- data/ext/graphqlparser/VERSION +0 -1
- data/ext/graphqlparser/c/GraphQLAst.cpp +0 -324
- data/ext/graphqlparser/c/GraphQLAst.h +0 -180
- data/ext/graphqlparser/c/GraphQLAstForEachConcreteType.h +0 -44
- data/ext/graphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/graphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/graphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/graphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/graphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/graphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/graphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/graphqlparser/c/GraphQLParser.h +0 -54
- data/ext/graphqlparser/dump_json_ast.cpp +0 -48
- data/ext/graphqlparser/lexer.lpp +0 -324
- data/ext/graphqlparser/parser.ypp +0 -693
- data/ext/graphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/graphqlparser/parsergen/lexer.h +0 -528
- data/ext/graphqlparser/parsergen/location.hh +0 -189
- data/ext/graphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/graphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/graphqlparser/parsergen/position.hh +0 -179
- data/ext/graphqlparser/parsergen/stack.hh +0 -156
- data/ext/graphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/AstNode.h +0 -36
- data/ext/libgraphqlparser/CMakeLists.txt +0 -148
- data/ext/libgraphqlparser/CONTRIBUTING.md +0 -23
- data/ext/libgraphqlparser/GraphQLParser.cpp +0 -76
- data/ext/libgraphqlparser/GraphQLParser.h +0 -55
- data/ext/libgraphqlparser/JsonVisitor.cpp +0 -161
- data/ext/libgraphqlparser/JsonVisitor.h +0 -121
- data/ext/libgraphqlparser/LICENSE +0 -22
- data/ext/libgraphqlparser/README.clang-tidy +0 -7
- data/ext/libgraphqlparser/README.md +0 -84
- data/ext/libgraphqlparser/ast/ast.ast +0 -203
- data/ext/libgraphqlparser/ast/ast.py +0 -61
- data/ext/libgraphqlparser/ast/c.py +0 -100
- data/ext/libgraphqlparser/ast/c.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_impl.py +0 -61
- data/ext/libgraphqlparser/ast/c_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/c_visitor_impl.py +0 -39
- data/ext/libgraphqlparser/ast/c_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/casing.py +0 -26
- data/ext/libgraphqlparser/ast/casing.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx.py +0 -197
- data/ext/libgraphqlparser/ast/cxx.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_impl.py +0 -61
- data/ext/libgraphqlparser/ast/cxx_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.py +0 -42
- data/ext/libgraphqlparser/ast/cxx_json_visitor_header.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.py +0 -80
- data/ext/libgraphqlparser/ast/cxx_json_visitor_impl.pyc +0 -0
- data/ext/libgraphqlparser/ast/cxx_visitor.py +0 -64
- data/ext/libgraphqlparser/ast/cxx_visitor.pyc +0 -0
- data/ext/libgraphqlparser/ast/js.py +0 -65
- data/ext/libgraphqlparser/ast/license.py +0 -10
- data/ext/libgraphqlparser/ast/license.pyc +0 -0
- data/ext/libgraphqlparser/c/GraphQLAstNode.cpp +0 -25
- data/ext/libgraphqlparser/c/GraphQLAstNode.h +0 -33
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.cpp +0 -21
- data/ext/libgraphqlparser/c/GraphQLAstToJSON.h +0 -24
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.cpp +0 -55
- data/ext/libgraphqlparser/c/GraphQLAstVisitor.h +0 -53
- data/ext/libgraphqlparser/c/GraphQLParser.cpp +0 -35
- data/ext/libgraphqlparser/c/GraphQLParser.h +0 -54
- data/ext/libgraphqlparser/clang-tidy-all.sh +0 -3
- data/ext/libgraphqlparser/cmake/version.cmake +0 -16
- data/ext/libgraphqlparser/dump_json_ast.cpp +0 -48
- data/ext/libgraphqlparser/go/README.md +0 -20
- data/ext/libgraphqlparser/go/callbacks.go +0 -18
- data/ext/libgraphqlparser/go/gotest.go +0 -64
- data/ext/libgraphqlparser/lexer.lpp +0 -324
- data/ext/libgraphqlparser/libgraphqlparser.pc.in +0 -11
- data/ext/libgraphqlparser/parser.ypp +0 -693
- data/ext/libgraphqlparser/parsergen/lexer.cpp +0 -2633
- data/ext/libgraphqlparser/parsergen/lexer.h +0 -528
- data/ext/libgraphqlparser/parsergen/location.hh +0 -189
- data/ext/libgraphqlparser/parsergen/parser.tab.cpp +0 -3300
- data/ext/libgraphqlparser/parsergen/parser.tab.hpp +0 -646
- data/ext/libgraphqlparser/parsergen/position.hh +0 -179
- data/ext/libgraphqlparser/parsergen/stack.hh +0 -156
- data/ext/libgraphqlparser/python/CMakeLists.txt +0 -14
- data/ext/libgraphqlparser/python/README.md +0 -5
- data/ext/libgraphqlparser/python/example.py +0 -31
- data/ext/libgraphqlparser/syntaxdefs.h +0 -19
- data/ext/libgraphqlparser/test/BuildCAPI.c +0 -5
- data/ext/libgraphqlparser/test/CMakeLists.txt +0 -25
- data/ext/libgraphqlparser/test/JsonVisitorTests.cpp +0 -28
- data/ext/libgraphqlparser/test/ParserTests.cpp +0 -352
- data/ext/libgraphqlparser/test/kitchen-sink.graphql +0 -59
- data/ext/libgraphqlparser/test/kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/schema-kitchen-sink.graphql +0 -78
- data/ext/libgraphqlparser/test/schema-kitchen-sink.json +0 -1
- data/ext/libgraphqlparser/test/valgrind.supp +0 -33
- data/ext/version.cpp +0 -21
- data/lib/graphqlparser.so +0 -0
- data/lib/rails/graphql/native/functions.rb +0 -38
- data/lib/rails/graphql/native/location.rb +0 -41
- data/lib/rails/graphql/native/pointers.rb +0 -23
- data/lib/rails/graphql/native/visitor.rb +0 -349
- data/lib/rails/graphql/native.rb +0 -56
- 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,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
|
-
}
|