$ open source · GPL-3.0 — need a commercial license? imqueue.com →

query.toWhereOptions() function

Turns a serializable filter into Sequelize where options.

Signature:

export function toWhereOptions<T>(filter?: T, inputType?: new () => T): any;

Parameters

Parameter

Type

Description

filter

T

(Optional) Filter from a caller. Modified in place as empties are cleared.

inputType

new () => T

(Optional) Constructor describing which properties are relations.

Returns:

any

Options carrying where and, where relations were filtered, include.

Remarks

Each property is dispatched on its shape: a $-prefixed key becomes the matching Sequelize operator (see FILTER_OPS), an object with start and end becomes a BETWEEN, any other object is walked recursively as a nested filter, an array becomes an OR of its values, and a scalar is compared directly.

A STRING value is inspected before it is compared, which is convenient and occasionally surprising. A % anywhere in it makes the comparison a case-insensitive ILIKE, and a leading <=, >=, <, > or = becomes that operator with the rest as the value, coerced to a number or a Date when it parses as one. So '>=10' and '%abc%' work with no operator key — and a literal value that happens to contain %, such as '50% off', becomes a pattern match rather than an equality test. Use an explicit $eq where that matters.

Empty is treated as absent, not as a contradiction: an empty array is skipped and a single-element array is unwrapped to the value. Given a falsy filter it returns {}, which means "no restriction" — so a caller cannot accidentally filter everything out by passing nothing.

With inputType, a property matching one of that type's own properties is turned into a required include on the related model rather than a column comparison, which is how a filter reaches across a relation.