logo

qbjs

Introduction

qbjs - An ORM-agnostic query builder for building type-safe queries from API request query strings

What is qbjs?

qbjs (Query Builder) is an ORM-agnostic query builder that transforms API request query strings into type-safe database queries. It provides a clean Parser → AST → Compiler architecture that separates concerns and makes it easy to support multiple ORMs and databases.

Key Features

  • Parser → AST → Compiler Architecture: Clean separation of concerns with a well-defined Abstract Syntax Tree
  • Type-Safe: Full TypeScript support with comprehensive type definitions
  • ORM-Agnostic: Works with Drizzle ORM (PostgreSQL, MySQL, SQLite)
  • Security-First: Built-in security configuration for field allowlisting and operator restrictions
  • Framework Integration: First-class support for Hono with middleware included
  • Flexible Filtering: Support for comparison, string, and logical operators
  • Pagination & Sorting: Built-in support for pagination and multi-field sorting

How It Works

Query String → Parser → AST → Compiler → Database Query
  1. Parser: Transforms query strings like ?filter[status][eq]=active&sort=-createdAt into a structured AST
  2. AST: A well-defined intermediate representation that's easy to validate and transform
  3. Compiler: Converts the AST into database-specific queries (Drizzle ORM)

Quick Example

import { createQueryBuilder, createDrizzlePgCompiler } from "@qbjs/core";
import { users } from "./db/schema";

const queryBuilder = createQueryBuilder({
  config: {
    allowedFields: ["id", "name", "email"],
    maxLimit: 100,
  },
  compiler: createDrizzlePgCompiler(),
});

// Parse and compile: /users?filter[status][eq]=active&sort=-createdAt
const result = queryBuilder.executeFromUrl(request.url, users);

Getting Started

Core Concepts

Guides & Reference

On this page