jax-hono 1.0.19 → 1.0.21

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.
package/docs/agent.md CHANGED
@@ -1,167 +1,169 @@
1
- # Agent 维护说明
2
-
3
- 这份文档给 Codex、Claude 或其他代码代理阅读,用来说明维护 `jax-hono` 时的默认规则。
4
-
5
- ## 本地 link 规则
6
-
7
- `jax-hono` 是用户自己维护的框架,常通过 `jax link` 链接到业务工程的 `node_modules/jax-hono`。
8
-
9
- 如果在业务工程中需要修改 `jax-hono` 行为,先检查依赖是否已经 link 到本地源码目录。不要把它当成一次性的第三方 `node_modules` 临时补丁。
10
-
11
- 在 Windows PowerShell 中,可以在业务仓库根目录查找所有 `jax-hono` 依赖:
12
-
13
- ```powershell
14
- Get-ChildItem -Path . -Directory -Recurse -Filter jax-hono |
15
- Where-Object { $_.FullName -match '\\node_modules\\jax-hono$' } |
16
- Format-List LinkType,Target,FullName
17
- ```
18
-
19
- 如果 `LinkType` 是 `Junction` 或 `SymbolicLink`,直接修改 `Target` 指向的 `jax-hono` 源码目录。
20
-
21
- 如果没有 link,先执行:
22
-
23
- ```powershell
24
- jax link
25
- ```
26
-
27
- 然后再次确认 link 状态,再修改框架源码。
28
-
29
- ## 修改生成器后的验证
30
-
31
- 修改 `build/generate-registry.ts`、`build/generate-config.ts` 等生成逻辑后,需要在使用方工程里重新生成。
32
-
33
- 常见命令:
34
-
35
- ```powershell
36
- bun run setup
37
- ```
38
-
39
- 然后检查业务工程中的生成结果,例如:
40
-
41
- ```text
42
- .jax-hono/controllers.generated.ts
43
- .jax-hono/models.generated.ts
44
- .jax-hono/services.generated.ts
45
- .jax-hono/middlewares.generated.ts
46
- .jax-hono/plugins.generated.ts
47
- .jax-hono/index.ts
48
- ```
49
-
50
- 如果业务仓库里有多个工程都依赖 `jax-hono`,分别查看各工程的 `package.json`,运行它们自己的 setup/build 命令。
51
-
52
- `.jax-hono` 只属于调用项目,不要在 `jax-hono` 包目录里创建或维护 `generated` / `.jax-hono` Junction。需要 `bun --compile` 的项目推荐用 setup 包裹 Bun 构建命令:
53
-
54
- ```powershell
55
- bun node_modules/jax-hono/setup.ts src/index.ts -- bun build src/index.ts --compile --production --target=bun-windows-x64 --outfile dist/app.exe
56
- ```
57
-
58
- setup 会在执行命令期间临时把入口文件里对 `jax-hono` 的导入切到项目生成入口,命令结束后恢复源码。真正的编译参数交给 `bun build` 自己处理。
59
-
60
- 业务入口仍然从框架导入:
61
-
62
- ```ts
63
- import { config, createApp } from 'jax-hono';
64
- ```
65
-
66
- 这样 Bun 才能在编译时把生成模块放进可执行文件;运行时动态查找 `.jax-hono/*.ts` 只能作为开发态兜底,旧 `generated/*.ts` 仅作为兼容路径。
67
-
68
- ## 插件生成约定
69
-
70
- 生成器只扫描已启用插件。插件启用来源包括:
71
-
72
- - `jax-hono/plugins/config.ts`
73
- - 使用方工程的 `src/config/plugin.ts`
74
-
75
- 未启用插件不应进入生成结果,避免构建解析未启用插件的运行时依赖。
76
-
77
- 已启用插件中的约定文件会进入生成器:
78
-
79
- - `*.controller.ts` 注册到 `controllers` 根对象
80
- - `*.service.ts` 注册到 `services.generated.ts`
81
- - `*.cron.ts` 注册到 `crons.generated.ts`,由框架统一启动/停止
82
-
83
- 例如启用插件 `foo` 后:
84
-
85
- ```text
86
- plugins/foo/foo.controller.ts
87
- plugins/foo/foo-cache.service.ts
88
- plugins/foo/foo-cleanup.cron.ts
89
- ```
90
-
91
- 可生成:
92
-
93
- ```ts
94
- controllers.foo
95
- service.fooCache
96
- ```
97
-
98
- Cron 文件可以使用 `defineCron`:
99
-
100
- ```ts
101
- import { defineCron } from 'jax-hono';
102
-
103
- export default defineCron({
104
- name: 'foo-cleanup',
105
- cron: '0 0 * * *',
106
- immediate: true,
107
- async run(ctx) {
108
- // ctx.app / ctx.config / ctx.model / ctx.service / ctx.plugin / ctx.signal
109
- }
110
- });
111
- ```
112
-
113
- ## Controller 注册约定
114
-
115
- 生成器需要保持不同命名空间的边界清晰:
116
-
117
- - `*.backend.ts` 注册到 `controllers.backend`
118
- - `*.api.ts` 注册到 `controllers.api`
119
- - `*.open.ts` 注册到 `controllers.open`
120
- - `*.client.ts` 注册到 `controllers.client`
121
- - `*.controller.ts` 注册到 `controllers` 根对象
122
-
123
- `.controller.ts` 表示通用 Controller,供 backend/api/open/client 等不同路由复用,不应自动归入 `controllers.backend`。
124
-
125
- 例如:
126
-
127
- ```text
128
- src/modules/oss/oss.controller.ts
129
- src/modules/oss/oss-bucket.controller.ts
130
- ```
131
-
132
- 应生成:
133
-
134
- ```ts
135
- controllers.oss
136
- controllers.ossBucket
137
- ```
138
-
139
- 如果需要后台专用 Controller,使用:
140
-
141
- ```text
142
- src/modules/foo/foo.backend.ts
143
- ```
144
-
145
- 应生成:
146
-
147
- ```ts
148
- controllers.backend.foo
149
- ```
150
-
151
- ## 模块路径命名
152
-
153
- 模块内文件名如果以模块目录名开头,生成 key 时可以去掉重复前缀:
154
-
155
- ```text
156
- src/modules/oss/oss.controller.ts -> controllers.oss
157
- src/modules/oss/oss-bucket.controller.ts -> controllers.ossBucket
158
- ```
159
-
160
- 不要生成成:
161
-
162
- ```ts
163
- controllers.oss.oss
164
- controllers.oss.ossBucket
165
- ```
166
-
167
- 这样业务侧调用会更自然,也更适合在不同路由层复用。
1
+ # Agent 维护说明
2
+
3
+ 这份文档给 Codex、Claude 或其他代码代理阅读,用来说明维护 `jax-hono` 时的默认规则。
4
+
5
+ ## 本地 link 规则
6
+
7
+ `jax-hono` 是用户自己维护的框架,常通过 `jax link` 链接到业务工程的 `node_modules/jax-hono`。
8
+
9
+ 如果在业务工程中需要修改 `jax-hono` 行为,先检查依赖是否已经 link 到本地源码目录。不要把它当成一次性的第三方 `node_modules` 临时补丁。
10
+
11
+ 在 Windows PowerShell 中,可以在业务仓库根目录查找所有 `jax-hono` 依赖:
12
+
13
+ ```powershell
14
+ Get-ChildItem -Path . -Directory -Recurse -Filter jax-hono |
15
+ Where-Object { $_.FullName -match '\\node_modules\\jax-hono$' } |
16
+ Format-List LinkType,Target,FullName
17
+ ```
18
+
19
+ 如果 `LinkType` 是 `Junction` 或 `SymbolicLink`,直接修改 `Target` 指向的 `jax-hono` 源码目录。
20
+
21
+ 如果没有 link,先执行:
22
+
23
+ ```powershell
24
+ jax link
25
+ ```
26
+
27
+ 然后再次确认 link 状态,再修改框架源码。
28
+
29
+ ## 修改生成器后的验证
30
+
31
+ 修改 `build/generate-registry.ts`、`build/generate-config.ts` 等生成逻辑后,需要在使用方工程里重新生成。
32
+
33
+ 常见命令:
34
+
35
+ ```powershell
36
+ bun run setup
37
+ ```
38
+
39
+ 然后检查业务工程中的生成结果,例如:
40
+
41
+ ```text
42
+ .jax-hono/controllers.generated.ts
43
+ .jax-hono/models.generated.ts
44
+ .jax-hono/services.generated.ts
45
+ .jax-hono/middlewares.generated.ts
46
+ .jax-hono/plugins.generated.ts
47
+ .jax-hono/index.ts
48
+ ```
49
+
50
+ 如果业务仓库里有多个工程都依赖 `jax-hono`,分别查看各工程的 `package.json`,运行它们自己的 setup/build 命令。
51
+
52
+ `.jax-hono` 只属于调用项目,不要在 `jax-hono` 包目录里创建或维护 `generated` / `.jax-hono` Junction。需要 `bun --compile` 的项目推荐用 setup 包裹 Bun 构建命令:
53
+
54
+ ```powershell
55
+ bun node_modules/jax-hono/setup.ts src/index.ts -- bun build src/index.ts --compile --production --target=bun-windows-x64 --outfile dist/app.exe
56
+ ```
57
+
58
+ setup 会在执行命令期间临时把入口文件里对 `jax-hono` 的导入切到项目生成入口,命令结束后恢复源码。真正的编译参数交给 `bun build` 自己处理。
59
+
60
+ 业务入口仍然从框架导入:
61
+
62
+ ```ts
63
+ import { config, createApp } from 'jax-hono';
64
+ ```
65
+
66
+ 这样 Bun 才能在编译时把生成模块放进可执行文件;运行时动态查找 `.jax-hono/*.ts` 只能作为开发态兜底,旧 `generated/*.ts` 仅作为兼容路径。
67
+
68
+ 运行时除当前 `cwd` 外,也会根据 Bun 入口脚本位置向上查找 `.jax-hono`。这可以兼容 PM2 配成父目录 `cwd`、脚本指向子项目入口的情况;但仍推荐把 PM2 `cwd` 配到具体项目根。
69
+
70
+ ## 插件生成约定
71
+
72
+ 生成器只扫描已启用插件。插件启用来源包括:
73
+
74
+ - `jax-hono/plugins/config.ts`
75
+ - 使用方工程的 `src/config/plugin.ts`
76
+
77
+ 未启用插件不应进入生成结果,避免构建解析未启用插件的运行时依赖。
78
+
79
+ 已启用插件中的约定文件会进入生成器:
80
+
81
+ - `*.controller.ts` 注册到 `controllers` 根对象
82
+ - `*.service.ts` 注册到 `services.generated.ts`
83
+ - `*.cron.ts` 注册到 `crons.generated.ts`,由框架统一启动/停止
84
+
85
+ 例如启用插件 `foo` 后:
86
+
87
+ ```text
88
+ plugins/foo/foo.controller.ts
89
+ plugins/foo/foo-cache.service.ts
90
+ plugins/foo/foo-cleanup.cron.ts
91
+ ```
92
+
93
+ 可生成:
94
+
95
+ ```ts
96
+ controllers.foo
97
+ service.fooCache
98
+ ```
99
+
100
+ Cron 文件可以使用 `defineCron`:
101
+
102
+ ```ts
103
+ import { defineCron } from 'jax-hono';
104
+
105
+ export default defineCron({
106
+ name: 'foo-cleanup',
107
+ cron: '0 0 * * *',
108
+ immediate: true,
109
+ async run(ctx) {
110
+ // ctx.app / ctx.config / ctx.model / ctx.service / ctx.plugin / ctx.signal
111
+ }
112
+ });
113
+ ```
114
+
115
+ ## Controller 注册约定
116
+
117
+ 生成器需要保持不同命名空间的边界清晰:
118
+
119
+ - `*.backend.ts` 注册到 `controllers.backend`
120
+ - `*.api.ts` 注册到 `controllers.api`
121
+ - `*.open.ts` 注册到 `controllers.open`
122
+ - `*.client.ts` 注册到 `controllers.client`
123
+ - `*.controller.ts` 注册到 `controllers` 根对象
124
+
125
+ `.controller.ts` 表示通用 Controller,供 backend/api/open/client 等不同路由复用,不应自动归入 `controllers.backend`。
126
+
127
+ 例如:
128
+
129
+ ```text
130
+ src/modules/oss/oss.controller.ts
131
+ src/modules/oss/oss-bucket.controller.ts
132
+ ```
133
+
134
+ 应生成:
135
+
136
+ ```ts
137
+ controllers.oss
138
+ controllers.ossBucket
139
+ ```
140
+
141
+ 如果需要后台专用 Controller,使用:
142
+
143
+ ```text
144
+ src/modules/foo/foo.backend.ts
145
+ ```
146
+
147
+ 应生成:
148
+
149
+ ```ts
150
+ controllers.backend.foo
151
+ ```
152
+
153
+ ## 模块路径命名
154
+
155
+ 模块内文件名如果以模块目录名开头,生成 key 时可以去掉重复前缀:
156
+
157
+ ```text
158
+ src/modules/oss/oss.controller.ts -> controllers.oss
159
+ src/modules/oss/oss-bucket.controller.ts -> controllers.ossBucket
160
+ ```
161
+
162
+ 不要生成成:
163
+
164
+ ```ts
165
+ controllers.oss.oss
166
+ controllers.oss.ossBucket
167
+ ```
168
+
169
+ 这样业务侧调用会更自然,也更适合在不同路由层复用。