@graphql-mesh/config 2.0.0 → 2.1.0-alpha-c9e875629.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 +102 -0
- package/index.mjs +103 -1
- package/package.json +1 -1
|
@@ -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',
|
|
@@ -461,6 +528,41 @@ async function processConfig(config, options) {
|
|
|
461
528
|
codes.push(`const additionalResolvers = [] as any[]`);
|
|
462
529
|
}
|
|
463
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
|
+
}
|
|
464
566
|
if (config.additionalEnvelopPlugins) {
|
|
465
567
|
codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(crossHelpers.path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
|
|
466
568
|
const importedAdditionalEnvelopPlugins = await importFn(crossHelpers.path.isAbsolute(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',
|
|
@@ -457,6 +524,41 @@ async function processConfig(config, options) {
|
|
|
457
524
|
codes.push(`const additionalResolvers = [] as any[]`);
|
|
458
525
|
}
|
|
459
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
|
+
}
|
|
460
562
|
if (config.additionalEnvelopPlugins) {
|
|
461
563
|
codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
|
|
462
564
|
const importedAdditionalEnvelopPlugins = await importFn(path.isAbsolute(config.additionalEnvelopPlugins)
|