@@ -188,46 +188,43 @@ export enum SchemaFieldTypes {
188188    VECTOR  =  'VECTOR' , 
189189    GEOSHAPE  =  'GEOSHAPE' 
190190} 
191- 
192- export  interface  MissingValues  { 
193-     INDEXEMPTY ?: boolean ; 
194-     INDEXMISSING ?: boolean ; 
195- } 
196- 
197- function  pushMissingValues ( args : RedisCommandArguments ,  missingValues ?: MissingValues )  { 
198-     if  ( ! missingValues )  { 
199-         return ; 
200-     } 
201- 
202-     if  ( missingValues . INDEXEMPTY )  { 
203-         args . push ( "INDEXEMPTY" ) ; 
204-     } 
205-   
206-     if  ( missingValues . INDEXMISSING )  { 
207-         args . push ( "INDEXMISSING" ) ; 
208-     } 
209- } 
210191
211192type  CreateSchemaField < 
212193    T  extends  SchemaFieldTypes , 
213194    E  =  Record < PropertyKey ,  unknown > 
214195>  =  T  |  ( { 
215196    type : T ; 
216197    AS ?: string ; 
217-     MISSING_VALUES ?: MissingValues ; 
198+     INDEXMISSING ?: boolean ; 
218199}  &  E ) ; 
219200
201+ type  CommonFieldArguments  =  { 
202+     SORTABLE ?: boolean  |  'UNF' ; 
203+     NOINDEX ?: boolean ; 
204+ } ; 
205+ 
220206type  CreateSchemaCommonField < 
221207    T  extends  SchemaFieldTypes , 
222208    E  =  Record < PropertyKey ,  unknown > 
223209>  =  CreateSchemaField < 
224210    T , 
225-     ( { 
226-         SORTABLE ?: true  |  'UNF' ; 
227-         NOINDEX ?: true ; 
228-     }  &  E ) 
211+     ( CommonFieldArguments  &  E ) 
229212> ; 
230213
214+ function  pushCommonFieldArguments ( args : RedisCommandArguments ,  fieldOptions : CommonFieldArguments )  { 
215+     if  ( fieldOptions . SORTABLE )  { 
216+         args . push ( 'SORTABLE' ) ; 
217+ 
218+         if  ( fieldOptions . SORTABLE  ===  'UNF' )  { 
219+             args . push ( 'UNF' ) ; 
220+         } 
221+     } 
222+ 
223+     if  ( fieldOptions . NOINDEX )  { 
224+         args . push ( 'NOINDEX' ) ; 
225+     } 
226+ } 
227+ 
231228export  enum  SchemaTextFieldPhonetics  { 
232229    DM_EN  =  'dm:en' , 
233230    DM_FR  =  'dm:fr' , 
@@ -240,6 +237,7 @@ type CreateSchemaTextField = CreateSchemaCommonField<SchemaFieldTypes.TEXT, {
240237    WEIGHT ?: number ; 
241238    PHONETIC ?: SchemaTextFieldPhonetics ; 
242239    WITHSUFFIXTRIE ?: boolean ; 
240+     INDEXEMPTY ?: boolean ; 
243241} > ; 
244242
245243type  CreateSchemaNumericField  =  CreateSchemaCommonField < SchemaFieldTypes . NUMERIC > ; 
@@ -250,6 +248,7 @@ type CreateSchemaTagField = CreateSchemaCommonField<SchemaFieldTypes.TAG, {
250248    SEPARATOR ?: string ; 
251249    CASESENSITIVE ?: true ; 
252250    WITHSUFFIXTRIE ?: boolean ; 
251+     INDEXEMPTY ?: boolean ; 
253252} > ; 
254253
255254export  enum  VectorAlgorithms  { 
@@ -297,7 +296,7 @@ export interface RediSearchSchema {
297296        CreateSchemaTagField  | 
298297        CreateSchemaFlatVectorField  | 
299298        CreateSchemaHNSWVectorField  | 
300-         CreateSchemaGeoShapeField 
299+         CreateSchemaGeoShapeField ; 
301300} 
302301
303302export  function  pushSchema ( args : RedisCommandArguments ,  schema : RediSearchSchema )  { 
@@ -333,13 +332,17 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
333332                    args . push ( 'WITHSUFFIXTRIE' ) ; 
334333                } 
335334
336-                 pushMissingValues ( args ,  fieldOptions . MISSING_VALUES ) ; 
335+                 pushCommonFieldArguments ( args ,  fieldOptions ) ; 
336+ 
337+                 if  ( fieldOptions . INDEXEMPTY )  { 
338+                     args . push ( 'INDEXEMPTY' ) ; 
339+                 } 
337340
338341                break ; 
339342
340343            case  SchemaFieldTypes . NUMERIC :
341344            case  SchemaFieldTypes . GEO :
342-                 pushMissingValues ( args ,  fieldOptions . MISSING_VALUES ) ; 
345+                 pushCommonFieldArguments ( args ,  fieldOptions ) ; 
343346                break ; 
344347
345348            case  SchemaFieldTypes . TAG :
@@ -355,7 +358,11 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
355358                    args . push ( 'WITHSUFFIXTRIE' ) ; 
356359                } 
357360
358-                 pushMissingValues ( args ,  fieldOptions . MISSING_VALUES ) ; 
361+                 pushCommonFieldArguments ( args ,  fieldOptions ) ; 
362+ 
363+                 if  ( fieldOptions . INDEXEMPTY )  { 
364+                     args . push ( 'INDEXEMPTY' ) ; 
365+                 } 
359366
360367                break ; 
361368
@@ -398,30 +405,20 @@ export function pushSchema(args: RedisCommandArguments, schema: RediSearchSchema
398405                    } 
399406                } ) ; 
400407
401-                 pushMissingValues ( args ,  fieldOptions . MISSING_VALUES ) ; 
402- 
403-                 continue ;  // vector fields do not contain SORTABLE and NOINDEX options 
408+                 break ; 
404409
405410            case  SchemaFieldTypes . GEOSHAPE :
406411                if  ( fieldOptions . COORD_SYSTEM  !==  undefined )  { 
407412                    args . push ( 'COORD_SYSTEM' ,  fieldOptions . COORD_SYSTEM ) ; 
408413                } 
409414
410-                 pushMissingValues ( args ,  fieldOptions . MISSING_VALUES ) ; 
411- 
412-                 continue ;  // geo shape fields do not contain SORTABLE and NOINDEX options 
413-         } 
414- 
415-         if  ( fieldOptions . SORTABLE )  { 
416-             args . push ( 'SORTABLE' ) ; 
415+                 pushCommonFieldArguments ( args ,  fieldOptions ) ; 
417416
418-             if  ( fieldOptions . SORTABLE  ===  'UNF' )  { 
419-                 args . push ( 'UNF' ) ; 
420-             } 
417+                 break ; 
421418        } 
422419
423-         if  ( fieldOptions . NOINDEX )  { 
424-             args . push ( 'NOINDEX ' ) ; 
420+         if  ( fieldOptions . INDEXMISSING )  { 
421+             args . push ( 'INDEXMISSING ' ) ; 
425422        } 
426423    } 
427424} 
0 commit comments