@graphql-mesh/config 1.0.0-alpha-4b3f4b8da.0 → 1.1.0-alpha-36b706abb.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.
@@ -0,0 +1,2 @@
1
+ import { DocumentNode } from 'graphql';
2
+ export declare function getAdditionalResolversFromTypeDefs(additionalTypeDefs: DocumentNode[]): (string | import("../../types/src/config").AdditionalStitchingResolverObject | import("../../types/src/config").AdditionalStitchingBatchResolverObject | import("../../types/src/config").AdditionalSubscriptionObject)[];
package/index.js CHANGED
@@ -165,6 +165,73 @@ async function resolveLogger(loggerConfig, importFn, cwd, additionalPackagePrefi
165
165
  };
166
166
  }
167
167
 
168
+ function parseObject(ast) {
169
+ const value = Object.create(null);
170
+ ast.fields.forEach(field => {
171
+ // eslint-disable-next-line no-use-before-define
172
+ value[field.name.value] = parseLiteral(field.value);
173
+ });
174
+ return value;
175
+ }
176
+ function parseLiteral(ast) {
177
+ switch (ast.kind) {
178
+ case graphql.Kind.STRING:
179
+ case graphql.Kind.BOOLEAN:
180
+ return ast.value;
181
+ case graphql.Kind.INT:
182
+ case graphql.Kind.FLOAT:
183
+ return parseFloat(ast.value);
184
+ case graphql.Kind.OBJECT:
185
+ return parseObject(ast);
186
+ case graphql.Kind.LIST:
187
+ return ast.values.map(n => parseLiteral(n));
188
+ case graphql.Kind.NULL:
189
+ return null;
190
+ }
191
+ }
192
+ function getAdditionalResolversFromTypeDefs(additionalTypeDefs) {
193
+ const additionalResolversFromTypeDefs = [];
194
+ function handleFieldNode(targetTypeName, fieldNode) {
195
+ var _a;
196
+ if ((_a = fieldNode.directives) === null || _a === void 0 ? void 0 : _a.length) {
197
+ const resolveToDef = fieldNode.directives.find(d => d.name.value === 'resolveTo');
198
+ if (resolveToDef != null) {
199
+ const resolveToArgumentMap = {};
200
+ for (const resolveToArg of resolveToDef.arguments) {
201
+ const resolveToArgName = resolveToArg.name.value;
202
+ resolveToArgumentMap[resolveToArgName] = parseLiteral(resolveToArg.value);
203
+ }
204
+ additionalResolversFromTypeDefs.push({
205
+ targetTypeName,
206
+ targetFieldName: fieldNode.name.value,
207
+ ...resolveToArgumentMap,
208
+ });
209
+ }
210
+ }
211
+ }
212
+ additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.forEach(typeDefs => {
213
+ graphql.visit(typeDefs, {
214
+ ObjectTypeDefinition(objectNode) {
215
+ var _a;
216
+ (_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
217
+ },
218
+ ObjectTypeExtension(objectNode) {
219
+ var _a;
220
+ (_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
221
+ },
222
+ InterfaceTypeDefinition(interfaceNode) {
223
+ var _a;
224
+ (_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
225
+ },
226
+ InterfaceTypeExtension(interfaceNode) {
227
+ var _a;
228
+ (_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
229
+ },
230
+ });
231
+ });
232
+ return additionalResolversFromTypeDefs;
233
+ }
234
+
168
235
  const ENVELOP_CORE_PLUGINS_MAP = {
169
236
  maskedErrors: {
170
237
  moduleName: '@envelop/core',
@@ -212,7 +279,7 @@ async function processConfig(config, options) {
212
279
  `export const rawServeConfig: YamlConfig.Config['serve'] = ${JSON.stringify(config.serve)} as any`,
213
280
  `export async function getMeshOptions(): Promise<GetMeshOptions> {`,
214
281
  ];
215
- const { dir, importFn = utils$1.defaultImportFn, store: providedStore, artifactsDir, additionalPackagePrefixes, } = options || {};
282
+ const { dir, importFn = utils$1.defaultImportFn, store: providedStore, artifactsDir, additionalPackagePrefixes = [], } = options || {};
216
283
  if (config.require) {
217
284
  await Promise.all(config.require.map(mod => importFn(mod)));
218
285
  for (const mod of config.require) {
@@ -288,16 +355,14 @@ async function processConfig(config, options) {
288
355
  if (options.generateCode) {
289
356
  const transformImportName = pascalCase.pascalCase(transformName + '_Transform');
290
357
  importCodes.push(`import ${transformImportName} from ${JSON.stringify(moduleName)};`);
291
- codes.push(`${transformsVariableName}.push(
292
- new ${transformImportName}({
358
+ codes.push(`${transformsVariableName}[${transformIndex}] = new ${transformImportName}({
293
359
  apiName: ${JSON.stringify(source.name)},
294
360
  config: ${JSON.stringify(transformConfig)},
295
361
  baseDir,
296
362
  cache,
297
363
  pubsub,
298
364
  importFn
299
- })
300
- );`);
365
+ });`);
301
366
  }
302
367
  return new TransformCtor({
303
368
  apiName: source.name,
@@ -310,11 +375,11 @@ async function processConfig(config, options) {
310
375
  })),
311
376
  ]);
312
377
  if (options.generateCode) {
313
- codes.push(`sources.push({
378
+ codes.push(`sources[${sourceIndex}] = {
314
379
  name: '${source.name}',
315
380
  handler: ${handlerVariableName},
316
381
  transforms: ${transformsVariableName}
317
- })`);
382
+ }`);
318
383
  }
319
384
  return {
320
385
  name: source.name,
@@ -335,16 +400,14 @@ async function processConfig(config, options) {
335
400
  if (options.generateCode) {
336
401
  const transformImportName = pascalCase.pascalCase(transformName + '_Transform');
337
402
  importCodes.push(`import ${transformImportName} from ${JSON.stringify(moduleName)};`);
338
- codes.push(`transforms.push(
339
- new (${transformImportName} as any)({
403
+ codes.push(`transforms[${transformIndex}] = new (${transformImportName} as any)({
340
404
  apiName: '',
341
405
  config: ${JSON.stringify(transformConfig)},
342
406
  baseDir,
343
407
  cache,
344
408
  pubsub,
345
409
  importFn
346
- })
347
- )`);
410
+ })`);
348
411
  }
349
412
  return new TransformLibrary({
350
413
  apiName: '',
@@ -362,7 +425,7 @@ async function processConfig(config, options) {
362
425
  const { importName, moduleName, pluginFactory } = ENVELOP_CORE_PLUGINS_MAP[pluginName];
363
426
  if (options.generateCode) {
364
427
  importCodes.push(`import { ${importName} } from ${JSON.stringify(moduleName)};`);
365
- codes.push(`additionalEnvelopPlugins.push(${importName}(${JSON.stringify(pluginConfig)}))`);
428
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}(${JSON.stringify(pluginConfig, null, 2)}))`);
366
429
  }
367
430
  return pluginFactory(pluginConfig);
368
431
  }
@@ -380,10 +443,11 @@ async function processConfig(config, options) {
380
443
  if (options.generateCode) {
381
444
  importName = pascalCase.pascalCase('use_' + pluginName);
382
445
  importCodes.push(`import ${importName} from ${JSON.stringify(moduleName)};`);
383
- codes.push(`additionalEnvelopPlugins.push(${importName}({
384
- ...(${JSON.stringify(pluginConfig)}),
446
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}({
447
+ ...(${JSON.stringify(pluginConfig, null, 2)}),
385
448
  logger: logger.child(${JSON.stringify(pluginName)}),
386
- }))`);
449
+ cache,
450
+ })`);
387
451
  }
388
452
  }
389
453
  else {
@@ -392,7 +456,7 @@ async function processConfig(config, options) {
392
456
  pluginFactory = possiblePluginFactory[key];
393
457
  if (options.generateCode) {
394
458
  importCodes.push(`import { ${importName} } from ${JSON.stringify(moduleName)};`);
395
- codes.push(`additionalEnvelopPlugins.push(${importName}(${JSON.stringify(pluginConfig)}])`);
459
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}(${JSON.stringify(pluginConfig, null, 2)}]`);
396
460
  }
397
461
  }
398
462
  });
@@ -400,6 +464,7 @@ async function processConfig(config, options) {
400
464
  return pluginFactory({
401
465
  ...pluginConfig,
402
466
  logger: logger.child(pluginName),
467
+ cache,
403
468
  });
404
469
  })) || []),
405
470
  resolveAdditionalTypeDefs(dir, config.additionalTypeDefs).then(additionalTypeDefs => {
@@ -442,37 +507,64 @@ async function processConfig(config, options) {
442
507
  ]);
443
508
  if (options.generateCode) {
444
509
  if ((_c = config.additionalResolvers) === null || _c === void 0 ? void 0 : _c.length) {
445
- importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
446
- codes.push(`const additionalResolversRawConfig = [];`);
447
- for (const additionalResolverDefinitionIndex in config.additionalResolvers) {
448
- const additionalResolverDefinition = config.additionalResolvers[additionalResolverDefinitionIndex];
510
+ importCodes.push(`import { resolveAdditionalResolversWithoutImport } from '@graphql-mesh/utils';`);
511
+ codes.push(`const additionalResolvers = await Promise.all([
512
+ ${config.additionalResolvers
513
+ .map(additionalResolverDefinition => {
449
514
  if (typeof additionalResolverDefinition === 'string') {
450
- importCodes.push(`import * as additionalResolvers$${additionalResolverDefinitionIndex} from '${crossHelpers.path
451
- .join('..', additionalResolverDefinition)
452
- .split('\\')
453
- .join('/')}';`);
454
- codes.push(`additionalResolversRawConfig.push(additionalResolvers$${additionalResolverDefinitionIndex}.resolvers || additionalResolvers$${additionalResolverDefinitionIndex}.default || additionalResolvers$${additionalResolverDefinitionIndex})`);
515
+ return `import(${JSON.stringify(crossHelpers.path.join('..', additionalResolverDefinition).split('\\').join('/'))})
516
+ .then(m => m.resolvers || m.default || m)`;
455
517
  }
456
518
  else {
457
- codes.push(`additionalResolversRawConfig.push(${JSON.stringify(additionalResolverDefinition)});`);
519
+ return `resolveAdditionalResolversWithoutImport(
520
+ ${JSON.stringify(additionalResolverDefinition, null, 2)}
521
+ )`;
458
522
  }
459
- }
460
- codes.push(`const additionalResolvers = await resolveAdditionalResolvers(
461
- baseDir,
462
- additionalResolversRawConfig,
463
- importFn,
464
- pubsub
465
- )`);
523
+ })
524
+ .join(',\n')}
525
+ ]);`);
466
526
  }
467
527
  else {
468
528
  codes.push(`const additionalResolvers = [] as any[]`);
469
529
  }
470
530
  }
531
+ if (additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.length) {
532
+ const additionalResolversConfigFromTypeDefs = getAdditionalResolversFromTypeDefs(additionalTypeDefs);
533
+ if (additionalResolversConfigFromTypeDefs === null || additionalResolversConfigFromTypeDefs === void 0 ? void 0 : additionalResolversConfigFromTypeDefs.length) {
534
+ const resolveToDirectiveDefinition = /* GraphQL */ `
535
+ scalar ResolveToSourceArgs
536
+ directive @resolveTo(
537
+ requiredSelectionSet: String
538
+ sourceName: String!
539
+ sourceTypeName: String!
540
+ sourceFieldName: String!
541
+ sourceSelectionSet: String
542
+ sourceArgs: ResolveToSourceArgs
543
+ keyField: String
544
+ keysArg: String
545
+ additionalArgs: ResolveToSourceArgs
546
+ result: String
547
+ resultType: String
548
+ ) on FIELD_DEFINITION
549
+ `;
550
+ const resolvedAdditionalResolvers = await utils$1.resolveAdditionalResolvers(dir, additionalResolversConfigFromTypeDefs, importFn, pubsub);
551
+ additionalTypeDefs.unshift(graphql.parse(resolveToDirectiveDefinition));
552
+ additionalResolvers.push(...resolvedAdditionalResolvers);
553
+ if (options.generateCode && resolvedAdditionalResolvers.length) {
554
+ importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
555
+ codes.push(`additionalTypeDefs.unshift(parse(/* GraphQL */\`${resolveToDirectiveDefinition}\`))`);
556
+ codes.push(`const additionalResolversFromTypeDefs = await resolveAdditionalResolvers(
557
+ baseDir,
558
+ ${JSON.stringify(additionalResolversConfigFromTypeDefs)},
559
+ importFn,
560
+ pubsub
561
+ );`);
562
+ codes.push(`additionalResolvers.push(additionalResolversFromTypeDefs)`);
563
+ }
564
+ }
565
+ }
471
566
  if (config.additionalEnvelopPlugins) {
472
- importCodes.push(`import importedAdditionalEnvelopPlugins from '${crossHelpers.path
473
- .join('..', config.additionalEnvelopPlugins)
474
- .split('\\')
475
- .join('/')}';`);
567
+ codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(crossHelpers.path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
476
568
  const importedAdditionalEnvelopPlugins = await importFn(crossHelpers.path.isAbsolute(config.additionalEnvelopPlugins)
477
569
  ? config.additionalEnvelopPlugins
478
570
  : crossHelpers.path.join(dir, config.additionalEnvelopPlugins));
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { path, process } from '@graphql-mesh/cross-helpers';
2
- import { print, concatAST, visit } from 'graphql';
2
+ import { visit, Kind, print, parse, concatAST } from 'graphql';
3
3
  import { printSchemaWithDirectives } from '@graphql-tools/utils';
4
4
  import { paramCase } from 'param-case';
5
5
  import { loadTypedefs, loadDocuments } from '@graphql-tools/load';
@@ -161,6 +161,73 @@ async function resolveLogger(loggerConfig, importFn, cwd, additionalPackagePrefi
161
161
  };
162
162
  }
163
163
 
164
+ function parseObject(ast) {
165
+ const value = Object.create(null);
166
+ ast.fields.forEach(field => {
167
+ // eslint-disable-next-line no-use-before-define
168
+ value[field.name.value] = parseLiteral(field.value);
169
+ });
170
+ return value;
171
+ }
172
+ function parseLiteral(ast) {
173
+ switch (ast.kind) {
174
+ case Kind.STRING:
175
+ case Kind.BOOLEAN:
176
+ return ast.value;
177
+ case Kind.INT:
178
+ case Kind.FLOAT:
179
+ return parseFloat(ast.value);
180
+ case Kind.OBJECT:
181
+ return parseObject(ast);
182
+ case Kind.LIST:
183
+ return ast.values.map(n => parseLiteral(n));
184
+ case Kind.NULL:
185
+ return null;
186
+ }
187
+ }
188
+ function getAdditionalResolversFromTypeDefs(additionalTypeDefs) {
189
+ const additionalResolversFromTypeDefs = [];
190
+ function handleFieldNode(targetTypeName, fieldNode) {
191
+ var _a;
192
+ if ((_a = fieldNode.directives) === null || _a === void 0 ? void 0 : _a.length) {
193
+ const resolveToDef = fieldNode.directives.find(d => d.name.value === 'resolveTo');
194
+ if (resolveToDef != null) {
195
+ const resolveToArgumentMap = {};
196
+ for (const resolveToArg of resolveToDef.arguments) {
197
+ const resolveToArgName = resolveToArg.name.value;
198
+ resolveToArgumentMap[resolveToArgName] = parseLiteral(resolveToArg.value);
199
+ }
200
+ additionalResolversFromTypeDefs.push({
201
+ targetTypeName,
202
+ targetFieldName: fieldNode.name.value,
203
+ ...resolveToArgumentMap,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.forEach(typeDefs => {
209
+ visit(typeDefs, {
210
+ ObjectTypeDefinition(objectNode) {
211
+ var _a;
212
+ (_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
213
+ },
214
+ ObjectTypeExtension(objectNode) {
215
+ var _a;
216
+ (_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
217
+ },
218
+ InterfaceTypeDefinition(interfaceNode) {
219
+ var _a;
220
+ (_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
221
+ },
222
+ InterfaceTypeExtension(interfaceNode) {
223
+ var _a;
224
+ (_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
225
+ },
226
+ });
227
+ });
228
+ return additionalResolversFromTypeDefs;
229
+ }
230
+
164
231
  const ENVELOP_CORE_PLUGINS_MAP = {
165
232
  maskedErrors: {
166
233
  moduleName: '@envelop/core',
@@ -208,7 +275,7 @@ async function processConfig(config, options) {
208
275
  `export const rawServeConfig: YamlConfig.Config['serve'] = ${JSON.stringify(config.serve)} as any`,
209
276
  `export async function getMeshOptions(): Promise<GetMeshOptions> {`,
210
277
  ];
211
- const { dir, importFn = defaultImportFn, store: providedStore, artifactsDir, additionalPackagePrefixes, } = options || {};
278
+ const { dir, importFn = defaultImportFn, store: providedStore, artifactsDir, additionalPackagePrefixes = [], } = options || {};
212
279
  if (config.require) {
213
280
  await Promise.all(config.require.map(mod => importFn(mod)));
214
281
  for (const mod of config.require) {
@@ -284,16 +351,14 @@ async function processConfig(config, options) {
284
351
  if (options.generateCode) {
285
352
  const transformImportName = pascalCase(transformName + '_Transform');
286
353
  importCodes.push(`import ${transformImportName} from ${JSON.stringify(moduleName)};`);
287
- codes.push(`${transformsVariableName}.push(
288
- new ${transformImportName}({
354
+ codes.push(`${transformsVariableName}[${transformIndex}] = new ${transformImportName}({
289
355
  apiName: ${JSON.stringify(source.name)},
290
356
  config: ${JSON.stringify(transformConfig)},
291
357
  baseDir,
292
358
  cache,
293
359
  pubsub,
294
360
  importFn
295
- })
296
- );`);
361
+ });`);
297
362
  }
298
363
  return new TransformCtor({
299
364
  apiName: source.name,
@@ -306,11 +371,11 @@ async function processConfig(config, options) {
306
371
  })),
307
372
  ]);
308
373
  if (options.generateCode) {
309
- codes.push(`sources.push({
374
+ codes.push(`sources[${sourceIndex}] = {
310
375
  name: '${source.name}',
311
376
  handler: ${handlerVariableName},
312
377
  transforms: ${transformsVariableName}
313
- })`);
378
+ }`);
314
379
  }
315
380
  return {
316
381
  name: source.name,
@@ -331,16 +396,14 @@ async function processConfig(config, options) {
331
396
  if (options.generateCode) {
332
397
  const transformImportName = pascalCase(transformName + '_Transform');
333
398
  importCodes.push(`import ${transformImportName} from ${JSON.stringify(moduleName)};`);
334
- codes.push(`transforms.push(
335
- new (${transformImportName} as any)({
399
+ codes.push(`transforms[${transformIndex}] = new (${transformImportName} as any)({
336
400
  apiName: '',
337
401
  config: ${JSON.stringify(transformConfig)},
338
402
  baseDir,
339
403
  cache,
340
404
  pubsub,
341
405
  importFn
342
- })
343
- )`);
406
+ })`);
344
407
  }
345
408
  return new TransformLibrary({
346
409
  apiName: '',
@@ -358,7 +421,7 @@ async function processConfig(config, options) {
358
421
  const { importName, moduleName, pluginFactory } = ENVELOP_CORE_PLUGINS_MAP[pluginName];
359
422
  if (options.generateCode) {
360
423
  importCodes.push(`import { ${importName} } from ${JSON.stringify(moduleName)};`);
361
- codes.push(`additionalEnvelopPlugins.push(${importName}(${JSON.stringify(pluginConfig)}))`);
424
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}(${JSON.stringify(pluginConfig, null, 2)}))`);
362
425
  }
363
426
  return pluginFactory(pluginConfig);
364
427
  }
@@ -376,10 +439,11 @@ async function processConfig(config, options) {
376
439
  if (options.generateCode) {
377
440
  importName = pascalCase('use_' + pluginName);
378
441
  importCodes.push(`import ${importName} from ${JSON.stringify(moduleName)};`);
379
- codes.push(`additionalEnvelopPlugins.push(${importName}({
380
- ...(${JSON.stringify(pluginConfig)}),
442
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}({
443
+ ...(${JSON.stringify(pluginConfig, null, 2)}),
381
444
  logger: logger.child(${JSON.stringify(pluginName)}),
382
- }))`);
445
+ cache,
446
+ })`);
383
447
  }
384
448
  }
385
449
  else {
@@ -388,7 +452,7 @@ async function processConfig(config, options) {
388
452
  pluginFactory = possiblePluginFactory[key];
389
453
  if (options.generateCode) {
390
454
  importCodes.push(`import { ${importName} } from ${JSON.stringify(moduleName)};`);
391
- codes.push(`additionalEnvelopPlugins.push(${importName}(${JSON.stringify(pluginConfig)}])`);
455
+ codes.push(`additionalEnvelopPlugins[${pluginIndex}] = ${importName}(${JSON.stringify(pluginConfig, null, 2)}]`);
392
456
  }
393
457
  }
394
458
  });
@@ -396,6 +460,7 @@ async function processConfig(config, options) {
396
460
  return pluginFactory({
397
461
  ...pluginConfig,
398
462
  logger: logger.child(pluginName),
463
+ cache,
399
464
  });
400
465
  })) || []),
401
466
  resolveAdditionalTypeDefs(dir, config.additionalTypeDefs).then(additionalTypeDefs => {
@@ -438,37 +503,64 @@ async function processConfig(config, options) {
438
503
  ]);
439
504
  if (options.generateCode) {
440
505
  if ((_c = config.additionalResolvers) === null || _c === void 0 ? void 0 : _c.length) {
441
- importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
442
- codes.push(`const additionalResolversRawConfig = [];`);
443
- for (const additionalResolverDefinitionIndex in config.additionalResolvers) {
444
- const additionalResolverDefinition = config.additionalResolvers[additionalResolverDefinitionIndex];
506
+ importCodes.push(`import { resolveAdditionalResolversWithoutImport } from '@graphql-mesh/utils';`);
507
+ codes.push(`const additionalResolvers = await Promise.all([
508
+ ${config.additionalResolvers
509
+ .map(additionalResolverDefinition => {
445
510
  if (typeof additionalResolverDefinition === 'string') {
446
- importCodes.push(`import * as additionalResolvers$${additionalResolverDefinitionIndex} from '${path
447
- .join('..', additionalResolverDefinition)
448
- .split('\\')
449
- .join('/')}';`);
450
- codes.push(`additionalResolversRawConfig.push(additionalResolvers$${additionalResolverDefinitionIndex}.resolvers || additionalResolvers$${additionalResolverDefinitionIndex}.default || additionalResolvers$${additionalResolverDefinitionIndex})`);
511
+ return `import(${JSON.stringify(path.join('..', additionalResolverDefinition).split('\\').join('/'))})
512
+ .then(m => m.resolvers || m.default || m)`;
451
513
  }
452
514
  else {
453
- codes.push(`additionalResolversRawConfig.push(${JSON.stringify(additionalResolverDefinition)});`);
515
+ return `resolveAdditionalResolversWithoutImport(
516
+ ${JSON.stringify(additionalResolverDefinition, null, 2)}
517
+ )`;
454
518
  }
455
- }
456
- codes.push(`const additionalResolvers = await resolveAdditionalResolvers(
457
- baseDir,
458
- additionalResolversRawConfig,
459
- importFn,
460
- pubsub
461
- )`);
519
+ })
520
+ .join(',\n')}
521
+ ]);`);
462
522
  }
463
523
  else {
464
524
  codes.push(`const additionalResolvers = [] as any[]`);
465
525
  }
466
526
  }
527
+ if (additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.length) {
528
+ const additionalResolversConfigFromTypeDefs = getAdditionalResolversFromTypeDefs(additionalTypeDefs);
529
+ if (additionalResolversConfigFromTypeDefs === null || additionalResolversConfigFromTypeDefs === void 0 ? void 0 : additionalResolversConfigFromTypeDefs.length) {
530
+ const resolveToDirectiveDefinition = /* GraphQL */ `
531
+ scalar ResolveToSourceArgs
532
+ directive @resolveTo(
533
+ requiredSelectionSet: String
534
+ sourceName: String!
535
+ sourceTypeName: String!
536
+ sourceFieldName: String!
537
+ sourceSelectionSet: String
538
+ sourceArgs: ResolveToSourceArgs
539
+ keyField: String
540
+ keysArg: String
541
+ additionalArgs: ResolveToSourceArgs
542
+ result: String
543
+ resultType: String
544
+ ) on FIELD_DEFINITION
545
+ `;
546
+ const resolvedAdditionalResolvers = await resolveAdditionalResolvers(dir, additionalResolversConfigFromTypeDefs, importFn, pubsub);
547
+ additionalTypeDefs.unshift(parse(resolveToDirectiveDefinition));
548
+ additionalResolvers.push(...resolvedAdditionalResolvers);
549
+ if (options.generateCode && resolvedAdditionalResolvers.length) {
550
+ importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
551
+ codes.push(`additionalTypeDefs.unshift(parse(/* GraphQL */\`${resolveToDirectiveDefinition}\`))`);
552
+ codes.push(`const additionalResolversFromTypeDefs = await resolveAdditionalResolvers(
553
+ baseDir,
554
+ ${JSON.stringify(additionalResolversConfigFromTypeDefs)},
555
+ importFn,
556
+ pubsub
557
+ );`);
558
+ codes.push(`additionalResolvers.push(additionalResolversFromTypeDefs)`);
559
+ }
560
+ }
561
+ }
467
562
  if (config.additionalEnvelopPlugins) {
468
- importCodes.push(`import importedAdditionalEnvelopPlugins from '${path
469
- .join('..', config.additionalEnvelopPlugins)
470
- .split('\\')
471
- .join('/')}';`);
563
+ codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
472
564
  const importedAdditionalEnvelopPlugins = await importFn(path.isAbsolute(config.additionalEnvelopPlugins)
473
565
  ? config.additionalEnvelopPlugins
474
566
  : path.join(dir, config.additionalEnvelopPlugins));
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@graphql-mesh/config",
3
- "version": "1.0.0-alpha-4b3f4b8da.0",
3
+ "version": "1.1.0-alpha-36b706abb.0",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@graphql-mesh/runtime": "0.36.0-alpha-4b3f4b8da.0",
6
+ "@graphql-mesh/runtime": "^0.37.1",
7
7
  "graphql": "*"
8
8
  },
9
9
  "dependencies": {
10
10
  "@envelop/core": "2.3.3",
11
- "@graphql-mesh/cache-localforage": "0.6.10-alpha-4b3f4b8da.0",
11
+ "@graphql-mesh/cache-localforage": "0.6.12",
12
12
  "@graphql-mesh/cross-helpers": "0.1.6",
13
- "@graphql-mesh/merger-bare": "0.13.52-alpha-4b3f4b8da.0",
14
- "@graphql-mesh/merger-stitching": "0.15.54-alpha-4b3f4b8da.0",
15
- "@graphql-mesh/store": "0.8.13-alpha-4b3f4b8da.0",
16
- "@graphql-mesh/types": "0.74.0-alpha-4b3f4b8da.0",
17
- "@graphql-mesh/utils": "0.35.4-alpha-4b3f4b8da.0",
13
+ "@graphql-mesh/merger-bare": "0.13.54",
14
+ "@graphql-mesh/merger-stitching": "0.15.56",
15
+ "@graphql-mesh/store": "0.8.15",
16
+ "@graphql-mesh/types": "0.74.2",
17
+ "@graphql-mesh/utils": "0.35.6",
18
18
  "@graphql-tools/code-file-loader": "7.2.18",
19
19
  "@graphql-tools/graphql-file-loader": "7.3.15",
20
20
  "@graphql-tools/load": "7.5.14",