@@ -4,8 +4,6 @@ import PostgrestTransformBuilder from './PostgrestTransformBuilder'
4
4
* Filters
5
5
*/
6
6
7
- const cleanFilterArray = < T > ( filter : T [ keyof T ] [ ] ) => filter . map ( ( s ) => `${ s } ` ) . join ( ',' )
8
-
9
7
type FilterOperator =
10
8
| 'eq'
11
9
| 'neq'
@@ -171,7 +169,15 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
171
169
* @param values The values to filter with.
172
170
*/
173
171
in ( column : keyof T , values : T [ keyof T ] [ ] ) : this {
174
- this . url . searchParams . append ( `${ column } ` , `in.(${ cleanFilterArray ( values ) } )` )
172
+ const cleanedValues = values
173
+ . map ( ( s ) => {
174
+ // handle postgrest reserved characters
175
+ // https://postgrest.org/en/v7.0.0/api.html#reserved-characters
176
+ if ( typeof s === 'string' && new RegExp ( '[,()]' ) . test ( s ) ) return `"${ s } "`
177
+ else return `${ s } `
178
+ } )
179
+ . join ( ',' )
180
+ this . url . searchParams . append ( `${ column } ` , `in.(${ cleanedValues } )` )
175
181
return this
176
182
}
177
183
@@ -189,7 +195,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
189
195
this . url . searchParams . append ( `${ column } ` , `cs.${ value } ` )
190
196
} else if ( Array . isArray ( value ) ) {
191
197
// array
192
- this . url . searchParams . append ( `${ column } ` , `cs.{${ cleanFilterArray ( value ) } }` )
198
+ this . url . searchParams . append ( `${ column } ` , `cs.{${ value . join ( ',' ) } }` )
193
199
} else {
194
200
// json
195
201
this . url . searchParams . append ( `${ column } ` , `cs.${ JSON . stringify ( value ) } ` )
@@ -210,7 +216,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
210
216
this . url . searchParams . append ( `${ column } ` , `cd.${ value } ` )
211
217
} else if ( Array . isArray ( value ) ) {
212
218
// array
213
- this . url . searchParams . append ( `${ column } ` , `cd.{${ cleanFilterArray ( value ) } }` )
219
+ this . url . searchParams . append ( `${ column } ` , `cd.{${ value . join ( ',' ) } }` )
214
220
} else {
215
221
// json
216
222
this . url . searchParams . append ( `${ column } ` , `cd.${ JSON . stringify ( value ) } ` )
@@ -291,7 +297,7 @@ export default class PostgrestFilterBuilder<T> extends PostgrestTransformBuilder
291
297
this . url . searchParams . append ( `${ column } ` , `ov.${ value } ` )
292
298
} else {
293
299
// array
294
- this . url . searchParams . append ( `${ column } ` , `ov.{${ cleanFilterArray ( value ) } }` )
300
+ this . url . searchParams . append ( `${ column } ` , `ov.{${ value . join ( ',' ) } }` )
295
301
}
296
302
return this
297
303
}
0 commit comments