@reventlessdev/reventless-local 3.0.0-alpha.151 → 3.0.0-alpha.153

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.
@@ -3,11 +3,16 @@
3
3
  import * as S from "sury/src/S.res.mjs";
4
4
  import * as Http from "http";
5
5
  import * as Graphql from "graphql";
6
+ import * as Stdlib_Dict from "@rescript/runtime/lib/es6/Stdlib_Dict.js";
6
7
  import * as Stdlib_JSON from "@rescript/runtime/lib/es6/Stdlib_JSON.js";
8
+ import * as Stdlib_Array from "@rescript/runtime/lib/es6/Stdlib_Array.js";
9
+ import * as Stdlib_JsExn from "@rescript/runtime/lib/es6/Stdlib_JsExn.js";
7
10
  import * as GraphqlYoga from "graphql-yoga";
8
11
  import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
12
+ import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
9
13
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
10
14
  import * as Identity$Reventless from "@reventlessdev/reventless-spec/src/types/Identity.res.mjs";
15
+ import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
11
16
  import * as Logger$ReventlessCore from "@reventlessdev/reventless-core/src/util/Logger.res.mjs";
12
17
  import * as LocalAuth$ReventlessLocal from "./Auth/LocalAuth.res.mjs";
13
18
  import * as GraphQL_Stitcher$ReventlessCore from "@reventlessdev/reventless-core/src/components/Api/GraphQL_Stitcher.res.mjs";
@@ -140,65 +145,134 @@ function decodeGlobalId(globalId) {
140
145
  }
141
146
  }
142
147
 
143
- let mutationResolvers = {
144
- contents: {}
145
- };
148
+ let platformScope = "platform";
146
149
 
147
- let queryResolvers = {
148
- contents: {}
149
- };
150
+ function makeBucket(scope) {
151
+ return {
152
+ mutationFields: [],
153
+ queryFields: [],
154
+ subscriptionFields: [],
155
+ typeDefinitions: scope === platformScope ? [] : GraphQL_Stitcher$ReventlessCore.relayBaseTypes.slice(),
156
+ mutationResolvers: {},
157
+ queryResolvers: {},
158
+ subscriptionResolvers: {}
159
+ };
160
+ }
150
161
 
