graphql 2.4.3 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/analyzer.rb +2 -1
  3. data/lib/graphql/analysis/visitor.rb +38 -41
  4. data/lib/graphql/analysis.rb +15 -12
  5. data/lib/graphql/autoload.rb +38 -0
  6. data/lib/graphql/backtrace/table.rb +118 -55
  7. data/lib/graphql/backtrace.rb +1 -19
  8. data/lib/graphql/current.rb +6 -1
  9. data/lib/graphql/dashboard/detailed_traces.rb +47 -0
  10. data/lib/graphql/dashboard/installable.rb +22 -0
  11. data/lib/graphql/dashboard/limiters.rb +93 -0
  12. data/lib/graphql/dashboard/operation_store.rb +199 -0
  13. data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.css +6 -0
  14. data/lib/graphql/dashboard/statics/bootstrap-5.3.3.min.js +7 -0
  15. data/lib/graphql/dashboard/statics/charts.min.css +1 -0
  16. data/lib/graphql/dashboard/statics/dashboard.css +30 -0
  17. data/lib/graphql/dashboard/statics/dashboard.js +143 -0
  18. data/lib/graphql/dashboard/statics/header-icon.png +0 -0
  19. data/lib/graphql/dashboard/statics/icon.png +0 -0
  20. data/lib/graphql/dashboard/subscriptions.rb +96 -0
  21. data/lib/graphql/dashboard/views/graphql/dashboard/detailed_traces/traces/index.html.erb +45 -0
  22. data/lib/graphql/dashboard/views/graphql/dashboard/landings/show.html.erb +18 -0
  23. data/lib/graphql/dashboard/views/graphql/dashboard/limiters/limiters/show.html.erb +62 -0
  24. data/lib/graphql/dashboard/views/graphql/dashboard/not_installed.html.erb +18 -0
  25. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/_form.html.erb +23 -0
  26. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/edit.html.erb +21 -0
  27. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/index.html.erb +69 -0
  28. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/clients/new.html.erb +7 -0
  29. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/index.html.erb +39 -0
  30. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/index_entries/show.html.erb +32 -0
  31. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/index.html.erb +81 -0
  32. data/lib/graphql/dashboard/views/graphql/dashboard/operation_store/operations/show.html.erb +71 -0
  33. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/subscriptions/show.html.erb +41 -0
  34. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/index.html.erb +55 -0
  35. data/lib/graphql/dashboard/views/graphql/dashboard/subscriptions/topics/show.html.erb +40 -0
  36. data/lib/graphql/dashboard/views/layouts/graphql/dashboard/application.html.erb +108 -0
  37. data/lib/graphql/dashboard.rb +158 -0
  38. data/lib/graphql/dataloader/active_record_association_source.rb +64 -0
  39. data/lib/graphql/dataloader/active_record_source.rb +26 -0
  40. data/lib/graphql/dataloader/async_dataloader.rb +21 -9
  41. data/lib/graphql/dataloader/null_dataloader.rb +1 -1
  42. data/lib/graphql/dataloader/source.rb +3 -3
  43. data/lib/graphql/dataloader.rb +43 -14
  44. data/lib/graphql/execution/interpreter/resolve.rb +3 -3
  45. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +34 -4
  46. data/lib/graphql/execution/interpreter/runtime.rb +94 -51
  47. data/lib/graphql/execution/interpreter.rb +16 -7
  48. data/lib/graphql/execution/multiplex.rb +1 -5
  49. data/lib/graphql/introspection/directive_location_enum.rb +1 -1
  50. data/lib/graphql/invalid_name_error.rb +1 -1
  51. data/lib/graphql/invalid_null_error.rb +5 -15
  52. data/lib/graphql/language/cache.rb +13 -0
  53. data/lib/graphql/language/document_from_schema_definition.rb +8 -7
  54. data/lib/graphql/language/lexer.rb +11 -4
  55. data/lib/graphql/language/nodes.rb +3 -0
  56. data/lib/graphql/language/parser.rb +15 -8
  57. data/lib/graphql/language/printer.rb +8 -8
  58. data/lib/graphql/language/static_visitor.rb +37 -33
  59. data/lib/graphql/language/visitor.rb +59 -55
  60. data/lib/graphql/pagination/connection.rb +1 -1
  61. data/lib/graphql/query/context/scoped_context.rb +1 -1
  62. data/lib/graphql/query/context.rb +6 -5
  63. data/lib/graphql/query/variable_validation_error.rb +1 -1
  64. data/lib/graphql/query.rb +19 -23
  65. data/lib/graphql/railtie.rb +7 -0
  66. data/lib/graphql/schema/addition.rb +1 -1
  67. data/lib/graphql/schema/argument.rb +7 -8
  68. data/lib/graphql/schema/build_from_definition.rb +99 -53
  69. data/lib/graphql/schema/directive/flagged.rb +3 -1
  70. data/lib/graphql/schema/directive.rb +2 -2
  71. data/lib/graphql/schema/enum.rb +36 -1
  72. data/lib/graphql/schema/enum_value.rb +1 -1
  73. data/lib/graphql/schema/field/scope_extension.rb +1 -1
  74. data/lib/graphql/schema/field.rb +27 -13
  75. data/lib/graphql/schema/field_extension.rb +1 -1
  76. data/lib/graphql/schema/has_single_input_argument.rb +3 -1
  77. data/lib/graphql/schema/input_object.rb +77 -40
  78. data/lib/graphql/schema/interface.rb +3 -2
  79. data/lib/graphql/schema/loader.rb +1 -1
  80. data/lib/graphql/schema/member/has_arguments.rb +25 -17
  81. data/lib/graphql/schema/member/has_dataloader.rb +60 -0
  82. data/lib/graphql/schema/member/has_deprecation_reason.rb +15 -0
  83. data/lib/graphql/schema/member/has_directives.rb +4 -4
  84. data/lib/graphql/schema/member/has_fields.rb +19 -1
  85. data/lib/graphql/schema/member/has_interfaces.rb +5 -5
  86. data/lib/graphql/schema/member/has_validators.rb +1 -1
  87. data/lib/graphql/schema/member/scoped.rb +1 -1
  88. data/lib/graphql/schema/member/type_system_helpers.rb +1 -1
  89. data/lib/graphql/schema/member.rb +1 -0
  90. data/lib/graphql/schema/object.rb +25 -8
  91. data/lib/graphql/schema/relay_classic_mutation.rb +0 -1
  92. data/lib/graphql/schema/resolver.rb +12 -10
  93. data/lib/graphql/schema/subscription.rb +52 -6
  94. data/lib/graphql/schema/union.rb +1 -1
  95. data/lib/graphql/schema/validator/required_validator.rb +23 -6
  96. data/lib/graphql/schema/validator.rb +1 -1
  97. data/lib/graphql/schema/visibility/migration.rb +1 -0
  98. data/lib/graphql/schema/visibility/profile.rb +95 -243
  99. data/lib/graphql/schema/visibility/visit.rb +190 -0
  100. data/lib/graphql/schema/visibility.rb +169 -28
  101. data/lib/graphql/schema/warden.rb +18 -5
  102. data/lib/graphql/schema.rb +93 -44
  103. data/lib/graphql/static_validation/all_rules.rb +1 -1
  104. data/lib/graphql/static_validation/rules/argument_names_are_unique.rb +1 -1
  105. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -1
  106. data/lib/graphql/static_validation/rules/fields_will_merge.rb +1 -1
  107. data/lib/graphql/static_validation/rules/no_definitions_are_present.rb +1 -1
  108. data/lib/graphql/static_validation/rules/not_single_subscription_error.rb +25 -0
  109. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +1 -1
  110. data/lib/graphql/static_validation/rules/subscription_root_exists_and_single_subscription_selection.rb +26 -0
  111. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +1 -1
  112. data/lib/graphql/static_validation/rules/variable_names_are_unique.rb +1 -1
  113. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +1 -1
  114. data/lib/graphql/static_validation/validation_context.rb +1 -0
  115. data/lib/graphql/static_validation/validator.rb +6 -1
  116. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +1 -1
  117. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +12 -10
  118. data/lib/graphql/subscriptions/event.rb +12 -1
  119. data/lib/graphql/subscriptions/serialize.rb +1 -1
  120. data/lib/graphql/subscriptions.rb +1 -1
  121. data/lib/graphql/testing/helpers.rb +7 -4
  122. data/lib/graphql/tracing/active_support_notifications_trace.rb +14 -3
  123. data/lib/graphql/tracing/active_support_notifications_tracing.rb +1 -1
  124. data/lib/graphql/tracing/appoptics_trace.rb +9 -1
  125. data/lib/graphql/tracing/appoptics_tracing.rb +7 -0
  126. data/lib/graphql/tracing/appsignal_trace.rb +32 -55
  127. data/lib/graphql/tracing/appsignal_tracing.rb +2 -0
  128. data/lib/graphql/tracing/call_legacy_tracers.rb +66 -0
  129. data/lib/graphql/tracing/data_dog_trace.rb +46 -158
  130. data/lib/graphql/tracing/data_dog_tracing.rb +2 -0
  131. data/lib/graphql/tracing/detailed_trace/memory_backend.rb +60 -0
  132. data/lib/graphql/tracing/detailed_trace/redis_backend.rb +72 -0
  133. data/lib/graphql/tracing/detailed_trace.rb +93 -0
  134. data/lib/graphql/tracing/legacy_hooks_trace.rb +1 -0
  135. data/lib/graphql/tracing/legacy_trace.rb +4 -61
  136. data/lib/graphql/tracing/monitor_trace.rb +283 -0
  137. data/lib/graphql/tracing/new_relic_trace.rb +47 -54
  138. data/lib/graphql/tracing/new_relic_tracing.rb +2 -0
  139. data/lib/graphql/tracing/notifications_trace.rb +182 -34
  140. data/lib/graphql/tracing/notifications_tracing.rb +2 -0
  141. data/lib/graphql/tracing/null_trace.rb +9 -0
  142. data/lib/graphql/tracing/perfetto_trace/trace.proto +141 -0
  143. data/lib/graphql/tracing/perfetto_trace/trace_pb.rb +33 -0
  144. data/lib/graphql/tracing/perfetto_trace.rb +734 -0
  145. data/lib/graphql/tracing/platform_trace.rb +5 -0
  146. data/lib/graphql/tracing/prometheus_trace/graphql_collector.rb +2 -0
  147. data/lib/graphql/tracing/prometheus_trace.rb +72 -68
  148. data/lib/graphql/tracing/prometheus_tracing.rb +2 -0
  149. data/lib/graphql/tracing/scout_trace.rb +32 -55
  150. data/lib/graphql/tracing/scout_tracing.rb +2 -0
  151. data/lib/graphql/tracing/sentry_trace.rb +62 -94
  152. data/lib/graphql/tracing/statsd_trace.rb +33 -41
  153. data/lib/graphql/tracing/statsd_tracing.rb +2 -0
  154. data/lib/graphql/tracing/trace.rb +111 -1
  155. data/lib/graphql/tracing.rb +31 -30
  156. data/lib/graphql/types/relay/connection_behaviors.rb +3 -3
  157. data/lib/graphql/types/relay/edge_behaviors.rb +2 -2
  158. data/lib/graphql/types.rb +18 -11
  159. data/lib/graphql/version.rb +1 -1
  160. data/lib/graphql.rb +55 -47
  161. metadata +146 -11
  162. data/lib/graphql/backtrace/inspect_result.rb +0 -38
  163. data/lib/graphql/backtrace/trace.rb +0 -93
  164. data/lib/graphql/backtrace/tracer.rb +0 -80
  165. data/lib/graphql/schema/null_mask.rb +0 -11
  166. data/lib/graphql/static_validation/rules/subscription_root_exists.rb +0 -17
