# @brickkit/crud 中文文档

规范地址：https://npmcn.com/package/%40brickkit/crud/

版本：0\.13\.1
npm 元数据更新时间：2026-11-07T11:50:30.191Z
中文译文更新时间：2026-11-08T15:14:22.149Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40brickkit/crud
原文对照：https://npmcn.com/package/%40brickkit/crud/?lang=original
项目主页：https://brickkit.dev/
源码仓库：https://github.com/get-brickkit/brick

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：58.9 kB，4 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：drizzle-orm ^0\.45\.2，@brickkit/core ^0\.13\.1，@sinclair/typebox ^0\.34\.52
- 首次发布：2026-10-10T22:02:48.999Z
- 最新版本发布：2026-11-07T11:50:29.858Z
- 近 30 天下载量：2958（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：23（近 12 个月 23 个）

## 中文简介

Brick 的 Opt- in 资源 CRUD 插件

## 安装

```sh
npm install @brickkit/crud
```

也可以使用：`pnpm add @brickkit/crud`、`yarn add @brickkit/crud`、`bun add @brickkit/crud`

## README

# @brickkit/ crud (英语)

Brick-TS 的 Opt- in 自动 CRUD 资源插件. 核心资源申报身份 和一张表格,但没有记录任何行动; `crud()` 添加已键入的列表/ get/ create/ 更新/删除/查找 One/计算/存在 HTTP 线路.

晚点再买一分钱 `@brickkit/core` 作为同伴的依赖.

```sh
bun add @brickkit/crud @brickkit/core
```

```ts
import { defineService } from "@brickkit/core";
import { crud } from "@brickkit/crud";

const service = defineService("pages");
const page = service.resource({ name: "page", table: pages, id: pages.id }).use(
  crud({
    access: "public",
    fields: {
      id: { read: true, filter: ["eq", "in"] },
      title: {
        read: true,
        create: true,
        update: true,
        filter: ["eq", "contains"],
        sort: true,
      },
    },
  }),
);

await page.list.run({ where: { field: "title", op: "contains", value: "Hi" } });
```

`access` 需要: 使用 `"public"` 或一个 `authorize`编号 :`scope` 政策.

`authorize` 接受作为行动歧视联盟的验证输入. 检查中 `operation` 缩进 `input` 该操作的形状:

```ts
crud({
  fields: { teamId: { read: true, filter: ["eq"] } },
  access: {
    authorize: ({ operation, input, ctx }) => {
      if (operation === "list" && input.where && "field" in input.where) {
        const filter = input.where;
        return filter.field === "teamId" && filter.value === ctx.teamId;
      }
      return false;
    },
  },
});
```

`CrudAuthorizeArgs<F>` 财务报告和审定财务报表 `CrudInputs<F>` 用于可重复使用的政策 与业务投入 `F` 以 `typeof fields`外地政策 限制选择、写、排序和过滤操作符。 明确领域 计划提供价值类型。 列衍生值和ID 保留 `unknown` 因为 `crud()` 仅在插件附加到资源时才收到表格. 创建属性仍然是可选的,因为列默认和可失效 也在配置时不可用 . `scope` 仍然只接收 `{ operation, ctx }`。 。 。 . 未列出的字段和省略的允许保留禁用 .

## 外地政策

`read`, (中文(简体) ), `create`, (中文(简体) ), `update`, (中文(简体) ), `filter`,以及 `sort` 独立。 未列出 字段和省略权限被禁用. `schema` 覆盖验证 用于田地; `scrub` 转换返回的值(读取和写入结果) 不更改存储值.

