diff --git a/jest.config.js b/jest.config.js index 2fb13eed..fcb3f76e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,6 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', moduleFileExtensions: ['ts', 'js'], - setupFilesAfterEnv: ['/src/setupTests.ts'], transform: { '^.+\\.ts$': [ 'ts-jest', diff --git a/src/__mocks__/userModel.ts b/src/__mocks__/userModel.ts index 671c7f70..31e1b9c0 100644 --- a/src/__mocks__/userModel.ts +++ b/src/__mocks__/userModel.ts @@ -139,7 +139,7 @@ const UserSchema = new Schema( ); UserSchema.set('autoIndex', false); -UserSchema.index({ name: 1, age: -1 }); +UserSchema.index({ n: 1, age: -1 }); // eslint-disable-next-line UserSchema.virtual('nameVirtual').get(function (this: any) { diff --git a/src/composeMongoose.ts b/src/composeMongoose.ts index 2c13c35c..ca199724 100644 --- a/src/composeMongoose.ts +++ b/src/composeMongoose.ts @@ -4,7 +4,6 @@ import type { Document, Model } from 'mongoose'; import { convertModelToGraphQL } from './fieldsConverter'; import { resolverFactory } from './resolvers'; import MongoID from './types/MongoID'; -import { patchMongooseSchemaIndex } from './utils/patchMongoose'; export type TypeConverterInputTypeOpts = { /** @@ -121,7 +120,6 @@ export function composeMongoose( `You try to generate GraphQL Type with name ${name} from mongoose model but this type already exists in SchemaComposer. Please choose another type name "composeWithMongoose(model, { name: 'NewTypeName' })", or reuse existed type "schemaComposer.getOTC('TypeName')", or remove type from SchemaComposer before calling composeWithMongoose method "schemaComposer.delete('TypeName')".` ); } - patchMongooseSchemaIndex(); if (sc.has(m.schema)) { // looks like you want to generate new TypeComposer from model diff --git a/src/resolvers/helpers/__tests__/filter-test.ts b/src/resolvers/helpers/__tests__/filter-test.ts index 656c270d..b190e446 100644 --- a/src/resolvers/helpers/__tests__/filter-test.ts +++ b/src/resolvers/helpers/__tests__/filter-test.ts @@ -90,7 +90,7 @@ describe('Resolver helper `filter` ->', () => { const itc = args.filter.type as InputTypeComposer; expect(itc.hasField('_id')).toBe(true); expect(itc.hasField('name')).toBe(true); - expect(itc.hasField('age')).toBe(true); + expect(itc.hasField('age')).toBe(false); expect(itc.hasField('gender')).toBe(false); }); @@ -104,7 +104,7 @@ describe('Resolver helper `filter` ->', () => { const itc = args.filter.type as InputTypeComposer; expect(itc.hasField('_id')).toBe(true); expect(itc.hasField('name')).toBe(false); - expect(itc.hasField('age')).toBe(true); + expect(itc.hasField('age')).toBe(false); expect(itc.hasField('gender')).toBe(false); }); diff --git a/src/setupTests.ts b/src/setupTests.ts deleted file mode 100644 index 9a9935e3..00000000 --- a/src/setupTests.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { patchMongooseSchemaIndex } from './utils/patchMongoose'; -import { beforeAll } from '@jest/globals'; - -beforeAll(() => { - patchMongooseSchemaIndex(); -}); diff --git a/src/utils/getIndexesFromModel.ts b/src/utils/getIndexesFromModel.ts index 6e8ee60d..d1a3d43c 100644 --- a/src/utils/getIndexesFromModel.ts +++ b/src/utils/getIndexesFromModel.ts @@ -1,4 +1,5 @@ import type { Model } from 'mongoose'; +import { prepareAliasesReverse } from '../resolvers/helpers/aliases'; export type getIndexesFromModelOpts = { extractCompound?: boolean; // true by default @@ -36,11 +37,13 @@ export function getIndexesFromModel( indexedFields.push({ _id: 1 }); } + const reversedAliases = prepareAliasesReverse(mongooseModel.schema); + // scan all fields on index presence [MONGOOSE FIELDS LEVEL INDEX] Object.keys(mongooseModel.schema.paths).forEach((name) => { if ((mongooseModel.schema.paths[name] as any)._index) { - const aliasOrName = mongooseModel.schema.paths[name]?.options?.alias || name; - indexedFields.push({ [aliasOrName]: 1 }); // ASC by default + const fieldName = (reversedAliases && reversedAliases[name]) || name; + indexedFields.push({ [fieldName]: 1 }); // ASC by default } }); @@ -56,15 +59,10 @@ export function getIndexesFromModel( } else { // extract partial indexes from compound index // { name: 1, age: 1, salary: 1} -> [{name:1}, {name:1, age:1}, {name:1, age:1, salary:1}] - Object.keys(idxFields).forEach((fieldName: any) => { - const alias = mongooseModel.schema.paths[fieldName]?.options?.alias; - const aliasOrName = alias || fieldName; - partialIndexes[aliasOrName] = idxFields[fieldName]; + Object.keys(idxFields).forEach((name: any) => { + const fieldName = (reversedAliases && reversedAliases[name]) || name; + partialIndexes[fieldName] = idxFields[name]; indexedFields.push({ ...partialIndexes }); - // push aliases on it's own index if its compound - if (alias) { - indexedFields.push({ [aliasOrName]: idxFields[fieldName] }); - } }); } } @@ -155,10 +153,8 @@ export function getIndexedFieldNamesForGraphQL(model: Model): string[] { const fieldNames: string[] = []; indexes.forEach((indexData) => { const keys = Object.keys(indexData); - for (let i = 0; i < keys.length; i++) { - const clearedName = keys[i].replace(/[^_a-zA-Z0-9]/i, '__'); - fieldNames.push(clearedName); - } + const clearedName = keys[0].replace(/[^_a-zA-Z0-9]/i, '__'); + fieldNames.push(clearedName); }); // filter duplicates const uniqueNames: string[] = [];