@@ -11,6 +11,7 @@ import {
11
11
} from './filterOperators' ;
12
12
import type { NestedAliasesMap } from './aliases' ;
13
13
import { makeFieldsRecursiveNullable } from '../../utils/makeFieldsRecursiveNullable' ;
14
+ import { mongoose } from 'src/__mocks__/mongooseCommon' ;
14
15
15
16
export type FilterHelperArgsOpts = {
16
17
/**
@@ -130,41 +131,52 @@ export function filterHelper(
130
131
) : void {
131
132
const filter = resolveParams . args ?. filter ;
132
133
if ( filter && typeof filter === 'object' && Object . keys ( filter ) . length > 0 ) {
133
- const modelFields = ( resolveParams . query as any ) ?. schema ?. paths ;
134
+ const schemaFields = ( resolveParams . query as any ) ?. schema ?. paths ;
134
135
135
136
const { _ids, ...filterFields } = filter ;
136
137
if ( _ids && Array . isArray ( _ids ) ) {
137
138
resolveParams . query = resolveParams . query . where ( { _id : { $in : _ids } } ) ;
138
139
}
139
140
processFilterOperators ( filterFields ) ;
140
- const clearedFilter : Record < string , any > = { } ;
141
- Object . keys ( filterFields ) . forEach ( ( key ) => {
142
- const value = filterFields [ key ] ;
143
- if ( key . startsWith ( '$' ) ) {
144
- clearedFilter [ key ] = Array . isArray ( value )
145
- ? value . map ( ( v ) => toMongoFilterDottedObject ( v , aliases ) )
146
- : toMongoFilterDottedObject ( value , aliases ) ;
147
- } else if ( modelFields [ key ] || aliases ?. [ key ] ) {
148
- const alias = aliases ?. [ key ] ;
149
- let newKey ;
150
- let subAlias : NestedAliasesMap | undefined ;
151
- if ( typeof alias === 'string' ) {
152
- newKey = alias ;
153
- } else if ( isObject ( alias ) ) {
154
- subAlias = alias ;
155
- newKey = alias ?. __selfAlias ;
156
- } else {
157
- newKey = key ;
158
- }
159
- toMongoFilterDottedObject ( value , subAlias , clearedFilter , newKey ) ;
160
- }
161
- } ) ;
162
- if ( Object . keys ( clearedFilter ) . length > 0 ) {
163
- resolveParams . query = resolveParams . query . where ( clearedFilter ) ;
141
+ const mongooseFilter = convertFilterFields ( filterFields , schemaFields , aliases ) ;
142
+
143
+ if ( Object . keys ( mongooseFilter ) . length > 0 ) {
144
+ resolveParams . query = resolveParams . query . where ( mongooseFilter ) ;
164
145
}
165
146
}
166
147
167
148
if ( isObject ( resolveParams . rawQuery ) ) {
168
149
resolveParams . query = resolveParams . query . where ( resolveParams . rawQuery ) ;
169
150
}
170
151
}
152
+
153
+ function convertFilterFields (
154
+ filterFields : Record < string , any > ,
155
+ schemaFields : { [ key : string ] : mongoose . SchemaType } ,
156
+ aliases ?: NestedAliasesMap
157
+ ) {
158
+ const clearedFilter : Record < string , any > = { } ;
159
+ Object . keys ( filterFields ) . forEach ( ( key ) => {
160
+ const value = filterFields [ key ] ;
161
+ if ( key . startsWith ( '$' ) ) {
162
+ clearedFilter [ key ] = Array . isArray ( value )
163
+ ? value . map ( ( v ) => toMongoFilterDottedObject ( v , aliases ) )
164
+ : toMongoFilterDottedObject ( value , aliases ) ;
165
+ } else if ( schemaFields [ key ] || aliases ?. [ key ] || isObject ( value ) ) {
166
+ const alias = aliases ?. [ key ] ;
167
+ let newKey ;
168
+ let subAlias : NestedAliasesMap | undefined ;
169
+ if ( typeof alias === 'string' ) {
170
+ newKey = alias ;
171
+ } else if ( isObject ( alias ) ) {
172
+ subAlias = alias ;
173
+ newKey = alias ?. __selfAlias ;
174
+ } else {
175
+ newKey = key ;
176
+ }
177
+ toMongoFilterDottedObject ( value , subAlias , clearedFilter , newKey ) ;
178
+ }
179
+ } ) ;
180
+
181
+ return clearedFilter ;
182
+ }
0 commit comments