@brickkit/core

中文文档
0.13.1发布于 2026/11/07MITTypeScriptES Module构建来源已验证近 30 天下载 4845

Brick-TS 框架的核心引擎原始

中文使用文档
文档目录7 节
  1. 定义服务
  2. 出口
  3. 已打入客户端
  4. MCP工具
  5. 追踪
  6. 活动
  7. TanStack 查询选项

@ brickkit/ 核心

Brick-TS框架的服务、行动、资源和数据库。 您用 TypeBox 计划定义打字服务, 用挂载 brick(),并获得一个带有 OpenAPI 输出和输入客户端的 Elysia HTTP 服务器.

晚点要买一分钱 仅装箱的API是懒惰的,因此套件在严格的节点无害环境管理下也干净地进口.

bun add @brickkit/core

定义服务

创建一个服务,注册一个行动,并服务它。 每个动作都暴露出一条路线: POST /api/{service}/{action} 默认.

import { brick, defineAction, defineService } from "@brickkit/core";

const healthService = defineService("system");
const ping = defineAction({
  name: "ping",
  execute: async () => ({ status: "ok" }),
});
healthService.action(ping);

const app = brick({ services: [healthService] });
app.listen(4000);

设定 method: "GET" 用于完成阅读的动作配置 path 以替换默认路径。 添加 input 财务报告和审定财务报表 output TypeBox 策略在边界验证. 添加 authorize 要求用户;没有它,动作是公开的。 要求用同样的管道采取行动 action.run(input, ctx) 或者说 service.getAction("ping")。 。 。 .

brick() 还接受 prefix, (中文(简体) ), title,以及 version。 。 。 . generateOpenApiSpec({ services, prefix }) 返回不启动服务器的 OpenAPI 3.1 文档.

出口

路径它所持有的
@brickkit/corebrick, (中文(简体) ), defineService, (中文(简体) ), defineAction, (中文(简体) ), defineDatabase, MCP 软件
@brickkit/core/clientcreateBrickClient, Eden 风格的浏览器客户端
@brickkit/core/pgPostgres Drizzle 桌帮手, 例如 : pgTable

数据库使用 Drizzle 表格通过 defineDatabase({ engine, tables, url }) 与 "sqlite" 或者说 "postgres" 发动机。 数据库设置在 DATABASES.md。 。 。 .

bun add @brickkit/core drizzle-orm postgres
import { defineDatabase } from "@brickkit/core";
import { pgTable, text } from "@brickkit/core/pg";

const pages = pgTable("pages", {
  id: text("id").primaryKey(),
  title: text("title").notNull(),
});

export const db = defineDatabase({
  engine: "postgres",
  tables: { pages },
  url: process.env.DATABASE_URL!,
});

已打入客户端

@brickkit/core/client (亦从包根再出)提供从您合同类型推断出的一个Eden-style HTTP客户端——没有OpenAPI代码:

为您的默认导出应用程序配置了 Brick Vite 插件, Vite 创建 _brick/contract.ts 自动 :

import { createBrickClient } from "@brickkit/core/client";
import { contract } from "../_brick/contract";

const api = createBrickClient({ baseUrl: "http://localhost:4000", contract });
const pages = await api.page.list({ limit: 10 });

生成的合同包含浏览器安全路由元数据并推断出输入/输出/错误类型. 它尊重自定义的动作路径和方法,编码路径参数,并从剩余的有效载荷中去除. 没有后端处理器被捆绑. 见CLI读取和 已键入客户端指南 用于 Vite 设置和错误处理.

MCP工具

定义诸如动作等工具,包括输入/输出计划和内置元数据:

import {
  defineService,
  createMcpRegistry,
  createMcpHandler,
  t,
} from "@brickkit/core";

const crm = defineService("crm");
const whoami = crm.tool({
  name: "crm_whoami",
  title: "View Connected CRM Account",
  annotations: { readOnlyHint: true },
  input: t.Object({}),
  output: t.String(),
  authorize: ({ user }) => !!user?.id,
  execute: ({ ctx }) => ctx.user.id,
});

const registry = createMcpRegistry({ services: [crm] });
registry.listTools();
await registry.callTool("crm_whoami", {}, { user: { id: "user_1" } });

const handleMcp = createMcpHandler({
  registry,
  serverInfo: { name: "crm", version: "1.0.0" },
});
// After your app authenticates a request:
// return handleMcp(request, { user: { id: verifiedSubject } });

工具使用动作验证,授权,和服务上下文. 它们与 HTTP 动作分开存储, 默认时远离路由和 OpenAPI, 包括其服务传递给 brick()添加 http: true 用于工具定义,或以 crm.action(whoami)也通过HTTP曝光.

登记处接受 services 和/或明示 tools 数组,拒绝重复名称,直接从定义中读取注释。 处理者是无国籍的POST JSON-RPC帮助者,负责初始化、打平、工具/清单和工具/呼叫;通知收到空的202答复。 您的应用程序中仍然保留着认证和安装。 它的默认协议版本是 2025-06-18,然后 MCP 工具规格。 。 。 .

资料来源: https://github.com/get-brickkit/brick 页面存档备份,存于互联网档案馆。 。 。 .

追踪

Brick 记录 HTTP, 动作, 和 RPC 跨度 @opentelemetry/api. 追查 默认关闭。 每个应用打开 telemetry 选项和注册 一个OpenTeleometry追踪器提供商,所以时间跨度有去处:

import { brick } from "@brickkit/core";

const app = brick({ services: [pagesService], telemetry: true });

