@ eventcatalog/ 适应性
建筑健身功能 事件目录。用 TypeScript 写出您的建筑规则, 在本地或 CI 中对照您的目录运行这些规则, 并获得解密内容的报告 .
你决定一个健康的建筑是什么样子。 EventCatalog给每个规则目录检查,运行并报告结果.
适配功能检查您的目录结构 文档他们不检查你的运行系统.
安装
npx eventcatalog fitness check 运行健身功能而不安装其他设备。 安装类型和编辑器支持的软件包 :
npm install --save-dev @eventcatalog/fitness
写健身功能
健身功能是默认导出 a *.fitness.ts 文件在一个 fitness/ 文件夹 :
// fitness/events-have-owners.fitness.ts
import { defineFitnessFunction } from '@eventcatalog/fitness';
export default defineFitnessFunction({
id: 'events-have-owners',
name: 'Every event has an owner',
severity: 'error', // or 'warning', which is reported without failing the check
async run({ catalog }) {
const events = (await catalog.getEvents({ latestOnly: true })) ?? [];
// One violation per problem; an empty array means the rule passed
return events
.filter((event) => !event.owners?.length)
.map((event) => ({
message: `${event.name} has no owners`,
resources: [{ type: 'event', id: event.id, version: event.version }],
suggestion: 'Add the team responsible for the event to its owners.',
}));
},
});
健身活动所在地
my-catalog/
├── fitness/ # Global rules: no `resource`
│ ├── events-have-owners.fitness.ts
│ └── naming/message-names.fitness.ts # Folders inside fitness/ are fine
└── domains/
└── Orders/
├── index.mdx
└── fitness/
└── domain-boundaries.fitness.ts # `resource` is the Orders domain
- 仅
*.fitness.ts文件已运行 。 其他文件(例如共享帮助)可以通过健身功能来导入. - A 类
fitness/资源文件夹中的文件夹(一个域、系统、服务、事件、命令、查询、信道、流量、实体、数据存储、数据产品、ADR或图表)赋予其资源作为resource内置文件夹versioned/<version>/给这个版本. - 位置设定
resource,而不是一个函数可以看到的:每个函数都可以查询整个目录. *.fitness.ts外部的文件 afitness/文件夹不运行,而是作为诊断报告.
二. 背景情况
run({ resource, catalog }) 获取 :
| 名称 | 说明 |
|---|---|
resource | 该职能的资源与其 type (单位:千美元)domain, (中文(简体) ), service, (中文(简体) ), event, (中文(简体) ), container,(......), id, (中文(简体) ), version 还有前题. undefined 全球职能. |
catalog | 只读访问目录:读取方法 事件Catalog SDK,例如 getEvents, (中文(简体) ), getService, (中文(简体) ), getGraph 财务报告和审定财务报表 getOwnersForResource。 。 。 . |
catalog 没有方法可以写入目录,每一次呼叫都会返回一份副本,所以更改它返回的内容不会改变其他的呼叫或函数所看到的.
违反
type FitnessViolation = {
message: string;
resources?: { type: string; id: string; version?: string }[]; // linked from the violation in EventCatalog
details?: string;
suggestion?: string;
};
资源与目录相匹配。 与资源不符的参考文献保留在报表中,标记 resolved: false。 。 。 .
运行他们
npx eventcatalog fitness check
# or, without @eventcatalog/core installed
npx @eventcatalog/cli fitness check
| 选项 | 说明 |
|---|---|
--output <path> | 与目录相比,报告在哪里撰写(.eventcatalog/fitness/results.json(中文(简体) ) |
--format <format> | text (违约)或 json |
| 退出代码 | 何时 |
|---|---|
0 | 每一个功能都过去,或者只警告 |
1 | 函数发现错误严重性违规, 或无法评估 |
2 | 检查无法运行( 例如目录目录不存在) |
函数扔出,返回不属于违规列表的事物,或无法装入的,报告为 error,与侵权行为分开.
在CI语中
# .github/workflows/fitness.yml
name: Architecture fitness
on: pull_request
jobs:
fitness:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx eventcatalog fitness check
报告
每次运行都会写 .eventcatalog/fitness/results.json:时间,目录的 git 承诺,一个摘要和每个函数的状态(passed, (中文(简体) ), warning, (中文(简体) ), failed 或者说 error),资源,违规和出错.
信托
Fitness 函数是您目录中的代码,运行时的访问权限与您工程中其它脚本相同. 只运行你信任的健身功能, 本地或CI。 EventCatalog 从未在浏览器或页面请求中运行过它们 .
程序使用
import { evaluateFitness, formatFitnessReport, getFitnessExitCode } from '@eventcatalog/fitness';
const report = await evaluateFitness({ dir: './my-catalog' });
console.log(formatFitnessReport(report));
process.exitCode = getFitnessExitCode(report);
文档
见 事件目录文档 为了更多.