每个字段必须启用筛选操作符并与列兼容 类型:文本运算符(`contains`, (中文(简体) ), `startsWith`, (中文(简体) ), `endsWith`需要字符串 列; 命令运算符 (`gt`, (中文(简体) ), `gte`, (中文(简体) ), `lt`, (中文(简体) ), `lte`, (中文(简体) ), `between`要求 字符串/ 数字/ 日期/ bigint 列。 排序为 字符串/ 数字/ boolean/ date/ bigint 列 .

## 业务和路线

| 方法 | 路径 | 行动 |
| --- | --- | --- |
| 邮政 | `/api/page/query` | 列表 |
| 获取 | `/api/page/:id` | 起来 |
| 邮政 | `/api/page` | 创建 |
| 帕齐 | `/api/page/:id` | 更新 |
| 迪莱特 | `/api/page/:id` | 删除 |
| 邮政 | `/api/page/find-one` | 找到一个 |
| 邮政 | `/api/page/count` | 计数 |
| 邮政 | `/api/page/exists` | 已存在 |
| 邮政 | `/api/page/bulk-create` | 大块创造 |
| 邮政 | `/api/page/bulk-update` | 更新日期 |
| 邮政 | `/api/page/bulk-delete` | 批量删除 |

`operations: { delete: false }` (或 `operations: false`)删除本地 能力. `routes: { list: false }` (或 `routes: false`保持本地状态 无需HTTP、OpenAPI或浏览器曝光即可调用动作. `defaultLimit` (违约20)和 `maxLimit` (默认 100) 绑定的 pagination.

散装作业停止,直到 `operations` 设为 `true`。 。 。 . `bulkCreate` 带 `{ items }`, (中文(简体) ), `bulkUpdate` 带 `{ items: [{ id, data }] }` 财务报告和审定财务报表 `bulkDelete` 带 `{ ids }`每个项目都经过验证、授权、范围 并钩上它的一排操作。 整批都是一个 交易: 当项目失败时, 无保留, 错误带有 项的代码和 `details: { index, code, message }`。 。 。 . `maxBatchSize` (默认为100) 封顶每个呼叫的项目.

## 钩子和交易

`beforeCreate`, (中文(简体) ), `afterCreate`, (中文(简体) ), `beforeUpdate`, (中文(简体) ), `afterUpdate`, (中文(简体) ), `beforeDelete` 财务报告和审定财务报表 `afterDelete` 在信件交易中运行并接收为 `tx`。 。 。 . 将其它表格写入 `tx`,或以 `{ ...ctx, db: tx }`,而写作承诺或随行而回. 钩子 这会把整个行动都推回去. `afterCommit` 运行于 承诺,用于缓存清理和实时出版. 它的错误被记录下来,不是 已经返回.

## 本地 vs HTTP 行精度

当地 `list`编号 :`get` 输入动作 `Selected<T, F, S>` - 那个 `select` 投影缩小返回类型。 超过 HTTP 每个可读密钥都是可选的 在行计划,因为 `select` 预测省略了密钥, 因此验证 使用时存在客户端 `select`。 。 。 .

## 安全财产

-   只允许列表的字段、操作符和排序列到达 SQL; 未知 投影、写作、过滤和以400元命令失败验证.
-   `where` 支持嵌入 `and`编号 :`or` 阵列可达20级;更深的巢穴 在验证重现前,用400元拒绝.
-   `contains`编号 :`startsWith`编号 :`endsWith` 逃脱 `LIKE` 通配符( e)`%`, (中文(简体) ), `_`, (中文(简体) ), `\`) (中文(简体) ).
-   `access.scope` 限制每个读取和突变(包括局部行动) ; 范围化创建在没有明确的创建政策的情况下被拒绝.
-   特异性违规回回409 不泄露司机出错.
-   读取重新使用捆绑的查询(128-输入缓存) 驱动程序支持它们.

见 [资源指南](https://brickkit.dev/docs/resources) 全文 向导.

## 常见问题

### @brickkit/crud 是什么？

Brick 的 Opt- in 资源 CRUD 插件

### 如何安装 @brickkit/crud？

在项目目录运行 npm install @brickkit/crud，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：drizzle-orm（^0\.45\.2）、@brickkit/core（^0\.13\.1）、@sinclair/typebox（^0\.34\.52）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @brickkit/crud 支持 TypeScript 吗？

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

### @brickkit/crud 支持 ESM 还是 CommonJS？

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

### @brickkit/crud 可以商用吗？

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

### @brickkit/crud 的下载量有多少？

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

### @brickkit/crud 还在维护吗？

最新版本 0\.13\.1 发布于 2026/11/07（1 天前）；至今共发布 23 个版本，其中过去 12 个月发布了 23 个；首次发布于 2026/10/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

