graphql 1.10.0.pre1 → 1.10.0.pre2
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/lib/generators/graphql/core.rb +1 -0
- data/lib/generators/graphql/install_generator.rb +1 -0
- data/lib/generators/graphql/mutation_generator.rb +1 -1
- data/lib/generators/graphql/templates/base_field.erb +0 -4
- data/lib/generators/graphql/templates/base_mutation.erb +8 -0
- data/lib/generators/graphql/templates/graphql_controller.erb +5 -0
- data/lib/generators/graphql/templates/mutation.erb +1 -1
- data/lib/generators/graphql/templates/schema.erb +1 -1
- data/lib/graphql.rb +4 -1
- data/lib/graphql/analysis/ast.rb +14 -13
- data/lib/graphql/analysis/ast/analyzer.rb +23 -4
- data/lib/graphql/analysis/ast/field_usage.rb +1 -1
- data/lib/graphql/analysis/ast/max_query_complexity.rb +3 -3
- data/lib/graphql/analysis/ast/max_query_depth.rb +7 -3
- data/lib/graphql/analysis/ast/query_complexity.rb +2 -2
- data/lib/graphql/analysis/ast/visitor.rb +3 -3
- data/lib/graphql/base_type.rb +1 -1
- data/lib/graphql/directive.rb +0 -1
- data/lib/graphql/directive/deprecated_directive.rb +1 -12
- data/lib/graphql/execution/errors.rb +4 -8
- data/lib/graphql/execution/interpreter.rb +5 -11
- data/lib/graphql/execution/interpreter/runtime.rb +56 -48
- data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
- data/lib/graphql/execution/lookahead.rb +5 -5
- data/lib/graphql/execution/multiplex.rb +10 -0
- data/lib/graphql/function.rb +1 -1
- data/lib/graphql/input_object_type.rb +3 -2
- data/lib/graphql/interface_type.rb +1 -1
- data/lib/graphql/introspection/base_object.rb +2 -5
- data/lib/graphql/introspection/directive_type.rb +1 -1
- data/lib/graphql/introspection/entry_points.rb +6 -6
- data/lib/graphql/introspection/schema_type.rb +1 -6
- data/lib/graphql/introspection/type_type.rb +5 -5
- data/lib/graphql/language.rb +1 -1
- data/lib/graphql/language/block_string.rb +2 -2
- data/lib/graphql/language/definition_slice.rb +21 -10
- data/lib/graphql/language/document_from_schema_definition.rb +42 -42
- data/lib/graphql/language/lexer.rb +49 -48
- data/lib/graphql/language/lexer.rl +49 -48
- data/lib/graphql/language/nodes.rb +11 -8
- data/lib/graphql/language/parser.rb +4 -1
- data/lib/graphql/language/parser.y +4 -1
- data/lib/graphql/language/token.rb +1 -1
- data/lib/graphql/pagination/array_connection.rb +0 -1
- data/lib/graphql/pagination/connection.rb +31 -10
- data/lib/graphql/pagination/connections.rb +7 -2
- data/lib/graphql/pagination/relation_connection.rb +1 -7
- data/lib/graphql/query.rb +9 -4
- data/lib/graphql/query/arguments.rb +8 -1
- data/lib/graphql/query/literal_input.rb +2 -1
- data/lib/graphql/query/variables.rb +5 -1
- data/lib/graphql/relay/base_connection.rb +3 -3
- data/lib/graphql/relay/relation_connection.rb +9 -5
- data/lib/graphql/schema.rb +699 -153
- data/lib/graphql/schema/argument.rb +20 -4
- data/lib/graphql/schema/build_from_definition.rb +64 -31
- data/lib/graphql/schema/built_in_types.rb +5 -5
- data/lib/graphql/schema/directive.rb +16 -1
- data/lib/graphql/schema/directive/deprecated.rb +18 -0
- data/lib/graphql/schema/directive/feature.rb +1 -1
- data/lib/graphql/schema/enum.rb +39 -3
- data/lib/graphql/schema/field.rb +39 -9
- data/lib/graphql/schema/field/connection_extension.rb +4 -4
- data/lib/graphql/schema/find_inherited_value.rb +13 -0
- data/lib/graphql/schema/finder.rb +13 -11
- data/lib/graphql/schema/input_object.rb +109 -1
- data/lib/graphql/schema/interface.rb +8 -7
- data/lib/graphql/schema/introspection_system.rb +104 -36
- data/lib/graphql/schema/late_bound_type.rb +1 -0
- data/lib/graphql/schema/list.rb +26 -0
- data/lib/graphql/schema/loader.rb +10 -4
- data/lib/graphql/schema/member.rb +3 -0
- data/lib/graphql/schema/member/base_dsl_methods.rb +23 -13
- data/lib/graphql/schema/member/build_type.rb +1 -1
- data/lib/graphql/schema/member/has_arguments.rb +2 -2
- data/lib/graphql/schema/member/has_fields.rb +15 -6
- data/lib/graphql/schema/member/instrumentation.rb +6 -1
- data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
- data/lib/graphql/schema/member/validates_input.rb +33 -0
- data/lib/graphql/schema/non_null.rb +25 -0
- data/lib/graphql/schema/object.rb +14 -1
- data/lib/graphql/schema/printer.rb +4 -3
- data/lib/graphql/schema/relay_classic_mutation.rb +5 -1
- data/lib/graphql/schema/resolver.rb +20 -2
- data/lib/graphql/schema/scalar.rb +18 -3
- data/lib/graphql/schema/subscription.rb +1 -1
- data/lib/graphql/schema/timeout_middleware.rb +3 -2
- data/lib/graphql/schema/traversal.rb +1 -1
- data/lib/graphql/schema/type_expression.rb +22 -24
- data/lib/graphql/schema/validation.rb +17 -1
- data/lib/graphql/schema/warden.rb +46 -17
- data/lib/graphql/schema/wrapper.rb +1 -1
- data/lib/graphql/static_validation/base_visitor.rb +10 -6
- data/lib/graphql/static_validation/definition_dependencies.rb +21 -12
- data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
- data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
- data/lib/graphql/static_validation/type_stack.rb +2 -2
- data/lib/graphql/static_validation/validator.rb +1 -1
- data/lib/graphql/subscriptions.rb +38 -13
- data/lib/graphql/subscriptions/event.rb +24 -7
- data/lib/graphql/subscriptions/instrumentation.rb +1 -1
- data/lib/graphql/subscriptions/subscription_root.rb +0 -1
- data/lib/graphql/tracing/active_support_notifications_tracing.rb +10 -10
- data/lib/graphql/tracing/platform_tracing.rb +1 -2
- data/lib/graphql/tracing/skylight_tracing.rb +1 -0
- data/lib/graphql/unresolved_type_error.rb +2 -2
- data/lib/graphql/upgrader/member.rb +1 -1
- data/lib/graphql/version.rb +1 -1
- metadata +5 -2
@@ -314,7 +314,7 @@ def self.run_lexer(query_string)
|
|
314
314
|
begin
|
315
315
|
te = p+1;
|
316
316
|
begin
|
317
|
-
emit(:RCURLY, ts, te, meta)
|
317
|
+
emit(:RCURLY, ts, te, meta, "}")
|
318
318
|
end
|
319
319
|
|
320
320
|
end
|
@@ -328,7 +328,7 @@ def self.run_lexer(query_string)
|
|
328
328
|
begin
|
329
329
|
te = p+1;
|
330
330
|
begin
|
331
|
-
emit(:LCURLY, ts, te, meta)
|
331
|
+
emit(:LCURLY, ts, te, meta, "{")
|
332
332
|
end
|
333
333
|
|
334
334
|
end
|
@@ -342,7 +342,7 @@ def self.run_lexer(query_string)
|
|
342
342
|
begin
|
343
343
|
te = p+1;
|
344
344
|
begin
|
345
|
-
emit(:RPAREN, ts, te, meta)
|
345
|
+
emit(:RPAREN, ts, te, meta, ")")
|
346
346
|
end
|
347
347
|
|
348
348
|
end
|
@@ -356,7 +356,7 @@ def self.run_lexer(query_string)
|
|
356
356
|
begin
|
357
357
|
te = p+1;
|
358
358
|
begin
|
359
|
-
emit(:LPAREN, ts, te, meta)
|
359
|
+
emit(:LPAREN, ts, te, meta, "(")
|
360
360
|
end
|
361
361
|
|
362
362
|
end
|
@@ -370,7 +370,7 @@ def self.run_lexer(query_string)
|
|
370
370
|
begin
|
371
371
|
te = p+1;
|
372
372
|
begin
|
373
|
-
emit(:RBRACKET, ts, te, meta)
|
373
|
+
emit(:RBRACKET, ts, te, meta, "]")
|
374
374
|
end
|
375
375
|
|
376
376
|
end
|
@@ -384,7 +384,7 @@ def self.run_lexer(query_string)
|
|
384
384
|
begin
|
385
385
|
te = p+1;
|
386
386
|
begin
|
387
|
-
emit(:LBRACKET, ts, te, meta)
|
387
|
+
emit(:LBRACKET, ts, te, meta, "[")
|
388
388
|
end
|
389
389
|
|
390
390
|
end
|
@@ -398,7 +398,7 @@ def self.run_lexer(query_string)
|
|
398
398
|
begin
|
399
399
|
te = p+1;
|
400
400
|
begin
|
401
|
-
emit(:COLON, ts, te, meta)
|
401
|
+
emit(:COLON, ts, te, meta, ":")
|
402
402
|
end
|
403
403
|
|
404
404
|
end
|
@@ -440,7 +440,7 @@ def self.run_lexer(query_string)
|
|
440
440
|
begin
|
441
441
|
te = p+1;
|
442
442
|
begin
|
443
|
-
emit(:VAR_SIGN, ts, te, meta)
|
443
|
+
emit(:VAR_SIGN, ts, te, meta, "$")
|
444
444
|
end
|
445
445
|
|
446
446
|
end
|
@@ -454,7 +454,7 @@ def self.run_lexer(query_string)
|
|
454
454
|
begin
|
455
455
|
te = p+1;
|
456
456
|
begin
|
457
|
-
emit(:DIR_SIGN, ts, te, meta)
|
457
|
+
emit(:DIR_SIGN, ts, te, meta, "@")
|
458
458
|
end
|
459
459
|
|
460
460
|
end
|
@@ -468,7 +468,7 @@ def self.run_lexer(query_string)
|
|
468
468
|
begin
|
469
469
|
te = p+1;
|
470
470
|
begin
|
471
|
-
emit(:ELLIPSIS, ts, te, meta)
|
471
|
+
emit(:ELLIPSIS, ts, te, meta, "...")
|
472
472
|
end
|
473
473
|
|
474
474
|
end
|
@@ -482,7 +482,7 @@ def self.run_lexer(query_string)
|
|
482
482
|
begin
|
483
483
|
te = p+1;
|
484
484
|
begin
|
485
|
-
emit(:EQUALS, ts, te, meta)
|
485
|
+
emit(:EQUALS, ts, te, meta, "=")
|
486
486
|
end
|
487
487
|
|
488
488
|
end
|
@@ -496,7 +496,7 @@ def self.run_lexer(query_string)
|
|
496
496
|
begin
|
497
497
|
te = p+1;
|
498
498
|
begin
|
499
|
-
emit(:BANG, ts, te, meta)
|
499
|
+
emit(:BANG, ts, te, meta, "!")
|
500
500
|
end
|
501
501
|
|
502
502
|
end
|
@@ -510,7 +510,7 @@ def self.run_lexer(query_string)
|
|
510
510
|
begin
|
511
511
|
te = p+1;
|
512
512
|
begin
|
513
|
-
emit(:PIPE, ts, te, meta)
|
513
|
+
emit(:PIPE, ts, te, meta, "|")
|
514
514
|
end
|
515
515
|
|
516
516
|
end
|
@@ -524,7 +524,7 @@ def self.run_lexer(query_string)
|
|
524
524
|
begin
|
525
525
|
te = p+1;
|
526
526
|
begin
|
527
|
-
emit(:AMP, ts, te, meta)
|
527
|
+
emit(:AMP, ts, te, meta, "&")
|
528
528
|
end
|
529
529
|
|
530
530
|
end
|
@@ -738,7 +738,7 @@ def self.run_lexer(query_string)
|
|
738
738
|
begin
|
739
739
|
p = ((te))-1;
|
740
740
|
begin
|
741
|
-
emit(:ON, ts, te, meta)
|
741
|
+
emit(:ON, ts, te, meta, "on")
|
742
742
|
end
|
743
743
|
|
744
744
|
end
|
@@ -746,7 +746,7 @@ def self.run_lexer(query_string)
|
|
746
746
|
begin
|
747
747
|
p = ((te))-1;
|
748
748
|
begin
|
749
|
-
emit(:FRAGMENT, ts, te, meta)
|
749
|
+
emit(:FRAGMENT, ts, te, meta, "fragment")
|
750
750
|
end
|
751
751
|
|
752
752
|
end
|
@@ -754,7 +754,7 @@ def self.run_lexer(query_string)
|
|
754
754
|
begin
|
755
755
|
p = ((te))-1;
|
756
756
|
begin
|
757
|
-
emit(:TRUE, ts, te, meta)
|
757
|
+
emit(:TRUE, ts, te, meta, "true")
|
758
758
|
end
|
759
759
|
|
760
760
|
end
|
@@ -762,7 +762,7 @@ def self.run_lexer(query_string)
|
|
762
762
|
begin
|
763
763
|
p = ((te))-1;
|
764
764
|
begin
|
765
|
-
emit(:FALSE, ts, te, meta)
|
765
|
+
emit(:FALSE, ts, te, meta, "false")
|
766
766
|
end
|
767
767
|
|
768
768
|
end
|
@@ -770,7 +770,7 @@ def self.run_lexer(query_string)
|
|
770
770
|
begin
|
771
771
|
p = ((te))-1;
|
772
772
|
begin
|
773
|
-
emit(:NULL, ts, te, meta)
|
773
|
+
emit(:NULL, ts, te, meta, "null")
|
774
774
|
end
|
775
775
|
|
776
776
|
end
|
@@ -778,7 +778,7 @@ def self.run_lexer(query_string)
|
|
778
778
|
begin
|
779
779
|
p = ((te))-1;
|
780
780
|
begin
|
781
|
-
emit(:QUERY, ts, te, meta)
|
781
|
+
emit(:QUERY, ts, te, meta, "query")
|
782
782
|
end
|
783
783
|
|
784
784
|
end
|
@@ -786,7 +786,7 @@ def self.run_lexer(query_string)
|
|
786
786
|
begin
|
787
787
|
p = ((te))-1;
|
788
788
|
begin
|
789
|
-
emit(:MUTATION, ts, te, meta)
|
789
|
+
emit(:MUTATION, ts, te, meta, "mutation")
|
790
790
|
end
|
791
791
|
|
792
792
|
end
|
@@ -794,7 +794,7 @@ def self.run_lexer(query_string)
|
|
794
794
|
begin
|
795
795
|
p = ((te))-1;
|
796
796
|
begin
|
797
|
-
emit(:SUBSCRIPTION, ts, te, meta)
|
797
|
+
emit(:SUBSCRIPTION, ts, te, meta, "subscription")
|
798
798
|
end
|
799
799
|
|
800
800
|
end
|
@@ -1371,11 +1371,11 @@ end
|
|
1371
1371
|
|
1372
1372
|
def self.record_comment(ts, te, meta)
|
1373
1373
|
token = GraphQL::Language::Token.new(
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1374
|
+
:COMMENT,
|
1375
|
+
meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
|
1376
|
+
meta[:line],
|
1377
|
+
meta[:col],
|
1378
|
+
meta[:previous_token],
|
1379
1379
|
)
|
1380
1380
|
|
1381
1381
|
meta[:previous_token] = token
|
@@ -1383,13 +1383,14 @@ meta[:previous_token] = token
|
|
1383
1383
|
meta[:col] += te - ts
|
1384
1384
|
end
|
1385
1385
|
|
1386
|
-
def self.emit(token_name, ts, te, meta)
|
1386
|
+
def self.emit(token_name, ts, te, meta, token_value = nil)
|
1387
|
+
token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
|
1387
1388
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1388
|
-
|
1389
|
-
|
1390
|
-
|
1391
|
-
|
1392
|
-
|
1389
|
+
token_name,
|
1390
|
+
token_value,
|
1391
|
+
meta[:line],
|
1392
|
+
meta[:col],
|
1393
|
+
meta[:previous_token],
|
1393
1394
|
)
|
1394
1395
|
meta[:previous_token] = token
|
1395
1396
|
# Bump the column counter for the next token
|
@@ -1428,30 +1429,30 @@ end
|
|
1428
1429
|
# (It's faster: https://bugs.ruby-lang.org/issues/8110)
|
1429
1430
|
if !value.valid_encoding? || value !~ VALID_STRING
|
1430
1431
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1431
|
-
|
1432
|
-
value
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1432
|
+
:BAD_UNICODE_ESCAPE,
|
1433
|
+
value,
|
1434
|
+
meta[:line],
|
1435
|
+
meta[:col],
|
1436
|
+
meta[:previous_token],
|
1436
1437
|
)
|
1437
1438
|
else
|
1438
1439
|
replace_escaped_characters_in_place(value)
|
1439
1440
|
|
1440
1441
|
if !value.valid_encoding?
|
1441
1442
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1442
|
-
|
1443
|
-
value
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1443
|
+
:BAD_UNICODE_ESCAPE,
|
1444
|
+
value,
|
1445
|
+
meta[:line],
|
1446
|
+
meta[:col],
|
1447
|
+
meta[:previous_token],
|
1447
1448
|
)
|
1448
1449
|
else
|
1449
1450
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
1450
|
-
|
1451
|
-
value
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1451
|
+
:STRING,
|
1452
|
+
value,
|
1453
|
+
meta[:line],
|
1454
|
+
meta[:col],
|
1455
|
+
meta[:previous_token],
|
1455
1456
|
)
|
1456
1457
|
end
|
1457
1458
|
end
|
@@ -67,14 +67,14 @@
|
|
67
67
|
main := |*
|
68
68
|
INT => { emit(:INT, ts, te, meta) };
|
69
69
|
FLOAT => { emit(:FLOAT, ts, te, meta) };
|
70
|
-
ON => { emit(:ON, ts, te, meta) };
|
71
|
-
FRAGMENT => { emit(:FRAGMENT, ts, te, meta) };
|
72
|
-
TRUE => { emit(:TRUE, ts, te, meta) };
|
73
|
-
FALSE => { emit(:FALSE, ts, te, meta) };
|
74
|
-
NULL => { emit(:NULL, ts, te, meta) };
|
75
|
-
QUERY => { emit(:QUERY, ts, te, meta) };
|
76
|
-
MUTATION => { emit(:MUTATION, ts, te, meta) };
|
77
|
-
SUBSCRIPTION => { emit(:SUBSCRIPTION, ts, te, meta) };
|
70
|
+
ON => { emit(:ON, ts, te, meta, "on") };
|
71
|
+
FRAGMENT => { emit(:FRAGMENT, ts, te, meta, "fragment") };
|
72
|
+
TRUE => { emit(:TRUE, ts, te, meta, "true") };
|
73
|
+
FALSE => { emit(:FALSE, ts, te, meta, "false") };
|
74
|
+
NULL => { emit(:NULL, ts, te, meta, "null") };
|
75
|
+
QUERY => { emit(:QUERY, ts, te, meta, "query") };
|
76
|
+
MUTATION => { emit(:MUTATION, ts, te, meta, "mutation") };
|
77
|
+
SUBSCRIPTION => { emit(:SUBSCRIPTION, ts, te, meta, "subscription") };
|
78
78
|
SCHEMA => { emit(:SCHEMA, ts, te, meta) };
|
79
79
|
SCALAR => { emit(:SCALAR, ts, te, meta) };
|
80
80
|
TYPE => { emit(:TYPE, ts, te, meta) };
|
@@ -85,22 +85,22 @@
|
|
85
85
|
ENUM => { emit(:ENUM, ts, te, meta) };
|
86
86
|
INPUT => { emit(:INPUT, ts, te, meta) };
|
87
87
|
DIRECTIVE => { emit(:DIRECTIVE, ts, te, meta) };
|
88
|
-
RCURLY => { emit(:RCURLY, ts, te, meta) };
|
89
|
-
LCURLY => { emit(:LCURLY, ts, te, meta) };
|
90
|
-
RPAREN => { emit(:RPAREN, ts, te, meta) };
|
91
|
-
LPAREN => { emit(:LPAREN, ts, te, meta)
|
92
|
-
RBRACKET => { emit(:RBRACKET, ts, te, meta) };
|
93
|
-
LBRACKET => { emit(:LBRACKET, ts, te, meta) };
|
94
|
-
COLON => { emit(:COLON, ts, te, meta) };
|
88
|
+
RCURLY => { emit(:RCURLY, ts, te, meta, "}") };
|
89
|
+
LCURLY => { emit(:LCURLY, ts, te, meta, "{") };
|
90
|
+
RPAREN => { emit(:RPAREN, ts, te, meta, ")") };
|
91
|
+
LPAREN => { emit(:LPAREN, ts, te, meta, "(")};
|
92
|
+
RBRACKET => { emit(:RBRACKET, ts, te, meta, "]") };
|
93
|
+
LBRACKET => { emit(:LBRACKET, ts, te, meta, "[") };
|
94
|
+
COLON => { emit(:COLON, ts, te, meta, ":") };
|
95
95
|
QUOTED_STRING => { emit_string(ts, te, meta, block: false) };
|
96
96
|
BLOCK_STRING => { emit_string(ts, te, meta, block: true) };
|
97
|
-
VAR_SIGN => { emit(:VAR_SIGN, ts, te, meta) };
|
98
|
-
DIR_SIGN => { emit(:DIR_SIGN, ts, te, meta) };
|
99
|
-
ELLIPSIS => { emit(:ELLIPSIS, ts, te, meta) };
|
100
|
-
EQUALS => { emit(:EQUALS, ts, te, meta) };
|
101
|
-
BANG => { emit(:BANG, ts, te, meta) };
|
102
|
-
PIPE => { emit(:PIPE, ts, te, meta) };
|
103
|
-
AMP => { emit(:AMP, ts, te, meta) };
|
97
|
+
VAR_SIGN => { emit(:VAR_SIGN, ts, te, meta, "$") };
|
98
|
+
DIR_SIGN => { emit(:DIR_SIGN, ts, te, meta, "@") };
|
99
|
+
ELLIPSIS => { emit(:ELLIPSIS, ts, te, meta, "...") };
|
100
|
+
EQUALS => { emit(:EQUALS, ts, te, meta, "=") };
|
101
|
+
BANG => { emit(:BANG, ts, te, meta, "!") };
|
102
|
+
PIPE => { emit(:PIPE, ts, te, meta, "|") };
|
103
|
+
AMP => { emit(:AMP, ts, te, meta, "&") };
|
104
104
|
IDENTIFIER => { emit(:IDENTIFIER, ts, te, meta) };
|
105
105
|
COMMENT => { record_comment(ts, te, meta) };
|
106
106
|
|
@@ -163,11 +163,11 @@ module GraphQL
|
|
163
163
|
|
164
164
|
def self.record_comment(ts, te, meta)
|
165
165
|
token = GraphQL::Language::Token.new(
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
166
|
+
:COMMENT,
|
167
|
+
meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING),
|
168
|
+
meta[:line],
|
169
|
+
meta[:col],
|
170
|
+
meta[:previous_token],
|
171
171
|
)
|
172
172
|
|
173
173
|
meta[:previous_token] = token
|
@@ -175,13 +175,14 @@ module GraphQL
|
|
175
175
|
meta[:col] += te - ts
|
176
176
|
end
|
177
177
|
|
178
|
-
def self.emit(token_name, ts, te, meta)
|
178
|
+
def self.emit(token_name, ts, te, meta, token_value = nil)
|
179
|
+
token_value ||= meta[:data][ts, te - ts].pack(PACK_DIRECTIVE).force_encoding(UTF_8_ENCODING)
|
179
180
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
181
|
+
token_name,
|
182
|
+
token_value,
|
183
|
+
meta[:line],
|
184
|
+
meta[:col],
|
185
|
+
meta[:previous_token],
|
185
186
|
)
|
186
187
|
meta[:previous_token] = token
|
187
188
|
# Bump the column counter for the next token
|
@@ -220,30 +221,30 @@ module GraphQL
|
|
220
221
|
# (It's faster: https://bugs.ruby-lang.org/issues/8110)
|
221
222
|
if !value.valid_encoding? || value !~ VALID_STRING
|
222
223
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
223
|
-
|
224
|
-
value
|
225
|
-
|
226
|
-
|
227
|
-
|
224
|
+
:BAD_UNICODE_ESCAPE,
|
225
|
+
value,
|
226
|
+
meta[:line],
|
227
|
+
meta[:col],
|
228
|
+
meta[:previous_token],
|
228
229
|
)
|
229
230
|
else
|
230
231
|
replace_escaped_characters_in_place(value)
|
231
232
|
|
232
233
|
if !value.valid_encoding?
|
233
234
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
234
|
-
|
235
|
-
value
|
236
|
-
|
237
|
-
|
238
|
-
|
235
|
+
:BAD_UNICODE_ESCAPE,
|
236
|
+
value,
|
237
|
+
meta[:line],
|
238
|
+
meta[:col],
|
239
|
+
meta[:previous_token],
|
239
240
|
)
|
240
241
|
else
|
241
242
|
meta[:tokens] << token = GraphQL::Language::Token.new(
|
242
|
-
|
243
|
-
value
|
244
|
-
|
245
|
-
|
246
|
-
|
243
|
+
:STRING,
|
244
|
+
value,
|
245
|
+
meta[:line],
|
246
|
+
meta[:col],
|
247
|
+
meta[:previous_token],
|
247
248
|
)
|
248
249
|
end
|
249
250
|
end
|
@@ -28,7 +28,8 @@ module GraphQL
|
|
28
28
|
def initialize(options={})
|
29
29
|
if options.key?(:position_source)
|
30
30
|
position_source = options.delete(:position_source)
|
31
|
-
@line
|
31
|
+
@line = position_source.line
|
32
|
+
@col = position_source.col
|
32
33
|
end
|
33
34
|
|
34
35
|
@filename = options.delete(:filename)
|
@@ -66,7 +67,7 @@ module GraphQL
|
|
66
67
|
|
67
68
|
# @return [Symbol] the method to call on {Language::Visitor} for this node
|
68
69
|
def visit_method
|
69
|
-
raise
|
70
|
+
raise GraphQL::RequiredImplementationMissingError, "#{self.class.name}#visit_method shold return a symbol"
|
70
71
|
end
|
71
72
|
|
72
73
|
def position
|
@@ -350,6 +351,8 @@ module GraphQL
|
|
350
351
|
|
351
352
|
# A single selection in a GraphQL query.
|
352
353
|
class Field < AbstractNode
|
354
|
+
NONE = [].freeze
|
355
|
+
|
353
356
|
scalar_methods :name, :alias
|
354
357
|
children_methods({
|
355
358
|
arguments: GraphQL::Language::Nodes::Argument,
|
@@ -360,13 +363,13 @@ module GraphQL
|
|
360
363
|
# @!attribute selections
|
361
364
|
# @return [Array<Nodes::Field>] Selections on this object (or empty array if this is a scalar field)
|
362
365
|
|
363
|
-
def initialize_node(
|
364
|
-
@name = name
|
365
|
-
@arguments = arguments
|
366
|
-
@directives = directives
|
367
|
-
@selections = selections
|
366
|
+
def initialize_node(attributes)
|
367
|
+
@name = attributes[:name]
|
368
|
+
@arguments = attributes[:arguments] || NONE
|
369
|
+
@directives = attributes[:directives] || NONE
|
370
|
+
@selections = attributes[:selections] || NONE
|
368
371
|
# oops, alias is a keyword:
|
369
|
-
@alias =
|
372
|
+
@alias = attributes[:alias]
|
370
373
|
end
|
371
374
|
|
372
375
|
# Override this because default is `:fields`
|