@@ -1,11 +1,14 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require "graphql/tracing"
4
+
2
5
  module GraphQL
3
6
  module Tracing
4
7
  # This is the base class for a `trace` instance whose methods are called during query execution.
5
8
  # "Trace modes" are subclasses of this with custom tracing modules mixed in.
6
9
  #
7
10
  # A trace module may implement any of the methods on `Trace`, being sure to call `super`
8
- # to continue any tracing hooks and call the actual runtime behavior. See {GraphQL::Backtrace::Trace} for example.
11
+ # to continue any tracing hooks and call the actual runtime behavior.
9
12
  #
10
13
  class Trace
11
14
  # @param multiplex [GraphQL::Execution::Multiplex, nil]
@@ -20,6 +23,8 @@ module GraphQL
20
23
  yield
21
24
  end
22
25
 
26
+ # @param query_string [String]
27
+ # @return [void]
23
28
  def parse(query_string:)
24
29
  yield
25
30
  end
@@ -28,6 +33,22 @@ module GraphQL
28
33
  yield
29
34
  end
30
35
 
36
+ def begin_validate(query, validate)
37
+ end
38
+
39
+ def end_validate(query, validate, errors)
40
+ end
41
+
42
+ # @param multiplex [GraphQL::Execution::Multiplex]
43
+ # @param analyzers [Array<Class>]
44
+ # @return [void]
45
+ def begin_analyze_multiplex(multiplex, analyzers); end
46
+ # @param multiplex [GraphQL::Execution::Multiplex]
47
+ # @param analyzers [Array<Class>]
48
+ # @return [void]
49
+ def end_analyze_multiplex(multiplex, analyzers); end
50
+ # @param multiplex [GraphQL::Execution::Multiplex]
51
+ # @return [void]
31
52
  def analyze_multiplex(multiplex:)
