UNPKG

3.42 kBJavaScriptView Raw
1'use strict';
2
3function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
5const graphqlComposeMongoose = require('graphql-compose-mongoose');
6const graphqlCompose = require('graphql-compose');
7const camelCase = require('camel-case');
8const mongoose = _interopDefault(require('mongoose'));
9const utils = require('@graphql-mesh/utils');
10
11const modelQueryOperations = ['findById', 'findByIds', 'findOne', 'findMany', 'count', 'connection', 'pagination'];
12const modelMutationOperations = [
13 'createOne',
14 'createMany',
15 'updateById',
16 'updateOne',
17 'updateMany',
18 'removeById',
19 'removeOne',
20 'removeMany',
21];
22class MongooseHandler {
23 constructor({ config, pubsub }) {
24 this.config = config;
25 this.pubsub = pubsub;
26 }
27 async getMeshSource() {
28 var _a;
29 if (this.config.connectionString) {
30 await mongoose.connect(this.config.connectionString, {
31 useNewUrlParser: true,
32 useUnifiedTopology: true,
33 });
34 this.pubsub.subscribe('destroy', () => mongoose.disconnect());
35 }
36 const schemaComposer = new graphqlCompose.SchemaComposer();
37 await Promise.all([
38 Promise.all((_a = this.config.models) === null || _a === void 0 ? void 0 : _a.map(async (modelConfig) => {
39 const model = await utils.loadFromModuleExportExpression(modelConfig.path, modelConfig.name);
40 const modelTC = graphqlComposeMongoose.composeWithMongoose(model, modelConfig.options);
41 await Promise.all([
42 Promise.all(modelQueryOperations.map(async (queryOperation) => schemaComposer.Query.addFields({
43 [camelCase.camelCase(`${modelConfig.name}_${queryOperation}`)]: modelTC.getResolver(queryOperation),
44 }))),
45 Promise.all(modelMutationOperations.map(async (mutationOperation) => schemaComposer.Mutation.addFields({
46 [camelCase.camelCase(`${modelConfig.name}_${mutationOperation}`)]: modelTC.getResolver(mutationOperation),
47 }))),
48 ]);
49 })),
50 Promise.all(this.config.discriminators.map(async (discriminatorConfig) => {
51 const discriminator = await utils.loadFromModuleExportExpression(discriminatorConfig.path, discriminatorConfig.name);
52 const discriminatorTC = graphqlComposeMongoose.composeWithMongooseDiscriminators(discriminator, discriminatorConfig.options);
53 await Promise.all([
54 Promise.all(modelQueryOperations.map(async (queryOperation) => schemaComposer.Query.addFields({
55 [camelCase.camelCase(`${discriminatorConfig.name}_${queryOperation}`)]: discriminatorTC.getResolver(queryOperation),
56 }))),
57 Promise.all(modelMutationOperations.map(async (mutationOperation) => schemaComposer.Mutation.addFields({
58 [camelCase.camelCase(`${discriminatorConfig.name}_${mutationOperation}`)]: discriminatorTC.getResolver(mutationOperation),
59 }))),
60 ]);
61 })),
62 ]);
63 const schema = schemaComposer.buildSchema();
64 return {
65 schema,
66 };
67 }
68}
69
70module.exports = MongooseHandler;
71//# sourceMappingURL=index.cjs.js.map