151
- let subscriptionResolvers = {
162
+ let buckets = {
152
163
  contents: {}
153
164
  };
154
165
 
155
- let mutationFields = {
156
- contents: []
166
+ let currentScope = {
167
+ contents: platformScope
157
168
  };
158
169
 
159
- let queryFields = {
160
- contents: []
161
- };
170
+ function bucketFor(scope) {
171
+ let b = buckets.contents[scope];
172
+ if (b !== undefined) {
173
+ return b;
174
+ }
175
+ let b$1 = makeBucket(scope);
176
+ buckets.contents[scope] = b$1;
177
+ return b$1;
178
+ }
162
179
 
163
- let subscriptionFields = {
164
- contents: []
165
- };
180
+ function currentBucket() {
181
+ return bucketFor(currentScope.contents);
182
+ }
166
183
 
167
- let typeDefinitions = {
168
- contents: []
169
- };
184
+ function setScope(name) {
185
+ currentScope.contents = name;
186
+ bucketFor(name);
187
+ }
188
+
189
+ function resetScope() {
190
+ currentScope.contents = platformScope;
191
+ }
192
+
193
+ function relabelScope(from, to_) {
194
+ if (from === to_) {
195
+ return;
196
+ }
197
+ let b = buckets.contents[from];
198
+ if (b === undefined) {
199
+ return;
200
+ }
201
+ Stdlib_Dict.$$delete(buckets.contents, from);
202
+ let existing = buckets.contents[to_];
203
+ if (existing !== undefined) {
204
+ existing.mutationFields = existing.mutationFields.concat(b.mutationFields);
205
+ existing.queryFields = existing.queryFields.concat(b.queryFields);
206
+ existing.subscriptionFields = existing.subscriptionFields.concat(b.subscriptionFields);
207
+ b.typeDefinitions.forEach(t => {
208
+ if (!existing.typeDefinitions.includes(t)) {
209
+ existing.typeDefinitions.push(t);
210
+ return;
211
+ }
212
+ });
213
+ Object.entries(b.mutationResolvers).forEach(param => {
214
+ existing.mutationResolvers[param[0]] = param[1];
215
+ });
216
+ Object.entries(b.queryResolvers).forEach(param => {
217
+ existing.queryResolvers[param[0]] = param[1];
218
+ });
219
+ Object.entries(b.subscriptionResolvers).forEach(param => {
220
+ existing.subscriptionResolvers[param[0]] = param[1];
221
+ });
222
+ } else {
223
+ buckets.contents[to_] = b;
224
+ }
225
+ if (currentScope.contents === from) {
226
+ currentScope.contents = to_;
227
+ return;
228
+ }
229
+ }
230
+
231
+ function orderedBuckets() {
232
+ let entries = Object.entries(buckets.contents);
233
+ return entries.filter(param => param[0] === platformScope).concat(entries.filter(param => param[0] !== platformScope));
234
+ }
170
235
 
171
236
  function registerMutations(sdlFields, resolvers) {
172
- mutationFields.contents = mutationFields.contents.concat(sdlFields);
237
+ let b = bucketFor(currentScope.contents);
238
+ b.mutationFields = b.mutationFields.concat(sdlFields);
173
239
  Object.entries(resolvers).forEach(param => {
174
- mutationResolvers.contents[param[0]] = param[1];
240
+ b.mutationResolvers[param[0]] = param[1];
175
241
  });
176
242
  }
177
243
 
178
244
  function registerQueries(sdlFields, resolvers) {
179
- queryFields.contents = queryFields.contents.concat(sdlFields);
245
+ let b = bucketFor(currentScope.contents);
246
+ b.queryFields = b.queryFields.concat(sdlFields);
180
247
  Object.entries(resolvers).forEach(param => {
181
- queryResolvers.contents[param[0]] = param[1];
248
+ b.queryResolvers[param[0]] = param[1];
182
249
  });
183
250
  }
184
251
 
185
252
  function registerSubscriptions(sdlFields, resolvers) {
186
- subscriptionFields.contents = subscriptionFields.contents.concat(sdlFields);
253
+ let b = bucketFor(currentScope.contents);
254
+ b.subscriptionFields = b.subscriptionFields.concat(sdlFields);
187
255
  Object.entries(resolvers).forEach(param => {
188
- subscriptionResolvers.contents[param[0]] = param[1];
256
+ b.subscriptionResolvers[param[0]] = param[1];
189
257
  });
190
258
  }
191
259
 
192
260
  function getMutationResolver(fieldName) {
193
- return mutationResolvers.contents[fieldName];
261
+ return Stdlib_Array.findMap(Object.values(buckets.contents), b => b.mutationResolvers[fieldName]);
194
262
  }
195
263
 
196
264
  function getQueryResolver(fieldName) {
197
- return queryResolvers.contents[fieldName];
265
+ return Stdlib_Array.findMap(Object.values(buckets.contents), b => b.queryResolvers[fieldName]);
198
266
  }
199
267
 
200
268
  function registerTypes(sdlTypes) {
201
- typeDefinitions.contents = typeDefinitions.contents.concat(sdlTypes);
269
+ let b = bucketFor(currentScope.contents);
270
+ sdlTypes.forEach(t => {
271
+ if (!b.typeDefinitions.includes(t)) {
272
+ b.typeDefinitions.push(t);
273
+ return;
274
+ }
275
+ });
202
276
  }
203
277
 
204
278
  let nodeTypeRegistry = {
@@ -255,39 +329,130 @@ let lastFullSdl = {
255
329
  contents: undefined
256
330
  };
257
331
 
332
+ function assembleBucketSdl(typeDefinitions, queryFields, mutationFields, subscriptionFields, withRootDefaults) {
333
+ let sections = [];
334
+ if (typeDefinitions.length !== 0) {
335
+ sections.push(typeDefinitions.join("\n\n"));
336
+ }
337
+ if (withRootDefaults || queryFields.length !== 0) {
338
+ let queries = queryFields.length !== 0 ? queryFields.join("\n") : " _noop: String";
339
+ sections.push(`type Query {\n` + queries + `\n}`);
340
+ }
341
+ if (withRootDefaults || mutationFields.length !== 0) {
342
+ let mutations = mutationFields.length !== 0 ? mutationFields.join("\n") : " _noop: String";
343
+ sections.push(`type Mutation {\n` + mutations + `\n}`);
344
+ }
345
+ if (subscriptionFields.length !== 0) {
346
+ sections.push(`type Subscription {\n` + subscriptionFields.join("\n") + `\n}`);
347
+ }
348
+ return sections.join("\n\n");
349
+ }
350
+
351
+ function buildScopeSdl(b) {
352
+ return assembleBucketSdl(b.typeDefinitions, b.queryFields, b.mutationFields, b.subscriptionFields, false);
353
+ }
354
+
258
355
  function buildSdl() {
259
- let typesSdl = typeDefinitions.contents.length !== 0 ? typeDefinitions.contents.join("\n\n") : "";
260
- let mutations = mutationFields.contents.length !== 0 ? mutationFields.contents.join("\n") : " _noop: String";
261
- let queries = queryFields.contents.length !== 0 ? queryFields.contents.join("\n") : " _noop: String";
262
- let queriesMutationsSdl = `type Query {
263
- ` + queries + `
356
+ let seenTypes = new Set();
357
+ let allTypes = [];
358
+ let allQueries = [];
359
+ let allMutations = [];
360
+ let allSubscriptions = [];
361
+ orderedBuckets().forEach(param => {
362
+ let b = param[1];
363
+ b.typeDefinitions.forEach(t => {
364
+ if (!seenTypes.has(t)) {
365
+ seenTypes.add(t);
366
+ allTypes.push(t);
367
+ return;
368
+ }
369
+ });
370
+ allQueries.push(...b.queryFields);
371
+ allMutations.push(...b.mutationFields);
372
+ allSubscriptions.push(...b.subscriptionFields);
373
+ });
374
+ return assembleBucketSdl(allTypes, allQueries, allMutations, allSubscriptions, true);
264
375
  }
265
- type Mutation {
266
- ` + mutations + `
267
- }`;
268
- let subscriptionsSdl = subscriptionFields.contents.length !== 0 ? `\n\ntype Subscription {\n` + subscriptionFields.contents.join("\n") + `\n}` : "";
269
- let base = typesSdl.length > 0 ? typesSdl + "\n\n" + queriesMutationsSdl : queriesMutationsSdl;
270
- return base + subscriptionsSdl;
376
+
377
+ function exnMessage(exn) {
378
+ return Stdlib_Option.getOr(Stdlib_Option.flatMap(Stdlib_JsExn.fromException(exn), Stdlib_JsExn.message), "unknown error");
379
+ }
380
+
381
+ function scopeResolverMap(b, withRootDefaults) {
382
+ let resolvers = {};
383
+ if (withRootDefaults || Object.keys(b.queryResolvers).length !== 0) {
384
+ resolvers["Query"] = b.queryResolvers;
385
+ }
386
+ if (withRootDefaults || Object.keys(b.mutationResolvers).length !== 0) {
387
+ resolvers["Mutation"] = b.mutationResolvers;
388
+ }
389
+ if (Object.keys(b.subscriptionResolvers).length !== 0) {
390
+ resolvers["Subscription"] = b.subscriptionResolvers;
391
+ }
392
+ return resolvers;
393
+ }
394
+
395
+ function scopeHasFields(b) {
396
+ if (b.mutationFields.length !== 0 || b.queryFields.length !== 0) {
397
+ return true;
398
+ } else {
399
+ return b.subscriptionFields.length !== 0;
400
+ }
401
+ }
402
+
403
+ function composeSchema() {
404
+ orderedBuckets().forEach(param => {
405
+ let b = param[1];
406
+ let scope = param[0];
407
+ if (!(scope !== platformScope && scopeHasFields(b))) {
408
+ return;
409
+ }
410
+ let doc = buildScopeSdl(b);
411
+ try {
412
+ GraphqlYoga.createSchema({
413
+ typeDefs: doc,
414
+ resolvers: scopeResolverMap(b, false)
415
+ });
416
+ return;
417
+ } catch (raw_e) {
418
+ let e = Primitive_exceptions.internalToException(raw_e);
419
+ return Stdlib_JsError.throwWithMessage(`Plugin "` + scope + `" subgraph document is not valid standalone: ` + exnMessage(e));
420
+ }
421
+ });
422
+ let platformBucket = bucketFor(platformScope);
423
+ let docs = [assembleBucketSdl(platformBucket.typeDefinitions, platformBucket.queryFields, platformBucket.mutationFields, platformBucket.subscriptionFields, true)];
424
+ let resolverMaps = [scopeResolverMap(platformBucket, true)];
425
+ orderedBuckets().forEach(param => {
426
+ if (param[0] === platformScope) {
427
+ return;
428
+ }
429
+ let b = param[1];
430
+ let doc = buildScopeSdl(b);
431
+ if (doc.length > 0) {
432
+ docs.push(doc);
433
+ resolverMaps.push(scopeResolverMap(b, false));
434
+ return;
435
+ }
436
+ });
437
+ try {
438
+ return GraphqlYoga.createSchema({
439
+ typeDefs: docs,
440
+ resolvers: resolverMaps
441
+ });
442
+ } catch (raw_e) {
443
+ let e = Primitive_exceptions.internalToException(raw_e);
444
+ return Stdlib_JsError.throwWithMessage(`Cross-plugin schema merge failed (mirrors AWS MERGE_FAILED): ` + exnMessage(e));
445
+ }
271
446
  }
272
447
 
273
448
  function start(portOpt, param, param$1) {
274
449
  let port = portOpt !== undefined ? portOpt : 4000;
275
450
  let match = buildNodeResolver();
276
451
  if (match !== undefined) {
277
- queryResolvers.contents[match[0]] = match[1];
278
- }
279
- let resolvers = {};
280
- resolvers["Query"] = queryResolvers.contents;
281
- resolvers["Mutation"] = mutationResolvers.contents;
282
- if (Object.keys(subscriptionResolvers.contents).length !== 0) {
283
- resolvers["Subscription"] = subscriptionResolvers.contents;
452
+ bucketFor(platformScope).queryResolvers[match[0]] = match[1];
284
453
  }
285
- let sdl = buildSdl();
286
- lastFullSdl.contents = sdl;
287
- let schema = GraphqlYoga.createSchema({
288
- typeDefs: sdl,
289
- resolvers: resolvers
290
- });
454
+ lastFullSdl.contents = buildSdl();
455
+ let schema = composeSchema();
291
456
  activeSchema.contents = Primitive_option.some(schema);
292
457
  let yoga = GraphqlYoga.createYoga({
293
458
  schema: schema,
@@ -319,64 +484,9 @@ function stop() {
319
484
  }
320
485
  }
321
486
 
322
- function rebuildSchema(baseFragment, pluginFragments) {
323
- stop();
324
- let allFragments = [baseFragment].concat(pluginFragments);
325
- let fragmentTypes = allFragments.flatMap(frag => GraphQL_Stitcher$ReventlessCore.decode(frag).types);
326
- let existingNames = new Set(typeDefinitions.contents.map(GraphQL_Stitcher$ReventlessCore.extractLeadingName));
327
- fragmentTypes.forEach(typeDef => {
328
- let name = GraphQL_Stitcher$ReventlessCore.extractLeadingName(typeDef);
329
- if (!existingNames.has(name)) {
330
- typeDefinitions.contents.push(typeDef);
331
- existingNames.add(name);
332
- return;
333
- }
334
- });
335
- let match = buildNodeResolver();
336
- if (match !== undefined) {
337
- queryResolvers.contents[match[0]] = match[1];
338
- }
339
- let fullSdl = buildSdl();
340
- lastFullSdl.contents = fullSdl;
341
- let resolvers = {};
342
- resolvers["Query"] = queryResolvers.contents;
343
- resolvers["Mutation"] = mutationResolvers.contents;
344
- if (Object.keys(subscriptionResolvers.contents).length !== 0) {
345
- resolvers["Subscription"] = subscriptionResolvers.contents;
346
- }
347
- let schema = GraphqlYoga.createSchema({
348
- typeDefs: fullSdl,
349
- resolvers: resolvers
350
- });
351
- activeSchema.contents = Primitive_option.some(schema);
352
- let yoga = GraphqlYoga.createYoga({
353
- schema: schema,
354
- graphiql: true,
355
- logging: debug,
356
- maskedErrors: !debug,
357
- context: Auth_GraphqlContext$ReventlessLocal.buildAuthContext
358
- });
359
- let getSdl = () => {
360
- let s = activeSchema.contents;
361
- if (s !== undefined) {
362
- return Graphql.printSchema(Primitive_option.valFromOption(s));
363
- } else {
364
- return Stdlib_Option.getOr(lastFullSdl.contents, "");
365
- }
366
- };
367
- let server = Http.createServer((req, res) => _dispatch(req, res, yoga, getSdl));
368
- server.listen(4000, () => log.info("GraphQL:Domain", undefined, "rebuilt schema - http://localhost:4000/graphql (SDL: /sdl)"));
369
- activeServer.contents = Primitive_option.some(server);
370
- }
371
-
372
487
  function reset() {
373
- mutationResolvers.contents = {};
374
- queryResolvers.contents = {};
375
- subscriptionResolvers.contents = {};
376
- mutationFields.contents = [];
377
- queryFields.contents = [];
378
- subscriptionFields.contents = [];
379
- typeDefinitions.contents = [];
488
+ buckets.contents = {};
489
+ currentScope.contents = platformScope;
380
490
  nodeTypeRegistry.contents = {};
381
491
  nodeResolverCallback.contents = undefined;
382
492
  activeSchema.contents = undefined;
@@ -389,8 +499,8 @@ function getRegisteredSdl() {
389
499
 
390
500
  function getRegisteredResolverNames() {
391
501
  return {
392
- mutations: Object.keys(mutationResolvers.contents),
393
- queries: Object.keys(queryResolvers.contents)
502
+ mutations: orderedBuckets().flatMap(param => Object.keys(param[1].mutationResolvers)),
503
+ queries: orderedBuckets().flatMap(param => Object.keys(param[1].queryResolvers))
394
504
  };
395
505
  }
396
506
 
@@ -423,10 +533,11 @@ function extractFieldName(sdlField) {
423
533
  }
424
534
 
425
535
  function diagnostics() {
426
- let mutFieldNames = mutationFields.contents.map(extractFieldName).filter(n => n !== "_noop");
427
- let queryFieldNames = queryFields.contents.map(extractFieldName).filter(n => n !== "_noop");
428
- let mutResolverNames = Object.keys(mutationResolvers.contents);
429
- let queryResolverNames = Object.keys(queryResolvers.contents);
536
+ let allBuckets = orderedBuckets().map(param => param[1]);
537
+ let mutFieldNames = allBuckets.flatMap(b => b.mutationFields).map(extractFieldName).filter(n => n !== "_noop");
538
+ let queryFieldNames = allBuckets.flatMap(b => b.queryFields).map(extractFieldName).filter(n => n !== "_noop");
539
+ let mutResolverNames = allBuckets.flatMap(b => Object.keys(b.mutationResolvers));
540
+ let queryResolverNames = allBuckets.flatMap(b => Object.keys(b.queryResolvers));
430
541
  let mismatches = [];
431
542
  let mutResolverSet = new Set(mutResolverNames);
432
543
  mutFieldNames.forEach(name => {
@@ -456,7 +567,17 @@ function diagnostics() {
456
567
  return;
457
568
  }
458
569
  });
459
- let typeNames = typeDefinitions.contents.map(GraphQL_Stitcher$ReventlessCore.extractLeadingName);
570
+ let seenTypeBlocks = new Set();
571
+ let typeNames = [];
572
+ allBuckets.forEach(b => {
573
+ b.typeDefinitions.forEach(t => {
574
+ if (!seenTypeBlocks.has(t)) {
575
+ seenTypeBlocks.add(t);
576
+ typeNames.push(GraphQL_Stitcher$ReventlessCore.extractLeadingName(t));
577
+ return;
578
+ }
579
+ });
580
+ });
460
581
  return {
461
582
  registeredTypeDefinitions: typeNames,
462
583
  registeredMutationFields: mutFieldNames,
@@ -535,13 +656,16 @@ export {
535
656
  buildAuthContext,
536
657
  encodeGlobalId,
537
658
  decodeGlobalId,
538
- mutationResolvers,
539
- queryResolvers,
540
- subscriptionResolvers,
541
- mutationFields,
542
- queryFields,
543
- subscriptionFields,
544
- typeDefinitions,
659
+ platformScope,
660
+ makeBucket,
661
+ buckets,
662
+ currentScope,
663
+ bucketFor,
664
+ currentBucket,
665
+ setScope,
666
+ resetScope,
667
+ relabelScope,
668
+ orderedBuckets,
545
669
  registerMutations,
546
670
  registerQueries,
547
671
  registerSubscriptions,
@@ -557,10 +681,15 @@ export {
557
681
  activeServer,
558
682
  activeSchema,
559
683
  lastFullSdl,
684
+ assembleBucketSdl,
685
+ buildScopeSdl,
560
686
  buildSdl,
687
+ exnMessage,
688
+ scopeResolverMap,
689
+ scopeHasFields,
690
+ composeSchema,
561
691
  start,
562
692
  stop,
563
- rebuildSchema,
564
693
  reset,
565
694
  getRegisteredSdl,
566
695
  getRegisteredResolverNames,
@@ -26,19 +26,25 @@ let encodeGlobalId = DomainGraphQL_Server$ReventlessLocal.encodeGlobalId;
26
26
 
27
27
  let decodeGlobalId = DomainGraphQL_Server$ReventlessLocal.decodeGlobalId;
28
28
 
29
- let mutationResolvers = DomainGraphQL_Server$ReventlessLocal.mutationResolvers;
29
+ let platformScope = DomainGraphQL_Server$ReventlessLocal.platformScope;
30
30
 
31
- let queryResolvers = DomainGraphQL_Server$ReventlessLocal.queryResolvers;
31
+ let makeBucket = DomainGraphQL_Server$ReventlessLocal.makeBucket;
32
32
 
33
- let subscriptionResolvers = DomainGraphQL_Server$ReventlessLocal.subscriptionResolvers;
33
+ let buckets = DomainGraphQL_Server$ReventlessLocal.buckets;
34
34
 
35
- let mutationFields = DomainGraphQL_Server$ReventlessLocal.mutationFields;
35
+ let currentScope = DomainGraphQL_Server$ReventlessLocal.currentScope;
36
36
 
37
- let queryFields = DomainGraphQL_Server$ReventlessLocal.queryFields;
37
+ let bucketFor = DomainGraphQL_Server$ReventlessLocal.bucketFor;
38
38
 
39
- let subscriptionFields = DomainGraphQL_Server$ReventlessLocal.subscriptionFields;
39
+ let currentBucket = DomainGraphQL_Server$ReventlessLocal.currentBucket;
40
40
 
41
- let typeDefinitions = DomainGraphQL_Server$ReventlessLocal.typeDefinitions;
41
+ let setScope = DomainGraphQL_Server$ReventlessLocal.setScope;
42
+
43
+ let resetScope = DomainGraphQL_Server$ReventlessLocal.resetScope;
44
+
45
+ let relabelScope = DomainGraphQL_Server$ReventlessLocal.relabelScope;
46
+
47
+ let orderedBuckets = DomainGraphQL_Server$ReventlessLocal.orderedBuckets;
42
48
 
43
49
  let registerMutations = DomainGraphQL_Server$ReventlessLocal.registerMutations;
44
50
 
@@ -70,14 +76,24 @@ let activeSchema = DomainGraphQL_Server$ReventlessLocal.activeSchema;
70
76
 
71
77
  let lastFullSdl = DomainGraphQL_Server$ReventlessLocal.lastFullSdl;
72
78
 
79
+ let assembleBucketSdl = DomainGraphQL_Server$ReventlessLocal.assembleBucketSdl;
80
+
81
+ let buildScopeSdl = DomainGraphQL_Server$ReventlessLocal.buildScopeSdl;
82
+
73
83
  let buildSdl = DomainGraphQL_Server$ReventlessLocal.buildSdl;
74
84
 
85
+ let exnMessage = DomainGraphQL_Server$ReventlessLocal.exnMessage;
86
+
87
+ let scopeResolverMap = DomainGraphQL_Server$ReventlessLocal.scopeResolverMap;
88
+
89
+ let scopeHasFields = DomainGraphQL_Server$ReventlessLocal.scopeHasFields;
90
+
91
+ let composeSchema = DomainGraphQL_Server$ReventlessLocal.composeSchema;
92
+
75
93
  let start = DomainGraphQL_Server$ReventlessLocal.start;
76
94
 
77
95
  let stop = DomainGraphQL_Server$ReventlessLocal.stop;
78
96
 
79
- let rebuildSchema = DomainGraphQL_Server$ReventlessLocal.rebuildSchema;
80
-
81
97
  let reset = DomainGraphQL_Server$ReventlessLocal.reset;
82
98
 
83
99
  let getRegisteredSdl = DomainGraphQL_Server$ReventlessLocal.getRegisteredSdl;
@@ -113,13 +129,16 @@ export {
113
129
  buildAuthContext,
114
130
  encodeGlobalId,
115
131
  decodeGlobalId,
116
- mutationResolvers,
117
- queryResolvers,
118
- subscriptionResolvers,
119
- mutationFields,
120
- queryFields,
121
- subscriptionFields,
122
- typeDefinitions,
132
+ platformScope,
133
+ makeBucket,
134
+ buckets,
135
+ currentScope,
136
+ bucketFor,
137
+ currentBucket,
138
+ setScope,
139
+ resetScope,
140
+ relabelScope,
141
+ orderedBuckets,
123
142
  registerMutations,
124
143
  registerQueries,
125
144
  registerSubscriptions,
@@ -135,10 +154,15 @@ export {
135
154
  activeServer,
136
155
  activeSchema,
137
156
  lastFullSdl,
157
+ assembleBucketSdl,
158
+ buildScopeSdl,
138
159
  buildSdl,
160
+ exnMessage,
161
+ scopeResolverMap,
162
+ scopeHasFields,
163
+ composeSchema,
139
164
  start,
140
165
  stop,
141
- rebuildSchema,
142
166
  reset,
143
167
  getRegisteredSdl,
144
168
  getRegisteredResolverNames,