@graphql-mesh/config 3.0.0-alpha-df3bd330e.0 → 3.0.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 +104 -0
- package/index.mjs +105 -1
- package/package.json +9 -9
|
@@ -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
|
@@ -167,6 +167,73 @@ async function resolveLogger(loggerConfig, importFn, cwd, additionalPackagePrefi
|
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
function parseObject(ast) {
|
|
171
|
+
const value = Object.create(null);
|
|
172
|
+
ast.fields.forEach(field => {
|
|
173
|
+
// eslint-disable-next-line no-use-before-define
|
|
174
|
+
value[field.name.value] = parseLiteral(field.value);
|
|
175
|
+
});
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
function parseLiteral(ast) {
|
|
179
|
+
switch (ast.kind) {
|
|
180
|
+
case graphql.Kind.STRING:
|
|
181
|
+
case graphql.Kind.BOOLEAN:
|
|
182
|
+
return ast.value;
|
|
183
|
+
case graphql.Kind.INT:
|
|
184
|
+
case graphql.Kind.FLOAT:
|
|
185
|
+
return parseFloat(ast.value);
|
|
186
|
+
case graphql.Kind.OBJECT:
|
|
187
|
+
return parseObject(ast);
|
|
188
|
+
case graphql.Kind.LIST:
|
|
189
|
+
return ast.values.map(n => parseLiteral(n));
|
|
190
|
+
case graphql.Kind.NULL:
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function getAdditionalResolversFromTypeDefs(additionalTypeDefs) {
|
|
195
|
+
const additionalResolversFromTypeDefs = [];
|
|
196
|
+
function handleFieldNode(targetTypeName, fieldNode) {
|
|
197
|
+
var _a;
|
|
198
|
+
if ((_a = fieldNode.directives) === null || _a === void 0 ? void 0 : _a.length) {
|
|
199
|
+
const resolveToDef = fieldNode.directives.find(d => d.name.value === 'resolveTo');
|
|
200
|
+
if (resolveToDef != null) {
|
|
201
|
+
const resolveToArgumentMap = {};
|
|
202
|
+
for (const resolveToArg of resolveToDef.arguments) {
|
|
203
|
+
const resolveToArgName = resolveToArg.name.value;
|
|
204
|
+
resolveToArgumentMap[resolveToArgName] = parseLiteral(resolveToArg.value);
|
|
205
|
+
}
|
|
206
|
+
additionalResolversFromTypeDefs.push({
|
|
207
|
+
targetTypeName,
|
|
208
|
+
targetFieldName: fieldNode.name.value,
|
|
209
|
+
...resolveToArgumentMap,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.forEach(typeDefs => {
|
|
215
|
+
graphql.visit(typeDefs, {
|
|
216
|
+
ObjectTypeDefinition(objectNode) {
|
|
217
|
+
var _a;
|
|
218
|
+
(_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
|
|
219
|
+
},
|
|
220
|
+
ObjectTypeExtension(objectNode) {
|
|
221
|
+
var _a;
|
|
222
|
+
(_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
|
|
223
|
+
},
|
|
224
|
+
InterfaceTypeDefinition(interfaceNode) {
|
|
225
|
+
var _a;
|
|
226
|
+
(_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
|
|
227
|
+
},
|
|
228
|
+
InterfaceTypeExtension(interfaceNode) {
|
|
229
|
+
var _a;
|
|
230
|
+
(_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
return additionalResolversFromTypeDefs;
|
|
235
|
+
}
|
|
236
|
+
|
|
170
237
|
const ENVELOP_CORE_PLUGINS_MAP = {
|
|
171
238
|
maskedErrors: {
|
|
172
239
|
moduleName: '@envelop/core',
|
|
@@ -481,6 +548,43 @@ async function processConfig(config, options) {
|
|
|
481
548
|
codes.push(`const additionalResolvers = [] as any[]`);
|
|
482
549
|
}
|
|
483
550
|
}
|
|
551
|
+
if (additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.length) {
|
|
552
|
+
const additionalResolversConfigFromTypeDefs = getAdditionalResolversFromTypeDefs(additionalTypeDefs);
|
|
553
|
+
if (additionalResolversConfigFromTypeDefs === null || additionalResolversConfigFromTypeDefs === void 0 ? void 0 : additionalResolversConfigFromTypeDefs.length) {
|
|
554
|
+
const resolveToDirectiveDefinition = /* GraphQL */ `
|
|
555
|
+
scalar ResolveToSourceArgs
|
|
556
|
+
directive @resolveTo(
|
|
557
|
+
requiredSelectionSet: String
|
|
558
|
+
sourceName: String!
|
|
559
|
+
sourceTypeName: String!
|
|
560
|
+
sourceFieldName: String!
|
|
561
|
+
sourceSelectionSet: String
|
|
562
|
+
sourceArgs: ResolveToSourceArgs
|
|
563
|
+
keyField: String
|
|
564
|
+
keysArg: String
|
|
565
|
+
pubsubTopic: String
|
|
566
|
+
filterBy: String
|
|
567
|
+
additionalArgs: ResolveToSourceArgs
|
|
568
|
+
result: String
|
|
569
|
+
resultType: String
|
|
570
|
+
) on FIELD_DEFINITION
|
|
571
|
+
`;
|
|
572
|
+
const resolvedAdditionalResolvers = await utils$1.resolveAdditionalResolvers(dir, additionalResolversConfigFromTypeDefs, importFn, pubsub);
|
|
573
|
+
additionalTypeDefs.unshift(graphql.parse(resolveToDirectiveDefinition));
|
|
574
|
+
additionalResolvers.push(...resolvedAdditionalResolvers);
|
|
575
|
+
if (options.generateCode && resolvedAdditionalResolvers.length) {
|
|
576
|
+
importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
|
|
577
|
+
codes.push(`additionalTypeDefs.unshift(parse(/* GraphQL */\`${resolveToDirectiveDefinition}\`))`);
|
|
578
|
+
codes.push(`const additionalResolversFromTypeDefs = await resolveAdditionalResolvers(
|
|
579
|
+
baseDir,
|
|
580
|
+
${JSON.stringify(additionalResolversConfigFromTypeDefs)},
|
|
581
|
+
importFn,
|
|
582
|
+
pubsub
|
|
583
|
+
);`);
|
|
584
|
+
codes.push(`additionalResolvers.push(additionalResolversFromTypeDefs)`);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
484
588
|
if (config.additionalEnvelopPlugins) {
|
|
485
589
|
codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(crossHelpers.path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
|
|
486
590
|
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';
|
|
@@ -163,6 +163,73 @@ async function resolveLogger(loggerConfig, importFn, cwd, additionalPackagePrefi
|
|
|
163
163
|
};
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
+
function parseObject(ast) {
|
|
167
|
+
const value = Object.create(null);
|
|
168
|
+
ast.fields.forEach(field => {
|
|
169
|
+
// eslint-disable-next-line no-use-before-define
|
|
170
|
+
value[field.name.value] = parseLiteral(field.value);
|
|
171
|
+
});
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
function parseLiteral(ast) {
|
|
175
|
+
switch (ast.kind) {
|
|
176
|
+
case Kind.STRING:
|
|
177
|
+
case Kind.BOOLEAN:
|
|
178
|
+
return ast.value;
|
|
179
|
+
case Kind.INT:
|
|
180
|
+
case Kind.FLOAT:
|
|
181
|
+
return parseFloat(ast.value);
|
|
182
|
+
case Kind.OBJECT:
|
|
183
|
+
return parseObject(ast);
|
|
184
|
+
case Kind.LIST:
|
|
185
|
+
return ast.values.map(n => parseLiteral(n));
|
|
186
|
+
case Kind.NULL:
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function getAdditionalResolversFromTypeDefs(additionalTypeDefs) {
|
|
191
|
+
const additionalResolversFromTypeDefs = [];
|
|
192
|
+
function handleFieldNode(targetTypeName, fieldNode) {
|
|
193
|
+
var _a;
|
|
194
|
+
if ((_a = fieldNode.directives) === null || _a === void 0 ? void 0 : _a.length) {
|
|
195
|
+
const resolveToDef = fieldNode.directives.find(d => d.name.value === 'resolveTo');
|
|
196
|
+
if (resolveToDef != null) {
|
|
197
|
+
const resolveToArgumentMap = {};
|
|
198
|
+
for (const resolveToArg of resolveToDef.arguments) {
|
|
199
|
+
const resolveToArgName = resolveToArg.name.value;
|
|
200
|
+
resolveToArgumentMap[resolveToArgName] = parseLiteral(resolveToArg.value);
|
|
201
|
+
}
|
|
202
|
+
additionalResolversFromTypeDefs.push({
|
|
203
|
+
targetTypeName,
|
|
204
|
+
targetFieldName: fieldNode.name.value,
|
|
205
|
+
...resolveToArgumentMap,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.forEach(typeDefs => {
|
|
211
|
+
visit(typeDefs, {
|
|
212
|
+
ObjectTypeDefinition(objectNode) {
|
|
213
|
+
var _a;
|
|
214
|
+
(_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
|
|
215
|
+
},
|
|
216
|
+
ObjectTypeExtension(objectNode) {
|
|
217
|
+
var _a;
|
|
218
|
+
(_a = objectNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(objectNode.name.value, fieldNode));
|
|
219
|
+
},
|
|
220
|
+
InterfaceTypeDefinition(interfaceNode) {
|
|
221
|
+
var _a;
|
|
222
|
+
(_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
|
|
223
|
+
},
|
|
224
|
+
InterfaceTypeExtension(interfaceNode) {
|
|
225
|
+
var _a;
|
|
226
|
+
(_a = interfaceNode.fields) === null || _a === void 0 ? void 0 : _a.forEach(fieldNode => handleFieldNode(interfaceNode.name.value, fieldNode));
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
return additionalResolversFromTypeDefs;
|
|
231
|
+
}
|
|
232
|
+
|
|
166
233
|
const ENVELOP_CORE_PLUGINS_MAP = {
|
|
167
234
|
maskedErrors: {
|
|
168
235
|
moduleName: '@envelop/core',
|
|
@@ -477,6 +544,43 @@ async function processConfig(config, options) {
|
|
|
477
544
|
codes.push(`const additionalResolvers = [] as any[]`);
|
|
478
545
|
}
|
|
479
546
|
}
|
|
547
|
+
if (additionalTypeDefs === null || additionalTypeDefs === void 0 ? void 0 : additionalTypeDefs.length) {
|
|
548
|
+
const additionalResolversConfigFromTypeDefs = getAdditionalResolversFromTypeDefs(additionalTypeDefs);
|
|
549
|
+
if (additionalResolversConfigFromTypeDefs === null || additionalResolversConfigFromTypeDefs === void 0 ? void 0 : additionalResolversConfigFromTypeDefs.length) {
|
|
550
|
+
const resolveToDirectiveDefinition = /* GraphQL */ `
|
|
551
|
+
scalar ResolveToSourceArgs
|
|
552
|
+
directive @resolveTo(
|
|
553
|
+
requiredSelectionSet: String
|
|
554
|
+
sourceName: String!
|
|
555
|
+
sourceTypeName: String!
|
|
556
|
+
sourceFieldName: String!
|
|
557
|
+
sourceSelectionSet: String
|
|
558
|
+
sourceArgs: ResolveToSourceArgs
|
|
559
|
+
keyField: String
|
|
560
|
+
keysArg: String
|
|
561
|
+
pubsubTopic: String
|
|
562
|
+
filterBy: String
|
|
563
|
+
additionalArgs: ResolveToSourceArgs
|
|
564
|
+
result: String
|
|
565
|
+
resultType: String
|
|
566
|
+
) on FIELD_DEFINITION
|
|
567
|
+
`;
|
|
568
|
+
const resolvedAdditionalResolvers = await resolveAdditionalResolvers(dir, additionalResolversConfigFromTypeDefs, importFn, pubsub);
|
|
569
|
+
additionalTypeDefs.unshift(parse(resolveToDirectiveDefinition));
|
|
570
|
+
additionalResolvers.push(...resolvedAdditionalResolvers);
|
|
571
|
+
if (options.generateCode && resolvedAdditionalResolvers.length) {
|
|
572
|
+
importCodes.push(`import { resolveAdditionalResolvers } from '@graphql-mesh/utils';`);
|
|
573
|
+
codes.push(`additionalTypeDefs.unshift(parse(/* GraphQL */\`${resolveToDirectiveDefinition}\`))`);
|
|
574
|
+
codes.push(`const additionalResolversFromTypeDefs = await resolveAdditionalResolvers(
|
|
575
|
+
baseDir,
|
|
576
|
+
${JSON.stringify(additionalResolversConfigFromTypeDefs)},
|
|
577
|
+
importFn,
|
|
578
|
+
pubsub
|
|
579
|
+
);`);
|
|
580
|
+
codes.push(`additionalResolvers.push(additionalResolversFromTypeDefs)`);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
480
584
|
if (config.additionalEnvelopPlugins) {
|
|
481
585
|
codes.push(`const importedAdditionalEnvelopPlugins = await import(${JSON.stringify(path.join('..', config.additionalEnvelopPlugins).split('\\').join('/'))}).then(m => m.default || m);`);
|
|
482
586
|
const importedAdditionalEnvelopPlugins = await importFn(path.isAbsolute(config.additionalEnvelopPlugins)
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphql-mesh/config",
|
|
3
|
-
"version": "3.0.0
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@graphql-mesh/runtime": "0.39.0
|
|
6
|
+
"@graphql-mesh/runtime": "^0.39.0",
|
|
7
7
|
"graphql": "*"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@envelop/core": "2.3.3",
|
|
11
|
-
"@graphql-mesh/cache-localforage": "0.6.14
|
|
11
|
+
"@graphql-mesh/cache-localforage": "0.6.14",
|
|
12
12
|
"@graphql-mesh/cross-helpers": "0.1.6",
|
|
13
|
-
"@graphql-mesh/merger-bare": "0.14.0
|
|
14
|
-
"@graphql-mesh/merger-stitching": "0.15.58
|
|
15
|
-
"@graphql-mesh/store": "0.8.17
|
|
16
|
-
"@graphql-mesh/types": "0.76.0
|
|
17
|
-
"@graphql-mesh/utils": "0.36.0
|
|
13
|
+
"@graphql-mesh/merger-bare": "0.14.0",
|
|
14
|
+
"@graphql-mesh/merger-stitching": "0.15.58",
|
|
15
|
+
"@graphql-mesh/store": "0.8.17",
|
|
16
|
+
"@graphql-mesh/types": "0.76.0",
|
|
17
|
+
"@graphql-mesh/utils": "0.36.0",
|
|
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",
|
|
21
21
|
"@graphql-tools/utils": "8.6.13",
|
|
22
22
|
"camel-case": "4.1.2",
|
|
23
|
-
"cross-undici-fetch": "0.4.
|
|
23
|
+
"cross-undici-fetch": "0.4.8",
|
|
24
24
|
"fetchache": "0.1.2",
|
|
25
25
|
"param-case": "3.0.4",
|
|
26
26
|
"pascal-case": "3.1.2",
|