@hile/model 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +3 -3
  2. package/SKILL.md +0 -71
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hile/model",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {
@@ -22,7 +22,7 @@
22
22
  "vitest": "^4.0.18"
23
23
  },
24
24
  "dependencies": {
25
- "@hile/core": "^1.1.2"
25
+ "@hile/core": "^2.0.0"
26
26
  },
27
- "gitHead": "ec6272f3e39d3afaefd12d9d70ba2b103c5f122a"
27
+ "gitHead": "8e0fd1f78b5a8abd21218d1f596ada2533a0c8e7"
28
28
  }
package/SKILL.md DELETED
@@ -1,71 +0,0 @@
1
- ---
2
- name: model
3
- description: "@hile/model: defineModel/loadModel 定义和消费模型;services 依赖注入;pipeline 中间件链;每次 loadModel 重新执行 main"
4
- ---
5
-
6
- # @hile/model
7
-
8
- 与仓库根 **`SKILL.md`** 一并遵守。
9
-
10
- ## 核心概念
11
-
12
- - **模型(Model)**:封装一段业务逻辑,通过 `defineModel` 定义,`loadModel` 执行
13
- - **Services 注入**:通过 `services` 声明依赖,`main` 首参为加载后的实例元组
14
- - **Pipeline**:Koa 风格中间件链,在 `main` 前后执行横切逻辑
15
- - **非单例**:每次 `loadModel` 都重新执行 `main`,不同于 `@hile/core` 的容器单例
16
-
17
- ## 导出
18
-
19
- | 名称 | 说明 |
20
- |------|------|
21
- | `defineModel` | 定义模型,接收 `(main)` 简写或 `ModelProps` 对象 |
22
- | `loadModel` | `loadModel(model, input)` 执行模型 |
23
- | `isModel` | 判断值是否为 `defineModel` 返回值 |
24
- | `ModelDefinition` | 模型类型 |
25
- | `ModelProps` | `defineModel` 入参类型 |
26
- | `ModelPipeline` | `readonly PipelineMiddleware[]` |
27
- | `Pipeline` | 中间件链类 |
28
- | `PipelineContext` | 中间件上下文 |
29
- | `PipelineMiddleware` | 中间件类型 `(ctx, next) => Promise<void>` |
30
- | `InferServiceResult` | 工具类型 |
31
- | `InferredServices` | 工具类型 |
32
-
33
- ## 用法规则
34
-
35
- ### defineModel
36
-
37
- ```typescript
38
- // 简写:无 services、无 pipelines
39
- defineModel(async (input: TInput) => R)
40
-
41
- // 完整形式
42
- defineModel({
43
- services?: [ServiceA, ServiceB], // 可选
44
- pipelines?: [MiddlewareA, MiddlewareB], // 可选,顺序执行
45
- async main(
46
- services?: [InstanceA, InstanceB], // 有 services 时首参
47
- input: TInput, // 入参
48
- ): R | Promise<R>,
49
- })
50
- ```
51
-
52
- ### 强制规则
53
-
54
- 1. **模型文件**:一个文件一个 `defineModel`,`export default`
55
- 2. **`loadModel` 首参**:必须是 `defineModel` 返回值,否则抛 `TypeError`
56
- 3. **Pipeline 原则**:
57
- - 最后一个中间件不应调用 `next()`,否则抛错
58
- - 中间件短路(不调 `next()`)会使 `main` 不执行
59
- - 中间件可通过 `ctx.args` 改写入参
60
- - 中间件间通过 `ctx.state` 传递数据
61
- 4. **Services**:同一 key 的 service 由 `@hile/core` 容器保证单例;model 本身不缓存结果
62
-
63
- ## 反模式
64
-
65
- - 请求内调用 `defineModel`(应在模块顶层定义一次)
66
- - 手动构造 `ModelDefinition` 对象(必须通过 `defineModel`)
67
- - 在 `main` 中做副作用不返回结果(model 应是有输入有输出的纯业务函数)
68
-
69
- ## 测试
70
-
71
- **`src/model.test.ts`**:`defineModel` 各种形式(完整、简写、services、pipelines)。**`src/pipeline.test.ts`**:中间件顺序、短路、next 多次调用、并发、无中间件等。