refinedev/refine · error · Error
Operator ${operator} is not supported
Error message
Operator ${operator} is not supported What it means
The Supabase mapOperator utility rejects the "between" and "nbetween" operators — PostgREST/Supabase has no single operator token for range filtering, so the provider throws instead of silently mis-filtering. All other operators map to PostgREST tokens (cs, not.cs, etc.) or pass through.
Source
Thrown at packages/supabase/src/utils/mapOperator.ts:27
case "contains":
return "ilike";
case "ncontains":
return "not.ilike";
case "containss":
return "like";
case "ncontainss":
return "not.like";
case "null":
return "is";
case "nnull":
return "not.is";
case "ina":
return "cs";
case "nina":
return "not.cs";
case "between":
case "nbetween":
throw Error(`Operator ${operator} is not supported`);
default:
return operator;
}
};
View on GitHub (pinned to 779d52a20e)
Solutions
- Replace 'between' with two explicit boundary filters: gte/lte (or gt/lt)
- Build the range filter directly via supabaseClient.query.gte(field, start).lte(field, end) if using the query builder
- Upgrade the package in case a later version adds between support, but verify release notes
Example fix
// before
filters: [{ field: "created_at", operator: "between", value: [start, end] }]
// after
filters: [
{ field: "created_at", operator: "gte", value: start },
{ field: "created_at", operator: "lte", value: end },
] Defensive patterns
Strategy: validation
Validate before calling
const BAD = new Set(["between", "nbetween"]);
const hasRangeFilter = (filters: any[]) => filters.some((f) => BAD.has(f.operator));
if (hasRangeFilter(filters)) { /* rewrite to gte/lte pair */ } Type guard
const isSupabaseSupportedOperator = (op: string): boolean => op !== "between" && op !== "nbetween";
Try / catch
try { await dataProvider.getList({ resource, filters }); } catch (e) { if (String(e).includes("is not supported")) { /* replace between with gte/lte and retry */ } else throw e; } Prevention
- Express ranges as gte + lte filter pairs for Supabase
- Add a normalization step that rewrites between filters before any dataProvider call
- Add tests covering date-range filters per provider
When it happens
Trigger: Using a filter like { field: "created_at", operator: "between", value: [start, end] } in useTable/useList filters with the Supabase data provider.
Common situations: Porting date-range filters from Strapi/other providers that support between; adding a date range picker that emits between filters.
Related errors
- Operator ${operator} is not supported for the Medusa data pr
- Operator 'and' is not supported
- Not implemented on refine-supabase data provider.
- Max deep reached
- Value array must contain exactly two elements for "between"
AI-assisted analysis of refinedev/refine@779d52a20e (2026-08-27).
Data as JSON: /api/errors/cedb8164432d3180.
Report an issue: GitHub.