function parseWhereExpression<T>(expr, options): T | null;
function parseWhereExpression<T>(expr, options): T | null;
Defined in: packages/db/src/query/expression-helpers.ts:201
Parses a WHERE expression into a custom format using provided handlers.
This is the main helper for converting TanStack DB where clauses into your API's filter format. You provide handlers for each operator, and this function traverses the expression tree and calls the appropriate handlers.
T = any
The WHERE expression to parse
BasicExpression<boolean> | null | undefined
Configuration with handler functions for each operator
T | null
The parsed result in your custom format
// REST API with query parameters
const filters = parseWhereExpression(where, {
handlers: {
eq: (field, value) => ({ [field.join('.')]: value }),
lt: (field, value) => ({ [`${field.join('.')}_lt`]: value }),
gt: (field, value) => ({ [`${field.join('.')}_gt`]: value }),
and: (...filters) => Object.assign({}, ...filters),
or: (...filters) => ({ $or: filters })
}
})
// Returns: { category: 'electronics', price_lt: 100 }
// REST API with query parameters
const filters = parseWhereExpression(where, {
handlers: {
eq: (field, value) => ({ [field.join('.')]: value }),
lt: (field, value) => ({ [`${field.join('.')}_lt`]: value }),
gt: (field, value) => ({ [`${field.join('.')}_gt`]: value }),
and: (...filters) => Object.assign({}, ...filters),
or: (...filters) => ({ $or: filters })
}
})
// Returns: { category: 'electronics', price_lt: 100 }
// GraphQL where clause
const where = parseWhereExpression(whereExpr, {
handlers: {
eq: (field, value) => ({ [field.join('_')]: { _eq: value } }),
lt: (field, value) => ({ [field.join('_')]: { _lt: value } }),
and: (...filters) => ({ _and: filters })
}
})
// GraphQL where clause
const where = parseWhereExpression(whereExpr, {
handlers: {
eq: (field, value) => ({ [field.join('_')]: { _eq: value } }),
lt: (field, value) => ({ [field.join('_')]: { _lt: value } }),
and: (...filters) => ({ _and: filters })
}
})
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.