32
53
  yield
33
54
  end
@@ -36,6 +57,9 @@ module GraphQL
36
57
  yield
37
58
  end
38
59
 
60
+ # This wraps an entire `.execute` call.
61
+ # @param multiplex [GraphQL::Execution::Multiplex]
62
+ # @return [void]
39
63
  def execute_multiplex(multiplex:)
40
64
  yield
41
65
  end
@@ -48,6 +72,20 @@ module GraphQL
48
72
  yield
49
73
  end
50
74
 
75
+ # GraphQL is about to resolve this field
76
+ # @param field [GraphQL::Schema::Field]
77
+ # @param object [GraphQL::Schema::Object]
78
+ # @param arguments [Hash]
79
+ # @param query [GraphQL::Query]
80
+ def begin_execute_field(field, object, arguments, query); end
81
+ # GraphQL just finished resolving this field
82
+ # @param field [GraphQL::Schema::Field]
83
+ # @param object [GraphQL::Schema::Object]
84
+ # @param arguments [Hash]
85
+ # @param query [GraphQL::Query]
86
+ # @param result [Object]
87
+ def end_execute_field(field, object, arguments, query, result); end
88
+
51
89
  def execute_field(field:, query:, ast_node:, arguments:, object:)
52
90
  yield
53
91
  end
