@chronark/zod-bird

中文文档
1.0.0发布于 2025/11/04MITTypeScriptESM + CJS零依赖近 30 天下载 18.9万

@chronark/zod-bird (英语)

使用 Zod 完全打入小鸟管
中文使用文档
文档目录6 节
  1. 安装
  2. 输入数据
  3. 查询终点
  4. 处理错误
  5. 高级
  6. 缓存

@chronark/zod-bird (英语)

使用 Zod 完全打入小鸟管

  • 类型安全
  • 处理为您构建 url 参数
  • 数据易于转换
  • 在缓存指令中为下个js所建
  • 以重试逻辑构建, 用于限制速率的请求
import { Tinybird } from "@chronark/zod-bird";
import { z } from "zod";

const tb = new Tinybird({ token: "token" });

export const getEvents = tb.buildPipe({
  pipe: "get_events__v1",
  parameters: z.object({
    tenantId: z.string(),
  }),
  data: z.object({
    event: z.string(),
    time: z.number().transform((t) => new Date(t)),
  }),
});


const res = await getEvents({ tenantId: "chronark" })

// res.data = {event: string, time: Date}[]
// if no rows found, res.data will be an empty array

安装

npm i @chronark/zod-bird

输入数据

// lib/tinybird.ts
import { Tinybird } from "./client";
import { z } from "zod";

const tb = new Tinybird({ token: process.env.TINYBIRD_TOKEN! });

export const publishEvent = tb.buildIngestEndpoint({
  datasource: "events__v1",
  event: z.object({
    id: z.string(),
    tenantId: z.string(),
    channelId: z.string(),
    time: z.number().int(),
    event: z.string(),
    content: z.string().optional().default(""),
    metadata: z.string().optional().default(""),
  }),
});
// somewhere.ts
import { publishEvent } from "./lib/tinybird";

await publishEvent({
  id: "1",
  tenantId: "1",
  channelId: "1",
  time: Date.now(),
  event: "test",
  content: "test",
  metadata: JSON.stringify({ test: "test" }),
});

或多事件成批地,使用单向天鸟求取.

// somewhere.ts
import { publishEvent } from "./lib/tinybird";

await publishEvent([
  {
    id: "1",
    tenantId: "1",
    channelId: "1",
    time: Date.now(),
    event: "test",
    content: "test",
    metadata: JSON.stringify({ test: "test" }),
  },
  {
    id: "2",
    tenantId: "2",
    channelId: "2",
    time: Date.now(),
    event: "test2",
    content: "test2",
    metadata: JSON.stringify({ test2: "test2" }),
  },
]);

查询终点

// lib/tinybird.ts
import { Tinybird } from "./client";
import { z } from "zod";

const tb = new Tinybird({ token: process.env.TINYBIRD_TOKEN! });

export const getChannelActivity = tb.buildPipe({
  pipe: "get_channel_activity__v1",
  parameters: z.object({
    tenantId: z.string(),
    channelId: z.string().optional(),
    start: z.number(),
    end: z.number().optional(),
    granularity: z.enum(["1m", "1h", "1d", "1w", "1M"]),
  }),
  data: z.object({
    time: z.string().transform((t) => new Date(t).getTime()),
    count: z
      .number()
      .nullable()
      .optional()
      .transform((v) => (typeof v === "number" ? v : 0)),
  }),
});
// somewhere.ts
import { getChannelActivity } from "./lib/tinybird";


const res = await getChannelActivity({
   tenantId: "1",
   channelId: "1",
   start: 123,
   end: 1234,
   granularity: "1h"
})

res 是来自小鸟端点的响应,但现在已完全输入,数据已经按照定义的图解解析 data。 。 。 .

处理错误

对于 429 (超过限额)和 500 错误, zod-bird 自动重试( e)源代码) (中文(简体) ).

其它错误都会丢出 Exception因此,你应该抓住它 通过尝试捕获:

try {
    const res = await getEvents({ tenantId: "chronark" })
    return res.data
} catch (e) {
    console.error(e)
    return e.messsage
}

高级

缓存

你可以在每个管子上添加缓存指令.

禁用缓存( 用于默认缓存万事的 Next.js )

tb.buildPipe({
  pipe: "some_pipe__v1",
  parameters: z.object({
   hello: z.string()
  }),
  data: z.object({
    response: z.string()
  }),
   opts: {
      cache: "no-store" // <-------- Add this
   };
});

缓存15分钟


tb.buildPipe({
  pipe: "some_pipe__v1",
  parameters: z.object({
   hello: z.string()
  }),
  data: z.object({
    response: z.string()
  }),
   opts: {
      next: {
        revalidate: 900 ;// <-------- Add this
      }
    };
});

版本与发布记录

@chronark/zod-bird 共发布 22 个版本,首次发布于 2023/05/21;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.0latest2025/11/041 年前
0.3.102024/10/032 年前
0.3.92024/05/092 年前
0.3.9-rc.02024/05/092 年前
0.3.72024/04/172 年前
0.3.62024/04/162 年前

关于 @chronark/zod-bird 的常见问题

@chronark/zod-bird 是什么?

@chronark/zod-bird (英语) 使用 Zod 完全打入小鸟管

如何安装 @chronark/zod-bird?

在项目目录运行 npm install @chronark/zod-bird,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:zod(^4.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@chronark/zod-bird 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@chronark/zod-bird 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@chronark/zod-bird 可以商用吗?

@chronark/zod-bird 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chronark/zod-bird 的下载量有多少?

根据 npm 官方下载统计,@chronark/zod-bird 在 2026/10/10 – 2026/11/08 这 30 天内被下载 188,725 次,日均约 6,291 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chronark/zod-bird 还在维护吗?

最新版本 1.0.0 发布于 2025/11/04(1 年前);至今共发布 22 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/05/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。