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,179 +0,0 @@
|
|
1
|
-
// A Bison parser, made by GNU Bison 3.0.5.
|
2
|
-
|
3
|
-
// Positions for Bison parsers in C++
|
4
|
-
|
5
|
-
// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
|
6
|
-
|
7
|
-
// This program is free software: you can redistribute it and/or modify
|
8
|
-
// it under the terms of the GNU General Public License as published by
|
9
|
-
// the Free Software Foundation, either version 3 of the License, or
|
10
|
-
// (at your option) any later version.
|
11
|
-
|
12
|
-
// This program is distributed in the hope that it will be useful,
|
13
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
// GNU General Public License for more details.
|
16
|
-
|
17
|
-
// You should have received a copy of the GNU General Public License
|
18
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
// As a special exception, you may create a larger work that contains
|
21
|
-
// part or all of the Bison parser skeleton and distribute that work
|
22
|
-
// under terms of your choice, so long as that work isn't itself a
|
23
|
-
// parser generator using the skeleton or a modified version thereof
|
24
|
-
// as a parser skeleton. Alternatively, if you modify or redistribute
|
25
|
-
// the parser skeleton itself, you may (at your option) remove this
|
26
|
-
// special exception, which will cause the skeleton and the resulting
|
27
|
-
// Bison output files to be licensed under the GNU General Public
|
28
|
-
// License without this special exception.
|
29
|
-
|
30
|
-
// This special exception was added by the Free Software Foundation in
|
31
|
-
// version 2.2 of Bison.
|
32
|
-
|
33
|
-
/**
|
34
|
-
** \file position.hh
|
35
|
-
** Define the yy::position class.
|
36
|
-
*/
|
37
|
-
|
38
|
-
#ifndef YY_YY_POSITION_HH_INCLUDED
|
39
|
-
# define YY_YY_POSITION_HH_INCLUDED
|
40
|
-
|
41
|
-
# include <algorithm> // std::max
|
42
|
-
# include <iostream>
|
43
|
-
# include <string>
|
44
|
-
|
45
|
-
# ifndef YY_NULLPTR
|
46
|
-
# if defined __cplusplus && 201103L <= __cplusplus
|
47
|
-
# define YY_NULLPTR nullptr
|
48
|
-
# else
|
49
|
-
# define YY_NULLPTR 0
|
50
|
-
# endif
|
51
|
-
# endif
|
52
|
-
|
53
|
-
|
54
|
-
namespace yy {
|
55
|
-
#line 56 "position.hh" // location.cc:333
|
56
|
-
/// Abstract a position.
|
57
|
-
class position
|
58
|
-
{
|
59
|
-
public:
|
60
|
-
/// Construct a position.
|
61
|
-
explicit position (std::string* f = YY_NULLPTR,
|
62
|
-
unsigned l = 1u,
|
63
|
-
unsigned c = 1u)
|
64
|
-
: filename (f)
|
65
|
-
, line (l)
|
66
|
-
, column (c)
|
67
|
-
{}
|
68
|
-
|
69
|
-
|
70
|
-
/// Initialization.
|
71
|
-
void initialize (std::string* fn = YY_NULLPTR,
|
72
|
-
unsigned l = 1u,
|
73
|
-
unsigned c = 1u)
|
74
|
-
{
|
75
|
-
filename = fn;
|
76
|
-
line = l;
|
77
|
-
column = c;
|
78
|
-
}
|
79
|
-
|
80
|
-
/** \name Line and Column related manipulators
|
81
|
-
** \{ */
|
82
|
-
/// (line related) Advance to the COUNT next lines.
|
83
|
-
void lines (int count = 1)
|
84
|
-
{
|
85
|
-
if (count)
|
86
|
-
{
|
87
|
-
column = 1u;
|
88
|
-
line = add_ (line, count, 1);
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
/// (column related) Advance to the COUNT next columns.
|
93
|
-
void columns (int count = 1)
|
94
|
-
{
|
95
|
-
column = add_ (column, count, 1);
|
96
|
-
}
|
97
|
-
/** \} */
|
98
|
-
|
99
|
-
/// File name to which this position refers.
|
100
|
-
std::string* filename;
|
101
|
-
/// Current line number.
|
102
|
-
unsigned line;
|
103
|
-
/// Current column number.
|
104
|
-
unsigned column;
|
105
|
-
|
106
|
-
private:
|
107
|
-
/// Compute max(min, lhs+rhs) (provided min <= lhs).
|
108
|
-
static unsigned add_ (unsigned lhs, int rhs, unsigned min)
|
109
|
-
{
|
110
|
-
return (0 < rhs || -static_cast<unsigned>(rhs) < lhs
|
111
|
-
? rhs + lhs
|
112
|
-
: min);
|
113
|
-
}
|
114
|
-
};
|
115
|
-
|
116
|
-
/// Add \a width columns, in place.
|
117
|
-
inline position&
|
118
|
-
operator+= (position& res, int width)
|
119
|
-
{
|
120
|
-
res.columns (width);
|
121
|
-
return res;
|
122
|
-
}
|
123
|
-
|
124
|
-
/// Add \a width columns.
|
125
|
-
inline position
|
126
|
-
operator+ (position res, int width)
|
127
|
-
{
|
128
|
-
return res += width;
|
129
|
-
}
|
130
|
-
|
131
|
-
/// Subtract \a width columns, in place.
|
132
|
-
inline position&
|
133
|
-
operator-= (position& res, int width)
|
134
|
-
{
|
135
|
-
return res += -width;
|
136
|
-
}
|
137
|
-
|
138
|
-
/// Subtract \a width columns.
|
139
|
-
inline position
|
140
|
-
operator- (position res, int width)
|
141
|
-
{
|
142
|
-
return res -= width;
|
143
|
-
}
|
144
|
-
|
145
|
-
/// Compare two position objects.
|
146
|
-
inline bool
|
147
|
-
operator== (const position& pos1, const position& pos2)
|
148
|
-
{
|
149
|
-
return (pos1.line == pos2.line
|
150
|
-
&& pos1.column == pos2.column
|
151
|
-
&& (pos1.filename == pos2.filename
|
152
|
-
|| (pos1.filename && pos2.filename
|
153
|
-
&& *pos1.filename == *pos2.filename)));
|
154
|
-
}
|
155
|
-
|
156
|
-
/// Compare two position objects.
|
157
|
-
inline bool
|
158
|
-
operator!= (const position& pos1, const position& pos2)
|
159
|
-
{
|
160
|
-
return !(pos1 == pos2);
|
161
|
-
}
|
162
|
-
|
163
|
-
/** \brief Intercept output stream redirection.
|
164
|
-
** \param ostr the destination output stream
|
165
|
-
** \param pos a reference to the position to redirect
|
166
|
-
*/
|
167
|
-
template <typename YYChar>
|
168
|
-
inline std::basic_ostream<YYChar>&
|
169
|
-
operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
|
170
|
-
{
|
171
|
-
if (pos.filename)
|
172
|
-
ostr << *pos.filename << ':';
|
173
|
-
return ostr << pos.line << '.' << pos.column;
|
174
|
-
}
|
175
|
-
|
176
|
-
|
177
|
-
} // yy
|
178
|
-
#line 179 "position.hh" // location.cc:333
|
179
|
-
#endif // !YY_YY_POSITION_HH_INCLUDED
|
@@ -1,156 +0,0 @@
|
|
1
|
-
// A Bison parser, made by GNU Bison 3.0.5.
|
2
|
-
|
3
|
-
// Stack handling for Bison parsers in C++
|
4
|
-
|
5
|
-
// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc.
|
6
|
-
|
7
|
-
// This program is free software: you can redistribute it and/or modify
|
8
|
-
// it under the terms of the GNU General Public License as published by
|
9
|
-
// the Free Software Foundation, either version 3 of the License, or
|
10
|
-
// (at your option) any later version.
|
11
|
-
|
12
|
-
// This program is distributed in the hope that it will be useful,
|
13
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
-
// GNU General Public License for more details.
|
16
|
-
|
17
|
-
// You should have received a copy of the GNU General Public License
|
18
|
-
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
-
|
20
|
-
// As a special exception, you may create a larger work that contains
|
21
|
-
// part or all of the Bison parser skeleton and distribute that work
|
22
|
-
// under terms of your choice, so long as that work isn't itself a
|
23
|
-
// parser generator using the skeleton or a modified version thereof
|
24
|
-
// as a parser skeleton. Alternatively, if you modify or redistribute
|
25
|
-
// the parser skeleton itself, you may (at your option) remove this
|
26
|
-
// special exception, which will cause the skeleton and the resulting
|
27
|
-
// Bison output files to be licensed under the GNU General Public
|
28
|
-
// License without this special exception.
|
29
|
-
|
30
|
-
// This special exception was added by the Free Software Foundation in
|
31
|
-
// version 2.2 of Bison.
|
32
|
-
|
33
|
-
/**
|
34
|
-
** \file stack.hh
|
35
|
-
** Define the yy::stack class.
|
36
|
-
*/
|
37
|
-
|
38
|
-
#ifndef YY_YY_STACK_HH_INCLUDED
|
39
|
-
# define YY_YY_STACK_HH_INCLUDED
|
40
|
-
|
41
|
-
# include <vector>
|
42
|
-
|
43
|
-
|
44
|
-
namespace yy {
|
45
|
-
#line 46 "stack.hh" // stack.hh:150
|
46
|
-
/// A stack with random access from its top.
|
47
|
-
template <class T, class S = std::vector<T> >
|
48
|
-
class stack
|
49
|
-
{
|
50
|
-
public:
|
51
|
-
// Hide our reversed order.
|
52
|
-
typedef typename S::reverse_iterator iterator;
|
53
|
-
typedef typename S::const_reverse_iterator const_iterator;
|
54
|
-
|
55
|
-
stack ()
|
56
|
-
: seq_ ()
|
57
|
-
{
|
58
|
-
seq_.reserve (200);
|
59
|
-
}
|
60
|
-
|
61
|
-
stack (unsigned n)
|
62
|
-
: seq_ (n)
|
63
|
-
{}
|
64
|
-
|
65
|
-
/// Random access.
|
66
|
-
///
|
67
|
-
/// Index 0 returns the topmost element.
|
68
|
-
T&
|
69
|
-
operator[] (unsigned i)
|
70
|
-
{
|
71
|
-
return seq_[seq_.size () - 1 - i];
|
72
|
-
}
|
73
|
-
|
74
|
-
/// Random access.
|
75
|
-
///
|
76
|
-
/// Index 0 returns the topmost element.
|
77
|
-
const T&
|
78
|
-
operator[] (unsigned i) const
|
79
|
-
{
|
80
|
-
return seq_[seq_.size () - 1 - i];
|
81
|
-
}
|
82
|
-
|
83
|
-
/// Steal the contents of \a t.
|
84
|
-
///
|
85
|
-
/// Close to move-semantics.
|
86
|
-
void
|
87
|
-
push (T& t)
|
88
|
-
{
|
89
|
-
seq_.push_back (T());
|
90
|
-
operator[](0).move (t);
|
91
|
-
}
|
92
|
-
|
93
|
-
void
|
94
|
-
pop (unsigned n = 1)
|
95
|
-
{
|
96
|
-
for (; n; --n)
|
97
|
-
seq_.pop_back ();
|
98
|
-
}
|
99
|
-
|
100
|
-
void
|
101
|
-
clear ()
|
102
|
-
{
|
103
|
-
seq_.clear ();
|
104
|
-
}
|
105
|
-
|
106
|
-
typename S::size_type
|
107
|
-
size () const
|
108
|
-
{
|
109
|
-
return seq_.size ();
|
110
|
-
}
|
111
|
-
|
112
|
-
const_iterator
|
113
|
-
begin () const
|
114
|
-
{
|
115
|
-
return seq_.rbegin ();
|
116
|
-
}
|
117
|
-
|
118
|
-
const_iterator
|
119
|
-
end () const
|
120
|
-
{
|
121
|
-
return seq_.rend ();
|
122
|
-
}
|
123
|
-
|
124
|
-
private:
|
125
|
-
stack (const stack&);
|
126
|
-
stack& operator= (const stack&);
|
127
|
-
/// The wrapped container.
|
128
|
-
S seq_;
|
129
|
-
};
|
130
|
-
|
131
|
-
/// Present a slice of the top of a stack.
|
132
|
-
template <class T, class S = stack<T> >
|
133
|
-
class slice
|
134
|
-
{
|
135
|
-
public:
|
136
|
-
slice (const S& stack, unsigned range)
|
137
|
-
: stack_ (stack)
|
138
|
-
, range_ (range)
|
139
|
-
{}
|
140
|
-
|
141
|
-
const T&
|
142
|
-
operator [] (unsigned i) const
|
143
|
-
{
|
144
|
-
return stack_[range_ - i];
|
145
|
-
}
|
146
|
-
|
147
|
-
private:
|
148
|
-
const S& stack_;
|
149
|
-
unsigned range_;
|
150
|
-
};
|
151
|
-
|
152
|
-
|
153
|
-
} // yy
|
154
|
-
#line 155 "stack.hh" // stack.hh:150
|
155
|
-
|
156
|
-
#endif // !YY_YY_STACK_HH_INCLUDED
|
@@ -1,19 +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
|
-
#pragma once
|
8
|
-
|
9
|
-
/***
|
10
|
-
* This file contains definitions that need to be shared by the parser
|
11
|
-
* and the lexer.
|
12
|
-
*/
|
13
|
-
|
14
|
-
yy::GraphQLParserImpl::syntax_error make_error(const yy::location &loc, const std::string &str);
|
15
|
-
|
16
|
-
struct LexerExtra {
|
17
|
-
std::string str;
|
18
|
-
yy::location loc;
|
19
|
-
};
|
@@ -1,36 +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 "location.hh"
|
11
|
-
|
12
|
-
namespace facebook {
|
13
|
-
namespace graphql {
|
14
|
-
namespace ast {
|
15
|
-
|
16
|
-
namespace visitor {
|
17
|
-
class AstVisitor;
|
18
|
-
}
|
19
|
-
|
20
|
-
class Node {
|
21
|
-
yy::location location_;
|
22
|
-
public:
|
23
|
-
explicit Node(const yy::location &location)
|
24
|
-
: location_(location) {}
|
25
|
-
|
26
|
-
virtual ~Node() {}
|
27
|
-
|
28
|
-
const yy::location &getLocation() const
|
29
|
-
{ return location_; }
|
30
|
-
|
31
|
-
virtual void accept(visitor::AstVisitor *visitor) const = 0;
|
32
|
-
};
|
33
|
-
|
34
|
-
}
|
35
|
-
}
|
36
|
-
}
|
@@ -1,148 +0,0 @@
|
|
1
|
-
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
2
|
-
PROJECT(libgraphqlparser C CXX)
|
3
|
-
|
4
|
-
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
|
5
|
-
|
6
|
-
INCLUDE(version)
|
7
|
-
|
8
|
-
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
|
9
|
-
|
10
|
-
FIND_PACKAGE(PythonInterp 2 REQUIRED)
|
11
|
-
IF (NOT PYTHON_VERSION_MAJOR EQUAL 2)
|
12
|
-
MESSAGE(FATAL_ERROR "Python 2 is required.")
|
13
|
-
ENDIF()
|
14
|
-
|
15
|
-
FIND_PROGRAM(CTYPESGEN_FOUND ctypesgen.py)
|
16
|
-
|
17
|
-
FIND_PACKAGE(BISON 3)
|
18
|
-
FIND_PACKAGE(FLEX)
|
19
|
-
IF (BISON_FOUND)
|
20
|
-
BISON_TARGET(graphqlparser_bison parser.ypp ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.cpp)
|
21
|
-
SET(BISON_LOCATION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/location.hh)
|
22
|
-
ELSE()
|
23
|
-
SET(BISON_graphqlparser_bison_OUTPUT_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.cpp)
|
24
|
-
SET(BISON_graphqlparser_bison_OUTPUT_HEADER ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.hpp)
|
25
|
-
SET(BISON_graphqlparser_bison_OUTPUTS
|
26
|
-
${BISON_graphqlparser_bison_OUTPUT_SOURCE}
|
27
|
-
${BISON_graphqlparser_bison_OUTPUT_HEADER}
|
28
|
-
${CMAKE_CURRENT_BINARY_DIR}/location.hh
|
29
|
-
${CMAKE_CURRENT_BINARY_DIR}/position.hh
|
30
|
-
${CMAKE_CURRENT_BINARY_DIR}/stack.hh)
|
31
|
-
SET(BISON_LOCATION_HEADER ${CMAKE_CURRENT_BINARY_DIR}/location.hh)
|
32
|
-
FILE(COPY
|
33
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/parser.tab.cpp
|
34
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/parser.tab.hpp
|
35
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/location.hh
|
36
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/position.hh
|
37
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/stack.hh
|
38
|
-
${CMAKE_CURRENT_BINARY_DIR})
|
39
|
-
ENDIF()
|
40
|
-
|
41
|
-
IF(FLEX_FOUND)
|
42
|
-
FLEX_TARGET(GraphQLScanner lexer.lpp ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp COMPILE_FLAGS "--header-file=${CMAKE_CURRENT_BINARY_DIR}/lexer.h")
|
43
|
-
IF (BISON_FOUND)
|
44
|
-
ADD_FLEX_BISON_DEPENDENCY(GraphQLScanner graphqlparser_bison)
|
45
|
-
ENDIF()
|
46
|
-
ELSE()
|
47
|
-
SET(FLEX_GraphQLScanner_OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
|
48
|
-
FILE(COPY
|
49
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/lexer.cpp
|
50
|
-
${CMAKE_CURRENT_SOURCE_DIR}/parsergen/lexer.h
|
51
|
-
${CMAKE_CURRENT_BINARY_DIR})
|
52
|
-
ENDIF()
|
53
|
-
|
54
|
-
FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/c)
|
55
|
-
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
56
|
-
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
57
|
-
|
58
|
-
ADD_LIBRARY(graphqlparser SHARED
|
59
|
-
JsonVisitor.cpp
|
60
|
-
${CMAKE_CURRENT_BINARY_DIR}/Ast.h
|
61
|
-
${CMAKE_CURRENT_BINARY_DIR}/Ast.cpp
|
62
|
-
${CMAKE_CURRENT_BINARY_DIR}/AstVisitor.h
|
63
|
-
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAst.h
|
64
|
-
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAst.cpp
|
65
|
-
${CMAKE_CURRENT_BINARY_DIR}/c/GraphQLAstForEachConcreteType.h
|
66
|
-
${CMAKE_CURRENT_BINARY_DIR}/JsonVisitor.h.inc
|
67
|
-
${CMAKE_CURRENT_BINARY_DIR}/JsonVisitor.cpp.inc
|
68
|
-
${BISON_graphqlparser_bison_OUTPUTS}
|
69
|
-
${FLEX_GraphQLScanner_OUTPUTS}
|
70
|
-
c/GraphQLAstNode.cpp
|
71
|
-
c/GraphQLAstToJSON.cpp
|
72
|
-
c/GraphQLAstVisitor.h
|
73
|
-
c/GraphQLAstVisitor.cpp
|
74
|
-
c/GraphQLParser.cpp
|
75
|
-
GraphQLParser.cpp)
|
76
|
-
|
77
|
-
# Enable this and remove CMAKE_CXX_FLAGS fiddle above when we are able
|
78
|
-
# to upgrade to CMake 2.8.12. Blocker seems to be Travis CI being on
|
79
|
-
# Ubuntu Precise; Trusty has 2.8.12.
|
80
|
-
# TARGET_COMPILE_OPTIONS(graphqlparser PUBLIC -std=gnu++11)
|
81
|
-
|
82
|
-
ADD_EXECUTABLE(dump_json_ast dump_json_ast.cpp)
|
83
|
-
TARGET_LINK_LIBRARIES(dump_json_ast graphqlparser)
|
84
|
-
|
85
|
-
FUNCTION(GENERATE_AST_FILE FILE_TYPE FILE_RELATIVE_PATH)
|
86
|
-
ADD_CUSTOM_COMMAND(
|
87
|
-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILE_RELATIVE_PATH}
|
88
|
-
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.py ${FILE_TYPE} ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.ast > ${CMAKE_CURRENT_BINARY_DIR}/${FILE_RELATIVE_PATH}
|
89
|
-
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.ast ${CMAKE_CURRENT_SOURCE_DIR}/ast/ast.py ${CMAKE_CURRENT_SOURCE_DIR}/ast/${FILE_TYPE}.py)
|
90
|
-
ENDFUNCTION(GENERATE_AST_FILE)
|
91
|
-
|
92
|
-
GENERATE_AST_FILE(cxx Ast.h)
|
93
|
-
|
94
|
-
GENERATE_AST_FILE(cxx_visitor AstVisitor.h)
|
95
|
-
|
96
|
-
GENERATE_AST_FILE(cxx_impl Ast.cpp)
|
97
|
-
|
98
|
-
GENERATE_AST_FILE(c c/GraphQLAst.h)
|
99
|
-
|
100
|
-
GENERATE_AST_FILE(c_impl c/GraphQLAst.cpp)
|
101
|
-
|
102
|
-
GENERATE_AST_FILE(c_visitor_impl c/GraphQLAstForEachConcreteType.h)
|
103
|
-
|
104
|
-
GENERATE_AST_FILE(cxx_json_visitor_header JsonVisitor.h.inc)
|
105
|
-
|
106
|
-
GENERATE_AST_FILE(cxx_json_visitor_impl JsonVisitor.cpp.inc)
|
107
|
-
|
108
|
-
ADD_SUBDIRECTORY(python)
|
109
|
-
|
110
|
-
OPTION(test "Build tests." OFF)
|
111
|
-
|
112
|
-
INSTALL(DIRECTORY c ${CMAKE_CURRENT_BINARY_DIR}/c DESTINATION include/graphqlparser
|
113
|
-
FILES_MATCHING PATTERN "*.h"
|
114
|
-
PATTERN "build" EXCLUDE)
|
115
|
-
|
116
|
-
INSTALL(FILES
|
117
|
-
${CMAKE_CURRENT_BINARY_DIR}/Ast.h
|
118
|
-
AstNode.h
|
119
|
-
${CMAKE_CURRENT_BINARY_DIR}/AstVisitor.h
|
120
|
-
GraphQLParser.h
|
121
|
-
JsonVisitor.h
|
122
|
-
${BISON_LOCATION_HEADER}
|
123
|
-
DESTINATION include/graphqlparser)
|
124
|
-
INSTALL(TARGETS graphqlparser
|
125
|
-
LIBRARY DESTINATION lib)
|
126
|
-
|
127
|
-
if (UNIX)
|
128
|
-
# generate pkgconfig file
|
129
|
-
include(FindPkgConfig QUIET)
|
130
|
-
if(PKG_CONFIG_FOUND)
|
131
|
-
# generate .pc and install
|
132
|
-
configure_file("libgraphqlparser.pc.in" "libgraphqlparser.pc" @ONLY)
|
133
|
-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libgraphqlparser.pc"
|
134
|
-
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
|
135
|
-
endif()
|
136
|
-
endif()
|
137
|
-
|
138
|
-
IF (test)
|
139
|
-
ADD_SUBDIRECTORY(test)
|
140
|
-
|
141
|
-
if(UNIX)
|
142
|
-
# setup valgrind
|
143
|
-
ADD_CUSTOM_TARGET(memcheck
|
144
|
-
valgrind --leak-check=full --suppressions=./test/valgrind.supp --dsymutil=yes --error-exitcode=1 ./test/runTests >/dev/null
|
145
|
-
)
|
146
|
-
endif()
|
147
|
-
|
148
|
-
ENDIF()
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# Contributing to libgraphqlparser
|
2
|
-
|
3
|
-
Please see the Code of Conduct featured at https://github.com/graphql/foundation
|
4
|
-
|
5
|
-
## Pull Requests
|
6
|
-
We actively welcome your pull requests.
|
7
|
-
|
8
|
-
1. Fork the repo and create your branch from `master`.
|
9
|
-
2. If you've added code that should be tested, add tests
|
10
|
-
3. If you've changed APIs, update the documentation.
|
11
|
-
4. Ensure the test suite passes.
|
12
|
-
5. Make sure your code lints.
|
13
|
-
|
14
|
-
## Issues
|
15
|
-
We use GitHub issues to track public bugs. Please ensure your description is
|
16
|
-
clear and has sufficient instructions to be able to reproduce the issue.
|
17
|
-
|
18
|
-
If you find a security bug, please contact the project administrators,
|
19
|
-
and do not file a public issue.
|
20
|
-
|
21
|
-
## License
|
22
|
-
By contributing to libgraphqlparser, you agree that your contributions
|
23
|
-
will be licensed under the LICENSE file in the project root directory.
|
@@ -1,76 +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
|
-
|
10
|
-
#include "AstNode.h"
|
11
|
-
|
12
|
-
#include "parser.tab.hpp"
|
13
|
-
#include "lexer.h"
|
14
|
-
#include "syntaxdefs.h"
|
15
|
-
|
16
|
-
namespace facebook {
|
17
|
-
namespace graphql {
|
18
|
-
|
19
|
-
// Given properly-configured yylex, run the parser and return the
|
20
|
-
// result.
|
21
|
-
static std::unique_ptr<ast::Node> doParse(const char **outError, yyscan_t scanner, bool enableSchema) {
|
22
|
-
Node *outAST = nullptr;
|
23
|
-
yy::GraphQLParserImpl parser(enableSchema, &outAST, outError, scanner);
|
24
|
-
int failure = parser.parse();
|
25
|
-
if (failure) {
|
26
|
-
delete outAST;
|
27
|
-
}
|
28
|
-
return !failure ? std::unique_ptr<ast::Node>(outAST) : nullptr;
|
29
|
-
}
|
30
|
-
|
31
|
-
static std::unique_ptr<ast::Node> parseStringImpl(const char *text, const char **error, bool enableSchema) {
|
32
|
-
yyscan_t scanner;
|
33
|
-
struct LexerExtra extra;
|
34
|
-
yylex_init_extra(&extra, &scanner);
|
35
|
-
YY_BUFFER_STATE buffer = yy_scan_string(text, scanner);
|
36
|
-
yy_switch_to_buffer(buffer, scanner);
|
37
|
-
|
38
|
-
auto result = doParse(error, scanner, enableSchema);
|
39
|
-
yylex_destroy(scanner);
|
40
|
-
return result;
|
41
|
-
}
|
42
|
-
|
43
|
-
std::unique_ptr<ast::Node> parseString(const char *text, const char **error) {
|
44
|
-
return parseStringImpl(text, error, false);
|
45
|
-
}
|
46
|
-
|
47
|
-
std::unique_ptr<ast::Node> parseStringWithExperimentalSchemaSupport(
|
48
|
-
const char *text, const char **error) {
|
49
|
-
return parseStringImpl(text, error, true);
|
50
|
-
}
|
51
|
-
|
52
|
-
static std::unique_ptr<ast::Node> parseFileImpl(
|
53
|
-
FILE *file, const char **error, bool enableSchema) {
|
54
|
-
yyscan_t scanner;
|
55
|
-
struct LexerExtra extra;
|
56
|
-
yylex_init_extra(&extra, &scanner);
|
57
|
-
yyset_in(file, scanner);
|
58
|
-
|
59
|
-
auto result = doParse(error, scanner, enableSchema);
|
60
|
-
yylex_destroy(scanner);
|
61
|
-
|
62
|
-
return result;
|
63
|
-
}
|
64
|
-
|
65
|
-
std::unique_ptr<ast::Node> parseFile(FILE *file, const char **error) {
|
66
|
-
return parseFileImpl(file, error, false);
|
67
|
-
}
|
68
|
-
|
69
|
-
std::unique_ptr<ast::Node> parseFileWithExperimentalSchemaSupport(
|
70
|
-
FILE *file, const char **error) {
|
71
|
-
return parseFileImpl(file, error, true);
|
72
|
-
}
|
73
|
-
|
74
|
-
|
75
|
-
} // namespace graphql
|
76
|
-
} // namespace facebook
|
@@ -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
|
-
/**
|
9
|
-
* The purpose of this file is to provide a nice interface to parsing
|
10
|
-
* GraphQL, rather than the old-fashioned interface provided by bison
|
11
|
-
* and flex.
|
12
|
-
*/
|
13
|
-
|
14
|
-
#pragma once
|
15
|
-
|
16
|
-
#include <memory>
|
17
|
-
#include <stdio.h>
|
18
|
-
|
19
|
-
namespace facebook {
|
20
|
-
namespace graphql {
|
21
|
-
|
22
|
-
namespace ast {
|
23
|
-
class Node;
|
24
|
-
}
|
25
|
-
|
26
|
-
/**
|
27
|
-
* Parse the given GraphQL source string, returning an AST. Returns
|
28
|
-
* nullptr on error and, if error is not null, places a string
|
29
|
-
* describing what went wrong in error that must be freed with free(3).
|
30
|
-
*/
|
31
|
-
std::unique_ptr<ast::Node> parseString(const char *text, const char **error);
|
32
|
-
|
33
|
-
/**
|
34
|
-
* Like parseString, but enables support for the experimental type
|
35
|
-
* definition syntax from https://github.com/facebook/graphql/pull/90 .
|
36
|
-
*/
|
37
|
-
std::unique_ptr<ast::Node> parseStringWithExperimentalSchemaSupport(
|
38
|
-
const char *text, const char **error);
|
39
|
-
|
40
|
-
/**
|
41
|
-
* Read and parse GraphQL source from the given file, returning an
|
42
|
-
* AST. Returns nullptr on error and, if error is not null, places an
|
43
|
-
* error string in error that must be freed with free(3).
|
44
|
-
*/
|
45
|
-
std::unique_ptr<ast::Node> parseFile(FILE *file, const char **error);
|
46
|
-
|
47
|
-
/**
|
48
|
-
* Like parseFile, but enables support for the experimental type
|
49
|
-
* definition syntax from https://github.com/facebook/graphql/pull/90 .
|
50
|
-
*/
|
51
|
-
std::unique_ptr<ast::Node> parseFileWithExperimentalSchemaSupport(
|
52
|
-
FILE *file, const char **error);
|
53
|
-
|
54
|
-
}
|
55
|
-
}
|