@@ -60,6 +98,22 @@ module GraphQL
60
98
  yield
61
99
  end
62
100
 
101
+ # A call to `.authorized?` is starting
102
+ # @param type [Class<GraphQL::Schema::Object>]
103
+ # @param object [Object]
104
+ # @param context [GraphQL::Query::Context]
105
+ # @return [void]
106
+ def begin_authorized(type, object, context)
107
+ end
108
+ # A call to `.authorized?` just finished
109
+ # @param type [Class<GraphQL::Schema::Object>]
110
+ # @param object [Object]
111
+ # @param context [GraphQL::Query::Context]
112
+ # @param authorized_result [Boolean]
113
+ # @return [void]
114
+ def end_authorized(type, object, context, authorized_result)
115
+ end
116
+
63
117
  def authorized_lazy(query:, type:, object:)
64
118
  yield
65
119
  end
@@ -71,6 +125,62 @@ module GraphQL
71
125
  def resolve_type_lazy(query:, type:, object:)
72
126
  yield
73
127
  end
128
+
129
+ # A call to `.resolve_type` is starting
130
+ # @param type [Class<GraphQL::Schema::Union>, Module<GraphQL::Schema::Interface>]
131
+ # @param value [Object]
132
+ # @param context [GraphQL::Query::Context]
133
+ # @return [void]
134
+ def begin_resolve_type(type, value, context)
135
+ end
136
+
137
+ # A call to `.resolve_type` just ended
138
+ # @param type [Class<GraphQL::Schema::Union>, Module<GraphQL::Schema::Interface>]
139
+ # @param value [Object]
140
+ # @param context [GraphQL::Query::Context]
141
+ # @param resolved_type [Class<GraphQL::Schema::Object>]
142
+ # @return [void]
143
+ def end_resolve_type(type, value, context, resolved_type)
144
+ end
145
+
146
+ # A dataloader run is starting
147
+ # @param dataloader [GraphQL::Dataloader]
148
+ # @return [void]
149
+ def begin_dataloader(dataloader); end
150
+ # A dataloader run has ended
151
+ # @param dataloder [GraphQL::Dataloader]
152
+ # @return [void]
153
+ def end_dataloader(dataloader); end
154
+
155
+ # A source with pending keys is about to fetch
156
+ # @param source [GraphQL::Dataloader::Source]
157
+ # @return [void]
158
+ def begin_dataloader_source(source); end
159
+ # A fetch call has just ended
160
+ # @param source [GraphQL::Dataloader::Source]
161
+ # @return [void]
162
+ def end_dataloader_source(source); end
163
+
164
+ # Called when Dataloader spins up a new fiber for GraphQL execution
165
+ # @param jobs [Array<#call>] Execution steps to run
166
+ # @return [void]
167
+ def dataloader_spawn_execution_fiber(jobs); end
168
+ # Called when Dataloader spins up a new fiber for fetching data
169
+ # @param pending_sources [GraphQL::Dataloader::Source] Instances with pending keys
170
+ # @return [void]
171
+ def dataloader_spawn_source_fiber(pending_sources); end
172
+ # Called when an execution or source fiber terminates
173
+ # @return [void]
174
+ def dataloader_fiber_exit; end
175
+
176
+ # Called when a Dataloader fiber is paused to wait for data
177
+ # @param source [GraphQL::Dataloader::Source] The Source whose `load` call initiated this `yield`
178
+ # @return [void]
179
+ def dataloader_fiber_yield(source); end
180
+ # Called when a Dataloader fiber is resumed because data has been loaded
181
+ # @param source [GraphQL::Dataloader::Source] The Source whose `load` call previously caused this Fiber to wait
182
+ # @return [void]
183
+ def dataloader_fiber_resume(source); end
74
184
  end
