diff --git a/src/lib/PostgrestFilterBuilder.ts b/src/lib/PostgrestFilterBuilder.ts index 08e32954..0a567884 100644 --- a/src/lib/PostgrestFilterBuilder.ts +++ b/src/lib/PostgrestFilterBuilder.ts @@ -4,8 +4,6 @@ import PostgrestTransformBuilder from './PostgrestTransformBuilder' * Filters */ -const cleanFilterArray = (filter: T[keyof T][]) => filter.map((s) => `${s}`).join(',') - type FilterOperator = | 'eq' | 'neq' @@ -171,7 +169,15 @@ export default class PostgrestFilterBuilder extends PostgrestTransformBuilder * @param values The values to filter with. */ in(column: keyof T, values: T[keyof T][]): this { - this.url.searchParams.append(`${column}`, `in.(${cleanFilterArray(values)})`) + const cleanedValues = values + .map((s) => { + // handle postgrest reserved characters + // https://postgrest.org/en/v7.0.0/api.html#reserved-characters + if (typeof s === 'string' && new RegExp('[,()]').test(s)) return `"${s}"` + else return `${s}` + }) + .join(',') + this.url.searchParams.append(`${column}`, `in.(${cleanedValues})`) return this } @@ -189,7 +195,7 @@ export default class PostgrestFilterBuilder extends PostgrestTransformBuilder this.url.searchParams.append(`${column}`, `cs.${value}`) } else if (Array.isArray(value)) { // array - this.url.searchParams.append(`${column}`, `cs.{${cleanFilterArray(value)}}`) + this.url.searchParams.append(`${column}`, `cs.{${value.join(',')}}`) } else { // json this.url.searchParams.append(`${column}`, `cs.${JSON.stringify(value)}`) @@ -210,7 +216,7 @@ export default class PostgrestFilterBuilder extends PostgrestTransformBuilder this.url.searchParams.append(`${column}`, `cd.${value}`) } else if (Array.isArray(value)) { // array - this.url.searchParams.append(`${column}`, `cd.{${cleanFilterArray(value)}}`) + this.url.searchParams.append(`${column}`, `cd.{${value.join(',')}}`) } else { // json this.url.searchParams.append(`${column}`, `cd.${JSON.stringify(value)}`) @@ -291,7 +297,7 @@ export default class PostgrestFilterBuilder extends PostgrestTransformBuilder this.url.searchParams.append(`${column}`, `ov.${value}`) } else { // array - this.url.searchParams.append(`${column}`, `ov.{${cleanFilterArray(value)}}`) + this.url.searchParams.append(`${column}`, `ov.{${value.join(',')}}`) } return this }