EDIT
добавил мое решение в качестве ответа
ОРИГИНАЛЬНЫЙ ВОПРОС
Я считаю, что эта проблема связана с круговыми зависимостями. Я провел лучшую половину прошлой ночи и сегодня пробовал все, что мог найти в Интернете, но, похоже, ничего не помогало.
что я пробовал:
- преобразовать
fields
реквизит в функцию, которая возвращает объект поля
- преобразует соответствующие поля (внутри полей prop) в функции, возвращающие тип
- объединяя два подхода выше
- наконец заканчивается инструкциями require вместо полей, которые используют ссылочный тип (кажется неправильным, и у линтера был штрих над этим)
вот структура файла:
вот код:
userType.js
const graphql = require('graphql');
const Connection = require('../../db/connection');
const ConnectionType = require('../connection/connectionType');
const { GraphQLObjectType, GraphQLList, GraphQLString, GraphQLID } = graphql;
const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: { type: GraphQLID },
username: { type: GraphQLString },
email: { type: GraphQLString },
created: {
type: GraphQLList(ConnectionType),
resolve: ({ id }) => Connection.find({ owner: id }),
},
joined: {
type: GraphQLList(ConnectionType),
resolve: ({ id }) => Connection.find({ partner: id }),
},
}),
});
module.exports = UserType;
connectionType.js
const graphql = require('graphql');
const User = require('../../db/user');
const UserType = require('../user/userType');
const { GraphQLObjectType, GraphQLString, GraphQLID, GraphQLInt } = graphql;
const ConnectionType = new GraphQLObjectType({
name: 'Connection',
fields: () => ({
id: { type: GraphQLID },
owner: {
type: UserType,
resolve: ({ owner }) => User.findById(owner),
},
partner: {
type: UserType,
resolve: ({ partner }) => User.findById(partner),
},
title: { type: GraphQLString },
description: { type: GraphQLString },
timestamp: { type: GraphQLString },
lifespan: { type: GraphQLInt },
}),
});
module.exports = ConnectionType;