@oj-module/cli 0.2.53 → 0.2.54
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/devkit/SKILL.md +2 -2
- package/devkit/manual.md +32 -25
- package/package.json +2 -2
- package/shell-dist/assets/runtime.js +7 -4
- package/shell-dist/index.html +3 -3
- package/shell-dist/versions.json +3 -3
- package/src/__tests__/templates-tenant-scope.test.ts +3 -2
- package/src/config.ts +9 -0
- package/src/contract/__tests__/client-path.test.ts +30 -0
- package/src/contract/__tests__/emit-client.test.ts +18 -0
- package/src/contract/__tests__/handler-scan.test.ts +23 -0
- package/src/contract/check.ts +5 -5
- package/src/contract/client-path.ts +30 -0
- package/src/contract/emit-client.ts +18 -4
- package/src/contract/handler-scan.ts +40 -3
- package/src/contract/run.ts +5 -3
- package/src/init.ts +19 -1
- package/templates/README.md +40 -44
- package/templates/init.include.yaml +12 -8
- package/templates/openapi.json +1393 -34
- package/templates/src/_platform/api/contacts/api.ts +29 -1
- package/templates/src/_platform/api/contacts/detail/api.ts +25 -1
- package/templates/src/_platform/api/solutions/api.ts +60 -1
- package/templates/src/_platform/web/__client/api.schemas.ts +99 -35
- package/templates/src/_platform/web/__client/api.ts +103 -59
- package/templates/src/app/web/entry.ts +77 -0
- package/templates/src/{home/web → app/web/home}/__client/api.ts +5 -2
- package/templates/src/app/web/home/routes.ts +41 -0
- package/templates/src/app/web/login/routes.ts +71 -0
- package/templates/src/{notification/web → app/web/notification}/__client/api.schemas.ts +14 -0
- package/templates/src/{notification/web → app/web/notification}/__client/api.ts +67 -20
- package/templates/src/app/web/notification/routes.ts +70 -0
- package/templates/src/{personal-center/web → app/web/personal-center}/__client/api.ts +5 -2
- package/templates/src/app/web/personal-center/routes.ts +49 -0
- package/templates/src/{system/web → app/web/system}/__client/api.schemas.ts +28 -22
- package/templates/src/{system/web → app/web/system}/__client/api.ts +103 -58
- package/templates/src/{system/web → app/web/system}/pages/users/index.tsx +3 -3
- package/templates/src/{system/web → app/web/system}/pages/wecom/index.tsx +12 -3
- package/templates/src/{system/web/entry.ts → app/web/system/routes.ts} +24 -35
- package/templates/src/auth/api/api.ts +59 -0
- package/templates/src/auth/api/ldap-login/api.ts +37 -1
- package/templates/src/auth/api/wecom/api.ts +23 -0
- package/templates/src/auth/web/__client/api.schemas.ts +133 -13
- package/templates/src/auth/web/__client/api.ts +129 -31
- package/templates/src/notification/api/api.ts +17 -0
- package/templates/src/notification/api/del/api.ts +2 -0
- package/templates/src/system/api/roles/api.ts +3 -0
- package/templates/src/system/api/roles/bindings/api.ts +3 -0
- package/templates/src/system/api/settings/api.ts +3 -0
- package/templates/src/system/api/users/forbidden/api.ts +3 -0
- package/templates/src/system/api/users/password/api.ts +3 -0
- package/templates/src/system/api/users/roles/api.ts +3 -0
- package/templates/src/web/api/get-async-routes/api.ts +16 -1
- package/templates/src/web/api/hello/api.ts +13 -1
- package/templates/src/web/api/user-info/api.ts +21 -1
- package/templates/src/web/web/__client/api.schemas.ts +28 -0
- package/templates/src/web/web/__client/api.ts +33 -9
- package/templates/web.config.ts +21 -15
- package/vendor/host-versions.json +3 -3
- package/templates/src/home/web/entry.ts +0 -49
- package/templates/src/login/web/entry.ts +0 -79
- package/templates/src/notification/web/entry.ts +0 -84
- package/templates/src/personal-center/web/entry.ts +0 -60
- /package/templates/src/{home/web → app/web/home}/__client/api.schemas.ts +0 -0
- /package/templates/src/{home/web → app/web/home}/locales/en-US.json +0 -0
- /package/templates/src/{home/web → app/web/home}/locales/zh-CN.json +0 -0
- /package/templates/src/{home/web → app/web/home}/pages/components/bar-chart.tsx +0 -0
- /package/templates/src/{home/web → app/web/home}/pages/components/card-list.tsx +0 -0
- /package/templates/src/{home/web → app/web/home}/pages/components/line-chart.tsx +0 -0
- /package/templates/src/{home/web → app/web/home}/pages/components/pie-chart.tsx +0 -0
- /package/templates/src/{home/web → app/web/home}/pages/index.tsx +0 -0
- /package/templates/src/{login/web → app/web/login}/auth-provider.ts +0 -0
- /package/templates/src/{login/web → app/web/login}/locales/en-US.json +0 -0
- /package/templates/src/{login/web → app/web/login}/locales/zh-CN.json +0 -0
- /package/templates/src/{login/web → app/web/login}/pages/change-password.tsx +0 -0
- /package/templates/src/{login/web → app/web/login}/pages/login.tsx +0 -0
- /package/templates/src/{login/web → app/web/login}/wecom.ts +0 -0
- /package/templates/src/{notification/web → app/web/notification}/locales/en-US.json +0 -0
- /package/templates/src/{notification/web → app/web/notification}/locales/zh-CN.json +0 -0
- /package/templates/src/{notification/web → app/web/notification}/pages/center/index.tsx +0 -0
- /package/templates/src/{personal-center/web → app/web/personal-center}/__client/api.schemas.ts +0 -0
- /package/templates/src/{personal-center/web → app/web/personal-center}/locales/en-US.json +0 -0
- /package/templates/src/{personal-center/web → app/web/personal-center}/locales/zh-CN.json +0 -0
- /package/templates/src/{personal-center/web → app/web/personal-center}/pages/my-profile/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/locales/en-US.json +0 -0
- /package/templates/src/{system/web → app/web/system}/locales/zh-CN.json +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/departments/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/departments/sync-bar.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/departments/tree.ts +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/errors.ts +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/forbidden.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/login-methods/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/oplog/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/roles/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/settings/index.tsx +0 -0
- /package/templates/src/{system/web → app/web/system}/pages/users/roles.tsx +0 -0
package/templates/README.md
CHANGED
|
@@ -6,82 +6,78 @@
|
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
pnpm install
|
|
9
|
-
pnpm dev # 开发:前端 devServer + oj 后端(api
|
|
9
|
+
pnpm dev # 开发:前端 devServer + oj 后端(src/*/api 保存即热更)
|
|
10
10
|
pnpm build # 构建:oj build + 前端全站合并到 dist/web
|
|
11
11
|
pnpm preview # 预览:oj migrate + server(release 产物)
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
登录账号:`admin` / `aA123456`(见 `
|
|
14
|
+
登录账号:`admin` / `aA123456`(见 `src/_platform/api/seed.sql`)。
|
|
15
15
|
|
|
16
|
-
##
|
|
16
|
+
## 目录(一目录 = 一个模块)
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
bin/oj
|
|
27
|
-
pnpm exec ojm api # 重新生成 web/src/*/__client(dev 检测到 openapi.json 变化也会自动重生成)
|
|
18
|
+
```
|
|
19
|
+
config.yaml 站点/数据库/租户配置(init 现场签发证书到 config/)
|
|
20
|
+
src/<name>/api/ 后端模块(目录镜像路由:src/<name>/api/<路径>/api.ts)
|
|
21
|
+
src/<name>/web/ 前端模块(entry.ts 是入口;页面 / locales / __client 同目录)
|
|
22
|
+
src/app/web/ 框架内置页面聚合模块(多根:/home /login /personal-center /notification /system)
|
|
23
|
+
src/oj-market/web/ 解决方案市场(第一方能力,独立模块,删目录即下线)
|
|
24
|
+
dist/api/ oj build 后端产物
|
|
25
|
+
dist/web/ 站点产物(shell + modules + modules.json)
|
|
26
|
+
bin/ oj 二进制(init 解压,不入库)
|
|
28
27
|
```
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
`src/app/web` 是一个**多根模块**:一个 `entry.ts` 里挂五个顶层路由,各根按
|
|
30
|
+
`handle.order` 排菜单(与拆分时逐项一致),页面按根分目录
|
|
31
|
+
(`<root>/routes.ts` + `pages/` + `__client/`)。新增业务页面时建议单独建模块
|
|
32
|
+
(`pnpm exec ojm new <name>`),不要往聚合模块里塞。
|
|
32
33
|
|
|
33
|
-
##
|
|
34
|
+
## 契约与 `__client`
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
前端调后端一律走 `ojm api` 从 `openapi.json` 生成的 `__client/`(随模板分发,开箱即用)。
|
|
37
|
+
改了 handler 的 `.schema`(入参)/ `.response`(出参)后刷新:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
bin/oj openapi -c config.yaml --module-root src -b /api -o openapi.json # 重产契约
|
|
41
|
+
pnpm exec ojm api # 重生成 */web/*/__client
|
|
41
42
|
```
|
|
42
43
|
|
|
44
|
+
多根聚合模块的 client 归属由 `web.config.ts` 的 `clientOwners` 决定(`system → app`),
|
|
45
|
+
生成物落 `src/app/web/system/__client`,与页面同级——页面相对导入 `../../__client` 不用改。
|
|
46
|
+
`ojm api --check` 可对账漂移(零漂移为发布门禁)。
|
|
47
|
+
|
|
43
48
|
## 注意
|
|
44
49
|
|
|
45
|
-
- 改 `api
|
|
50
|
+
- 改 `src/*/api` 下的 api.ts 保存即生效;**新增/删除模块目录、改
|
|
46
51
|
schema/migrations/config.yaml 需重启 `ojm dev`**(oj 热更边界)。
|
|
47
|
-
- 后端开发请用 `/oj-api-dev` skill(`.claude/skills/oj-api-dev
|
|
48
|
-
|
|
49
|
-
- `api/config.yaml` 的证书为 init 现场签发的本地 dev 证书,不构成信任边界;
|
|
52
|
+
- 后端开发请用 `/oj-api-dev` skill(`.claude/skills/oj-api-dev/`),手册按章节按需读。
|
|
53
|
+
- `config/` 下的证书为 init 现场签发的本地 dev 证书,不构成信任边界;
|
|
50
54
|
生产环境用 oj 仓库 `oj-cert gen` 全新签发并替换公钥。
|
|
51
55
|
|
|
52
56
|
## 排障 / 常见问题
|
|
53
57
|
|
|
54
|
-
- **`pnpm dev` / `pnpm build` 报 `Could not resolve "
|
|
55
|
-
|
|
56
|
-
`ojm api` 从 `openapi.json` 生成的产物。在工程根跑一次即可补齐:
|
|
58
|
+
- **`pnpm dev` / `pnpm build` 报 `Could not resolve "../../__client/api"`**
|
|
59
|
+
对应根的 `__client` 缺失——它是 `ojm api` 的生成物。在工程根跑一次即可补齐:
|
|
57
60
|
|
|
58
61
|
```bash
|
|
59
|
-
pnpm exec ojm api #
|
|
62
|
+
pnpm exec ojm api # dev 检测到 openapi.json 变化也会自动重生成
|
|
60
63
|
```
|
|
61
64
|
|
|
62
|
-
|
|
65
|
+
改完后端契约后先重产契约再刷新:
|
|
63
66
|
|
|
64
67
|
```bash
|
|
65
|
-
bin/oj openapi -c config.yaml -
|
|
68
|
+
bin/oj openapi -c config.yaml --module-root src -b /api -o openapi.json
|
|
66
69
|
pnpm exec ojm api
|
|
67
70
|
```
|
|
68
71
|
|
|
69
72
|
- **`__client/` 下的文件能直接改吗?**
|
|
70
|
-
不能手改、也不入库——它是生成物,下次 `ojm api`
|
|
71
|
-
|
|
72
|
-
`ojm api --check` 可对账契约与产物的漂移(零漂移为发布门禁)。
|
|
73
|
+
不能手改、也不入库——它是生成物,下次 `ojm api` 会覆盖。改接口就改 handler 的
|
|
74
|
+
`.schema`/`.response`,再跑上面的命令刷新。
|
|
73
75
|
|
|
74
76
|
- **`pnpm dlx @oj-module/cli@latest init` 生成的脚手架缺模块 / 看起来很旧**
|
|
75
|
-
pnpm dlx 会按首次解析到的版本**缓存** CLI
|
|
76
|
-
|
|
77
|
-
模板偏旧(典型表现:`web/src` 下没有 `system` 目录)。
|
|
78
|
-
排查:`ls web/src` 看是否缺预期模块。
|
|
79
|
-
解决:清掉 dlx 缓存后重跑——
|
|
77
|
+
pnpm dlx 会按首次解析到的版本**缓存** CLI 可执行文件。排查:`ls src` 看是否缺预期模块。
|
|
78
|
+
解决:清掉 dlx 缓存后显式指定版本重跑——
|
|
80
79
|
|
|
81
80
|
```bash
|
|
82
81
|
rm -rf ~/Library/Caches/pnpm/dlx # macOS;其它平台见 pnpm 文档的 dlx-store 路径
|
|
83
|
-
|
|
84
|
-
pnpm dlx @oj-module/cli@<明确版本> init <工程名> --yes # 显式指定版本最稳
|
|
82
|
+
pnpm dlx @oj-module/cli@<明确版本> init <工程名> --yes
|
|
85
83
|
```
|
|
86
|
-
|
|
87
|
-
养成显式带版本号(如 `@oj-module/cli@0.2.4`)的习惯,可避免 `@latest` 缓存歧义。
|
|
@@ -101,14 +101,20 @@ include:
|
|
|
101
101
|
- src/personal-center/api
|
|
102
102
|
- src/system/api
|
|
103
103
|
- src/web/api
|
|
104
|
-
# —— web
|
|
104
|
+
# —— web 前端模块 ——
|
|
105
105
|
- src/_platform/web
|
|
106
106
|
- src/auth/web
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- src/
|
|
111
|
-
- src/
|
|
107
|
+
# 框架内置页面聚合为一个多根模块(首页/登录/个人中心/通知/系统管理)。
|
|
108
|
+
# home 只列 routes/locales/pages:其 api 模块是 demo-only 不进脚手架,__client
|
|
109
|
+
# 留着会指向不存在的端点(见顶部说明),故逐子路径收录而不是整棵 src/app/web。
|
|
110
|
+
- src/app/web/entry.ts
|
|
111
|
+
- src/app/web/home/routes.ts
|
|
112
|
+
- src/app/web/home/locales
|
|
113
|
+
- src/app/web/home/pages
|
|
114
|
+
- src/app/web/login
|
|
115
|
+
- src/app/web/notification
|
|
116
|
+
- src/app/web/personal-center
|
|
117
|
+
- src/app/web/system
|
|
112
118
|
# 解决方案市场:默认第一方能力。逐子路径收录——__tests__ 不进脚手架
|
|
113
119
|
# (用户工程无 web 侧 vitest 基建,拷了是死文件)
|
|
114
120
|
- src/oj-market/web/entry.ts
|
|
@@ -119,6 +125,4 @@ include:
|
|
|
119
125
|
- src/oj-market/web/locales
|
|
120
126
|
- src/oj-market/web/pages
|
|
121
127
|
- src/oj-market/web/utils
|
|
122
|
-
- src/personal-center/web
|
|
123
|
-
- src/system/web
|
|
124
128
|
- src/web/web
|