@reventlessdev/reventless-graphql-server 1.0.0-alpha.93 → 1.0.0-alpha.94

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 1.0.0-alpha.94 (2026-08-21)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **core:** make @resolves/[@resolves](https://github.com/resolves)Many work end to end ([4c52957](https://github.com/ReventlessDev/reventless-core/commit/4c5295759dcb4b3eda4f0f4f2c1bc387fed88fcb))
11
+
12
+
6
13
  # 1.0.0-alpha.93 (2026-08-20)
7
14
 
8
15
  **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-graphql-server",
3
- "version": "1.0.0-alpha.93",
3
+ "version": "1.0.0-alpha.94",
4
4
  "description": "Transport-neutral GraphQL server runtime for Reventless: schema-from-fragments, resolver registration, an HTTP + graphql-ws listener, and a subscription fan-out bridge with a pluggable PubSub backend",
5
5
  "license": "Apache-2.0",
6
6
  "dependencies": {
7
7
  "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.27",
8
- "@reventlessdev/reventless-core": "3.0.0-alpha.245"
8
+ "@reventlessdev/reventless-core": "3.0.0-alpha.246"
9
9
  },
10
10
  "devDependencies": {
11
11
  "rescript": "12.3.0"
@@ -42,6 +42,11 @@ type t = {
42
42
  registerQueries: (~sdlFields: array<string>, ~resolvers: dict<resolverFn>) => unit,
43
43
  registerSubscriptions: (~sdlFields: array<string>, ~resolvers: dict<resolverFn>) => unit,
44
44
  registerTypes: (~sdlTypes: array<string>) => unit,
45
+ /** Resolvers for fields of an object type rather than of a root type — the
46
+ cross-table fields `@resolves` / `@resolvesMany` add to a queryable. The
47
+ SDL for those fields comes from the plugin's schema fragment, so only the
48
+ resolver map is registered here. */
49
+ registerFieldResolvers: (~typeName: string, ~resolvers: dict<resolverFn>) => unit,
45
50
  getMutationResolver: string => option<resolverFn>,
46
51
  getQueryResolver: string => option<resolverFn>,
47
52
  // `~contextFactory` is the yoga context factory — when supplied, requests
@@ -76,6 +81,7 @@ let make = (~label: string="GraphQL"): t => {
76
81
  let mutationResolvers: ref<dict<resolverFn>> = ref(Dict.make())
77
82
  let queryResolvers: ref<dict<resolverFn>> = ref(Dict.make())
78
83
  let subscriptionResolvers: ref<dict<resolverFn>> = ref(Dict.make())
84
+ let fieldResolvers: ref<dict<dict<resolverFn>>> = ref(Dict.make())
79
85
  let mutationFields: ref<array<string>> = ref([])
80
86
  let queryFields: ref<array<string>> = ref([])
81
87
  let subscriptionFields: ref<array<string>> = ref([])
@@ -110,6 +116,17 @@ let make = (~label: string="GraphQL"): t => {
110
116
  )
111
117
  }
112
118
 
119
+ let registerFieldResolvers = (~typeName: string, ~resolvers: dict<resolverFn>) => {
120
+ let forType = switch fieldResolvers.contents->Dict.get(typeName) {
121
+ | Some(d) => d
122
+ | None =>
123
+ let d = Dict.make()
124
+ fieldResolvers.contents->Dict.set(typeName, d)
125
+ d
126
+ }
127
+ resolvers->Dict.toArray->Array.forEach(((k, v)) => forType->Dict.set(k, v))
128
+ }
129
+
113
130
  // Identical type blocks dedupe: shared-type registrations (e.g. the
114
131
  // CommandResult union family) may be repeated by every component that needs
115
132
  // them; a duplicate definition in one document would fail createSchema.
@@ -173,6 +190,9 @@ ${mutations}
173
190
  if subscriptionResolvers.contents->Dict.keysToArray->Array.length > 0 {
174
191
  resolvers->Dict.set("Subscription", subscriptionResolvers.contents)
175
192
  }
193
+ fieldResolvers.contents
194
+ ->Dict.toArray
195
+ ->Array.forEach(((typeName, byField)) => resolvers->Dict.set(typeName, byField))
176
196
  let sdl = buildSdl()
177
197
  lastFullSdl.contents = Some(sdl)
178
198
  let schema = YG.createSchema({"typeDefs": sdl, "resolvers": resolvers})
@@ -220,6 +240,7 @@ ${mutations}
220
240
  mutationResolvers.contents = Dict.make()
221
241
  queryResolvers.contents = Dict.make()
222
242
  subscriptionResolvers.contents = Dict.make()
243
+ fieldResolvers.contents = Dict.make()
223
244
  mutationFields.contents = []
224
245
  queryFields.contents = []
225
246
  subscriptionFields.contents = []
@@ -318,6 +339,7 @@ ${mutations}
318
339
  registerQueries,
319
340
  registerSubscriptions,
320
341
  registerTypes,
342
+ registerFieldResolvers,
321
343
  getMutationResolver,
322
344
  getQueryResolver,
323
345
  start,
@@ -30,6 +30,9 @@ function make(labelOpt) {
30
30
  let subscriptionResolvers = {
31
31
  contents: {}
32
32
  };
33
+ let fieldResolvers = {
34
+ contents: {}
35
+ };
33
36
  let mutationFields = {
34
37
  contents: []
35
38
  };
@@ -71,6 +74,20 @@ function make(labelOpt) {
71
74
  subscriptionResolvers.contents[param[0]] = param[1];
72
75
  });
73
76
  };
77
+ let registerFieldResolvers = (typeName, resolvers) => {
78
+ let d = fieldResolvers.contents[typeName];
79
+ let forType;
80
+ if (d !== undefined) {
81
+ forType = d;
82
+ } else {
83
+ let d$1 = {};
84
+ fieldResolvers.contents[typeName] = d$1;
85
+ forType = d$1;
86
+ }
87
+ Object.entries(resolvers).forEach(param => {
88
+ forType[param[0]] = param[1];
89
+ });
90
+ };
74
91
  let registerTypes = sdlTypes => {
75
92
  sdlTypes.forEach(t => {
76
93
  if (!typeDefinitions.contents.includes(t)) {
@@ -112,6 +129,9 @@ type Mutation {
112
129
  if (Object.keys(subscriptionResolvers.contents).length !== 0) {
113
130
  resolvers["Subscription"] = subscriptionResolvers.contents;
114
131
  }
132
+ Object.entries(fieldResolvers.contents).forEach(param => {
133
+ resolvers[param[0]] = param[1];
134
+ });
115
135
  let sdl = buildSdl();
116
136
  lastFullSdl.contents = sdl;
117
137
  let schema = GraphqlYoga$1.createSchema({
@@ -167,6 +187,7 @@ type Mutation {
167
187
  mutationResolvers.contents = {};
168
188
  queryResolvers.contents = {};
169
189
  subscriptionResolvers.contents = {};
190
+ fieldResolvers.contents = {};
170
191
  mutationFields.contents = [];
171
192
  queryFields.contents = [];
172
193
  subscriptionFields.contents = [];
@@ -258,6 +279,7 @@ type Mutation {
258
279
  registerQueries: registerQueries,
259
280
  registerSubscriptions: registerSubscriptions,
260
281
  registerTypes: registerTypes,
282
+ registerFieldResolvers: registerFieldResolvers,
261
283
  getMutationResolver: getMutationResolver,
262
284
  getQueryResolver: getQueryResolver,
263
285
  start: start,