UNPKG

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