dc4557cccf
Plan 2 Task 1:@sf/adapter-wp 包骨架(照 contracts 先例:build extends + rootDir "." + exclude test)+ WxrLimits 十字段限额契约与 DEFAULT_WXR_LIMITS 值域冻结(设计基线 §7.2)+ 跨包接线。 跨包接线(一份 paths 三方消费): - 根 tsconfig compilerOptions.paths 把 @sf/contracts、@sf/adapter-wp 映射到 各自 src/index.ts;adapter tsconfig extends 根 tsconfig 使包级 tsc 读同一 份 paths(extends 相对路径按声明处解析,映射始终落在仓库根) - 根 vitest.config.ts resolve.alias 指向同一映射(vitest 不读 tsconfig paths) - adapter 加 @sf/contracts workspace:* 依赖;三方均直连 src,不经 dist (已实测:移走 contracts dist 后 vitest 与包级 tsc 仍全绿) - 根 devDependencies 加 @types/node@^22(对齐 apps/api 钉 22):alias 的 fileURLToPath 辅助需 node 类型,此前根程序靠 apps/api 传递 @types 才有 node 全局,属偶合 限额类型锁(照 contracts 单源派生先例):DEFAULT_WXR_LIMITS as const satisfies WxrLimits + _LIMIT_KEYS 键集与 keyof WxrLimits 双向咬合断言; timeBudgetMs 以可注入时钟(构造函数 now())测试于 Task 3、实测覆盖于 Task 8。 验证:pnpm test 78 绿(75+3);pnpm --filter @sf/adapter-wp exec tsc -p tsconfig.json --noEmit exit 0(--listFiles 证实 contracts 经 src 解析); 根 typecheck 链与 pnpm lint 绿;build 产物形状核验后清理。 Co-Authored-By: Claude Code <noreply@anthropic.com>
29 lines
1.4 KiB
TypeScript
29 lines
1.4 KiB
TypeScript
import { fileURLToPath } from 'node:url'
|
||
import { defineConfig } from 'vitest/config'
|
||
|
||
// 跨包源码直连(Plan 2 Task 1):与根 tsconfig compilerOptions.paths 保持同一映射——
|
||
// vitest 不读 tsconfig paths,须在此镜像一份;三方消费(包级 tsc / vitest / tsx)
|
||
// 均直连 src/index.ts,不经 dist、无需预构建。
|
||
const src = (p: string) => fileURLToPath(new URL(p, import.meta.url))
|
||
|
||
export default defineConfig({
|
||
resolve: {
|
||
alias: {
|
||
'@sf/contracts': src('packages/contracts/src/index.ts'),
|
||
'@sf/adapter-wp': src('packages/adapter-wordpress/src/index.ts'),
|
||
},
|
||
},
|
||
test: {
|
||
include: ['tests/**/*.test.ts', 'packages/*/test/**/*.test.ts', 'apps/*/test/**/*.test.ts'],
|
||
// 集成测试库供给(Task 13):setup 建 sf_test_<ts> 临时库并全量迁移,
|
||
// 设 DATABASE_URL_TEST 让所有 getDb() 自动指过去;teardown 负责 DROP。
|
||
globalSetup: ['tests/integration/global-setup.ts'],
|
||
testTimeout: 30000,
|
||
// 集成测试共库且清场会做全局态变更(不可变表 DISABLE/ENABLE TRIGGER 是库级 DDL,
|
||
// 对所有会话可见):文件级并行时 A 文件清场窗口会与 B 文件的不可变断言竞态(实测
|
||
// db.media 清场 disable content_revisions_immutable 期间,db.content 恰好断言该触发器
|
||
// → UPDATE 意外放行)。串行执行文件消除该竞态;套件仅数秒,并行无收益。
|
||
fileParallelism: false,
|
||
},
|
||
})
|