| 
1 | 1 | import { pushOptionalVerdictArgument } from '@node-redis/client/dist/lib/commands/generic-transformers';  | 
2 |  | -import { RedisSearchLanguages, PropertyName } from '.';  | 
3 |  | - | 
4 |  | -export enum SchemaFieldTypes {  | 
5 |  | -    TEXT = 'TEXT',  | 
6 |  | -    NUMERIC = 'NUMERIC',  | 
7 |  | -    GEO = 'GEO',  | 
8 |  | -    TAG = 'TAG'  | 
9 |  | -}  | 
10 |  | - | 
11 |  | -type CreateSchemaField<T extends SchemaFieldTypes, E = Record<string, never>> = T | ({  | 
12 |  | -    type: T;  | 
13 |  | -    AS?: string;  | 
14 |  | -    SORTABLE?: true | 'UNF';  | 
15 |  | -    NOINDEX?: true;  | 
16 |  | -} & E);  | 
17 |  | - | 
18 |  | -export enum SchemaTextFieldPhonetics {  | 
19 |  | -    DM_EN = 'dm:en',  | 
20 |  | -    DM_FR = 'dm:fr',  | 
21 |  | -    FM_PT = 'dm:pt',  | 
22 |  | -    DM_ES = 'dm:es'  | 
23 |  | -}  | 
24 |  | - | 
25 |  | -type CreateSchemaTextField = CreateSchemaField<SchemaFieldTypes.TEXT, {  | 
26 |  | -    NOSTEM?: true;  | 
27 |  | -    WEIGHT?: number;  | 
28 |  | -    PHONETIC?: SchemaTextFieldPhonetics;  | 
29 |  | -}>;  | 
30 |  | - | 
31 |  | -type CreateSchemaNumericField = CreateSchemaField<SchemaFieldTypes.NUMERIC>;  | 
32 |  | - | 
33 |  | -type CreateSchemaGeoField = CreateSchemaField<SchemaFieldTypes.GEO>;  | 
34 |  | - | 
35 |  | -type CreateSchemaTagField = CreateSchemaField<SchemaFieldTypes.TAG, {  | 
36 |  | -    SEPERATOR?: string;  | 
37 |  | -    CASESENSITIVE?: true;  | 
38 |  | -}>;  | 
39 |  | - | 
40 |  | -interface CreateSchema {  | 
41 |  | -    [field: string]:  | 
42 |  | -        CreateSchemaTextField |  | 
43 |  | -        CreateSchemaNumericField |  | 
44 |  | -        CreateSchemaGeoField |  | 
45 |  | -        CreateSchemaTagField  | 
46 |  | -}  | 
 | 2 | +import { RedisSearchLanguages, PropertyName, CreateSchema, pushSchema } from '.';  | 
47 | 3 | 
 
  | 
48 | 4 | interface CreateOptions {  | 
49 | 5 |     ON?: 'HASH' | 'JSON';  | 
@@ -126,67 +82,8 @@ export function transformArguments(index: string, schema: CreateSchema, options?  | 
126 | 82 |     }  | 
127 | 83 | 
 
  | 
128 | 84 |     pushOptionalVerdictArgument(args, 'STOPWORDS', options?.STOPWORDS);  | 
129 |  | - | 
130 | 85 |     args.push('SCHEMA');  | 
131 |  | - | 
132 |  | -    for (const [field, fieldOptions] of Object.entries(schema)) {  | 
133 |  | -        args.push(field);  | 
134 |  | - | 
135 |  | -        if (typeof fieldOptions === 'string') {  | 
136 |  | -            args.push(fieldOptions);  | 
137 |  | -            continue;  | 
138 |  | -        }  | 
139 |  | - | 
140 |  | -        if (fieldOptions.AS) {  | 
141 |  | -            args.push('AS', fieldOptions.AS);  | 
142 |  | -        }  | 
143 |  | - | 
144 |  | -        args.push(fieldOptions.type);  | 
145 |  | - | 
146 |  | -        switch (fieldOptions.type) {  | 
147 |  | -            case 'TEXT':  | 
148 |  | -                if (fieldOptions.NOSTEM) {  | 
149 |  | -                    args.push('NOSTEM');  | 
150 |  | -                }  | 
151 |  | - | 
152 |  | -                if (fieldOptions.WEIGHT) {  | 
153 |  | -                    args.push('WEIGHT', fieldOptions.WEIGHT.toString());  | 
154 |  | -                }  | 
155 |  | - | 
156 |  | -                if (fieldOptions.PHONETIC) {  | 
157 |  | -                    args.push('PHONETIC', fieldOptions.PHONETIC);  | 
158 |  | -                }  | 
159 |  | - | 
160 |  | -                break;  | 
161 |  | - | 
162 |  | -            // case 'NUMERIC':  | 
163 |  | -            // case 'GEO':  | 
164 |  | -            //     break;  | 
165 |  | - | 
166 |  | -            case 'TAG':  | 
167 |  | -                if (fieldOptions.SEPERATOR) {  | 
168 |  | -                    args.push('SEPERATOR', fieldOptions.SEPERATOR);  | 
169 |  | -                }  | 
170 |  | - | 
171 |  | -                if (fieldOptions.CASESENSITIVE) {  | 
172 |  | -                    args.push('CASESENSITIVE');  | 
173 |  | -                }  | 
174 |  | - | 
175 |  | -                break;  | 
176 |  | -        }  | 
177 |  | - | 
178 |  | -        if (fieldOptions.SORTABLE) {  | 
179 |  | -            args.push('SORTABLE');  | 
180 |  | - | 
181 |  | -            if (fieldOptions.SORTABLE === 'UNF') {  | 
182 |  | -                args.push('UNF');  | 
183 |  | -            }  | 
184 |  | -        }  | 
185 |  | - | 
186 |  | -        if (fieldOptions.NOINDEX) {  | 
187 |  | -            args.push('NOINDEX');  | 
188 |  | -        }  | 
189 |  | -    }  | 
 | 86 | +    pushSchema(args, schema);  | 
190 | 87 | 
 
  | 
191 | 88 |     return args;  | 
192 | 89 | }  | 
 | 
0 commit comments