1 | 'use strict';
|
2 |
|
3 | function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
4 |
|
5 | const graphqlComposeMongoose = require('graphql-compose-mongoose');
|
6 | const graphqlCompose = require('graphql-compose');
|
7 | const camelCase = require('camel-case');
|
8 | const mongoose = _interopDefault(require('mongoose'));
|
9 | const utils = require('@graphql-mesh/utils');
|
10 |
|
11 | const modelQueryOperations = ['findById', 'findByIds', 'findOne', 'findMany', 'count', 'connection', 'pagination'];
|
12 | const modelMutationOperations = [
|
13 | 'createOne',
|
14 | 'createMany',
|
15 | 'updateById',
|
16 | 'updateOne',
|
17 | 'updateMany',
|
18 | 'removeById',
|
19 | 'removeOne',
|
20 | 'removeMany',
|
21 | ];
|
22 | class 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 |
|
70 | module.exports = MongooseHandler;
|
71 |
|