@effect-server-utils/unit-of-work

中文文档
0.1.0-beta.10发布于 2026/10/30MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 4316

Effect 的单位- 工作边界: 重入原子弹端口, 覆盖主机交易的原始, 它给出的后交付@ effect- server- utils/ cqrs 事件总线

中文使用文档
文档目录8 节
  1. 为什么它是自己的包
  2. 你得到的东西
  3. 提供司机
  4. 宣布边界
  5. 承诺后的事件
  6. 测试
  7. 文档
  8. 许可证

@ effect- server- utils/ 工作单位

工作单位边界 效果: 重置原子学端口, 覆盖您的 自己的交易是原始的 承诺后交付 @effect-server-utils/cqrs活动公交车.

pnpm add @effect-server-utils/unit-of-work @effect-server-utils/cqrs effect

两者 effect 财务报告和审定财务报表 @effect-server-utils/cqrs 是同伴的依赖关系.

为什么它是自己的包

CQRS软件包对交易没有意见. 它的活动巴士知道一些订阅者想要 要运行 之后 无论产生了什么 活动已经结束, 它不知道什么"完成" 意思是,它把这些事件交给 DeferralSink 如果有上下文,然后在结尾运行 如果没有,则发送命令.

这个包裹就是沉入水中, 以及它承诺等待的边界。 安装它,当你 主机有一个数据存储器, 它的原子性您想要一个使用大小写能够声明; 把它和 公交车仍然工作,与 subscribeAfterCommit 变成"每个直接处理者" 处理器 二者之间不要改变.

你得到的东西

  • withUnitOfWork ——复写方用例适用一次,在其管末. 每个 寄存器内书写在一起或一起丢弃.
  • UnitOfWork ——它背后的端口,所以一个使用案例可以被单位测试以对抗通过 执行时从未命名数据存储器.
  • TransactionDriver - 你提供的唯一东西。 重新进入、推迟、排水命令和失败 孤立是这个软件包的; SQL 是你的.
  • PersistenceUnavailable ——瞬间存储失败 寄存器端口名称,所以一个模块的 domain/ 可以在不进口基础设施的情况下加以描述.
  • @effect-server-utils/unit-of-work/testing —— 说 PassThroughUnitOfWork 和模拟驱动器,用于 测试其仓库是伪造的.

提供司机

import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import {
  PersistenceUnavailable,
  TransactionDriver,
  TransactionFailed,
} from "@effect-server-utils/unit-of-work";

// An adapter is responsible for making its own scope handle ambient to the effect
// it wraps, so a repository inside picks it up. Nothing about that handle appears
// in the port — if it did, every consumer's read path would have to name it.
export const TransactionDriverLive: Layer.Layer<TransactionDriver, never, Database> = Layer.effect(
  TransactionDriver,
  Effect.gen(function* () {
    const db = yield* Database;
    return TransactionDriver.of({
      withTransaction: (effect) => db.transaction(effect),
      withSavepoint: (effect) => db.savepoint(effect),
      isActive: db.hasOpenTransaction,
    });
  }),
);

宣布边界

import { withUnitOfWork } from "@effect-server-utils/unit-of-work";

// Declared once and visibly, rather than buried in an inner block that dispatched
// event handlers would silently join.
const placeOrder = (input: Input) =>
  Effect.gen(function* () {
    const order = yield* orders.insert(input);
    yield* eventBus.dispatch([OrderPlaced.make({ orderId: order.id })]);
    return order.id;
  }).pipe(withUnitOfWork);

run 重新输入 : 空呼打开了范围, 已经输入的呼叫需要保存点而不是 到达第二个连接。 所以一个从电话商内部发出的命令会加入进来, 呼叫者捕捉到的巢出故障 只会丢弃巢出范围.

withUnitOfWork 降职 TransactionFailed - 任何案件都无法对被拒绝的违法行为采取行动 叶子 PersistenceUnavailable 站立,就是运输边界变成503.

承诺后的事件

import { makeEventBus } from "@effect-server-utils/cqrs";
import { makeUnitOfWork } from "@effect-server-utils/unit-of-work";

// The boundary and the sink are installed together, because they are one decision:
// "after commit" has no meaning until something owns a commit.
const runtime = Layer.mergeAll(makeEventBus(), makeUnitOfWork()).pipe(
  Layer.provide(TransactionDriverLive),
);

有了这个线, bus.subscribeAfterCommit(...) 处理器一旦运行 最外侧 工作单位 执行,每个单位在新的工作单位,所以其失败不能抵消它的反应,以及 排水管是不间断的,所以客户端挂断不会丢弃已经存在的反应 持久。 笼罩在地上,而后退则抛弃它所推迟的;笼罩在地上的人,仍犯罪 仍然消耗着自己的财富.

无工作单位的派遣是一个有标记的缺陷(EventDispatchedOutsideUnitOfWork更喜欢 而不是悄悄的送货——一旦你安装了边界,一个忘记了边界的调度就是: 一个虫子.

测试

import { PassThroughUnitOfWork } from "@effect-server-utils/unit-of-work/testing";

真实的边界与记忆驱动器:真正的再入,真正的承诺后命令,真正的 弃去回滚, 没有数据存储 。 更喜欢手卷式的通关,它往往得到 翻回案件错了.

文档

完整文档: https://dataquail.github.io/effect-server-utils 页面存档备份,存于互联网档案馆

许可证

麻省理工学院

版本与发布记录

@effect-server-utils/unit-of-work 共发布 9 个版本,首次发布于 2026/08/27;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.0-beta.10latest2026/10/3014 天前
0.1.0-beta.92026/10/111 个月前
0.1.0-beta.82026/10/111 个月前
0.1.0-beta.72026/09/221 个月前
0.1.0-beta.62026/09/122 个月前
0.1.0-beta.52026/09/122 个月前

关于 @effect-server-utils/unit-of-work 的常见问题

@effect-server-utils/unit-of-work 是什么?

Effect 的单位- 工作边界: 重入原子弹端口, 覆盖主机交易的原始, 它给出的后交付@ effect- server- utils/ cqrs 事件总线

如何安装 @effect-server-utils/unit-of-work?

在项目目录运行 npm install @effect-server-utils/unit-of-work,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:effect(^4.0.2)、@effect-server-utils/cqrs(^0.1.0-beta.10)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@effect-server-utils/unit-of-work 支持 TypeScript 吗?

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

@effect-server-utils/unit-of-work 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@effect-server-utils/unit-of-work 可以商用吗?

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

@effect-server-utils/unit-of-work 的下载量有多少?

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

@effect-server-utils/unit-of-work 还在维护吗?

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