Skip to content

Commit 42c57a4

Browse files
committed
chore: add AGENTS.md
1 parent ee2acd5 commit 42c57a4

1 file changed

Lines changed: 159 additions & 0 deletions

File tree

AGENTS.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# AGENTS.md
2+
3+
## 目标与边界
4+
5+
- 这是一个 `pnpm` monorepo,核心包是 `packages/unplugin-dts`,兼容包是 `packages/vite-plugin-dts`
6+
- `unplugin-dts` 是声明文件生成逻辑的唯一事实来源;`vite-plugin-dts` 只是对 `unplugin-dts/vite` 的兼容导出,不应发展出独立行为。
7+
- 仓库的核心目标是:在 `Vite / Rollup / Rolldown / Webpack / Rspack / Esbuild` 下稳定生成 `.d.ts`,并正确处理多入口、别名、`bundleTypes`、Vue/Svelte/JSON、以及跨平台路径。
8+
9+
## 仓库速览
10+
11+
- `packages/unplugin-dts/src/index.ts`
12+
暴露 `createUnplugin(pluginFactory)` 的主入口。
13+
- `packages/unplugin-dts/src/plugin.ts`
14+
适配各构建器生命周期,收集 entry / alias / outDir,并驱动 `Runtime`
15+
- `packages/unplugin-dts/src/core/runtime.ts`
16+
核心流水线:解析 tsconfig、创建 TS Program、筛选文件、执行 emit、写出声明、处理多 outDir、插入类型入口、可选调用 API Extractor。
17+
- `packages/unplugin-dts/src/core/transform.ts`
18+
声明文件后处理:alias 改写、动态 `import()` 类型静态化、清理纯导入、清理 `.vue.d.ts` 文件名。
19+
- `packages/unplugin-dts/src/core/processor/*`
20+
Program 创建策略。`vue.ts` 通过 `@vue/language-core` / `@volar/typescript` 处理 Vue SFC。
21+
- `packages/unplugin-dts/src/core/resolvers/*`
22+
非标准源码入口的 resolver,如 `json``vue``svelte`
23+
- `packages/unplugin-dts/tests/*.spec.ts`
24+
单元测试,重点覆盖路径、alias、transform 和 utils。
25+
- `packages/vite-plugin-dts/src/index.ts`
26+
兼容层,只做 re-export。
27+
- `examples/*`
28+
各构建器/框架的集成夹具,不是业务示例应用。它们承担回归验证职责。
29+
- `scripts/*`
30+
构建、发布、发版脚本。默认不要运行发布流程,除非用户明确要求。
31+
32+
## 生成物规则
33+
34+
- 不要手改任何生成物:
35+
- `packages/*/dist`
36+
- `examples/*/dist`
37+
- `examples/*/types`
38+
- `examples/*/docs/*.api.json`
39+
- 这些目录只能通过构建命令重建。功能变更应修改 `src/`、测试或示例源码,而不是直接修补产物。
40+
41+
## 开发原则
42+
43+
- 一切工作从仓库根目录执行,统一使用 `pnpm`
44+
- 优先用定向命令,避免无差别跑全仓:
45+
- `pnpm --filter unplugin-dts test`
46+
- `pnpm -C examples/ts-vite build`
47+
- `pnpm -C examples/vue-vite build`
48+
- 涉及共享行为时,把逻辑放进 `packages/unplugin-dts/src/plugin.ts``packages/unplugin-dts/src/core/*`,不要在每个 bundler 入口里重复实现。
49+
- `packages/vite-plugin-dts` 必须保持“薄封装”;任何行为修改都应先落在 `unplugin-dts`
50+
- 仓库使用 ESM。新增 Node 内置模块导入时,优先使用 `node:` 前缀并保持与现有文件风格一致。
51+
- 任何新增路径处理逻辑,都必须优先复用现有工具:
52+
- `normalizePath`
53+
- `resolve`
54+
- `ensureAbsolute`
55+
- `resolveConfigDir`
56+
不要引入新的随手拼路径逻辑,否则很容易重新制造 Windows 路径问题。
57+
- 修改 `tsconfig` 解析、模块解析或别名处理时,要保持对 bundler 场景和 Node 场景的兼容。`Runtime` 中对 Vue 的 `setModuleResolution` 补丁是有意存在的,没有夹具验证不要删。
58+
- 修改公开选项或产物行为时,必须同步:
59+
- `packages/unplugin-dts/src/types.ts`
60+
- `README.md`
61+
- `README.zh-CN.md`
62+
- 受影响的包内 README(如 `packages/unplugin-dts/README.md``packages/vite-plugin-dts/README.md`
63+
64+
## 代码风格
65+
66+
- 遵循根目录现有约束:
67+
- 2 空格缩进
68+
- LF
69+
- UTF-8
70+
- `eslint.config.ts` flat config
71+
- 不要新增遗留式 `.eslintrc*` 配置。
72+
- 如果需要调整 Vitest 多项目配置,优先收敛到 `vitest.config.ts``test.projects`,不要继续扩展 `vitest.workspace.ts`
73+
- 不要为了“简化”而把已有的细粒度类型改成 `any`
74+
- 保持适配层薄、核心逻辑集中、测试可直接指向 bug。
75+
76+
## 常用命令
77+
78+
- 安装依赖:`pnpm install`
79+
- 根目录 lint:`pnpm lint`
80+
- 根目录测试:`pnpm test`
81+
- 构建所有包:`pnpm build`
82+
- 本地 stub 开发:`pnpm dev`
83+
- 仅测核心包:`pnpm --filter unplugin-dts test`
84+
- 运行某个示例构建:
85+
- `pnpm -C examples/ts-vite build`
86+
- `pnpm -C examples/vue-vite build`
87+
- `pnpm -C examples/vue-rspack build`
88+
- `pnpm -C examples/ts-rollup build`
89+
- `pnpm -C examples/ts-rolldown build`
90+
- `pnpm -C examples/ts-webpack build`
91+
- `pnpm -C examples/ts-esbuild build`
92+
- `pnpm -C examples/svelte-vite build`
93+
94+
## 按改动类型执行
95+
96+
### 1. 改 `transform.ts`、alias、路径映射、`.vue` 文件名清理
97+
98+
- 先补或改 `packages/unplugin-dts/tests/transform.spec.ts`
99+
- 必要时补 `packages/unplugin-dts/tests/utils.spec.ts`
100+
- 至少跑:`pnpm --filter unplugin-dts test`
101+
- 如果改动涉及 Vite/Vue 产物路径,再跑一个对应示例构建
102+
103+
### 2. 改 `runtime.ts`、emit、`bundleTypes`、多 `outDir`、类型入口写入
104+
105+
- 优先补核心测试
106+
- 至少跑:
107+
- `pnpm --filter unplugin-dts test`
108+
- 一个 TS 示例构建,如 `pnpm -C examples/ts-vite build`
109+
- 如果触及 `bundleTypes` 或 API Extractor 集成,再补一个启用了 `bundleTypes` 的示例验证,如 `examples/ts-vite``examples/vue-vite`
110+
111+
### 3. 改 Vue/Svelte/JSON resolver 或 processor
112+
113+
- 补对应测试或最小夹具
114+
- Vue 改动至少验证一个 Vue 示例:
115+
- `pnpm -C examples/vue-vite build`
116+
-`pnpm -C examples/vue-rspack build`
117+
-`pnpm -C examples/vue-rolldown build`
118+
- Svelte 改动至少验证:`pnpm -C examples/svelte-vite build`
119+
120+
### 4. 改 bundler 适配层
121+
122+
- Vite / Rollup / Rolldown / Webpack / Rspack / Esbuild 的入口文件应保持很薄。
123+
- 若某个适配器必须新增逻辑,先判断是否应沉到共享层。
124+
- 至少跑被改 bundler 的示例构建;如果改的是共享生命周期钩子,补跑一个非同 bundler 的示例做交叉验证。
125+
126+
### 5. 改公开 API、导出、README、包元数据
127+
128+
- 同步文档与类型定义
129+
- 变更 `exports`、入口文件、构建产物布局时,最终至少跑一次:`pnpm build`
130+
131+
### 6. 改发版脚本
132+
133+
- 默认不要执行 `release``publish:*`
134+
- 只有在用户明确要求时才运行,并优先使用 dry-run
135+
136+
## 最小验证矩阵
137+
138+
- 只改测试或文档:
139+
- 通常不必全量构建;确认引用路径、命令和文件名准确即可
140+
- 改核心 transform / utils:
141+
- `pnpm --filter unplugin-dts test`
142+
- 改 emit / 输出布局:
143+
- `pnpm --filter unplugin-dts test`
144+
- `pnpm -C examples/ts-vite build`
145+
- 改 Vue 支持:
146+
- `pnpm --filter unplugin-dts test`
147+
- `pnpm -C examples/vue-vite build`
148+
- 改 bundler 适配:
149+
- 跑对应 bundler 示例
150+
- 改公共包输出或根脚本:
151+
- `pnpm build`
152+
153+
## 提交前检查
154+
155+
- 确认没有手改生成物
156+
- 确认测试覆盖了新分支或回归点
157+
- 确认 README / 类型 / 示例配置已经同步
158+
- 确认新增逻辑没有绕开现有路径规范化工具
159+
- 确认 `vite-plugin-dts` 没有与 `unplugin-dts` 产生行为漂移

0 commit comments

Comments
 (0)