elasticgraph-apollo 0.19.2.2 → 0.19.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/apollo_tests_implementation/config/products_schema.rb +2 -2
- data/apollo_tests_implementation/lib/product_resolver.rb +1 -7
- data/lib/elastic_graph/apollo/graphql/apollo_entity_ref_resolver.rb +72 -0
- data/lib/elastic_graph/apollo/schema_definition/api_extension.rb +10 -4
- data/lib/elastic_graph/apollo/schema_definition/interface_type_extension.rb +2 -0
- data/lib/elastic_graph/apollo/schema_definition/object_and_interface_extension.rb +218 -0
- data/lib/elastic_graph/apollo/schema_definition/object_type_extension.rb +2 -0
- metadata +21 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dfc6d3665fbade9f03f4f45fe835c4ed77a136eedc26b0540ee35f2d7e9de49
|
4
|
+
data.tar.gz: 53356460e361d3c3438b2991f9455507cb7019228caafbffb5f577aa7245cf1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de7a3784bf12bd0bd880e144bbd3022208a1d2f07277700a9b64b67fbd10314b4cdf9daf974661fa478e0ceffead64f6b610db8212a0cb365a529135693b00a8
|
7
|
+
data.tar.gz: f2e5c81cb0b62c3d51e7c44ad7018e4d9b6b44b9c0b070297dd85c62836fc5b3cb70dd3f47a4612959f786c4837b3db61cbc4e0550a5b2ff6488b170542a9d91
|
@@ -48,14 +48,14 @@ module ApolloTestImpl
|
|
48
48
|
schema.on_root_query_type do |type|
|
49
49
|
type.field "product", "Product" do |f|
|
50
50
|
f.argument "id", "ID!"
|
51
|
-
f.
|
51
|
+
f.resolve_with :product
|
52
52
|
end
|
53
53
|
|
54
54
|
type.field "deprecatedProduct", "DeprecatedProduct" do |f|
|
55
55
|
f.argument "sku", "String!"
|
56
56
|
f.argument "package", "String!"
|
57
57
|
f.directive "deprecated", reason: "Use product query instead"
|
58
|
-
f.
|
58
|
+
f.resolve_with :product
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -26,13 +26,7 @@ class ProductResolver
|
|
26
26
|
monotonic_clock_deadline: context[:monotonic_clock_deadline],
|
27
27
|
filters: [{"id" => {"equalToAnyOf" => [args.fetch("id")]}}],
|
28
28
|
individual_docs_needed: true,
|
29
|
-
|
30
|
-
id sku package notes
|
31
|
-
variation.id
|
32
|
-
dimensions.size dimensions.weight dimensions.unit
|
33
|
-
createdBy.averageProductsCreatedPerYear createdBy.email createdBy.name createdBy.totalProductsCreated createdBy.yearsOfEmployment
|
34
|
-
research.study.caseNumber research.study.description research.outcome
|
35
|
-
]
|
29
|
+
request_all_fields: true
|
36
30
|
)
|
37
31
|
|
38
32
|
@datastore_router.msearch([query]).fetch(query).documents.first
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Copyright 2024 - 2025 Block, Inc.
|
2
|
+
#
|
3
|
+
# Use of this source code is governed by an MIT-style
|
4
|
+
# license that can be found in the LICENSE file or at
|
5
|
+
# https://opensource.org/licenses/MIT.
|
6
|
+
#
|
7
|
+
# frozen_string_literal: true
|
8
|
+
|
9
|
+
require "elastic_graph/graphql/resolvers/relay_connection/array_adapter"
|
10
|
+
|
11
|
+
module ElasticGraph
|
12
|
+
module Apollo
|
13
|
+
module GraphQL
|
14
|
+
# Namespace for resolvers which provide Apollo entity references from ids.
|
15
|
+
#
|
16
|
+
# @private
|
17
|
+
module ApolloEntityRefResolver
|
18
|
+
# GraphQL resolver for fields defined with `apollo_entity_ref_field` that are backed by a single id.
|
19
|
+
#
|
20
|
+
# @private
|
21
|
+
class ForSingleId
|
22
|
+
def initialize(elasticgraph_graphql:, config:)
|
23
|
+
@source_id_field = config.fetch(:source_id_field)
|
24
|
+
@exposed_id_field = config.fetch(:exposed_id_field)
|
25
|
+
end
|
26
|
+
|
27
|
+
def resolve(field:, object:, args:, context:)
|
28
|
+
if (id = object.fetch(@source_id_field))
|
29
|
+
{@exposed_id_field => id}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# GraphQL resolver for fields defined with `apollo_entity_ref_field` that are backed by an list of ids.
|
35
|
+
#
|
36
|
+
# @private
|
37
|
+
class ForIdList
|
38
|
+
def initialize(elasticgraph_graphql:, config:)
|
39
|
+
@source_ids_field = config.fetch(:source_ids_field)
|
40
|
+
@exposed_id_field = config.fetch(:exposed_id_field)
|
41
|
+
end
|
42
|
+
|
43
|
+
def resolve(field:, object:, args:, context:)
|
44
|
+
object
|
45
|
+
.fetch(@source_ids_field)
|
46
|
+
.map { |id| {@exposed_id_field => id} }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# GraphQL resolver for paginated fields defined with `apollo_entity_ref_paginated_collection_field`.
|
51
|
+
#
|
52
|
+
# @private
|
53
|
+
class ForPaginatedList
|
54
|
+
def initialize(elasticgraph_graphql:, config:)
|
55
|
+
@for_id_list = ForIdList.new(elasticgraph_graphql:, config:)
|
56
|
+
end
|
57
|
+
|
58
|
+
def resolve(field:, object:, args:, context:)
|
59
|
+
array = @for_id_list.resolve(field:, object:, args:, context:)
|
60
|
+
|
61
|
+
::ElasticGraph::GraphQL::Resolvers::RelayConnection::ArrayAdapter.build(
|
62
|
+
array,
|
63
|
+
args,
|
64
|
+
context.fetch(:elastic_graph_schema).element_names,
|
65
|
+
context
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -8,7 +8,6 @@
|
|
8
8
|
|
9
9
|
require "elastic_graph/errors"
|
10
10
|
require "elastic_graph/version"
|
11
|
-
require "elastic_graph/apollo/graphql/engine_extension"
|
12
11
|
require "elastic_graph/apollo/schema_definition/entity_type_extension"
|
13
12
|
require "elastic_graph/apollo/schema_definition/factory_extension"
|
14
13
|
require "elastic_graph/apollo/schema_definition/state_extension"
|
@@ -125,7 +124,6 @@ module ElasticGraph
|
|
125
124
|
end
|
126
125
|
end
|
127
126
|
|
128
|
-
api.register_graphql_extension GraphQL::EngineExtension, defined_at: "elastic_graph/apollo/graphql/engine_extension"
|
129
127
|
api.state.after_user_definition_complete do
|
130
128
|
api.send(:define_apollo_schema_elements)
|
131
129
|
end
|
@@ -380,11 +378,19 @@ module ElasticGraph
|
|
380
378
|
end
|
381
379
|
end
|
382
380
|
|
381
|
+
require(require_path = "elastic_graph/apollo/graphql/engine_extension")
|
382
|
+
register_graphql_extension GraphQL::EngineExtension, defined_at: require_path
|
383
|
+
|
383
384
|
require(require_path = "elastic_graph/apollo/graphql/entities_field_resolver")
|
384
385
|
register_graphql_resolver :apollo_entities, GraphQL::EntitiesFieldResolver, defined_at: require_path
|
385
386
|
|
386
387
|
require(require_path = "elastic_graph/apollo/graphql/service_field_resolver")
|
387
388
|
register_graphql_resolver :apollo_service, GraphQL::ServiceFieldResolver, defined_at: require_path
|
389
|
+
|
390
|
+
require(require_path = "elastic_graph/apollo/graphql/apollo_entity_ref_resolver")
|
391
|
+
register_graphql_resolver :apollo_entity_ref, GraphQL::ApolloEntityRefResolver::ForSingleId, defined_at: require_path
|
392
|
+
register_graphql_resolver :apollo_entity_ref_list, GraphQL::ApolloEntityRefResolver::ForIdList, defined_at: require_path
|
393
|
+
register_graphql_resolver :apollo_entity_ref_paginated, GraphQL::ApolloEntityRefResolver::ForPaginatedList, defined_at: require_path
|
388
394
|
end
|
389
395
|
|
390
396
|
def apollo_object_type(name, &block)
|
@@ -487,7 +493,7 @@ module ElasticGraph
|
|
487
493
|
EOS
|
488
494
|
end
|
489
495
|
|
490
|
-
f.
|
496
|
+
f.resolve_with :apollo_entities
|
491
497
|
end
|
492
498
|
end
|
493
499
|
|
@@ -503,7 +509,7 @@ module ElasticGraph
|
|
503
509
|
Not intended for use by clients other than Apollo.
|
504
510
|
EOS
|
505
511
|
|
506
|
-
f.
|
512
|
+
f.resolve_with :apollo_service
|
507
513
|
end
|
508
514
|
end
|
509
515
|
end
|
@@ -7,6 +7,7 @@
|
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
9
|
require "elastic_graph/apollo/schema_definition/apollo_directives"
|
10
|
+
require "elastic_graph/apollo/schema_definition/object_and_interface_extension"
|
10
11
|
|
11
12
|
module ElasticGraph
|
12
13
|
module Apollo
|
@@ -20,6 +21,7 @@ module ElasticGraph
|
|
20
21
|
include ApolloDirectives::Policy
|
21
22
|
include ApolloDirectives::RequiresScopes
|
22
23
|
include ApolloDirectives::Tag
|
24
|
+
include ObjectAndInterfaceExtension
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -0,0 +1,218 @@
|
|
1
|
+
# Copyright 2024 - 2025 Block, Inc.
|
2
|
+
#
|
3
|
+
# Use of this source code is governed by an MIT-style
|
4
|
+
# license that can be found in the LICENSE file or at
|
5
|
+
# https://opensource.org/licenses/MIT.
|
6
|
+
#
|
7
|
+
# frozen_string_literal: true
|
8
|
+
|
9
|
+
require "elastic_graph/apollo/schema_definition/apollo_directives"
|
10
|
+
|
11
|
+
module ElasticGraph
|
12
|
+
module Apollo
|
13
|
+
module SchemaDefinition
|
14
|
+
# Extends {ElasticGraph::SchemaDefinition::SchemaElements::ObjectType} and
|
15
|
+
# {ElasticGraph::SchemaDefinition::SchemaElements::InterfaceType} to offer some Apollo-specific APIs.
|
16
|
+
module ObjectAndInterfaceExtension
|
17
|
+
# Exposes an Apollo entity reference as a new field, backed by an `ID` field.
|
18
|
+
#
|
19
|
+
# When integrating an ElasticGraph project as a subgraph into a larger Apollo supergraph, it's useful to be able
|
20
|
+
# to reference entities owned by other subgraphs. The most straightforward way to do this is to define an
|
21
|
+
# _entity reference_ type (e.g. a type containing just the `@key` fields such as `id: ID` and marked as
|
22
|
+
# `resolvable: false` in the `@key` directive), and then define fields using that type. This approach works
|
23
|
+
# particularly well when you plan ahead and know which `ID` fields to model with entity reference types.
|
24
|
+
#
|
25
|
+
# However, on an existing schema where you've got some raw `ID` fields of external entities, it can be quite
|
26
|
+
# difficult to replace the `ID` fields with full-blown entity reference types, as doing so would require migrating
|
27
|
+
# clients and running a full backfill.
|
28
|
+
#
|
29
|
+
# This API provides an alternate solution for this situation: it defines a GraphQL-only field which returns an entity
|
30
|
+
# reference type using a custom GraphQL resolver.
|
31
|
+
#
|
32
|
+
# See the [Apollo docs on referencing an entity without contributing
|
33
|
+
# fields](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/entities/contribute-fields#referencing-an-entity-without-contributing-fields)
|
34
|
+
# for more information.
|
35
|
+
#
|
36
|
+
# @param name [String] Name of the field
|
37
|
+
# @param type [String] Name of the entity reference type (which must be defined separately)
|
38
|
+
# @param id_field_name_in_index [String] Name of the backing ID field in the datastore index
|
39
|
+
# @return [void]
|
40
|
+
# @note This can be used for either a singleton or list reference, based on if `type` is a list.
|
41
|
+
# @note The resulting field will be only be available for clients to request as a return field. It will not support filtering,
|
42
|
+
# sorting, grouping, aggregated values, or highlights.
|
43
|
+
# @see #apollo_entity_ref_paginated_collection_field
|
44
|
+
#
|
45
|
+
# @example Expose `Review.product` and `Review.comments` entity reference fields
|
46
|
+
# ElasticGraph.define_schema do |schema|
|
47
|
+
# schema.object_type "Product" do |t|
|
48
|
+
# t.field "id", "ID"
|
49
|
+
# t.apollo_key fields: "id", resolvable: false
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# schema.object_type "Comment" do |t|
|
53
|
+
# t.field "id", "ID"
|
54
|
+
# t.apollo_key fields: "id", resolvable: false
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# schema.object_type "Review" do |t|
|
58
|
+
# t.field "id", "ID"
|
59
|
+
# t.field "score", "Int"
|
60
|
+
#
|
61
|
+
# # Fields originally defined in the first version of the schema
|
62
|
+
# t.field "productId", "ID"
|
63
|
+
# t.field "commentIds", "[ID!]!"
|
64
|
+
#
|
65
|
+
# # New field we're adding to expose the existing `productId` field as a `Product` entity reference.
|
66
|
+
# t.apollo_entity_ref_field "product", "Product", id_field_name_in_index: "productId"
|
67
|
+
#
|
68
|
+
# # New field we're adding to expose the existing `commentIds` field as a list of `Comment` entity references.
|
69
|
+
# t.apollo_entity_ref_field "comments", "[Comment!]!", id_field_name_in_index: "commentIds"
|
70
|
+
#
|
71
|
+
# t.index "reviews"
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
def apollo_entity_ref_field(name, type, id_field_name_in_index:)
|
75
|
+
field(
|
76
|
+
name,
|
77
|
+
type,
|
78
|
+
name_in_index: id_field_name_in_index,
|
79
|
+
**LIMITED_GRAPHQL_ONLY_FIELD_OPTIONS
|
80
|
+
) do |f|
|
81
|
+
validate_entity_ref_options(__method__.to_s, f, id_field_name_in_index, type) do |exposed_id_field|
|
82
|
+
if f.type.list?
|
83
|
+
f.resolve_with :apollo_entity_ref_list, source_ids_field: id_field_name_in_index, exposed_id_field: exposed_id_field
|
84
|
+
else
|
85
|
+
f.resolve_with :apollo_entity_ref, source_id_field: id_field_name_in_index, exposed_id_field: exposed_id_field
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
yield f if block_given?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Exposes a collection of Apollo entity references as a new paginated field, backed by an `ID` field.
|
94
|
+
#
|
95
|
+
# When integrating an ElasticGraph project as a subgraph into a larger Apollo supergraph, it's useful to be able
|
96
|
+
# to reference entities owned by other subgraphs. The most straightforward way to do this is to define an
|
97
|
+
# _entity reference_ type (e.g. a type containing just the `@key` fields such as `id: ID` and marked as
|
98
|
+
# `resolvable: false` in the `@key` directive), and then define fields using that type. This approach works
|
99
|
+
# particularly well when you plan ahead and know which `ID` fields to model with entity reference types.
|
100
|
+
#
|
101
|
+
# However, on an existing schema where you've got some raw `ID` fields of external entities, it can be quite
|
102
|
+
# difficult to replace the `ID` fields with full-blown entity reference types, as doing so would require migrating
|
103
|
+
# clients and running a full backfill.
|
104
|
+
#
|
105
|
+
# This API provides an alternate solution for this situation: it defines a GraphQL-only field which returns an entity
|
106
|
+
# reference type using a custom GraphQL resolver. In contrast to {#apollo_entity_ref_field}, this defines a field as
|
107
|
+
# a [paginated Relay connection](https://relay.dev/graphql/connections.htm) rather than a simple list.
|
108
|
+
#
|
109
|
+
# See the [Apollo docs on referencing an entity without contributing
|
110
|
+
# fields](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/entities/contribute-fields#referencing-an-entity-without-contributing-fields)
|
111
|
+
# for more information.
|
112
|
+
#
|
113
|
+
# @param name [String] Name of the field
|
114
|
+
# @param element_type [String] Name of the entity reference type (which must be defined separately)
|
115
|
+
# @param id_field_name_in_index [String] Name of the backing ID field in the datastore index
|
116
|
+
# @return [void]
|
117
|
+
# @note This requires `id_field_name_in_index` to be a list or paginated collection field.
|
118
|
+
# @note The resulting field will be only be available for clients to request as a return field. It will not support filtering,
|
119
|
+
# sorting, grouping, aggregated values, or highlights.
|
120
|
+
# @see #apollo_entity_ref_field
|
121
|
+
# @see ElasticGraph::SchemaDefinition::SchemaElements::TypeWithSubfields#paginated_collection_field
|
122
|
+
#
|
123
|
+
# @example Expose `Review.product` and `Review.comments` entity reference fields
|
124
|
+
# ElasticGraph.define_schema do |schema|
|
125
|
+
# schema.object_type "Comment" do |t|
|
126
|
+
# t.field "id", "ID"
|
127
|
+
# t.apollo_key fields: "id", resolvable: false
|
128
|
+
# end
|
129
|
+
#
|
130
|
+
# schema.object_type "Review" do |t|
|
131
|
+
# t.field "id", "ID"
|
132
|
+
# t.field "score", "Int"
|
133
|
+
#
|
134
|
+
# # Field originally defined in the first version of the schema
|
135
|
+
# t.field "commentIds", "[ID!]!"
|
136
|
+
#
|
137
|
+
# # New field we're adding to expose the existing `commentIds` field as a list of `Comment` entity references.
|
138
|
+
# t.apollo_entity_ref_paginated_collection_field "comments", "Comment", id_field_name_in_index: "commentIds"
|
139
|
+
#
|
140
|
+
# t.index "reviews"
|
141
|
+
# end
|
142
|
+
# end
|
143
|
+
def apollo_entity_ref_paginated_collection_field(name, element_type, id_field_name_in_index:)
|
144
|
+
paginated_collection_field(
|
145
|
+
name,
|
146
|
+
element_type,
|
147
|
+
name_in_index: id_field_name_in_index,
|
148
|
+
**LIMITED_GRAPHQL_ONLY_PAGINATED_FIELD_OPTIONS
|
149
|
+
) do |f|
|
150
|
+
validate_entity_ref_options(__method__.to_s, f, id_field_name_in_index, element_type) do |exposed_id_field|
|
151
|
+
backing_indexing_field = f.backing_indexing_field # : ::ElasticGraph::SchemaDefinition::SchemaElements::Field
|
152
|
+
unless backing_indexing_field.type.list?
|
153
|
+
raise Errors::SchemaError, "`#{f.parent_type.name}.#{f.name}` is invalid: `id_field_name_in_index` must reference an " \
|
154
|
+
"id collection field, but the type of `#{id_field_name_in_index}` is `#{backing_indexing_field.type.name}`."
|
155
|
+
end
|
156
|
+
|
157
|
+
f.resolve_with :apollo_entity_ref_paginated, source_ids_field: id_field_name_in_index, exposed_id_field: exposed_id_field
|
158
|
+
|
159
|
+
yield f if block_given?
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
private
|
165
|
+
|
166
|
+
# The set of options for a GraphQL-only field that has all abilities disabled. A field defined with these options
|
167
|
+
# is available to be returned, but cannot be used for anything else (filtering, grouping, sorting, etc.).
|
168
|
+
LIMITED_GRAPHQL_ONLY_FIELD_OPTIONS = {
|
169
|
+
graphql_only: true,
|
170
|
+
filterable: false,
|
171
|
+
groupable: false,
|
172
|
+
aggregatable: false,
|
173
|
+
sortable: false
|
174
|
+
}
|
175
|
+
|
176
|
+
# Like {LIMITED_GRAPHQL_ONLY_FIELD_OPTIONS} but for
|
177
|
+
# {ElasticGraph::SchemaDefinition::SchemaElements::TypeWithSubfields#paginated_collection_field}.
|
178
|
+
# It does not support the `sortable` option.
|
179
|
+
LIMITED_GRAPHQL_ONLY_PAGINATED_FIELD_OPTIONS = LIMITED_GRAPHQL_ONLY_FIELD_OPTIONS.except(:sortable)
|
180
|
+
|
181
|
+
def validate_entity_ref_options(method_name, field, id_field_name_in_index, entity_ref_type_name)
|
182
|
+
# Defer validation since it depends on the definition of the entity ref type, which may be as yet undefined.
|
183
|
+
schema_def_state.after_user_definition_complete do
|
184
|
+
backing_indexing_field = field.backing_indexing_field # : ::ElasticGraph::SchemaDefinition::SchemaElements::Field
|
185
|
+
backing_indexing_field_type = backing_indexing_field.type.fully_unwrapped.name
|
186
|
+
|
187
|
+
unless backing_indexing_field_type == "ID"
|
188
|
+
raise Errors::SchemaError, "`#{field.parent_type.name}.#{field.name}` is invalid: `id_field_name_in_index` must " \
|
189
|
+
"reference an `ID` field, but the type of `#{id_field_name_in_index}` is `#{backing_indexing_field_type}`."
|
190
|
+
end
|
191
|
+
|
192
|
+
entity_ref_type = schema_def_state.type_ref(entity_ref_type_name).fully_unwrapped.as_object_type
|
193
|
+
unless entity_ref_type
|
194
|
+
raise Errors::SchemaError, "`#{field.parent_type.name}.#{field.name}` is invalid: the referenced type " \
|
195
|
+
"(`#{entity_ref_type_name}`) is not an object type as required by `#{method_name}`."
|
196
|
+
end
|
197
|
+
|
198
|
+
entity_ref_type_fields = entity_ref_type.graphql_fields_by_name.keys
|
199
|
+
|
200
|
+
unless entity_ref_type_fields.size == 1
|
201
|
+
raise Errors::SchemaError, "`#{field.parent_type.name}.#{field.name}` is invalid: `#{method_name}` can only be used " \
|
202
|
+
"for types with a single field, but `#{entity_ref_type.name}` has #{entity_ref_type_fields.size} fields."
|
203
|
+
end
|
204
|
+
|
205
|
+
exposed_id_field = entity_ref_type_fields.first
|
206
|
+
exposed_id_field_type = entity_ref_type.graphql_fields_by_name.fetch(exposed_id_field).type
|
207
|
+
unless exposed_id_field_type.unwrap_non_null.name == "ID"
|
208
|
+
raise Errors::SchemaError, "`#{field.parent_type.name}.#{field.name}` is invalid: `#{method_name}` can only be used for " \
|
209
|
+
"types with a single `ID` field, but the type of `#{entity_ref_type.name}.#{exposed_id_field}` is `#{exposed_id_field_type.name}`."
|
210
|
+
end
|
211
|
+
|
212
|
+
yield exposed_id_field
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -7,6 +7,7 @@
|
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
9
|
require "elastic_graph/apollo/schema_definition/apollo_directives"
|
10
|
+
require "elastic_graph/apollo/schema_definition/object_and_interface_extension"
|
10
11
|
|
11
12
|
module ElasticGraph
|
12
13
|
module Apollo
|
@@ -23,6 +24,7 @@ module ElasticGraph
|
|
23
24
|
include ApolloDirectives::RequiresScopes
|
24
25
|
include ApolloDirectives::Shareable
|
25
26
|
include ApolloDirectives::Tag
|
27
|
+
include ObjectAndInterfaceExtension
|
26
28
|
end
|
27
29
|
end
|
28
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticgraph-apollo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.19.
|
4
|
+
version: 0.19.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myron Marston
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
- Block Engineering
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-
|
12
|
+
date: 2025-06-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: elasticgraph-graphql
|
@@ -17,28 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - '='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.19.
|
20
|
+
version: 0.19.3.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - '='
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.19.
|
27
|
+
version: 0.19.3.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: elasticgraph-support
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - '='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.19.
|
34
|
+
version: 0.19.3.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - '='
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.19.
|
41
|
+
version: 0.19.3.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: graphql
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,70 +79,70 @@ dependencies:
|
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.19.
|
82
|
+
version: 0.19.3.0
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.19.
|
89
|
+
version: 0.19.3.0
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: elasticgraph-admin
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.19.
|
96
|
+
version: 0.19.3.0
|
97
97
|
type: :development
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.19.
|
103
|
+
version: 0.19.3.0
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: elasticgraph-elasticsearch
|
106
106
|
requirement: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.19.
|
110
|
+
version: 0.19.3.0
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.19.
|
117
|
+
version: 0.19.3.0
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: elasticgraph-opensearch
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.19.
|
124
|
+
version: 0.19.3.0
|
125
125
|
type: :development
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.19.
|
131
|
+
version: 0.19.3.0
|
132
132
|
- !ruby/object:Gem::Dependency
|
133
133
|
name: elasticgraph-indexer
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.19.
|
138
|
+
version: 0.19.3.0
|
139
139
|
type: :development
|
140
140
|
prerelease: false
|
141
141
|
version_requirements: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.19.
|
145
|
+
version: 0.19.3.0
|
146
146
|
email:
|
147
147
|
- myron@squareup.com
|
148
148
|
executables: []
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- apollo_tests_implementation/docker-compose.yaml
|
161
161
|
- apollo_tests_implementation/lib/product_resolver.rb
|
162
162
|
- apollo_tests_implementation/wait_for_datastore.sh
|
163
|
+
- lib/elastic_graph/apollo/graphql/apollo_entity_ref_resolver.rb
|
163
164
|
- lib/elastic_graph/apollo/graphql/engine_extension.rb
|
164
165
|
- lib/elastic_graph/apollo/graphql/entities_field_resolver.rb
|
165
166
|
- lib/elastic_graph/apollo/graphql/http_endpoint_extension.rb
|
@@ -174,6 +175,7 @@ files:
|
|
174
175
|
- lib/elastic_graph/apollo/schema_definition/field_extension.rb
|
175
176
|
- lib/elastic_graph/apollo/schema_definition/input_type_extension.rb
|
176
177
|
- lib/elastic_graph/apollo/schema_definition/interface_type_extension.rb
|
178
|
+
- lib/elastic_graph/apollo/schema_definition/object_and_interface_extension.rb
|
177
179
|
- lib/elastic_graph/apollo/schema_definition/object_type_extension.rb
|
178
180
|
- lib/elastic_graph/apollo/schema_definition/scalar_type_extension.rb
|
179
181
|
- lib/elastic_graph/apollo/schema_definition/state_extension.rb
|
@@ -186,10 +188,10 @@ licenses:
|
|
186
188
|
- MIT
|
187
189
|
metadata:
|
188
190
|
bug_tracker_uri: https://github.com/block/elasticgraph/issues
|
189
|
-
changelog_uri: https://github.com/block/elasticgraph/releases/tag/v0.19.
|
190
|
-
documentation_uri: https://block.github.io/elasticgraph/api-docs/v0.19.
|
191
|
+
changelog_uri: https://github.com/block/elasticgraph/releases/tag/v0.19.3.0
|
192
|
+
documentation_uri: https://block.github.io/elasticgraph/api-docs/v0.19.3.0/
|
191
193
|
homepage_uri: https://block.github.io/elasticgraph/
|
192
|
-
source_code_uri: https://github.com/block/elasticgraph/tree/v0.19.
|
194
|
+
source_code_uri: https://github.com/block/elasticgraph/tree/v0.19.3.0/elasticgraph-apollo
|
193
195
|
gem_category: extension
|
194
196
|
rdoc_options: []
|
195
197
|
require_paths:
|