75
185
  end
76
186
  end
@@ -1,38 +1,39 @@
1
1
  # frozen_string_literal: true
2
- require "graphql/tracing/trace"
3
- require "graphql/tracing/legacy_trace"
4
- require "graphql/tracing/legacy_hooks_trace"
5
2
 
6
- # Legacy tracing:
7
- require "graphql/tracing/active_support_notifications_tracing"
8
- require "graphql/tracing/platform_tracing"
9
- require "graphql/tracing/appoptics_tracing"
10
- require "graphql/tracing/appsignal_tracing"
11
- require "graphql/tracing/data_dog_tracing"
12
- require "graphql/tracing/new_relic_tracing"
13
- require "graphql/tracing/scout_tracing"
14
- require "graphql/tracing/statsd_tracing"
15
- require "graphql/tracing/prometheus_tracing"
16
-
17
- # New Tracing:
18
- require "graphql/tracing/active_support_notifications_trace"
19
- require "graphql/tracing/platform_trace"
20
- require "graphql/tracing/appoptics_trace"
21
- require "graphql/tracing/appsignal_trace"
22
- require "graphql/tracing/data_dog_trace"
23
- require "graphql/tracing/new_relic_trace"
24
- require "graphql/tracing/notifications_trace"
25
- require "graphql/tracing/sentry_trace"
26
- require "graphql/tracing/scout_trace"
27
- require "graphql/tracing/statsd_trace"
28
- require "graphql/tracing/prometheus_trace"
29
- if defined?(PrometheusExporter::Server)
30
- require "graphql/tracing/prometheus_trace/graphql_collector"
31
- end
32
3
 
