@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.
- package/getAdditionalResolversFromTypeDefs.d.ts +2 -0
- package/index.js +129 -37
- package/index.mjs +130 -38
- package/package.json +8 -8
|
@@ -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}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
446
|
-
codes.push(`const
|
|
447
|
-
|
|
448
|
-
|
|
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
|
-
|
|
451
|
-
|
|
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
|
-
|
|
519
|
+
return `resolveAdditionalResolversWithoutImport(
|
|
520
|
+
${JSON.stringify(additionalResolverDefinition, null, 2)}
|
|
521
|
+
)`;
|
|
458
522
|
}
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
|
|
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
|
-
|
|
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,
|
|
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}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
442
|
-
codes.push(`const
|
|
443
|
-
|
|
444
|
-
|
|
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
|
-
|
|
447
|
-
|
|
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
|
-
|
|
515
|
+
return `resolveAdditionalResolversWithoutImport(
|
|
516
|
+
${JSON.stringify(additionalResolverDefinition, null, 2)}
|
|
517
|
+
)`;
|
|
454
518
|
}
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
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.
|
|
3
|
+
"version": "1.1.0-alpha-36b706abb.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@graphql-mesh/runtime": "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.
|
|
11
|
+
"@graphql-mesh/cache-localforage": "0.6.12",
|
|
12
12
|
"@graphql-mesh/cross-helpers": "0.1.6",
|
|
13
|
-
"@graphql-mesh/merger-bare": "0.13.
|
|
14
|
-
"@graphql-mesh/merger-stitching": "0.15.
|
|
15
|
-
"@graphql-mesh/store": "0.8.
|
|
16
|
-
"@graphql-mesh/types": "0.74.
|
|
17
|
-
"@graphql-mesh/utils": "0.35.
|
|
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",
|