Repolode
DZakh

DZakh/sury

TypeScript 与 ReScript 通用 Schema 库,一次声明即可完成数据校验、解析与编码,支持 JSON、表单和 Protobuf。

Star
494
Fork
15
未关闭 Issue
18
最近提交
前天

这是什么?

Sury 是一个面向 TypeScript 和 ReScript 的 Schema 库。开发者只需声明一次数据模型,同一份 Schema 即可把不可信输入解析为带类型的值,也能把类型化的数据编码回传输格式,并从声明中推导 TypeScript 类型。Schema 还可以串联,例如把 base64url 字符串或 JSON 文本作为原始输入与数据模型之间的一个处理阶段。

库内置了 JSON、JSON 字符串、表单数据、环境变量、URL 查询参数、base64、Uint8Array、Protobuf、File 和 Blob 等格式的编解码。Protobuf 无需 .proto 文件或代码生成步骤,也可以导出 .proto 供其他方使用。Schema 同时实现了 Standard Schema 与 Standard JSON Schema,并支持 JSON Schema 双向转换。

项目会在运行时为每个 Schema 生成专用的 JavaScript 函数以提升性能。针对 Schema 的操作包括解析、编码、构造校验、相等与比较,每种都提供同步、Promise 和 Result 返回等变体。

核心功能

  • 01基于一次 Schema 声明完成解析与编码,并推导出 TypeScript 类型。
  • 02内置 JSON 字符串、表单数据、环境变量、Protobuf、base64 和 File/Blob 等格式。
  • 03兼容 Standard Schema,可接入 tRPC、Hono 等支持该规范的库。
  • 04支持与 JSON Schema 双向转换,并可从 Protobuf Schema 生成 .proto 定义。
  • 05校验失败时报告每个问题及其路径,遇到 JSON.stringify 会静默破坏的值时直接抛错。

适用场景

  • 在 TypeScript 后端或客户端中校验 API 请求与响应数据。
  • 以带类型的字段和文件解析与构造 multipart 表单提交。
  • 把环境变量读取为带默认值和校验的类型化配置。
  • 在不维护生成代码的情况下编解码 Protobuf 消息。

快速上手

  1. 1

    从 npm 安装 sury 包

    npm install sury
  2. 2

    在 TypeScript 代码中导入库并声明一个 schema

使用前须知

  • 文档中列出的 S.request、S.response、S.capnp、S.rkyv 和 S.toon 等数据格式尚未提供,属于后续计划。
  • JSON Schema 导入仅通过官方 draft-07 测试套件的约 93%,部分 schema 可能无法完整转换。

标签

常见问题

sury 是什么?
TypeScript 与 ReScript 通用 Schema 库,一次声明即可完成数据校验、解析与编码,支持 JSON、表单和 Protobuf。 Sury 是一个面向 TypeScript 和 ReScript 的 Schema 库。开发者只需声明一次数据模型,同一份 Schema 即可把不可信输入解析为带类型的值,也能把类型化的数据编码回传输格式,并从声明中推导 TypeScript 类型。Schema 还可以串联,例如把 base64url 字符串或 JSON 文本作为原始输入与数据模型之间的一个处理阶段。
sury 可以免费使用吗?用的什么许可证?
sury 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
sury 还在维护吗?
活跃维护中。sury 最近一次提交是在 2026年11月5日。
sury 适合用来做什么?
在 TypeScript 后端或客户端中校验 API 请求与响应数据。 以带类型的字段和文件解析与构造 multipart 表单提交。 把环境变量读取为带默认值和校验的类型化配置。 在不维护生成代码的情况下编解码 Protobuf 消息。
sury 怎么安装和运行?
从 npm 安装 sury 包: npm install sury 在 TypeScript 代码中导入库并声明一个 schema
在哪里获取 sury?
源代码和安装说明在 GitHub 上:https://github.com/DZakh/sury

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目