@@ -8,13 +8,11 @@ import type {
88} from "../yargs-types" ;
99import type {
1010 VectorizeMatches ,
11- VectorizeMetadataFilterInnerValue ,
1211 VectorizeMetadataFilterValue ,
1312 VectorizeMetadataRetrievalLevel ,
1413 VectorizeQueryOptions ,
1514 VectorizeVectorMetadataFilter ,
1615 VectorizeVectorMetadataFilterOp ,
17- VectorizeVectorMetadataValue ,
1816} from "./types" ;
1917
2018export function options ( yargs : CommonYargsArgv ) {
@@ -155,6 +153,12 @@ export async function handler(
155153 logger . log ( JSON . stringify ( res , null , 2 ) ) ;
156154}
157155
156+ function validateQueryFilterInnerValue (
157+ innerValue : VectorizeMetadataFilterValue
158+ ) {
159+ return [ "string" , "number" , "boolean" ] . includes ( typeof innerValue ) ;
160+ }
161+
158162export function validateQueryFilter (
159163 input : object
160164) : VectorizeVectorMetadataFilter | null {
@@ -176,7 +180,7 @@ export function validateQueryFilter(
176180 for ( const field in parsedObj ) {
177181 if ( Object . prototype . hasOwnProperty . call ( parsedObj , field ) ) {
178182 const value = (
179- parsedObj as Record < string , VectorizeMetadataFilterValue >
183+ parsedObj as Record < string , VectorizeVectorMetadataFilter >
180184 ) [ field ] ;
181185
182186 if ( Array . isArray ( value ) ) {
@@ -186,38 +190,28 @@ export function validateQueryFilter(
186190
187191 if ( typeof value === "object" && value !== null ) {
188192 // Handle nested objects
189- const innerObj : Partial < {
190- [ Op in VectorizeVectorMetadataFilterOp ] ?: Exclude <
191- VectorizeVectorMetadataValue ,
192- string [ ]
193- > | null ;
194- } > = { } ;
193+ const innerObj : VectorizeVectorMetadataFilter = { } ;
195194 let validInnerObj = true ;
196195
197196 for ( const op in value ) {
198197 if ( Object . prototype . hasOwnProperty . call ( value , op ) ) {
199- if ( ! [ "$eq" , "$ne" ] . includes ( op ) ) {
200- // Skip objects with invalid operators
201- validInnerObj = false ;
202- break ;
203- }
204- const innerValue = ( value as VectorizeMetadataFilterInnerValue ) [
205- op as VectorizeVectorMetadataFilterOp
206- ] ;
207- if ( Array . isArray ( innerValue ) ) {
208- // Skip arrays in nested objects
209- validInnerObj = false ;
210- break ;
211- }
212- if (
213- typeof innerValue === "object" &&
214- innerValue !== null &&
215- Object . keys ( innerValue ) . length === 0
216- ) {
217- // Skip empty objects in nested objects
198+ const innerValue = value [ op ] ;
199+ if ( [ "$eq" , "$ne" , "$lt" , "$lte" , "$gt" , "gte" ] . includes ( op ) ) {
200+ if ( ! validateQueryFilterInnerValue ( innerValue ) ) {
201+ validInnerObj = false ;
202+ }
203+ } else if ( [ "$in" , "$nin" ] . includes ( op ) ) {
204+ if ( ! Array . isArray ( innerValue ) ) {
205+ validInnerObj = false ;
206+ } else {
207+ if ( ! innerValue . every ( validateQueryFilterInnerValue ) ) {
208+ validInnerObj = false ;
209+ }
210+ }
211+ } else {
218212 validInnerObj = false ;
219- break ;
220213 }
214+
221215 innerObj [ op as VectorizeVectorMetadataFilterOp ] = innerValue ;
222216 }
223217 }
0 commit comments