TypeScript Query Core

把 suffix、condition、schema、SQL / ES 构造收拢到一套清晰的小核心里

OOR 现在不是 ORM。它专注于查询输入解析、条件树、schema 校验、SQL / ES 语法生成,以及一个面向 Drizzle 的单表插件层。

Quick Sample
import { makeNode, schema } from 'oor'
import { querySql } from 'oor/sqlite'
import { z } from 'zod'

const query = schema({
  id: z.number(),
  status: z.string(),
  createdAt: z.date()
})

const input = query.parse({
  statusIn: ['active', 'pending'],
  createdAtDay: '2026-04-08',
  page: 1,
  size: 20
})

const node = makeNode(input)

const sql = querySql(input, undefined, {
  map: {
    status: { column: 'status', type: 'string' },
    createdAt: { column: 'created_at', type: 'date' }
  }
})

Core

从 suffix 输入生成 condition tree,再配合 schema 做类型约束。这一层不绑定数据库。

Adapter

`oor/sqlite`、`oor/pg`、`oor/mysql`、`oor/es` 复用同一套 query 语义,只在方言细节上分开。

Drizzle

`oor/drizzle` 提供 `withTable` 与 `withDB`,适合单表查询、分页和条件写操作。

现在的 OOR 更像什么

把它看成查询核心和适配层更准确。根导出只保留抽象模块,具体方言和插件走子路径,这样同一套 query 语义可以在不同项目里复用。

根入口只导出 suffix / condition / schema / date 等抽象能力。
SQL 与 ES 适配器只生成语法,不负责数据库连接。
drizzle 写操作默认要求带条件,避免无意全表更新或删除。