|
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