@brickkit/ crud (英语)
Brick-TS 的 Opt- in 自动 CRUD 资源插件. 核心资源申报身份
和一张表格,但没有记录任何行动; crud() 添加已键入的列表/ get/ create/
更新/删除/查找 One/计算/存在 HTTP 线路.
晚点再买一分钱 @brickkit/core 作为同伴的依赖.
bun add @brickkit/crud @brickkit/core
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 该操作的形状:
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-输入缓存) 驱动程序支持它们.
见 资源指南 全文 向导.