@affordance/core

中文文档
0.6.0发布于 2026/09/18MITTypeScriptES Module构建来源已验证近 30 天下载 5.5万

适应性案例管理,有防守步骤,自动执行,并可插入存储.

中文使用文档

@ 支付/ 核心

从当前域名事实和演员权限来计算可用的作品. 一个步骤 操作者拥有持久性、交易、最后业务招生和外部 打电话 承接验证了状态/投入,评价了"卫兵"并引用了一次.

import { actor, caseType, createBackgroundRuntime, createEngine, stepsOf } from '@affordance/core'
import { z } from 'zod'

const State = z.object({ ein: z.string().nullable() })
const step = stepsOf(State, actor<{ id: string }>())
const definition = caseType({
  name: 'deal', state: State,
  steps: [
    step({
      name: 'record-ein', input: z.object({ ein: z.string() }),
      handler: async ({ reference, actor, input, state }) => {
        const saved = await deals.recordEin(reference, actor, input)
        return { ...state, ein: saved.ein } // Already persisted; evidence only.
      },
    }),
    step({
      name: 'notify',
      handler: async ({ reference, executionId }) => {
        await notifications.send(reference, { executionId })
        // No return: success without a diff journal.
      },
    }),
  ],
})

// Bind an authoritative loader using your adapter, e.g. storage.bindCase(definition, { load }).
const runtime = createBackgroundRuntime()
const engine = createEngine({
  storage, caseTypes: [binding],
  operations: { journalTimeoutMs: 1000 },
  launch: { runtime, leaseMs: 60_000 },
})
const result = await engine.run(caseId, 'record-ein', { actor, input: { ein: '12-3456789' } })
// result.journal.status: 'skipped' | 'recorded' | 'failed'
const { executionId } = await engine.launch(caseId, 'notify', { actor })
const execution = await engine.getExecution(executionId)
// running | completed | unresolved | resolved; null for unknown IDs and ordinary runs.
await runtime.drain() // Stop new launches and await owned tasks during application shutdown.

run 等待处理器的补全和设定的可选日记尝试. launch 在运行时间拥有剩余工作时返回处理器条目后。 双用 同样的 Promise<State | void> 合同和处理器上下文。 没有注射 寄存器、交易回调或补全包. undefined 跳过 日记; 有效国家制作 observed diff,即使没有改变. 返回国从未成为目前的个案国。 随后读取使用约束.

丢弃的处理器出错不会从 run;承诺效果可能 已经存在。 启动的处理器错误显示为未解决状态 。 无效 参数和日记失败不会使处理器成功完成或 重试业务代码 。 日记超时包括适配器获取等. 已经启动的写作可能会在原执行ID下完成后.

提供的运行时间是一个长寿的节点进程,并保留未完成的任务 活到他们安顿下来 它无法活下来处理死亡或没有服务器的主机 请求后冻结。 这样的主机需要一个独立自主的运行时间 真正的操作员入场承认。 单是排队接受是不够的. 没有重播、心跳、自动重试、补偿或恢复工作者.

发射所有权不包括同一情况下的其他参与发射. 过期会留下一个块直到应用程序/操作器对齐:

await engine.resolveExecution(executionId, { actor, reason: 'Reconciled with provider' })

决议不是取消。 租赁不设栅栏或提供商写作; 旧的处理器在过期或解析后仍然可以写作. 普通运行和 不相关的作者不参加。 主办方必须授权地位和解决.

安全演员归属默认为字符串演员或字符串 actor.id,否则 无效。 配置 operations.actorIdentity 用于另一个字符串身份。 请求 输入和认证对象不通过此管道进行分录。 定义大小写 作为预定日记投影的状态;在和 过后. 保存证书和无关数据 从计划.

此断取β去除 execute, (中文(简体) ), executeNonAtomic,交易 处理器寄存器和原子适配器端口。 框架期刊/租赁数据 未迁移。 见 结构。 。 。 .

版本与发布记录

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

版本发布日期距今
0.6.0latest2026/09/181 个月前
0.5.02026/09/171 个月前
0.4.02026/09/141 个月前
0.3.02026/09/121 个月前
0.2.02026/09/091 个月前
0.1.02026/09/072 个月前

关于 @affordance/core 的常见问题

@affordance/core 是什么?

适应性案例管理,有防守步骤,自动执行,并可插入存储.

如何安装 @affordance/core?

在项目目录运行 npm install @affordance/core,或使用 pnpm add / yarn add / bun add。

@affordance/core 支持 TypeScript 吗?

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

@affordance/core 支持 ESM 还是 CommonJS?

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

@affordance/core 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@affordance/core 可以商用吗?

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

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

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

@affordance/core 还在维护吗?

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