每个请求都成为服务器跨度. 每个动作、远程呼叫和 SQL 语句 期间制造的 成为了儿童期。 SQLite 语句在 bun:sqlite 驱动程序,以及 postgres.js 查询本身的语句。 失败 记录在产生它们的间距: 服务器断层( 5xx) 标记间距 被错误的例外事件,而客户端错误( 4xx) 只添加 brick.error.code。没有注册的供应商,则无期限.

登记了W3C跟踪上下文的传播器后,请求继续发出 从它的追踪 traceparent 标题, 反应包含 traceparent 回来 没有 x-trace-id 标题, Brick 返回请求的微量标识为 x-trace-id。声明案文记录为 db.statement; 绑定参数 数值不是.

直接在应用程序上注册的路由,例如安装在 app.all(),坐在外部动作和终点。 包装他们的处理器 traceRoute(route, handler) 给他们一个服务器跨度。 处理者收到 request, (中文(简体) ), headers, (中文(简体) ), set, (中文(简体) ), params,以及 query; 从 request。 。 。 . traceRoute * 每当追踪提供者注册时,记录.

import { traceRoute } from "@brickkit/core";

app.all(
  "/api/auth/*",
  traceRoute("/api/auth/*", ({ request }) => auth.handler(request)),
);

brick dev 注册一个提供者,并将跨度发送到它的仪表板,所以应用程序 有必要 telemetry: true 我也一样.

活动

生成 CRUD 写入可以记录与行相同的交易中的事件,并且 Brick在犯罪后把它交给听众 重试失败者. 添加 outboxTable() 到数据库,定义一个听众,然后传递给 brick()。 。 。 .

import { brick, defineListener, outboxTable } from "@brickkit/core";

export const outbox = outboxTable("postgres");

const welcome = defineListener({
  name: "welcome-email",
  on: "user.create",
  run: async ({ payload, deliveryId }) => {
    await mailer.sendWelcome(payload.row.email, { idempotencyKey: deliveryId });
  },
});

export default brick({ services, events: { listeners: [welcome] } });

交付至少一次,所以使用 deliveryId 作为一等钥匙。 应用程序 无 events 表现得跟以前一样 见 活动指南。 。 。 .

TanStack 查询选项

安装 @tanstack/query-core v5 与您框架的 TanStack 查询软件包并列 . 导入浏览器条目和生成的合同 :

import { createBrickQueryClient } from "@brickkit/core/tanstack-query";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { contract } from "./_brick/contract";

const api = createBrickQueryClient({
  baseUrl: "https://api.example.com",
  contract,
});

function Pages() {
  const queryClient = useQueryClient();
  const pages = useQuery({
    ...api.page.list.queryOptions({ input: { limit: 20 } }),
    staleTime: 30_000,
    select: (result) => result.items,
  });
  const create = useMutation({
    ...api.page.create.mutationOptions(),
    onSuccess: () =>
      queryClient.invalidateQueries({ queryKey: api.page.list.queryKey() }),
  });
  // Render pages.data and call create.mutate with the action's input.
}

直接电话,例如 api.page.list(input) 还在工作。 两位助手都在场 每一个行动。 选择它们由您如何使用动作, 独立于它的 HTTP 方法。 POST 查询仍然发送 POST; 自定义路由、插件动作和编码 路径参数使用生成的元数据.

queryOptions({ input, request }) 返回键入 queryKey 财务报告和审定财务报表 queryFn。 。 。 . 传播本地选项, 如 placeholderData, (中文(简体) ), select,以及 staleTime 旁边 那些财产. request 接受普通客户头,信号,以及 暂停 。 查询取消到达取回, 请求取消也保留 活动. mutationOptions({ request }) 返回时 mutationKey 财务报告和审定财务报表 mutationFn· ; 变异变量是动作输入.

queryKey({ input }) 处理一项投入; queryKey() 匹配所有输入 转到 invalidateQueries键包括服务器 URL,前缀, 命名空间路径、合同方法和路由标识,以及输入。 信头不是密钥的一部分 。 清除或分区 当认证用户更改时, 您的查询缓存 .

同样的选项与 queryClient.fetchQuery, (中文(简体) ), prefetchQuery,以及 ensureQueryData。例如,一个 TanStack 路由器加载器可以返回 context.queryClient.ensureQueryData(api.page.get.queryOptions({ input: { id: params.id } }))。 。 。 . 密钥返回 queryOptions 和具体投入 queryKey 也推断 缓存输出类型 getQueryData。 。 。 .

对于 TanStack DB , 将选项传递到 queryCollectionOptions 并供应你的 拥有 queryClient, (中文(简体) ), getKey,以及任意 select 需要转换成相接反应 排成一行。 收藏身份、画相、乐观写作和同步 突变后仍为应用责任. 页面编辑器演示 标准查询突变加其他收藏的明确收藏回溯 消费者.

版本与发布记录

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

版本发布日期距今
0.13.1latest2026/11/071 天前
0.13.02026/11/071 天前
0.12.02026/11/053 天前
0.11.02026/10/309 天前
0.10.02026/10/309 天前
0.9.12026/10/2613 天前

其他发布通道:beta → 0.3.0-beta.5。

关于 @brickkit/core 的常见问题

@brickkit/core 是什么?

Brick-TS 框架的核心引擎原始

如何安装 @brickkit/core?

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

@brickkit/core 支持 TypeScript 吗?

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

@brickkit/core 支持 ESM 还是 CommonJS?

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

@brickkit/core 可以商用吗?

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

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

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

@brickkit/core 还在维护吗?

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