diff --git a/.eslintrc.js b/.eslintrc.js index 10a2b9d..c0e7cff 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -38,6 +38,7 @@ module.exports = { '@typescript-eslint/no-empty-function': 0, '@typescript-eslint/camelcase': 0, '@typescript-eslint/ban-ts-comment': 0, + '@typescript-eslint/no-unused-vars': ['error', { ignoreRestSiblings: true }], }, env: { jasmine: true, diff --git a/jest.config.js b/jest.config.js index fcf9d78..21f6e29 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,7 +3,7 @@ module.exports = { testEnvironment: 'node', globals: { 'ts-jest': { - tsConfig: '/tsconfig.json', + tsconfig: '/tsconfig.json', isolatedModules: true, diagnostics: false, }, diff --git a/src/connection.ts b/src/connection.ts index 7ea05f2..148377b 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -5,6 +5,7 @@ import { ResolverResolveParams, ObjectTypeComposerArgumentConfigMap, ObjectTypeComposerFieldConfigMap, + ProjectionType, } from 'graphql-compose'; import { prepareConnectionType, PageInfoType, ConnectionType } from './types/connectionType'; import { prepareSortType } from './types/sortInputType'; @@ -156,12 +157,24 @@ export function prepareConnectionResolver( countPromise = Promise.resolve(0); } - if (projection && projection.edges) { + if (projection?.edges) { // combine top level projection - // (maybe somebody add additional fields via resolveParams.projection) + // (maybe somebody provided additional fields via resolveParams.projection) // and edges.node (record needed fields) - const extraProjection = opts.edgeFields ? projection.edges : projection.edges.node; - findManyParams.projection = { ...projection, ...extraProjection }; + const { edges, ...projectionWithoutEdges } = projection; + const extraProjection = {} as ProjectionType; + if (opts.edgeFields) { + Object.keys(opts.edgeFields).forEach((extraKey) => { + if (projection.edges[extraKey]) { + extraProjection[extraKey] = projection.edges[extraKey]; + } + }); + } + findManyParams.projection = { + ...projectionWithoutEdges, + ...projection?.edges?.node, + ...extraProjection, + }; } else { findManyParams.projection = { ...projection }; }