Skip to content

createWhere

createWhere<R>(): object

Defined in: packages/schema/src/filter/where.ts:49

Builds filters in code, for the client and the UI, as where does, with field names and values typed against the resource R: createWhere<typeof orders>().eq('status', 'paid'). A filter it builds prints as filter text with printFilter.

R extends object = { $fields: Record<string, Field<any>>; }

ago: (duration) => FilterValue

A time the duration before now, such as ago('7d') for now() - 7d; units are s, m, h, d and w.

string

FilterValue

and: (…args) => FilterExpr

Every filter holds; one filter is returned as it is, none throws.

…FilterExpr[]

FilterExpr

between: <K>(name, low, high) => FilterExpr

The field lies from low to high, both included.

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

eq: <K>(name, value) => FilterExpr

The field equals the value: status = "paid".

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

fromNow: (duration) => FilterValue

A time the duration after now, such as fromNow('1h') for now() + 1h.

string

FilterValue

gt: <K>(name, value) => FilterExpr

The field is above the value: total > 100.

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

gte: <K>(name, value) => FilterExpr

The field is at least the value: total >= 100.

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

has: <K>(name, value) => FilterExpr

A JSON field holds the value, as a key or an element: tags:"urgent".

K extends string

K

string | number | false | true

FilterExpr

in: <K>(name, values) => FilterExpr

The field equals one of the values: in(status, "paid", "sent").

K extends string

K

Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>[]

FilterExpr

isNull: <K>(name) => FilterExpr

The field has no value: isNull(field).

K extends string

K

FilterExpr

lt: <K>(name, value) => FilterExpr

The field is below the value: total < 100.

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

lte: <K>(name, value) => FilterExpr

The field is at most the value: total <= 100.

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

ne: <K>(name, value) => FilterExpr

The field differs from the value: status != "paid".

K extends string

K

DurationLiteral | { kind: "string"; span: Span; value: string; } | { kind: "number"; raw: string; span: Span; value: number; } | { kind: "boolean"; span: Span; value: boolean; } | { kind: "timestamp"; span: Span; value: string; } | NowValue | Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

DurationLiteral


{ kind: "string"; span: Span; value: string; }

"string"

Quoted text.

Span

Where it stands in the filter text.

string

The text, unescaped.


{ kind: "number"; raw: string; span: Span; value: number; }

"number"

A number.

string

The number as written, which keeps digits a number cannot hold, as for bigint and decimal fields.

Span

Where it stands in the filter text.

number

The number.


{ kind: "boolean"; span: Span; value: boolean; }

"boolean"

true or false.

Span

Where it stands in the filter text.

boolean

The value.


{ kind: "timestamp"; span: Span; value: string; }

"timestamp"

An RFC 3339 timestamp.

Span

Where it stands in the filter text.

string

The timestamp as written.


NowValue


Extract<NonNullable<{ [K in string | number | symbol]: { [K in string | number | symbol]: (…)[(…)] extends Field<(…)> ? V : never }[K] }[K]>, string | number | false | true>

FilterExpr

not: (arg) => FilterExpr

The filter does not hold.

FilterExpr

FilterExpr

now: () => FilterValue

The current time, as a value to compare with: now().

FilterValue

or: (…args) => FilterExpr

At least one filter holds; one filter is returned as it is, none throws.

…FilterExpr[]

FilterExpr

present: <K>(name) => FilterExpr

The field has a value, a JSON field one other than null: field:*.

K extends string

K

FilterExpr

regex: <K>(name, pattern) => FilterExpr

The text field matches the regular expression, ignoring case: regex(field, "pattern").

K extends string

K

string

FilterExpr

search: (text) => FilterExpr

Every word of the text appears, ignoring case, in one of the resource’s search fields: search("text").

string

FilterExpr

similar: <K>(name, text) => FilterExpr

The text field is close to the text by trigram similarity, typos included: similar(field, "text").

K extends string

K

string

FilterExpr