tsjq ← haorui.dev

纯 TypeScript 的 jq · 2026

写在中间

tsjq 用 TypeScript 实现 jq 语言,也实现命令行。左边放下 JSON,中间写一条过滤器,值从右边一行一行出来。命令行和库走的是同一条路:词法、语法、字节码,然后才是值。

GitHub 仓库 在这页试一条

tsjq 过滤示意:左侧是一份 items JSON,橙色铅笔写着 select 过滤器,右侧落下 b 和 c 两个名字
1800×840 的示意,不是终端截图。下面的校对台跑的是仓库 3b736e3 里的库。

01

校对台

改过滤器,或者换一条示例。计算在这台浏览器里完成,不会上传。这里没有命令行的 -L、YAML 和文件。结果一行一个值,最多 200 个。

值

"b"

"c"

上面是预先放上的结果。库载入后会再跑一次。

02

一条路

设计说明里,一条查询从字符串走到文本,中间不绕路。语法分析是手写的递归下降,不靠生成出来的分析表。

  1. 01源码字符串
  2. 02词法,语法
  3. 03字节码
  4. 04值流
  5. 05文本

03

能核对的三件事

01

命令行

程序名叫 tsjq。README 里的用法包括过滤、-n / -c / -r、模块 -L,以及 stream 和 YAML。退出码 0 是成功,2 是参数,3 是编译或查询。

02

库

import { runAll, parse, compile } from "tsjq"。runAll(".a", { a: 1 }) 得到 [1]。需要 Node.js 20 或更新。

03

验收和版本

cli/test.yaml 里有 846 条验收。包版本写的是 0.0.0。2026-11-09 查过,npm 上没有这个包,GitHub Releases 也没有附件。

04

已知边界

05

从仓库构建

  1. 安装 Node.js 20 或更新版本。
  2. 克隆 github.com/haorui-lab/tsjq,在仓库里执行 npm install。
  3. 执行 npm run build。这一步会编译,并把 src/builtin.jq 拷进 dist。
  4. 需要放进 PATH 时执行 npm link,然后可以运行 tsjq -n '1+2'。也可以不 link,直接 node dist/cli/main.js -n '1+2'。
  5. 还没有发布到 npm。Releases 目前没有附件。