@emresandikci/pocketbase-query is a TypeScript-based query builder designed to generate complex filter queries for PocketBase. It allows for easy construction of queries using various operators while maintaining a fluent and chainable API.
This library can be used in any TypeScript/JavaScript project. Simply import it as needed:
npm i @emresandikci/pocketbase-queryimport PocketbaseQuery from '@emresandikci/pocketbase-query';The PocketbaseQuery class follows the singleton pattern. You should use getInstance() to get a query builder instance:
const query = PocketbaseQuery.getInstance<MyType>();import PocketbaseQuery from '@emresandikci/pocketbase-query';
const query = PocketbaseQuery.getInstance<{ status: string; comments: number }>();
const customFilters = query
.equal('status', 'active')
.and()
.greaterThan('comments', 50)
.build();
console.log(customFilters); // Outputs: status='active' && comments>50
await pb.collection('posts').getFullList({
filter: customFilters,
expand: [{ key: 'comments_via_post' }],
})OperatorEnum defines a set of operators for use in queries:
enum OperatorEnum {
Equal = "=",
NotEqual = "!=",
GreaterThan = ">",
GreaterThanOrEqual = ">=",
LessThan = "<",
LessThanOrEqual = "<=",
Like = "~",
NotLike = "!~",
AnyEqual = "?=",
AnyNotEqual = "?!=",
AnyGreaterThan = "?>",
AnyGreaterThanOrEqual = "?>=",
AnyLessThan = "?<",
AnyLessThanOrEqual = "?<=",
AnyLike = "?~",
AnyNotLike = "?!~",
}Adds an equality condition to the query.
query.equal("status", "active");Adds a not-equal condition to the query.
query.notEqual("category", "archived");Adds a greater-than condition.
query.greaterThan("age", "18");Adds a less-than condition.
query.lessThan("price", "100");Adds a LIKE condition (partial match).
query.like("name", "John");Adds a NOT LIKE condition.
query.notLike("description", "discount");Adds an equality condition for array fields.
query.anyEqual("tags", "sale");Adds an OR condition for multiple values.
query.in("category", ["electronics", "furniture"]);Adds a custom filter string to the query.
query.customFilter("status='active' && price>100");Joins multiple conditions with &&.
query.equal("status", "active").and().greaterThan("price", "50");Joins multiple conditions with ||.
query.equal("status", "active").or().equal("status", "pending");Groups conditions using parentheses.
query.openBracket().equal("status", "active").or().equal("status", "pending").closeBracket().and().greaterThan("price", "50");Returns the current query string.
const queryString = query.getQuery();Finalizes and returns the query string while clearing the internal state.
const finalQuery = query.build();- The
PocketbaseQueryclass uses a singleton pattern, meaning a single instance is reused across calls. - The
.build()method resets the query, so ensure you store the generated string if you need it. - The
in()method appliesORbetween multiple values.
MIT License