@reventlessdev/reventless-graphql-server 1.0.0-alpha.4 → 1.0.0-alpha.41

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,299 @@
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.41 (2026-07-30)
7
+
8
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
9
+
10
+
11
+
12
+
13
+
14
+ # 1.0.0-alpha.40 (2026-07-30)
15
+
16
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
17
+
18
+
19
+
20
+
21
+
22
+ # 1.0.0-alpha.39 (2026-07-29)
23
+
24
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
25
+
26
+
27
+
28
+
29
+
30
+ # 1.0.0-alpha.38 (2026-07-28)
31
+
32
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
33
+
34
+
35
+
36
+
37
+
38
+ # 1.0.0-alpha.37 (2026-07-28)
39
+
40
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
41
+
42
+
43
+
44
+
45
+
46
+ # 1.0.0-alpha.36 (2026-07-28)
47
+
48
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
49
+
50
+
51
+
52
+
53
+
54
+ # 1.0.0-alpha.35 (2026-07-28)
55
+
56
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
57
+
58
+
59
+
60
+
61
+
62
+ # 1.0.0-alpha.34 (2026-07-27)
63
+
64
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
65
+
66
+
67
+
68
+
69
+
70
+ # 1.0.0-alpha.33 (2026-07-27)
71
+
72
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
73
+
74
+
75
+
76
+
77
+
78
+ # 1.0.0-alpha.32 (2026-07-27)
79
+
80
+ ### Bug Fixes
81
+
82
+ * **graphql:** keep a repeat mutation registration from duplicating SDL ([b54e844](https://github.com/ReventlessDev/reventless-core/commit/b54e8446236e16196a40a1a7df9f7ba84b03b167))
83
+
84
+
85
+ # 1.0.0-alpha.31 (2026-07-27)
86
+
87
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
88
+
89
+
90
+
91
+
92
+
93
+ # 1.0.0-alpha.30 (2026-07-27)
94
+
95
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
96
+
97
+
98
+
99
+
100
+
101
+ # 1.0.0-alpha.29 (2026-07-26)
102
+
103
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
104
+
105
+
106
+
107
+
108
+
109
+ # 1.0.0-alpha.28 (2026-07-26)
110
+
111
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
112
+
113
+
114
+
115
+
116
+
117
+ # 1.0.0-alpha.27 (2026-07-24)
118
+
119
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
120
+
121
+
122
+
123
+
124
+
125
+ # 1.0.0-alpha.26 (2026-07-23)
126
+
127
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
128
+
129
+
130
+
131
+
132
+
133
+ # 1.0.0-alpha.25 (2026-07-22)
134
+
135
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
136
+
137
+
138
+
139
+
140
+
141
+ # 1.0.0-alpha.24 (2026-07-22)
142
+
143
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
144
+
145
+
146
+
147
+
148
+
149
+ # 1.0.0-alpha.23 (2026-07-22)
150
+
151
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
152
+
153
+
154
+
155
+
156
+
157
+ # 1.0.0-alpha.22 (2026-07-22)
158
+
159
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
160
+
161
+
162
+
163
+
164
+
165
+ # 1.0.0-alpha.21 (2026-07-21)
166
+
167
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
168
+
169
+
170
+
171
+
172
+
173
+ # 1.0.0-alpha.20 (2026-07-20)
174
+
175
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
176
+
177
+
178
+
179
+
180
+
181
+ # 1.0.0-alpha.19 (2026-07-17)
182
+
183
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
184
+
185
+
186
+
187
+
188
+
189
+ # 1.0.0-alpha.18 (2026-07-17)
190
+
191
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
192
+
193
+
194
+
195
+
196
+
197
+ # 1.0.0-alpha.17 (2026-07-16)
198
+
199
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
200
+
201
+
202
+
203
+
204
+
205
+ # 1.0.0-alpha.16 (2026-07-15)
206
+
207
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
208
+
209
+
210
+
211
+
212
+
213
+ # 1.0.0-alpha.15 (2026-07-14)
214
+
215
+ ### Features
216
+
217
+ * surface masked GraphQL resolver errors server-side (local + AWS) ([b3bca51](https://github.com/ReventlessDev/reventless-core/commit/b3bca51b539e40c604b3db338d570de6215ea837))
218
+
219
+
220
+ # 1.0.0-alpha.14 (2026-07-14)
221
+
222
+ ### Features
223
+
224
+ * **local:** plugin=subgraph composition — per-plugin subschemas merged at start (Phase 6, plan complete) ([40f44c5](https://github.com/ReventlessDev/reventless-core/commit/40f44c5c6aa32fbbd64f362841cf41ba4e2fc2e0))
225
+
226
+
227
+ # 1.0.0-alpha.13 (2026-07-14)
228
+
229
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
230
+
231
+
232
+
233
+
234
+
235
+ # 1.0.0-alpha.12 (2026-07-13)
236
+
237
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
238
+
239
+
240
+
241
+
242
+
243
+ # 1.0.0-alpha.11 (2026-07-13)
244
+
245
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
246
+
247
+
248
+
249
+
250
+
251
+ # 1.0.0-alpha.10 (2026-07-13)
252
+
253
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
254
+
255
+
256
+
257
+
258
+
259
+ # 1.0.0-alpha.9 (2026-07-13)
260
+
261
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
262
+
263
+
264
+
265
+
266
+
267
+ # 1.0.0-alpha.8 (2026-07-13)
268
+
269
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
270
+
271
+
272
+
273
+
274
+
275
+ # 1.0.0-alpha.7 (2026-07-13)
276
+
277
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
278
+
279
+
280
+
281
+
282
+
283
+ # 1.0.0-alpha.6 (2026-07-12)
284
+
285
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
286
+
287
+
288
+
289
+
290
+
291
+ # 1.0.0-alpha.5 (2026-07-12)
292
+
293
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
294
+
295
+
296
+
297
+
298
+
6
299
  # 1.0.0-alpha.4 (2026-07-12)
7
300
 
8
301
  ### Features
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-graphql-server",
3
- "version": "1.0.0-alpha.4",
3
+ "version": "1.0.0-alpha.41",
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
- "@reventlessdev/reventless-core": "3.0.0-alpha.157",
8
- "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.20"
7
+ "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.25",
8
+ "@reventlessdev/reventless-core": "3.0.0-alpha.193"
9
9
  },
10
10
  "devDependencies": {
11
- "rescript": "^12.3.0"
11
+ "rescript": "12.3.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "rescript": "^12.3.0"
14
+ "rescript": "12.3.0"
15
15
  },
16
16
  "publishConfig": {
17
17
  "registry": "https://registry.npmjs.org"
@@ -19,7 +19,7 @@
19
19
  "repository": {
20
20
  "type": "git",
21
21
  "url": "git+https://github.com/ReventlessDev/reventless-core.git",
22
- "directory": "reventless/reventless-graphql-server"
22
+ "directory": "reventless/graphql-server"
23
23
  },
24
24
  "scripts": {
25
25
  "build": "rescript build",
@@ -85,7 +85,16 @@ let make = (~label: string="GraphQL"): t => {
85
85
  let lastFullSdl: ref<option<string>> = ref(None)
86
86
 
87
87
  let registerMutations = (~sdlFields: array<string>, ~resolvers: dict<resolverFn>) => {
88
- mutationFields.contents = mutationFields.contents->Array.concat(sdlFields)
88
+ // A mutation field has two legitimate writers: the admin base fragment
89
+ // carries the Plugin aggregate's lifecycle fields, and the aggregate
90
+ // auto-flow registers the same fields when the admin is constructed again
91
+ // for a later deploy onto the same server. buildASTSchema rejects a schema
92
+ // that defines a field twice, so keep the first SDL definition and drop
93
+ // repeats by field name — mirroring the resolver dict, where a repeat
94
+ // registration overwrites by key (last resolver wins).
95
+ let existing = Set.fromArray(mutationFields.contents->Array.map(extractFieldName))
96
+ let fresh = sdlFields->Array.filter(f => !(existing->Set.has(extractFieldName(f))))
97
+ mutationFields.contents = mutationFields.contents->Array.concat(fresh)
89
98
  resolvers->Dict.toArray->Array.forEach(((k, v)) => mutationResolvers.contents->Dict.set(k, v))
90
99
  }
91
100
 
@@ -101,8 +110,15 @@ let make = (~label: string="GraphQL"): t => {
101
110
  )
102
111
  }
103
112
 
113
+ // Identical type blocks dedupe: shared-type registrations (e.g. the
114
+ // CommandResult union family) may be repeated by every component that needs
115
+ // them; a duplicate definition in one document would fail createSchema.
104
116
  let registerTypes = (~sdlTypes: array<string>) => {
105
- typeDefinitions.contents = typeDefinitions.contents->Array.concat(sdlTypes)
117
+ sdlTypes->Array.forEach(t =>
118
+ if !(typeDefinitions.contents->Array.includes(t)) {
119
+ typeDefinitions.contents->Array.push(t)
120
+ }
121
+ )
106
122
  }
107
123
 
108
124
  let getMutationResolver = (fieldName: string): option<resolverFn> =>
@@ -161,12 +177,22 @@ ${mutations}
161
177
  lastFullSdl.contents = Some(sdl)
162
178
  let schema = YG.createSchema({"typeDefs": sdl, "resolvers": resolvers})
163
179
  activeSchema.contents = Some(schema)
180
+ // Route yoga's own logging into the framework logger. error/warn ALWAYS
181
+ // surface (so a masked resolver failure — which yoga reports via logger.error
182
+ // with the original Error even when the client response is masked — is never
183
+ // swallowed), while verbose debug/info stay gated on GRAPHQL_DEBUG.
184
+ let yogaLogging: YG.yogaLogger = {
185
+ debug: a => if debug { log.debug(~comp=label, YG.logArgToString(a)) },
186
+ info: a => if debug { log.info(~comp=label, YG.logArgToString(a)) },
187
+ warn: a => log.warn(~comp=label, YG.logArgToString(a)),
188
+ error: a => log.error(~comp=label, YG.logArgToString(a)),
189
+ }
164
190
  let yoga = switch contextFactory {
165
191
  | Some(ctx) =>
166
192
  YG.createYogaWithContext({
167
193
  "schema": schema,
168
194
  "graphiql": true,
169
- "logging": debug,
195
+ "logging": yogaLogging,
170
196
  "maskedErrors": !debug,
171
197
  "context": ctx,
172
198
  })
@@ -174,7 +200,7 @@ ${mutations}
174
200
  YG.createYoga({
175
201
  "schema": schema,
176
202
  "graphiql": true,
177
- "logging": debug,
203
+ "logging": yogaLogging,
178
204
  "maskedErrors": !debug,
179
205
  })
180
206
  }
@@ -2,7 +2,8 @@
2
2
 
3
3
  import * as Ws from "ws";
4
4
  import * as Http from "http";
5
- import * as GraphqlYoga from "graphql-yoga";
5
+ import * as GraphqlYoga from "@reventlessdev/rescript-graphql-yoga/src/GraphqlYoga.res.mjs";
6
+ import * as GraphqlYoga$1 from "graphql-yoga";
6
7
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
7
8
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
8
9
  import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
@@ -51,7 +52,9 @@ function make(labelOpt) {
51
52
  contents: undefined
52
53
  };
53
54
  let registerMutations = (sdlFields, resolvers) => {
54
- mutationFields.contents = mutationFields.contents.concat(sdlFields);
55
+ let existing = new Set(mutationFields.contents.map(extractFieldName));
56
+ let fresh = sdlFields.filter(f => !existing.has(extractFieldName(f)));
57
+ mutationFields.contents = mutationFields.contents.concat(fresh);
55
58
  Object.entries(resolvers).forEach(param => {
56
59
  mutationResolvers.contents[param[0]] = param[1];
57
60
  });
@@ -69,7 +72,12 @@ function make(labelOpt) {
69
72
  });
70
73
  };
71
74
  let registerTypes = sdlTypes => {
72
- typeDefinitions.contents = typeDefinitions.contents.concat(sdlTypes);
75
+ sdlTypes.forEach(t => {
76
+ if (!typeDefinitions.contents.includes(t)) {
77
+ typeDefinitions.contents.push(t);
78
+ return;
79
+ }
80
+ });
73
81
  };
74
82
  let getMutationResolver = fieldName => mutationResolvers.contents[fieldName];
75
83
  let getQueryResolver = fieldName => queryResolvers.contents[fieldName];
@@ -106,21 +114,39 @@ type Mutation {
106
114
  }
107
115
  let sdl = buildSdl();
108
116
  lastFullSdl.contents = sdl;
109
- let schema = GraphqlYoga.createSchema({
117
+ let schema = GraphqlYoga$1.createSchema({
110
118
  typeDefs: sdl,
111
119
  resolvers: resolvers
112
120
  });
113
121
  activeSchema.contents = Primitive_option.some(schema);
114
- let yoga = contextFactory !== undefined ? GraphqlYoga.createYoga({
122
+ let yogaLogging_debug = a => {
123
+ if (debug) {
124
+ return log.debug(label, undefined, GraphqlYoga.logArgToString(a));
125
+ }
126
+ };
127
+ let yogaLogging_info = a => {
128
+ if (debug) {
129
+ return log.info(label, undefined, GraphqlYoga.logArgToString(a));
130
+ }
131
+ };
132
+ let yogaLogging_warn = a => log.warn(label, undefined, GraphqlYoga.logArgToString(a));
133
+ let yogaLogging_error = a => log.error(label, undefined, GraphqlYoga.logArgToString(a));
134
+ let yogaLogging = {
135
+ debug: yogaLogging_debug,
136
+ info: yogaLogging_info,
137
+ warn: yogaLogging_warn,
138
+ error: yogaLogging_error
139
+ };
140
+ let yoga = contextFactory !== undefined ? GraphqlYoga$1.createYoga({
115
141
  schema: schema,
116
142
  graphiql: true,
117
- logging: debug,
143
+ logging: yogaLogging,
118
144
  maskedErrors: !debug,
119
145
  context: contextFactory
120
- }) : GraphqlYoga.createYoga({
146
+ }) : GraphqlYoga$1.createYoga({
121
147
  schema: schema,
122
148
  graphiql: true,
123
- logging: debug,
149
+ logging: yogaLogging,
124
150
  maskedErrors: !debug
125
151
  });
126
152
  let server = Http.createServer(yoga);