@astram/engine

中文文档
0.20.0发布于 2026/11/06MITTypeScriptCommonJS近 30 天下载 5017

Astram框架——铺平了的道路。 一个不可通通的写字管(resolve-schema → perference gate → exterm-write-context → 校验 → 校验 → 交叉-同步 – 审计 → 发售 – 事件),每个功能的 CRUD 流经真实的物理表.

中文使用文档
文档目录3 节
  1. 复制密钥 : UniqueConflictError
  2. lockForUpdate 并锁定取自: 被墙锁
  3. 行为变化(0.19)

@ astram/ 引擎

Astram铺面道路:一个固定的、交易式的写字管(型号为前门-取回-记录-) 校正 校正 校正 校正 校正 校正 校正 校正 特性 代码只接收 RecordEngine 外观( e)RECORD_ENGINE 编号 : RecordsService从不游泳池. 许可门和审计阶段是强制性的。 消费者指南是: @astram/guide (单位:千美元)CAPABILITIES.md) (中文(简体) ).

复制密钥 : UniqueConflictError

记录 create, (中文(简体) ), update, (中文(简体) ), createMany 点击 UNIQUE 索引的行或操作写入创建 (司机错误1062) UniqueConflictError (GAPS#58, docs/features/unique-conflict-error/SPEC.md) (中文(简体) ). Guard 的全局过滤器以 409 { statusCode: 409, code: 'unique_conflict', message: 'This record conflicts with an existing one.' }。 。 。 .

  • 字段 : typeKey, (中文(简体) ), constraint (索引名称,例如:. uq_site_code,或 null 当驾驶员 信件无法安全读取 , rowIndex (创建 Many: 以 0 为主的行; 整个批次滚动) )和只读 errno: 1062 编号 : code: 'ER_DUP_ENTRY' 旧的捕捉码.
  • 和它比对 isUniqueConflict(err, '<constraint>')驱动程序 sqlMessage 信息为 未曝光: 它们命名值并携带 SQL 参数 。 错误从不包含值 没有 cause。 。 。 .
  • 内部 transaction(fn) 失败的写入使交易只回滚: 抓取 错误和再次写入 EngineUnavailableError (503),而且没有任何承诺。 给 偶能接答,接取后再以一新交易再读.
  • 被围住的类型. 非根创建于类型 readScope (无) create: 'unscoped'谁 输入位于角色的写范围解答之外 create_outside_write_scope (403) 即使当 值是重复的,与新值完全一样(没有关于行为者无法触及的值的预告). 对复制件的瞄准镜检查精确地比较了输入字节,所以一个案例或后继的空间变体 在对大小写不敏感字符串列上显示范围值,也可回答403(未关闭); uuid 范围 柱子总是有条理的 提供的主要密钥与一行相撞 演员不能 到达时还回答403,从未有确认身份的409。 如果范围检查无法运行,则 创建失败 EngineUnavailableError (503) (英语).
  • 租户类型:与租户列一起领导每个UNIQUE指数 (例如:. UNIQUE (s_tenant, s_code)) (中文(简体) ). 一个指数没有它横跨租户,所以一个409告诉打电话者,另一个租户持有这个价值.

lockForUpdate 并锁定取自: 被墙锁

lockForUpdate(typeKey, id) (内部) transaction(fn)页:1 tx.authorize(typeKey, id, action) 只有在角色可以时, 交易会锁定一行 写它: 与一个 update (单位:千美元)whereById:主键+演员的房客+ readScope 写入壁; root: 仅主键). 在此之前 FOR UPDATE引擎检查 中,该行存在于该演员的正键读取并仅指壁柱 交易和必要时的专用 锁定探测池 (每个工人2个连接,相同) 作为引擎池的账户和设置,每个探测器的READ COMMITED,获得超时2000毫秒)。 A 类 缺少,外国租户 或范围外的id 不取行锁.

行为变化(0.19)

在这个版本之前, lockForUpdate 失踪的、外国的或超出范围的身份 却无声无息 锁上(一个外国身份证被它的主键锁上)。 从这个版本,它发出同样的否认 a 一个 update 其中的id获得: AuthorizationDeniedError 有理无据 no_record_permit (一个答复) 三者,无存在信号. 代码,首先锁定,然后检查丢失的一行 或先检查存在( n)get 那么在交易中 lockForUpdate)或抓住那个 否认。 拒绝在任何锁定声明之前, 所以一个呼叫者抓住它可能会继续下去 进行交易.

  • EngineUnavailableError 从 lockForUpdate 或者锁定的接取意味着锁定的检测池没有 回答(需要超时、连接或查询出错)。 没有取出锁;让它传播(503). 失败被计算在内(MariaDbUnitOfWork.lockProbeStats(), (中文(简体) ), @astram/engine/internal)和登录 作为每分钟一个警告 与计数,从来没有id.
  • 找不到其他交易插入但尚未执行的行( 旧的主键) 锁等.
  • 如果在存在检查和锁之间删除一行,则 FOR UPDATE 打开一个缺口锁 在主键范围 周围的ID,直到交易结束。 它锁住没有现有的行 什么都没有.
  • 应用程序的ADR -0018 连接预算 计算每个工人增加2个连接 (单位:千美元)@astram/guard ENGINE_LOCK_PROBE_POOL_CONNECTIONS),在两个数据库布局中.

谱: docs/features/agent-proposals/SPEC.md 第5 J条(GAPS #51).

版本与发布记录

@astram/engine 共发布 33 个版本,首次发布于 2026/07/18;过去 12 个月发布了 33 个版本。

版本发布日期距今
0.20.0latest2026/11/061 天前
0.19.02026/11/034 天前
0.18.02026/11/034 天前
0.17.22026/11/016 天前
0.17.12026/10/308 天前
0.17.02026/10/2810 天前

关于 @astram/engine 的常见问题

@astram/engine 是什么?

Astram框架——铺平了的道路。 一个不可通通的写字管(resolve-schema → perference gate → exterm-write-context → 校验 → 校验 → 交叉-同步 – 审计 → 发售 – 事件),每个功能的 CRUD 流经真实的物理表.

如何安装 @astram/engine?

在项目目录运行 npm install @astram/engine,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:rxjs(^7)、@nestjs/core(^11)、@nestjs/common(^11)、reflect-metadata(^0.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@astram/engine 支持 TypeScript 吗?

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

@astram/engine 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@astram/engine 可以商用吗?

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

@astram/engine 的下载量有多少?

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

@astram/engine 还在维护吗?

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