33
4
  module GraphQL
34
5
  module Tracing
35
- NullTrace = Trace.new
6
+ autoload :Trace, "graphql/tracing/trace"
7
+ autoload :CallLegacyTracers, "graphql/tracing/call_legacy_tracers"
8
+ autoload :LegacyTrace, "graphql/tracing/legacy_trace"
9
+ autoload :LegacyHooksTrace, "graphql/tracing/legacy_hooks_trace"
10
+ autoload :NullTrace, "graphql/tracing/null_trace"
11
+
12
+ autoload :ActiveSupportNotificationsTracing, "graphql/tracing/active_support_notifications_tracing"
13
+ autoload :PlatformTracing, "graphql/tracing/platform_tracing"
14
+ autoload :AppOpticsTracing, "graphql/tracing/appoptics_tracing"
15
+ autoload :AppsignalTracing, "graphql/tracing/appsignal_tracing"
16
+ autoload :DataDogTracing, "graphql/tracing/data_dog_tracing"
17
+ autoload :NewRelicTracing, "graphql/tracing/new_relic_tracing"
18
+ autoload :NotificationsTracing, "graphql/tracing/notifications_tracing"
19
+ autoload :ScoutTracing, "graphql/tracing/scout_tracing"
20
+ autoload :StatsdTracing, "graphql/tracing/statsd_tracing"
21
+ autoload :PrometheusTracing, "graphql/tracing/prometheus_tracing"
22
+
23
+ autoload :ActiveSupportNotificationsTrace, "graphql/tracing/active_support_notifications_trace"
24
+ autoload :PlatformTrace, "graphql/tracing/platform_trace"
25
+ autoload :AppOpticsTrace, "graphql/tracing/appoptics_trace"
26
+ autoload :AppsignalTrace, "graphql/tracing/appsignal_trace"
27
+ autoload :DataDogTrace, "graphql/tracing/data_dog_trace"
28
+ autoload :MonitorTrace, "graphql/tracing/monitor_trace"
29
+ autoload :NewRelicTrace, "graphql/tracing/new_relic_trace"
30
+ autoload :NotificationsTrace, "graphql/tracing/notifications_trace"
31
+ autoload :SentryTrace, "graphql/tracing/sentry_trace"
32
+ autoload :ScoutTrace, "graphql/tracing/scout_trace"
33
+ autoload :StatsdTrace, "graphql/tracing/statsd_trace"
34
+ autoload :PrometheusTrace, "graphql/tracing/prometheus_trace"
35
+ autoload :PerfettoTrace, "graphql/tracing/perfetto_trace"
36
+ autoload :DetailedTrace, "graphql/tracing/detailed_trace"
36
37
 
37
38
  # Objects may include traceable to gain a `.trace(...)` method.
38
39
  # The object must have a `@tracers` ivar of type `Array<<#trace(k, d, &b)>>`.
@@ -13,7 +13,7 @@ module GraphQL
13
13
  child_class.node_nullable(true)
14
14
  child_class.edges_nullable(true)
15
15
  child_class.edge_nullable(true)
