|
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