@defjs/core

中文文档
0.6.0发布于 2026/11/02MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 9544

定义并执行已键入的 HTTP, SSE, 以及 WebSocket API.

中文使用文档
文档目录5 节
  1. 安装
  2. 快开始
  3. 规则
  4. 文档
  5. 许可证

@ defjs/ core (中文(简体) )

设计可重用HTTP,SSE,和WebSocket API作为数据,然后用应用程序拥有的客户端执行.

def 表示 define. SDK 作者输出操作定义和数据合同. 消耗的应用程序提供终点、证书、拦截器和运输。 导入定义时不会启动请求, 也不会约束客户端 .

安装

bun add @defjs/core

该软件包是无害环境管理,并宣布不依赖运行时间。 申报指标 ES2022 与 ESNext.Disposable, (中文(简体) ), DOM,以及 DOM.Iterable;这些条目只提供类型,而不是多填充。 Defjs是1.0前,所以使用文档来获取您安装的确切版本.

快开始

// users-sdk.ts — SDK definition
import { defineRequest, struct } from "@defjs/core";

export const getUser = defineRequest({
  method: "GET",
  path: "/users/:id",
  input: struct.object({ id: struct.number() }),
  builder: (input) => ({ path: input }),
  output: struct.object({ id: struct.number(), name: struct.string() }),
  error: struct.object({ message: struct.string() }),
});
// app.ts — application-owned client
import { createClient, withEndpoint } from "@defjs/core";
import { getUser } from "./users-sdk.ts";

const client = createClient(withEndpoint("https://api.example.com"));

async function main() {
  const [error, user] = await getUser(client, { id: 1 });
  if (error) {
    console.error(String(error), error.code);
    return;
  }
  console.log(user.name);
}

void main();

通话 getUser(client, { id: 1 }) 验证、构建和发送请求. client({ signal }) 返回 a Client 一次呼叫的值而不执行 I/O。在读取成功值之前返回 error 已经设定。 发布后,导入 getUser 从您的 SDK 软件包中取出, 而不是本地文件 —— 见 构建并发布 SDK。 。 。 .

规则

  • 用客户端调用操作执行 I/O. 定义不能抓取客户端 。 没有全球客户端.
  • 7个选择 RequestOptions 字段 : signal, (中文(简体) ), onUploadProgress, (中文(简体) ), onDownloadProgress, (中文(简体) ), beforeConnect, (中文(简体) ), protocols, (中文(简体) ), heartbeat,以及 reconnect。 。 。 . client(options) 返回不可调用的客户端值,将这些字段复制到新对象; 设置为 undefined 被删除。 嵌入 heartbeat, (中文(简体) ), protocols,以及 reconnect 数值通过参考来保存,因此,在通过这些数值后,将其视为不可改变。 过 AbortSignal.timeout(ms) 作为 signal 当一个电话需要一个最后期限。 这是因为 NET_TIMEOUT; 手动中止 NET_ABORTED。投球手从 client(options)而不是作为一个错误。 SSE和WebSocket没有只启动的最后期限:信号中止了整个连接.
  • input 宣告参数; 同步、 纯度 builder 把它们放在 path, (中文(简体) ), query, (中文(简体) ), headers,以及 body。每个定义 input 需要明确 builder。 。 。 .
  • Structs 运行时验证 . output 是2xx的身体, error 每一个其它状态;略去一面,身体永远不读.
  • 失败作为 Fault 错误的第一个二进制中的情况 - HTTP_STATUS, (中文(简体) ), REQ_*, (中文(简体) ), NET_*, (中文(简体) ), RES_*, (中文(简体) ), EXT_*, (中文(简体) ), CAP_*, (中文(简体) ), ENV_UNSUPPORTED。 。 。 . String(error) 发出消息; error.code 和因子链的结构为日志.
  • 超时或取消不能证明服务器错过了写入 。 在重放出作文前,保留应用程序一能合同.
  • 返回的SSE和 WebSocket 手柄是 AsyncDisposable; 网页 closed 是逻辑终端结果.
  • 输入一个与获取兼容的函数 withHTTPHandle(...) 测试一个没有服务器的客户端——见 用手柄进行测试。 。 。 .

文档

许可证

麻省理工学院.

版本与发布记录

@defjs/core 共发布 32 个版本,首次发布于 2024/08/03;过去 12 个月发布了 5 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.6.0latest2026/11/0210 天前
0.5.02026/11/0110 天前
0.4.02026/10/2913 天前
0.4.0-beta.1beta2026/10/101 个月前
0.4.0-beta.02026/09/261 个月前
0.3.32025/03/191.6 年前

其他发布通道:test → 0.3.1,beta → 0.4.0-beta.1。

关于 @defjs/core 的常见问题

@defjs/core 是什么?

定义并执行已键入的 HTTP, SSE, 以及 WebSocket API.

如何安装 @defjs/core?

在项目目录运行 npm install @defjs/core,或使用 pnpm add / yarn add / bun add。

@defjs/core 支持 TypeScript 吗?

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

@defjs/core 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@defjs/core 可以商用吗?

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

@defjs/core 的下载量有多少?

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

@defjs/core 还在维护吗?

最新版本 0.6.0 发布于 2026/11/02(10 天前);至今共发布 32 个版本,其中过去 12 个月发布了 5 个;首次发布于 2024/08/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。