16
- child_class.module_eval {
16
+ child_class.module_exec {
17
17
  self.edge_type = nil
18
18
  self.node_type = nil
19
19
  self.edge_class = nil
@@ -196,7 +196,7 @@ module GraphQL
196
196
  def edges
197
197
  # Assume that whatever authorization needed to happen
198
198
  # already happened at the connection level.
199
- current_runtime_state = Thread.current[:__graphql_runtime_info]
199
+ current_runtime_state = Fiber[:__graphql_runtime_info]
200
200
  query_runtime_state = current_runtime_state[context.query]
201
201
  query_runtime_state.was_authorized_by_scope_items = @object.was_authorized_by_scope_items?
202
202
  @object.edges
@@ -205,7 +205,7 @@ module GraphQL
205
205
  def nodes
206
206
  # Assume that whatever authorization needed to happen
207
207
  # already happened at the connection level.
208
- current_runtime_state = Thread.current[:__graphql_runtime_info]
208
+ current_runtime_state = Fiber[:__graphql_runtime_info]
209
209
  query_runtime_state = current_runtime_state[context.query]
210
210
  query_runtime_state.was_authorized_by_scope_items = @object.was_authorized_by_scope_items?
211
211
  @object.nodes
@@ -8,13 +8,13 @@ module GraphQL
8
8
  child_class.description("An edge in a connection.")
9
9
  child_class.field(:cursor, String, null: false, description: "A cursor for use in pagination.")
10
10
  child_class.extend(ClassMethods)
11
- child_class.class_eval { self.node_type = nil }
11
+ child_class.class_exec { self.node_type = nil }
12
12
  child_class.node_nullable(true)
13
13
  child_class.default_broadcastable(nil)
14
14
  end
15
15
 
16
16
  def node
17
- current_runtime_state = Thread.current[:__graphql_runtime_info]
17
+ current_runtime_state = Fiber[:__graphql_runtime_info]
18
18
  query_runtime_state = current_runtime_state[context.query]
19
19
  query_runtime_state.was_authorized_by_scope_items = @object.was_authorized_by_scope_items?
20
20
  @object.node
data/lib/graphql/types.rb CHANGED
@@ -1,12 +1,19 @@
1
1
  # frozen_string_literal: true
2
- require "graphql/types/boolean"
3
- require "graphql/types/big_int"
4
- require "graphql/types/float"
5
- require "graphql/types/id"
6
- require "graphql/types/int"
7
- require "graphql/types/iso_8601_date"
8
- require "graphql/types/iso_8601_date_time"
9
- require "graphql/types/iso_8601_duration"
10
- require "graphql/types/json"
11
- require "graphql/types/string"
12
- require "graphql/types/relay"
2
+
3
+ module GraphQL
4
+ module Types
5
+ extend Autoload
6
+
7
+ autoload :Boolean, "graphql/types/boolean"
8
+ autoload :BigInt, "graphql/types/big_int"
9
+ autoload :Float, "graphql/types/float"
10
+ autoload :ID, "graphql/types/id"
11
+ autoload :Int, "graphql/types/int"
12
+ autoload :JSON, "graphql/types/json"
13
+ autoload :String, "graphql/types/string"
14
+ autoload :ISO8601Date, "graphql/types/iso_8601_date"
15
+ autoload :ISO8601DateTime, "graphql/types/iso_8601_date_time"
16
+ autoload :ISO8601Duration, "graphql/types/iso_8601_duration"
17
+ autoload :Relay, "graphql/types/relay"
18
+ end
19
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module GraphQL
3
- VERSION = "2.4.3"
3
+ VERSION = "2.5.2"
4
4
  end
data/lib/graphql.rb CHANGED
@@ -5,8 +5,19 @@ require "set"
5
5
  require "singleton"
6
6
  require "forwardable"
7
7
  require "fiber/storage"
8
+ require "graphql/autoload"
8
9
 
9
10
  module GraphQL
11
+ extend Autoload
12
+
13
+ # Load all `autoload`-configured classes, and also eager-load dependents who have autoloads of their own.
14
+ def self.eager_load!
15
+ super
16
+ Query.eager_load!
17
+ Types.eager_load!
18
+ Schema.eager_load!
19
+ end
20
+
10
21
  class Error < StandardError
11
22
  end
12
23
 
@@ -74,53 +85,50 @@ This is probably a bug in GraphQL-Ruby, please report this error on GitHub: http
74
85
  end
75
86
 
76
87
  self.reject_numbers_followed_by_names = false
77
- end
78
88
 
79
- # Order matters for these:
80
-
81
- require "graphql/execution_error"
82
- require "graphql/runtime_type_error"
83
- require "graphql/unresolved_type_error"
84
- require "graphql/invalid_null_error"
85
- require "graphql/analysis_error"
86
- require "graphql/coercion_error"
87
- require "graphql/invalid_name_error"
88
- require "graphql/integer_decoding_error"
89
- require "graphql/integer_encoding_error"
90
- require "graphql/string_encoding_error"
91
- require "graphql/date_encoding_error"
92
- require "graphql/duration_encoding_error"
93
- require "graphql/type_kinds"
94
- require "graphql/name_validator"
95
- require "graphql/language"
96
-
97
- require_relative "./graphql/railtie" if defined? Rails::Railtie
98
-
99
- require "graphql/analysis"
100
- require "graphql/tracing"
101
- require "graphql/dig"
102
- require "graphql/execution"
103
- require "graphql/pagination"
104
- require "graphql/schema"
105
- require "graphql/query"
106
- require "graphql/dataloader"
107
- require "graphql/types"
108
- require "graphql/static_validation"
109
- require "graphql/execution"
110
- require "graphql/schema/built_in_types"
111
- require "graphql/schema/loader"
112
- require "graphql/schema/printer"
113
- require "graphql/introspection"
114
- require "graphql/relay"
89
+ autoload :ExecutionError, "graphql/execution_error"
90
+ autoload :RuntimeTypeError, "graphql/runtime_type_error"
91
+ autoload :UnresolvedTypeError, "graphql/unresolved_type_error"
92
+ autoload :InvalidNullError, "graphql/invalid_null_error"
93
+ autoload :AnalysisError, "graphql/analysis_error"
94
+ autoload :CoercionError, "graphql/coercion_error"
95
+ autoload :InvalidNameError, "graphql/invalid_name_error"
96
+ autoload :IntegerDecodingError, "graphql/integer_decoding_error"
97
+ autoload :IntegerEncodingError, "graphql/integer_encoding_error"
98
+ autoload :StringEncodingError, "graphql/string_encoding_error"
99
+ autoload :DateEncodingError, "graphql/date_encoding_error"
100
+ autoload :DurationEncodingError, "graphql/duration_encoding_error"
101
+ autoload :TypeKinds, "graphql/type_kinds"
102
+ autoload :NameValidator, "graphql/name_validator"
103
+ autoload :Language, "graphql/language"
104
+
105
+ autoload :Analysis, "graphql/analysis"
106
+ autoload :Tracing, "graphql/tracing"
107
+ autoload :Dig, "graphql/dig"
108
+ autoload :Execution, "graphql/execution"
109
+ autoload :Pagination, "graphql/pagination"
110
+ autoload :Schema, "graphql/schema"
111
+ autoload :Query, "graphql/query"
112
+ autoload :Dataloader, "graphql/dataloader"
113
+ autoload :Types, "graphql/types"
114
+ autoload :StaticValidation, "graphql/static_validation"
115
+ autoload :Execution, "graphql/execution"
116
+ autoload :Introspection, "graphql/introspection"
117
+ autoload :Relay, "graphql/relay"
118
+ autoload :Subscriptions, "graphql/subscriptions"
119
+ autoload :ParseError, "graphql/parse_error"
120
+ autoload :Backtrace, "graphql/backtrace"
121
+
122
+ autoload :UnauthorizedError, "graphql/unauthorized_error"
123
+ autoload :UnauthorizedEnumValueError, "graphql/unauthorized_enum_value_error"
124
+ autoload :UnauthorizedFieldError, "graphql/unauthorized_field_error"
125
+ autoload :LoadApplicationObjectFailedError, "graphql/load_application_object_failed_error"
126
+ autoload :Testing, "graphql/testing"
127
+ autoload :Current, "graphql/current"
128
+ if defined?(::Rails::Engine)
129
+ autoload :Dashboard, 'graphql/dashboard'
130
+ end
131
+ end
115
132
 
116
133
  require "graphql/version"
117
- require "graphql/subscriptions"
118
- require "graphql/parse_error"
119
- require "graphql/backtrace"
120
-
121
- require "graphql/unauthorized_error"
122
- require "graphql/unauthorized_enum_value_error"
123
- require "graphql/unauthorized_field_error"
124
- require "graphql/load_application_object_failed_error"
125
- require "graphql/testing"
126
- require "graphql/current"
134
+ require "graphql/railtie" if defined? Rails::Railtie