@reventlessdev/reventless-graphql-server 1.0.0-alpha.11 → 1.0.0-alpha.110

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,794 @@
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.110 (2026-09-11)
7
+
8
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
9
+
10
+
11
+
12
+
13
+
14
+ # 1.0.0-alpha.109 (2026-09-09)
15
+
16
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
17
+
18
+
19
+
20
+
21
+
22
+ # 1.0.0-alpha.108 (2026-09-08)
23
+
24
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
25
+
26
+
27
+
28
+
29
+
30
+ # 1.0.0-alpha.107 (2026-09-08)
31
+
32
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
33
+
34
+
35
+
36
+
37
+
38
+ # 1.0.0-alpha.106 (2026-09-07)
39
+
40
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
41
+
42
+
43
+
44
+
45
+
46
+ # 1.0.0-alpha.105 (2026-09-07)
47
+
48
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
49
+
50
+
51
+
52
+
53
+
54
+ # 1.0.0-alpha.104 (2026-09-04)
55
+
56
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
57
+
58
+
59
+
60
+
61
+
62
+ # 1.0.0-alpha.103 (2026-09-04)
63
+
64
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
65
+
66
+
67
+
68
+
69
+
70
+ # 1.0.0-alpha.102 (2026-09-02)
71
+
72
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
73
+
74
+
75
+
76
+
77
+
78
+ # 1.0.0-alpha.101 (2026-09-01)
79
+
80
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
81
+
82
+
83
+
84
+
85
+
86
+ # 1.0.0-alpha.100 (2026-09-01)
87
+
88
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
89
+
90
+
91
+
92
+
93
+
94
+ # 1.0.0-alpha.99 (2026-08-27)
95
+
96
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
97
+
98
+
99
+
100
+
101
+
102
+ # 1.0.0-alpha.98 (2026-08-23)
103
+
104
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
105
+
106
+
107
+
108
+
109
+
110
+ # 1.0.0-alpha.97 (2026-08-23)
111
+
112
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
113
+
114
+
115
+
116
+
117
+
118
+ # 1.0.0-alpha.96 (2026-08-23)
119
+
120
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
121
+
122
+
123
+
124
+
125
+
126
+ # 1.0.0-alpha.95 (2026-08-22)
127
+
128
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
129
+
130
+
131
+
132
+
133
+
134
+ # 1.0.0-alpha.94 (2026-08-21)
135
+
136
+ ### Bug Fixes
137
+
138
+ * **core:** make @resolves/[@resolves](https://github.com/resolves)Many work end to end ([4c52957](https://github.com/ReventlessDev/reventless-core/commit/4c5295759dcb4b3eda4f0f4f2c1bc387fed88fcb))
139
+
140
+
141
+ # 1.0.0-alpha.93 (2026-08-20)
142
+
143
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
144
+
145
+
146
+
147
+
148
+
149
+ # 1.0.0-alpha.92 (2026-08-20)
150
+
151
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
152
+
153
+
154
+
155
+
156
+
157
+ # 1.0.0-alpha.91 (2026-08-20)
158
+
159
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
160
+
161
+
162
+
163
+
164
+
165
+ # 1.0.0-alpha.90 (2026-08-20)
166
+
167
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
168
+
169
+
170
+
171
+
172
+
173
+ # 1.0.0-alpha.89 (2026-08-19)
174
+
175
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
176
+
177
+
178
+
179
+
180
+
181
+ # 1.0.0-alpha.88 (2026-08-18)
182
+
183
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
184
+
185
+
186
+
187
+
188
+
189
+ # 1.0.0-alpha.87 (2026-08-18)
190
+
191
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
192
+
193
+
194
+
195
+
196
+
197
+ # 1.0.0-alpha.86 (2026-08-16)
198
+
199
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
200
+
201
+
202
+
203
+
204
+
205
+ # 1.0.0-alpha.85 (2026-08-16)
206
+
207
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
208
+
209
+
210
+
211
+
212
+
213
+ # 1.0.0-alpha.84 (2026-08-15)
214
+
215
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
216
+
217
+
218
+
219
+
220
+
221
+ # 1.0.0-alpha.83 (2026-08-15)
222
+
223
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
224
+
225
+
226
+
227
+
228
+
229
+ # 1.0.0-alpha.82 (2026-08-14)
230
+
231
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
232
+
233
+
234
+
235
+
236
+
237
+ # 1.0.0-alpha.81 (2026-08-14)
238
+
239
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
240
+
241
+
242
+
243
+
244
+
245
+ # 1.0.0-alpha.80 (2026-08-13)
246
+
247
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
248
+
249
+
250
+
251
+
252
+
253
+ # 1.0.0-alpha.79 (2026-08-13)
254
+
255
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
256
+
257
+
258
+
259
+
260
+
261
+ # 1.0.0-alpha.78 (2026-08-13)
262
+
263
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
264
+
265
+
266
+
267
+
268
+
269
+ # 1.0.0-alpha.77 (2026-08-12)
270
+
271
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
272
+
273
+
274
+
275
+
276
+
277
+ # 1.0.0-alpha.76 (2026-08-12)
278
+
279
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
280
+
281
+
282
+
283
+
284
+
285
+ # 1.0.0-alpha.75 (2026-08-12)
286
+
287
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
288
+
289
+
290
+
291
+
292
+
293
+ # 1.0.0-alpha.74 (2026-08-12)
294
+
295
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
296
+
297
+
298
+
299
+
300
+
301
+ # 1.0.0-alpha.73 (2026-08-12)
302
+
303
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
304
+
305
+
306
+
307
+
308
+
309
+ # 1.0.0-alpha.72 (2026-08-11)
310
+
311
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
312
+
313
+
314
+
315
+
316
+
317
+ # 1.0.0-alpha.71 (2026-08-10)
318
+
319
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
320
+
321
+
322
+
323
+
324
+
325
+ # 1.0.0-alpha.70 (2026-08-10)
326
+
327
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
328
+
329
+
330
+
331
+
332
+
333
+ # 1.0.0-alpha.69 (2026-08-09)
334
+
335
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
336
+
337
+
338
+
339
+
340
+
341
+ # 1.0.0-alpha.68 (2026-08-09)
342
+
343
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
344
+
345
+
346
+
347
+
348
+
349
+ # 1.0.0-alpha.67 (2026-08-09)
350
+
351
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
352
+
353
+
354
+
355
+
356
+
357
+ # 1.0.0-alpha.66 (2026-08-09)
358
+
359
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
360
+
361
+
362
+
363
+
364
+
365
+ # 1.0.0-alpha.65 (2026-08-08)
366
+
367
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
368
+
369
+
370
+
371
+
372
+
373
+ # 1.0.0-alpha.64 (2026-08-08)
374
+
375
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
376
+
377
+
378
+
379
+
380
+
381
+ # 1.0.0-alpha.63 (2026-08-08)
382
+
383
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
384
+
385
+
386
+
387
+
388
+
389
+ # 1.0.0-alpha.62 (2026-08-07)
390
+
391
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
392
+
393
+
394
+
395
+
396
+
397
+ # 1.0.0-alpha.61 (2026-08-05)
398
+
399
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
400
+
401
+
402
+
403
+
404
+
405
+ # 1.0.0-alpha.60 (2026-08-04)
406
+
407
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
408
+
409
+
410
+
411
+
412
+
413
+ # 1.0.0-alpha.59 (2026-08-04)
414
+
415
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
416
+
417
+
418
+
419
+
420
+
421
+ # 1.0.0-alpha.58 (2026-08-04)
422
+
423
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
424
+
425
+
426
+
427
+
428
+
429
+ # 1.0.0-alpha.57 (2026-08-03)
430
+
431
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
432
+
433
+
434
+
435
+
436
+
437
+ # 1.0.0-alpha.56 (2026-08-03)
438
+
439
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
440
+
441
+
442
+
443
+
444
+
445
+ # 1.0.0-alpha.55 (2026-08-03)
446
+
447
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
448
+
449
+
450
+
451
+
452
+
453
+ # 1.0.0-alpha.54 (2026-08-03)
454
+
455
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
456
+
457
+
458
+
459
+
460
+
461
+ # 1.0.0-alpha.53 (2026-08-02)
462
+
463
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
464
+
465
+
466
+
467
+
468
+
469
+ # 1.0.0-alpha.52 (2026-08-02)
470
+
471
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
472
+
473
+
474
+
475
+
476
+
477
+ # 1.0.0-alpha.51 (2026-08-02)
478
+
479
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
480
+
481
+
482
+
483
+
484
+
485
+ # 1.0.0-alpha.50 (2026-08-02)
486
+
487
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
488
+
489
+
490
+
491
+
492
+
493
+ # 1.0.0-alpha.49 (2026-08-02)
494
+
495
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
496
+
497
+
498
+
499
+
500
+
501
+ # 1.0.0-alpha.48 (2026-08-01)
502
+
503
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
504
+
505
+
506
+
507
+
508
+
509
+ # 1.0.0-alpha.47 (2026-08-01)
510
+
511
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
512
+
513
+
514
+
515
+
516
+
517
+ # 1.0.0-alpha.46 (2026-08-01)
518
+
519
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
520
+
521
+
522
+
523
+
524
+
525
+ # 1.0.0-alpha.45 (2026-08-01)
526
+
527
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
528
+
529
+
530
+
531
+
532
+
533
+ # 1.0.0-alpha.44 (2026-07-31)
534
+
535
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
536
+
537
+
538
+
539
+
540
+
541
+ # 1.0.0-alpha.43 (2026-07-30)
542
+
543
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
544
+
545
+
546
+
547
+
548
+
549
+ # 1.0.0-alpha.42 (2026-07-30)
550
+
551
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
552
+
553
+
554
+
555
+
556
+
557
+ # 1.0.0-alpha.41 (2026-07-30)
558
+
559
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
560
+
561
+
562
+
563
+
564
+
565
+ # 1.0.0-alpha.40 (2026-07-30)
566
+
567
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
568
+
569
+
570
+
571
+
572
+
573
+ # 1.0.0-alpha.39 (2026-07-29)
574
+
575
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
576
+
577
+
578
+
579
+
580
+
581
+ # 1.0.0-alpha.38 (2026-07-28)
582
+
583
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
584
+
585
+
586
+
587
+
588
+
589
+ # 1.0.0-alpha.37 (2026-07-28)
590
+
591
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
592
+
593
+
594
+
595
+
596
+
597
+ # 1.0.0-alpha.36 (2026-07-28)
598
+
599
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
600
+
601
+
602
+
603
+
604
+
605
+ # 1.0.0-alpha.35 (2026-07-28)
606
+
607
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
608
+
609
+
610
+
611
+
612
+
613
+ # 1.0.0-alpha.34 (2026-07-27)
614
+
615
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
616
+
617
+
618
+
619
+
620
+
621
+ # 1.0.0-alpha.33 (2026-07-27)
622
+
623
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
624
+
625
+
626
+
627
+
628
+
629
+ # 1.0.0-alpha.32 (2026-07-27)
630
+
631
+ ### Bug Fixes
632
+
633
+ * **graphql:** keep a repeat mutation registration from duplicating SDL ([b54e844](https://github.com/ReventlessDev/reventless-core/commit/b54e8446236e16196a40a1a7df9f7ba84b03b167))
634
+
635
+
636
+ # 1.0.0-alpha.31 (2026-07-27)
637
+
638
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
639
+
640
+
641
+
642
+
643
+
644
+ # 1.0.0-alpha.30 (2026-07-27)
645
+
646
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
647
+
648
+
649
+
650
+
651
+
652
+ # 1.0.0-alpha.29 (2026-07-26)
653
+
654
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
655
+
656
+
657
+
658
+
659
+
660
+ # 1.0.0-alpha.28 (2026-07-26)
661
+
662
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
663
+
664
+
665
+
666
+
667
+
668
+ # 1.0.0-alpha.27 (2026-07-24)
669
+
670
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
671
+
672
+
673
+
674
+
675
+
676
+ # 1.0.0-alpha.26 (2026-07-23)
677
+
678
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
679
+
680
+
681
+
682
+
683
+
684
+ # 1.0.0-alpha.25 (2026-07-22)
685
+
686
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
687
+
688
+
689
+
690
+
691
+
692
+ # 1.0.0-alpha.24 (2026-07-22)
693
+
694
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
695
+
696
+
697
+
698
+
699
+
700
+ # 1.0.0-alpha.23 (2026-07-22)
701
+
702
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
703
+
704
+
705
+
706
+
707
+
708
+ # 1.0.0-alpha.22 (2026-07-22)
709
+
710
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
711
+
712
+
713
+
714
+
715
+
716
+ # 1.0.0-alpha.21 (2026-07-21)
717
+
718
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
719
+
720
+
721
+
722
+
723
+
724
+ # 1.0.0-alpha.20 (2026-07-20)
725
+
726
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
727
+
728
+
729
+
730
+
731
+
732
+ # 1.0.0-alpha.19 (2026-07-17)
733
+
734
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
735
+
736
+
737
+
738
+
739
+
740
+ # 1.0.0-alpha.18 (2026-07-17)
741
+
742
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
743
+
744
+
745
+
746
+
747
+
748
+ # 1.0.0-alpha.17 (2026-07-16)
749
+
750
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
751
+
752
+
753
+
754
+
755
+
756
+ # 1.0.0-alpha.16 (2026-07-15)
757
+
758
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
759
+
760
+
761
+
762
+
763
+
764
+ # 1.0.0-alpha.15 (2026-07-14)
765
+
766
+ ### Features
767
+
768
+ * surface masked GraphQL resolver errors server-side (local + AWS) ([b3bca51](https://github.com/ReventlessDev/reventless-core/commit/b3bca51b539e40c604b3db338d570de6215ea837))
769
+
770
+
771
+ # 1.0.0-alpha.14 (2026-07-14)
772
+
773
+ ### Features
774
+
775
+ * **local:** plugin=subgraph composition — per-plugin subschemas merged at start (Phase 6, plan complete) ([40f44c5](https://github.com/ReventlessDev/reventless-core/commit/40f44c5c6aa32fbbd64f362841cf41ba4e2fc2e0))
776
+
777
+
778
+ # 1.0.0-alpha.13 (2026-07-14)
779
+
780
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
781
+
782
+
783
+
784
+
785
+
786
+ # 1.0.0-alpha.12 (2026-07-13)
787
+
788
+ **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
789
+
790
+
791
+
792
+
793
+
6
794
  # 1.0.0-alpha.11 (2026-07-13)
7
795
 
8
796
  **Note:** Version bump only for package @reventlessdev/reventless-graphql-server
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-graphql-server",
3
- "version": "1.0.0-alpha.11",
3
+ "version": "1.0.0-alpha.110",
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/rescript-graphql-yoga": "1.0.0-alpha.20",
8
- "@reventlessdev/reventless-core": "3.0.0-alpha.164"
7
+ "@reventlessdev/rescript-graphql-yoga": "1.0.0-alpha.28",
8
+ "@reventlessdev/reventless-core": "3.0.0-alpha.262"
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",
@@ -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([])
@@ -85,7 +91,16 @@ let make = (~label: string="GraphQL"): t => {
85
91
  let lastFullSdl: ref<option<string>> = ref(None)
86
92
 
87
93
  let registerMutations = (~sdlFields: array<string>, ~resolvers: dict<resolverFn>) => {
88
- mutationFields.contents = mutationFields.contents->Array.concat(sdlFields)
94
+ // A mutation field has two legitimate writers: the admin base fragment
95
+ // carries the Plugin aggregate's lifecycle fields, and the aggregate
96
+ // auto-flow registers the same fields when the admin is constructed again
97
+ // for a later deploy onto the same server. buildASTSchema rejects a schema
98
+ // that defines a field twice, so keep the first SDL definition and drop
99
+ // repeats by field name — mirroring the resolver dict, where a repeat
100
+ // registration overwrites by key (last resolver wins).
101
+ let existing = Set.fromArray(mutationFields.contents->Array.map(extractFieldName))
102
+ let fresh = sdlFields->Array.filter(f => !(existing->Set.has(extractFieldName(f))))
103
+ mutationFields.contents = mutationFields.contents->Array.concat(fresh)
89
104
  resolvers->Dict.toArray->Array.forEach(((k, v)) => mutationResolvers.contents->Dict.set(k, v))
90
105
  }
91
106
 
@@ -96,13 +111,31 @@ let make = (~label: string="GraphQL"): t => {
96
111
 
97
112
  let registerSubscriptions = (~sdlFields: array<string>, ~resolvers: dict<resolverFn>) => {
98
113
  subscriptionFields.contents = subscriptionFields.contents->Array.concat(sdlFields)
99
- resolvers->Dict.toArray->Array.forEach(((k, v)) =>
100
- subscriptionResolvers.contents->Dict.set(k, v)
101
- )
114
+ resolvers
115
+ ->Dict.toArray
116
+ ->Array.forEach(((k, v)) => subscriptionResolvers.contents->Dict.set(k, v))
117
+ }
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))
102
128
  }
103
129
 
130
+ // Identical type blocks dedupe: shared-type registrations (e.g. the
131
+ // CommandResult union family) may be repeated by every component that needs
132
+ // them; a duplicate definition in one document would fail createSchema.
104
133
  let registerTypes = (~sdlTypes: array<string>) => {
105
- typeDefinitions.contents = typeDefinitions.contents->Array.concat(sdlTypes)
134
+ sdlTypes->Array.forEach(t =>
135
+ if !(typeDefinitions.contents->Array.includes(t)) {
136
+ typeDefinitions.contents->Array.push(t)
137
+ }
138
+ )
106
139
  }
107
140
 
108
141
  let getMutationResolver = (fieldName: string): option<resolverFn> =>
@@ -113,9 +146,7 @@ let make = (~label: string="GraphQL"): t => {
113
146
 
114
147
  let buildSdl = () => {
115
148
  let typesSdl =
116
- typeDefinitions.contents->Array.length > 0
117
- ? typeDefinitions.contents->Array.join("\n\n")
118
- : ""
149
+ typeDefinitions.contents->Array.length > 0 ? typeDefinitions.contents->Array.join("\n\n") : ""
119
150
  let mutations =
120
151
  mutationFields.contents->Array.length > 0
121
152
  ? mutationFields.contents->Array.join("\n")
@@ -135,9 +166,7 @@ ${mutations}
135
166
  ? `\n\ntype Subscription {\n${subscriptionFields.contents->Array.join("\n")}\n}`
136
167
  : ""
137
168
  let base =
138
- typesSdl->String.length > 0
139
- ? typesSdl ++ "\n\n" ++ queriesMutationsSdl
140
- : queriesMutationsSdl
169
+ typesSdl->String.length > 0 ? typesSdl ++ "\n\n" ++ queriesMutationsSdl : queriesMutationsSdl
141
170
  base ++ subscriptionsSdl
142
171
  }
143
172
 
@@ -157,16 +186,35 @@ ${mutations}
157
186
  if subscriptionResolvers.contents->Dict.keysToArray->Array.length > 0 {
158
187
  resolvers->Dict.set("Subscription", subscriptionResolvers.contents)
159
188
  }
189
+ fieldResolvers.contents
190
+ ->Dict.toArray
191
+ ->Array.forEach(((typeName, byField)) => resolvers->Dict.set(typeName, byField))
160
192
  let sdl = buildSdl()
161
193
  lastFullSdl.contents = Some(sdl)
162
194
  let schema = YG.createSchema({"typeDefs": sdl, "resolvers": resolvers})
163
195
  activeSchema.contents = Some(schema)
196
+ // Route yoga's own logging into the framework logger. error/warn ALWAYS
197
+ // surface (so a masked resolver failure — which yoga reports via logger.error
198
+ // with the original Error even when the client response is masked — is never
199
+ // swallowed), while verbose debug/info stay gated on GRAPHQL_DEBUG.
200
+ let yogaLogging: YG.yogaLogger = {
201
+ debug: a =>
202
+ if debug {
203
+ log.debug(~comp=label, YG.logArgToString(a))
204
+ },
205
+ info: a =>
206
+ if debug {
207
+ log.info(~comp=label, YG.logArgToString(a))
208
+ },
209
+ warn: a => log.warn(~comp=label, YG.logArgToString(a)),
210
+ error: a => log.error(~comp=label, YG.logArgToString(a)),
211
+ }
164
212
  let yoga = switch contextFactory {
165
213
  | Some(ctx) =>
166
214
  YG.createYogaWithContext({
167
215
  "schema": schema,
168
216
  "graphiql": true,
169
- "logging": debug,
217
+ "logging": yogaLogging,
170
218
  "maskedErrors": !debug,
171
219
  "context": ctx,
172
220
  })
@@ -174,7 +222,7 @@ ${mutations}
174
222
  YG.createYoga({
175
223
  "schema": schema,
176
224
  "graphiql": true,
177
- "logging": debug,
225
+ "logging": yogaLogging,
178
226
  "maskedErrors": !debug,
179
227
  })
180
228
  }
@@ -185,7 +233,10 @@ ${mutations}
185
233
  if subscriptionResolvers.contents->Dict.keysToArray->Array.length > 0 {
186
234
  let wss = YG.newWebSocketServer({"server": server, "path": "/graphql"})
187
235
  YG.wsUseServer({"schema": schema}, wss)
188
- log.info(~comp=label, `graphql-ws subscriptions on ws://localhost:${port->Int.toString}/graphql`)
236
+ log.info(
237
+ ~comp=label,
238
+ `graphql-ws subscriptions on ws://localhost:${port->Int.toString}/graphql`,
239
+ )
189
240
  }
190
241
  activeServer.contents = Some(server)
191
242
  }
@@ -194,6 +245,7 @@ ${mutations}
194
245
  mutationResolvers.contents = Dict.make()
195
246
  queryResolvers.contents = Dict.make()
196
247
  subscriptionResolvers.contents = Dict.make()
248
+ fieldResolvers.contents = Dict.make()
197
249
  mutationFields.contents = []
198
250
  queryFields.contents = []
199
251
  subscriptionFields.contents = []
@@ -292,6 +344,7 @@ ${mutations}
292
344
  registerQueries,
293
345
  registerSubscriptions,
294
346
  registerTypes,
347
+ registerFieldResolvers,
295
348
  getMutationResolver,
296
349
  getQueryResolver,
297
350
  start,
@@ -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";
@@ -29,6 +30,9 @@ function make(labelOpt) {
29
30
  let subscriptionResolvers = {
30
31
  contents: {}
31
32
  };
33
+ let fieldResolvers = {
34
+ contents: {}
35
+ };
32
36
  let mutationFields = {
33
37
  contents: []
34
38
  };
@@ -51,7 +55,9 @@ function make(labelOpt) {
51
55
  contents: undefined
52
56
  };
53
57
  let registerMutations = (sdlFields, resolvers) => {
54
- mutationFields.contents = mutationFields.contents.concat(sdlFields);
58
+ let existing = new Set(mutationFields.contents.map(extractFieldName));
59
+ let fresh = sdlFields.filter(f => !existing.has(extractFieldName(f)));
60
+ mutationFields.contents = mutationFields.contents.concat(fresh);
55
61
  Object.entries(resolvers).forEach(param => {
56
62
  mutationResolvers.contents[param[0]] = param[1];
57
63
  });
@@ -68,8 +74,27 @@ function make(labelOpt) {
68
74
  subscriptionResolvers.contents[param[0]] = param[1];
69
75
  });
70
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
+ };
71
91
  let registerTypes = sdlTypes => {
72
- typeDefinitions.contents = typeDefinitions.contents.concat(sdlTypes);
92
+ sdlTypes.forEach(t => {
93
+ if (!typeDefinitions.contents.includes(t)) {
94
+ typeDefinitions.contents.push(t);
95
+ return;
96
+ }
97
+ });
73
98
  };
74
99
  let getMutationResolver = fieldName => mutationResolvers.contents[fieldName];
75
100
  let getQueryResolver = fieldName => queryResolvers.contents[fieldName];
@@ -104,23 +129,44 @@ type Mutation {
104
129
  if (Object.keys(subscriptionResolvers.contents).length !== 0) {
105
130
  resolvers["Subscription"] = subscriptionResolvers.contents;
106
131
  }
132
+ Object.entries(fieldResolvers.contents).forEach(param => {
133
+ resolvers[param[0]] = param[1];
134
+ });
107
135
  let sdl = buildSdl();
108
136
  lastFullSdl.contents = sdl;
109
- let schema = GraphqlYoga.createSchema({
137
+ let schema = GraphqlYoga$1.createSchema({
110
138
  typeDefs: sdl,
111
139
  resolvers: resolvers
112
140
  });
113
141
  activeSchema.contents = Primitive_option.some(schema);
114
- let yoga = contextFactory !== undefined ? GraphqlYoga.createYoga({
142
+ let yogaLogging_debug = a => {
143
+ if (debug) {
144
+ return log.debug(label, undefined, GraphqlYoga.logArgToString(a));
145
+ }
146
+ };
147
+ let yogaLogging_info = a => {
148
+ if (debug) {
149
+ return log.info(label, undefined, GraphqlYoga.logArgToString(a));
150
+ }
151
+ };
152
+ let yogaLogging_warn = a => log.warn(label, undefined, GraphqlYoga.logArgToString(a));
153
+ let yogaLogging_error = a => log.error(label, undefined, GraphqlYoga.logArgToString(a));
154
+ let yogaLogging = {
155
+ debug: yogaLogging_debug,
156
+ info: yogaLogging_info,
157
+ warn: yogaLogging_warn,
158
+ error: yogaLogging_error
159
+ };
160
+ let yoga = contextFactory !== undefined ? GraphqlYoga$1.createYoga({
115
161
  schema: schema,
116
162
  graphiql: true,
117
- logging: debug,
163
+ logging: yogaLogging,
118
164
  maskedErrors: !debug,
119
165
  context: contextFactory
120
- }) : GraphqlYoga.createYoga({
166
+ }) : GraphqlYoga$1.createYoga({
121
167
  schema: schema,
122
168
  graphiql: true,
123
- logging: debug,
169
+ logging: yogaLogging,
124
170
  maskedErrors: !debug
125
171
  });
126
172
  let server = Http.createServer(yoga);
@@ -141,6 +187,7 @@ type Mutation {
141
187
  mutationResolvers.contents = {};
142
188
  queryResolvers.contents = {};
143
189
  subscriptionResolvers.contents = {};
190
+ fieldResolvers.contents = {};
144
191
  mutationFields.contents = [];
145
192
  queryFields.contents = [];
146
193
  subscriptionFields.contents = [];
@@ -232,6 +279,7 @@ type Mutation {
232
279
  registerQueries: registerQueries,
233
280
  registerSubscriptions: registerSubscriptions,
234
281
  registerTypes: registerTypes,
282
+ registerFieldResolvers: registerFieldResolvers,
235
283
  getMutationResolver: getMutationResolver,
236
284
  getQueryResolver: getQueryResolver,
237
285
  start: start,
@@ -33,8 +33,7 @@ let sourceBTopic = (returnTypeName: string) => `on${returnTypeName}_stateChanged
33
33
 
34
34
  let makeFieldResolver = (~pubSub: YG.pubSub, topic: string): YG.resolverFn => {
35
35
  Obj.magic({
36
- "subscribe": (_root: JSON.t, _args: JSON.t, _ctx: JSON.t) =>
37
- pubSub->YG.pubSubSubscribe(topic),
36
+ "subscribe": (_root: JSON.t, _args: JSON.t, _ctx: JSON.t) => pubSub->YG.pubSubSubscribe(topic),
38
37
  "resolve": (payload: JSON.t) => payload,
39
38
  })
40
39
  }