@xihe-lab/tapd-core 2.0.0-rc.1 → 2.0.0-rc.3
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/README.md +23 -0
- package/dist/advisor/index.d.ts.map +1 -1
- package/dist/advisor/index.js +2 -0
- package/dist/advisor/index.js.map +1 -1
- package/dist/cache/read-cache.d.ts +136 -0
- package/dist/cache/read-cache.d.ts.map +1 -0
- package/dist/cache/read-cache.js +322 -0
- package/dist/cache/read-cache.js.map +1 -0
- package/dist/cache/read-cache.test.d.ts +2 -0
- package/dist/cache/read-cache.test.d.ts.map +1 -0
- package/dist/cache/read-cache.test.js +429 -0
- package/dist/cache/read-cache.test.js.map +1 -0
- package/dist/errors/index.d.ts +120 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +429 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/registry/registry.d.ts +7 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +9 -3
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/registry.test.js +293 -2
- package/dist/registry/registry.test.js.map +1 -1
- package/dist/registry/richtext-manifests.generated.d.ts +1 -1
- package/dist/registry/richtext-manifests.generated.d.ts.map +1 -1
- package/dist/registry/richtext-manifests.generated.js +1 -1
- package/dist/registry/richtext-manifests.generated.js.map +1 -1
- package/dist/registry/richtext.d.ts +9 -0
- package/dist/registry/richtext.d.ts.map +1 -1
- package/dist/registry/richtext.js +33 -15
- package/dist/registry/richtext.js.map +1 -1
- package/dist/registry/richtext.test.js +70 -7
- package/dist/registry/richtext.test.js.map +1 -1
- package/dist/richtext/attachment-anchor.d.ts +58 -0
- package/dist/richtext/attachment-anchor.d.ts.map +1 -0
- package/dist/richtext/attachment-anchor.js +221 -0
- package/dist/richtext/attachment-anchor.js.map +1 -0
- package/dist/richtext/attachment-anchor.test.d.ts +2 -0
- package/dist/richtext/attachment-anchor.test.d.ts.map +1 -0
- package/dist/richtext/attachment-anchor.test.js +149 -0
- package/dist/richtext/attachment-anchor.test.js.map +1 -0
- package/dist/richtext/escape.d.ts +7 -0
- package/dist/richtext/escape.d.ts.map +1 -0
- package/dist/richtext/escape.js +60 -0
- package/dist/richtext/escape.js.map +1 -0
- package/dist/richtext/index.d.ts +15 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +35 -0
- package/dist/richtext/index.js.map +1 -0
- package/dist/richtext/mention.d.ts +49 -0
- package/dist/richtext/mention.d.ts.map +1 -0
- package/dist/richtext/mention.js +179 -0
- package/dist/richtext/mention.js.map +1 -0
- package/dist/richtext/mention.test.d.ts +2 -0
- package/dist/richtext/mention.test.d.ts.map +1 -0
- package/dist/richtext/mention.test.js +123 -0
- package/dist/richtext/mention.test.js.map +1 -0
- package/dist/richtext/pipeline.d.ts +5 -0
- package/dist/richtext/pipeline.d.ts.map +1 -0
- package/dist/richtext/pipeline.js +199 -0
- package/dist/richtext/pipeline.js.map +1 -0
- package/dist/richtext/round-trip.test.d.ts +2 -0
- package/dist/richtext/round-trip.test.d.ts.map +1 -0
- package/dist/richtext/round-trip.test.js +105 -0
- package/dist/richtext/round-trip.test.js.map +1 -0
- package/dist/sdk-routes.d.ts.map +1 -1
- package/dist/sdk-routes.js +4 -0
- package/dist/sdk-routes.js.map +1 -1
- package/dist/tapd-client.d.ts +79 -2
- package/dist/tapd-client.d.ts.map +1 -1
- package/dist/tapd-client.js +177 -24
- package/dist/tapd-client.js.map +1 -1
- package/dist/tools/attachment.d.ts +47 -0
- package/dist/tools/attachment.d.ts.map +1 -1
- package/dist/tools/attachment.js +278 -32
- package/dist/tools/attachment.js.map +1 -1
- package/dist/tools/attachment.test.d.ts +2 -0
- package/dist/tools/attachment.test.d.ts.map +1 -0
- package/dist/tools/attachment.test.js +432 -0
- package/dist/tools/attachment.test.js.map +1 -0
- package/dist/tools/board.js +22 -22
- package/dist/tools/board.js.map +1 -1
- package/dist/tools/bug.d.ts.map +1 -1
- package/dist/tools/bug.js +262 -259
- package/dist/tools/bug.js.map +1 -1
- package/dist/tools/changes.js +20 -20
- package/dist/tools/changes.js.map +1 -1
- package/dist/tools/comment.d.ts.map +1 -1
- package/dist/tools/comment.js +26 -23
- package/dist/tools/comment.js.map +1 -1
- package/dist/tools/custom-fields.js +16 -16
- package/dist/tools/custom-fields.js.map +1 -1
- package/dist/tools/image.js +2 -2
- package/dist/tools/image.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/iteration.js +50 -50
- package/dist/tools/iteration.js.map +1 -1
- package/dist/tools/media.d.ts +9 -0
- package/dist/tools/media.d.ts.map +1 -0
- package/dist/tools/media.js +45 -0
- package/dist/tools/media.js.map +1 -0
- package/dist/tools/mini-comment.js +27 -27
- package/dist/tools/mini-comment.js.map +1 -1
- package/dist/tools/mini-item.js +83 -83
- package/dist/tools/mini-item.js.map +1 -1
- package/dist/tools/mini-workspace.js +5 -5
- package/dist/tools/mini-workspace.js.map +1 -1
- package/dist/tools/program.js +7 -7
- package/dist/tools/program.js.map +1 -1
- package/dist/tools/relations.js +14 -14
- package/dist/tools/relations.js.map +1 -1
- package/dist/tools/release.js +53 -53
- package/dist/tools/release.js.map +1 -1
- package/dist/tools/report.js +8 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/richtext-wiring.test.d.ts +2 -0
- package/dist/tools/richtext-wiring.test.d.ts.map +1 -0
- package/dist/tools/richtext-wiring.test.js +302 -0
- package/dist/tools/richtext-wiring.test.js.map +1 -0
- package/dist/tools/settings.js +77 -77
- package/dist/tools/settings.js.map +1 -1
- package/dist/tools/source.js +14 -14
- package/dist/tools/source.js.map +1 -1
- package/dist/tools/story.d.ts.map +1 -1
- package/dist/tools/story.js +123 -120
- package/dist/tools/story.js.map +1 -1
- package/dist/tools/task.d.ts.map +1 -1
- package/dist/tools/task.js +126 -123
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/test.js +117 -117
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/timesheet.js +23 -23
- package/dist/tools/timesheet.js.map +1 -1
- package/dist/tools/user.js +8 -8
- package/dist/tools/user.js.map +1 -1
- package/dist/tools/utility.d.ts +17 -0
- package/dist/tools/utility.d.ts.map +1 -1
- package/dist/tools/utility.js +204 -88
- package/dist/tools/utility.js.map +1 -1
- package/dist/tools/wiki.d.ts.map +1 -1
- package/dist/tools/wiki.js +71 -56
- package/dist/tools/wiki.js.map +1 -1
- package/dist/tools/workflow.js +26 -26
- package/dist/tools/workflow.js.map +1 -1
- package/dist/tools/workspace.js +16 -16
- package/dist/tools/workspace.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +15 -11
- package/dist/tools/zz-acceptance-echo.d.ts +0 -3
- package/dist/tools/zz-acceptance-echo.d.ts.map +0 -1
- package/dist/tools/zz-acceptance-echo.js +0 -9
- package/dist/tools/zz-acceptance-echo.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# @xihe-lab/tapd-core
|
|
2
|
+
|
|
3
|
+
TAPD 研发协作工具的**共享内核**:沉淀 TAPD 全部工具定义、HTTP 客户端与工具注册表,供 `@xihe-lab/tapd-cli` 与 `@xihe-lab/tapd-mcp-server` 复用。单独安装本包通常没有直接用途。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @xihe-lab/tapd-core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 能力概览
|
|
12
|
+
|
|
13
|
+
- **工具定义**:`src/tools/` 按 TAPD 领域组织——需求(story)、缺陷(bug)、任务(task)、迭代(iteration)、Wiki、附件、评论、用户、工作区、发布、看板、工时、报表等,统一收敛为 `allTools`
|
|
14
|
+
- **HTTP 客户端**:`TapdClient`,支持 Bearer Token(`fromAccessToken`)与 Basic Auth(`fromBasicAuth`)两种认证
|
|
15
|
+
- **只读缓存**:workitem_types / workflow / 成员 / 自定义字段配置 / settings 系 / 分类 / 角色等低频 GET 内置 TTL 缓存(LRU + 并发去重 + 深拷贝返回);`TAPD_CACHE=off` 关闭(默认开)、`TAPD_CACHE_TTL` 全局倍率、`TAPD_CACHE_DEBUG=1` 命中日志,`invalidateCache(workspaceId?)` 显式失效
|
|
16
|
+
- **工具注册表**:`ToolRegistry`,负责工具注册、执行、审计(`AuditEvent`)与写策略裁决(`resolveWrite`)
|
|
17
|
+
- **配置**:`config.ts` 提供配置加载/保存与注入环境变量
|
|
18
|
+
- **富文本**:`richtext/` 语义库,md ↔ html 双向转换与 `@`/附件锚点处理
|
|
19
|
+
- **Schema 导出**:`exportSchemas` 导出工具 JSON Schema
|
|
20
|
+
|
|
21
|
+
## License
|
|
22
|
+
|
|
23
|
+
Apache-2.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/advisor/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/advisor/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AA6JD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE,CAmCxE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,SAAK,GAAG,UAAU,EAAE,CAwCxF"}
|
package/dist/advisor/index.js
CHANGED
|
@@ -44,6 +44,8 @@ const SYNONYMS = [
|
|
|
44
44
|
['字段', ['field']],
|
|
45
45
|
['模板', ['template']],
|
|
46
46
|
['批量', ['batch']],
|
|
47
|
+
['回收站', ['removed', 'recycle']],
|
|
48
|
+
['看板', ['board', 'card']],
|
|
47
49
|
];
|
|
48
50
|
const SYNONYM_ENTRIES = [...SYNONYMS].sort((a, b) => b[0].length - a[0].length);
|
|
49
51
|
const DOMAIN_RANK = ['story', 'bug', 'task', 'iteration', 'wiki', 'comment'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/advisor/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/advisor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 只读数据 TTL 缓存(Wave 2)
|
|
3
|
+
*
|
|
4
|
+
* 范围与契约:
|
|
5
|
+
* - 只缓存 allowlist 内低频变化的 GET 端点(workitem_types / workflow 状态表与步骤 /
|
|
6
|
+
* workspace 成员 / 自定义字段配置 / settings 系(模块、版本、特性、项目设置)/
|
|
7
|
+
* 分类(story、tcase)/ 角色),其余请求一律直连,行为与无缓存完全一致
|
|
8
|
+
* - 缓存层位于 TapdClient 内部(route() 的 GET 分支),registry 与工具层零感知,
|
|
9
|
+
* 工具返回形态零变化——命中返回深拷贝,防消费方 mutate 污染缓存
|
|
10
|
+
* - 键 = 端点 + 规范化参数(键排序、剔除 undefined)+ API origin 命名空间;
|
|
11
|
+
* workspace_id 是普通参数的一员,天然按项目维度隔离
|
|
12
|
+
* - in-flight 去重:并发同键请求共享同一个 Promise,只发一次网络请求
|
|
13
|
+
* - LRU 上限(默认 200 条)防膨胀;TTL 按端点分级(CACHE_TTL_MS 常量表可调)
|
|
14
|
+
* - 写操作不动缓存(allowlist 数据基本不经本工具写);需要时显式调用
|
|
15
|
+
* invalidateCache() 全量清除,或 invalidateCache(workspaceId) 按项目清除
|
|
16
|
+
* - 错误不缓存、不吞、不换形态:底层 TapdError 原样上抛,失败后缓存与
|
|
17
|
+
* in-flight 均清理干净,下次调用照常回源
|
|
18
|
+
* - 环境变量(解析容错:非法值回退默认,绝不因环境变量抛错):
|
|
19
|
+
* - TAPD_CACHE:off/0/false/no/disabled 关闭缓存(大小写不敏感,默认 on)
|
|
20
|
+
* - TAPD_CACHE_TTL:全局 TTL 倍率(默认 1;非法/非正数回退 1)
|
|
21
|
+
* - TAPD_CACHE_DEBUG:1/true/on/yes/enabled 时输出命中日志与命中率(默认关)
|
|
22
|
+
*/
|
|
23
|
+
/** LRU 上限:allowlist 端点 × 常用项目组合远小于该值,超限按最久未命中逐出。 */
|
|
24
|
+
export declare const CACHE_MAX_ENTRIES = 200;
|
|
25
|
+
/**
|
|
26
|
+
* TTL 分级常量表(毫秒,按数据变化频率定级,代码内可调):
|
|
27
|
+
* - 1h:workitem_types、自定义字段配置(管理动作才会变)
|
|
28
|
+
* - 30min:workspace 成员、settings 系(模块/版本/特性/项目设置)、分类、角色
|
|
29
|
+
* - 10min:workflow 状态表/步骤(有界面编排入口,变更稍勤)
|
|
30
|
+
*/
|
|
31
|
+
export declare const CACHE_TTL_MS: {
|
|
32
|
+
readonly workitemTypes: 3600000;
|
|
33
|
+
readonly customFieldConfig: 3600000;
|
|
34
|
+
readonly workspaceMembers: 1800000;
|
|
35
|
+
readonly settings: 1800000;
|
|
36
|
+
readonly categories: 1800000;
|
|
37
|
+
readonly roles: 1800000;
|
|
38
|
+
readonly workflow: 600000;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* 查端点 TTL:命中返回毫秒数(>0 且可缓存),未命中返回 undefined(一律直连)。
|
|
42
|
+
* 除精确表外,唯一一条族规则是各实体的 custom_fields_settings(自定义字段配置,1h)。
|
|
43
|
+
*/
|
|
44
|
+
export declare function ttlForPath(path: string): number | undefined;
|
|
45
|
+
/** TAPD_CACHE:未设/空串默认开;off 族词关闭;其余值视为开。 */
|
|
46
|
+
export declare function parseCacheEnabled(raw: string | undefined): boolean;
|
|
47
|
+
/** TAPD_CACHE_TTL:正数倍率;未设/空串/非法/非正数一律回退 1。 */
|
|
48
|
+
export declare function parseTtlMultiplier(raw: string | undefined): number;
|
|
49
|
+
/** TAPD_CACHE_DEBUG:仅 on 族词开启,其余(含未设)关闭。 */
|
|
50
|
+
export declare function parseCacheDebug(raw: string | undefined): boolean;
|
|
51
|
+
/** 规范化参数串:剔除 undefined,按键排序,值 String() 化——同参异序必同键。 */
|
|
52
|
+
export declare function canonicalQuery(params?: Record<string, string | number | boolean | undefined>): string;
|
|
53
|
+
/** 缓存键 = origin 命名空间 + 端点 + 规范化参数(workspace_id 在参数内,项目天然隔离)。 */
|
|
54
|
+
export declare function cacheKeyFor(origin: string, path: string, params?: Record<string, string | number | boolean | undefined>): string;
|
|
55
|
+
/** 从 API origin(baseUrl)提取命名空间,防多环境(如测试假服务)串缓存;解析失败回退原串。 */
|
|
56
|
+
export declare function originNamespace(baseUrl: string): string;
|
|
57
|
+
export interface ReadCacheOptions {
|
|
58
|
+
/** 注入时钟(单测假时间);默认 Date.now */
|
|
59
|
+
now?: () => number;
|
|
60
|
+
/** LRU 上限;默认 CACHE_MAX_ENTRIES */
|
|
61
|
+
maxEntries?: number;
|
|
62
|
+
/** 强制开关(测试用);缺省读 TAPD_CACHE */
|
|
63
|
+
enabled?: boolean;
|
|
64
|
+
/** 强制 TTL 倍率(测试用);缺省读 TAPD_CACHE_TTL */
|
|
65
|
+
ttlMultiplier?: number;
|
|
66
|
+
/** 强制调试日志(测试用);缺省读 TAPD_CACHE_DEBUG */
|
|
67
|
+
debug?: boolean;
|
|
68
|
+
/** 调试日志落点;默认 console.error */
|
|
69
|
+
log?: (message: string) => void;
|
|
70
|
+
}
|
|
71
|
+
export interface CacheStats {
|
|
72
|
+
/** 当前缓存条目数 */
|
|
73
|
+
size: number;
|
|
74
|
+
/** 等待回源的并发同键请求数 */
|
|
75
|
+
inflight: number;
|
|
76
|
+
hits: number;
|
|
77
|
+
misses: number;
|
|
78
|
+
/** 命中率(0~1;无查询时为 0) */
|
|
79
|
+
hitRate: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 只读 GET 响应缓存:TTL + LRU + in-flight 去重 + 深拷贝隔离。
|
|
83
|
+
* TapdClient 持模块级单例(进程内跨工具调用共享);单测可自建实例注入时钟。
|
|
84
|
+
*/
|
|
85
|
+
export declare class ReadCache {
|
|
86
|
+
private readonly entries;
|
|
87
|
+
private readonly pending;
|
|
88
|
+
private hits;
|
|
89
|
+
private misses;
|
|
90
|
+
/** 时钟可注入(测试假时间);实例级可替换。 */
|
|
91
|
+
now: () => number;
|
|
92
|
+
private readonly maxEntries;
|
|
93
|
+
private readonly forced;
|
|
94
|
+
private readonly log;
|
|
95
|
+
constructor(options?: ReadCacheOptions);
|
|
96
|
+
/** 缓存总开关(TAPD_CACHE,默认 on)。 */
|
|
97
|
+
get enabled(): boolean;
|
|
98
|
+
private get ttlMultiplier();
|
|
99
|
+
private get debug();
|
|
100
|
+
/**
|
|
101
|
+
* 命中返回深拷贝(消费方 mutate 不污染缓存);未命中/已过期/未启用返回 undefined。
|
|
102
|
+
* 命中顺带刷新 LRU 新近度;过期条目惰性清除。
|
|
103
|
+
*/
|
|
104
|
+
peek<T>(key: string): T | undefined;
|
|
105
|
+
/** 写入缓存(存深拷贝,源头后续 mutate 不影响缓存);超限按 LRU 逐出最旧。 */
|
|
106
|
+
store(key: string, value: unknown, ttlMs: number, workspaceId?: string | number): void;
|
|
107
|
+
/** 取并发同键的 in-flight Promise(共享同一次回源,不发重复请求)。 */
|
|
108
|
+
inflight<T>(key: string): Promise<T> | undefined;
|
|
109
|
+
/** 登记 in-flight Promise,settle(成功/失败)后自清理;内部消费拒绝避免 unhandledRejection。 */
|
|
110
|
+
trackInflight(key: string, promise: Promise<unknown>): void;
|
|
111
|
+
/**
|
|
112
|
+
* 失效清除:无参全量清空;给 workspaceId 只清该项目的条目(其余项目保留命中)。
|
|
113
|
+
* 返回清除的条目数。只清已落盘条目,不打断在途回源(完成后的新值照常入库)。
|
|
114
|
+
*/
|
|
115
|
+
invalidate(workspaceId?: string | number): number;
|
|
116
|
+
/** 统计快照(TAPD_CACHE_DEBUG 日志与运维观测共用)。 */
|
|
117
|
+
stats(): CacheStats;
|
|
118
|
+
/** 清零计数(测试/巡检用;不动条目)。 */
|
|
119
|
+
resetStats(): void;
|
|
120
|
+
private logLookup;
|
|
121
|
+
}
|
|
122
|
+
/** 进程级单例:TapdClient 的 GET 通道共用,跨工具调用保活。 */
|
|
123
|
+
export declare const readCache: ReadCache;
|
|
124
|
+
/** 失效缓存:无参全量清空,传 workspaceId 只清该项目(长/短 ID 字符串语义均可)。 */
|
|
125
|
+
export declare function invalidateCache(workspaceId?: string | number): number;
|
|
126
|
+
/** 缓存统计快照(命中率等,TAPD_CACHE_DEBUG=1 时日志同步输出)。 */
|
|
127
|
+
export declare function cacheStats(): CacheStats;
|
|
128
|
+
/**
|
|
129
|
+
* TapdClient GET 通道的缓存门面:
|
|
130
|
+
* - 非 allowlist 端点或缓存关闭 → 原样直连(与无缓存行为逐字节一致)
|
|
131
|
+
* - 命中 → 深拷贝返回;并发同键 → 共享 in-flight Promise
|
|
132
|
+
* - 回源成功 → 写缓存后返回**原始值**(与直连返回同一对象,形态零变化)
|
|
133
|
+
* - 回源失败 → TapdError 原样上抛(不缓存失败,不换错误形态)
|
|
134
|
+
*/
|
|
135
|
+
export declare function cachedGet<T>(baseUrl: string, path: string, params: Record<string, string | number | boolean | undefined> | undefined, fetcher: () => Promise<T>): Promise<T>;
|
|
136
|
+
//# sourceMappingURL=read-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-cache.d.ts","sourceRoot":"","sources":["../../src/cache/read-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 只读数据 TTL 缓存(Wave 2)
|
|
3
|
+
*
|
|
4
|
+
* 范围与契约:
|
|
5
|
+
* - 只缓存 allowlist 内低频变化的 GET 端点(workitem_types / workflow 状态表与步骤 /
|
|
6
|
+
* workspace 成员 / 自定义字段配置 / settings 系(模块、版本、特性、项目设置)/
|
|
7
|
+
* 分类(story、tcase)/ 角色),其余请求一律直连,行为与无缓存完全一致
|
|
8
|
+
* - 缓存层位于 TapdClient 内部(route() 的 GET 分支),registry 与工具层零感知,
|
|
9
|
+
* 工具返回形态零变化——命中返回深拷贝,防消费方 mutate 污染缓存
|
|
10
|
+
* - 键 = 端点 + 规范化参数(键排序、剔除 undefined)+ API origin 命名空间;
|
|
11
|
+
* workspace_id 是普通参数的一员,天然按项目维度隔离
|
|
12
|
+
* - in-flight 去重:并发同键请求共享同一个 Promise,只发一次网络请求
|
|
13
|
+
* - LRU 上限(默认 200 条)防膨胀;TTL 按端点分级(CACHE_TTL_MS 常量表可调)
|
|
14
|
+
* - 写操作不动缓存(allowlist 数据基本不经本工具写);需要时显式调用
|
|
15
|
+
* invalidateCache() 全量清除,或 invalidateCache(workspaceId) 按项目清除
|
|
16
|
+
* - 错误不缓存、不吞、不换形态:底层 TapdError 原样上抛,失败后缓存与
|
|
17
|
+
* in-flight 均清理干净,下次调用照常回源
|
|
18
|
+
* - 环境变量(解析容错:非法值回退默认,绝不因环境变量抛错):
|
|
19
|
+
* - TAPD_CACHE:off/0/false/no/disabled 关闭缓存(大小写不敏感,默认 on)
|
|
20
|
+
* - TAPD_CACHE_TTL:全局 TTL 倍率(默认 1;非法/非正数回退 1)
|
|
21
|
+
* - TAPD_CACHE_DEBUG:1/true/on/yes/enabled 时输出命中日志与命中率(默认关)
|
|
22
|
+
*/
|
|
23
|
+
/** LRU 上限:allowlist 端点 × 常用项目组合远小于该值,超限按最久未命中逐出。 */
|
|
24
|
+
export const CACHE_MAX_ENTRIES = 200;
|
|
25
|
+
const HOUR_MS = 3_600_000;
|
|
26
|
+
const HALF_HOUR_MS = 1_800_000;
|
|
27
|
+
const TEN_MIN_MS = 600_000;
|
|
28
|
+
/**
|
|
29
|
+
* TTL 分级常量表(毫秒,按数据变化频率定级,代码内可调):
|
|
30
|
+
* - 1h:workitem_types、自定义字段配置(管理动作才会变)
|
|
31
|
+
* - 30min:workspace 成员、settings 系(模块/版本/特性/项目设置)、分类、角色
|
|
32
|
+
* - 10min:workflow 状态表/步骤(有界面编排入口,变更稍勤)
|
|
33
|
+
*/
|
|
34
|
+
export const CACHE_TTL_MS = {
|
|
35
|
+
workitemTypes: HOUR_MS,
|
|
36
|
+
customFieldConfig: HOUR_MS,
|
|
37
|
+
workspaceMembers: HALF_HOUR_MS,
|
|
38
|
+
settings: HALF_HOUR_MS,
|
|
39
|
+
categories: HALF_HOUR_MS,
|
|
40
|
+
roles: HALF_HOUR_MS,
|
|
41
|
+
workflow: TEN_MIN_MS,
|
|
42
|
+
};
|
|
43
|
+
/** 允许缓存的 GET 端点 → TTL(毫秒)。不在表内的一律直连(allowlist 即缓存边界)。 */
|
|
44
|
+
const EXACT_TTL_BY_PATH = {
|
|
45
|
+
// 工作项类型(1h)
|
|
46
|
+
'/workitem_types': CACHE_TTL_MS.workitemTypes,
|
|
47
|
+
// 自定义字段配置(1h)——实体级配置走下方后缀规则
|
|
48
|
+
'/workspaces/custom_fields': CACHE_TTL_MS.customFieldConfig,
|
|
49
|
+
// workspace 成员(30min):/users 即 tapd_get_workspace_users 的成员查询
|
|
50
|
+
'/users': CACHE_TTL_MS.workspaceMembers,
|
|
51
|
+
'/workspaces/users': CACHE_TTL_MS.workspaceMembers,
|
|
52
|
+
// workflow 状态表/步骤(10min)
|
|
53
|
+
'/workflows': CACHE_TTL_MS.workflow,
|
|
54
|
+
'/workflows/status_map': CACHE_TTL_MS.workflow,
|
|
55
|
+
'/workflows/step_map': CACHE_TTL_MS.workflow,
|
|
56
|
+
'/workflows/last_steps': CACHE_TTL_MS.workflow,
|
|
57
|
+
'/workflows/first_step': CACHE_TTL_MS.workflow,
|
|
58
|
+
'/workflows/all_transitions': CACHE_TTL_MS.workflow,
|
|
59
|
+
'/workflows/all_last_steps': CACHE_TTL_MS.workflow,
|
|
60
|
+
// settings 系:模块/版本/特性 + 项目设置(30min;count 与列表同源同频)
|
|
61
|
+
'/settings/modules': CACHE_TTL_MS.settings,
|
|
62
|
+
'/settings/modules/count': CACHE_TTL_MS.settings,
|
|
63
|
+
'/settings/versions': CACHE_TTL_MS.settings,
|
|
64
|
+
'/settings/versions/count': CACHE_TTL_MS.settings,
|
|
65
|
+
'/settings/features': CACHE_TTL_MS.settings,
|
|
66
|
+
'/settings/features/count': CACHE_TTL_MS.settings,
|
|
67
|
+
'/settings/workspace_setting': CACHE_TTL_MS.settings,
|
|
68
|
+
// 分类(story/tcase categories,30min)
|
|
69
|
+
'/story_categories': CACHE_TTL_MS.categories,
|
|
70
|
+
'/story_categories/count': CACHE_TTL_MS.categories,
|
|
71
|
+
'/tcase_categories': CACHE_TTL_MS.categories,
|
|
72
|
+
'/tcase_categories/count': CACHE_TTL_MS.categories,
|
|
73
|
+
// 角色(30min)
|
|
74
|
+
'/roles': CACHE_TTL_MS.roles,
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* 查端点 TTL:命中返回毫秒数(>0 且可缓存),未命中返回 undefined(一律直连)。
|
|
78
|
+
* 除精确表外,唯一一条族规则是各实体的 custom_fields_settings(自定义字段配置,1h)。
|
|
79
|
+
*/
|
|
80
|
+
export function ttlForPath(path) {
|
|
81
|
+
const exact = EXACT_TTL_BY_PATH[path];
|
|
82
|
+
if (exact !== undefined)
|
|
83
|
+
return exact;
|
|
84
|
+
if (path.endsWith('/custom_fields_settings'))
|
|
85
|
+
return CACHE_TTL_MS.customFieldConfig;
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// 环境变量解析(容错:非法值回退默认,绝不抛错)
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
const OFF_WORDS = new Set(['0', 'false', 'off', 'no', 'disabled']);
|
|
92
|
+
const DEBUG_WORDS = new Set(['1', 'true', 'on', 'yes', 'enabled']);
|
|
93
|
+
/** TAPD_CACHE:未设/空串默认开;off 族词关闭;其余值视为开。 */
|
|
94
|
+
export function parseCacheEnabled(raw) {
|
|
95
|
+
if (raw === undefined)
|
|
96
|
+
return true;
|
|
97
|
+
const normalized = raw.trim().toLowerCase();
|
|
98
|
+
if (normalized === '')
|
|
99
|
+
return true;
|
|
100
|
+
return !OFF_WORDS.has(normalized);
|
|
101
|
+
}
|
|
102
|
+
/** TAPD_CACHE_TTL:正数倍率;未设/空串/非法/非正数一律回退 1。 */
|
|
103
|
+
export function parseTtlMultiplier(raw) {
|
|
104
|
+
if (raw === undefined)
|
|
105
|
+
return 1;
|
|
106
|
+
const normalized = raw.trim();
|
|
107
|
+
if (normalized === '')
|
|
108
|
+
return 1;
|
|
109
|
+
const num = Number(normalized);
|
|
110
|
+
return Number.isFinite(num) && num > 0 ? num : 1;
|
|
111
|
+
}
|
|
112
|
+
/** TAPD_CACHE_DEBUG:仅 on 族词开启,其余(含未设)关闭。 */
|
|
113
|
+
export function parseCacheDebug(raw) {
|
|
114
|
+
if (raw === undefined)
|
|
115
|
+
return false;
|
|
116
|
+
return DEBUG_WORDS.has(raw.trim().toLowerCase());
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// 缓存实现
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
/** 规范化参数串:剔除 undefined,按键排序,值 String() 化——同参异序必同键。 */
|
|
122
|
+
export function canonicalQuery(params) {
|
|
123
|
+
if (!params)
|
|
124
|
+
return '';
|
|
125
|
+
return Object.entries(params)
|
|
126
|
+
.filter((entry) => entry[1] !== undefined)
|
|
127
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
128
|
+
.map(([key, value]) => `${key}=${String(value)}`)
|
|
129
|
+
.join('&');
|
|
130
|
+
}
|
|
131
|
+
/** 缓存键 = origin 命名空间 + 端点 + 规范化参数(workspace_id 在参数内,项目天然隔离)。 */
|
|
132
|
+
export function cacheKeyFor(origin, path, params) {
|
|
133
|
+
const query = canonicalQuery(params);
|
|
134
|
+
return query === '' ? `${origin} ${path}` : `${origin} ${path}?${query}`;
|
|
135
|
+
}
|
|
136
|
+
/** 从 API origin(baseUrl)提取命名空间,防多环境(如测试假服务)串缓存;解析失败回退原串。 */
|
|
137
|
+
export function originNamespace(baseUrl) {
|
|
138
|
+
try {
|
|
139
|
+
return new URL(baseUrl).origin;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return baseUrl;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function safeClone(value) {
|
|
146
|
+
try {
|
|
147
|
+
return structuredClone(value);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return undefined; // 非Cloneable(理论不可达:API 响应均为 JSON)按不可缓存处理
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 只读 GET 响应缓存:TTL + LRU + in-flight 去重 + 深拷贝隔离。
|
|
155
|
+
* TapdClient 持模块级单例(进程内跨工具调用共享);单测可自建实例注入时钟。
|
|
156
|
+
*/
|
|
157
|
+
export class ReadCache {
|
|
158
|
+
entries = new Map();
|
|
159
|
+
pending = new Map();
|
|
160
|
+
hits = 0;
|
|
161
|
+
misses = 0;
|
|
162
|
+
/** 时钟可注入(测试假时间);实例级可替换。 */
|
|
163
|
+
now;
|
|
164
|
+
maxEntries;
|
|
165
|
+
forced;
|
|
166
|
+
log;
|
|
167
|
+
constructor(options = {}) {
|
|
168
|
+
this.now = options.now ?? Date.now;
|
|
169
|
+
this.maxEntries = options.maxEntries ?? CACHE_MAX_ENTRIES;
|
|
170
|
+
this.forced = { enabled: options.enabled, ttlMultiplier: options.ttlMultiplier, debug: options.debug };
|
|
171
|
+
this.log = options.log ?? (message => console.error(message));
|
|
172
|
+
}
|
|
173
|
+
/** 缓存总开关(TAPD_CACHE,默认 on)。 */
|
|
174
|
+
get enabled() {
|
|
175
|
+
return this.forced.enabled ?? parseCacheEnabled(process.env.TAPD_CACHE);
|
|
176
|
+
}
|
|
177
|
+
get ttlMultiplier() {
|
|
178
|
+
return this.forced.ttlMultiplier ?? parseTtlMultiplier(process.env.TAPD_CACHE_TTL);
|
|
179
|
+
}
|
|
180
|
+
get debug() {
|
|
181
|
+
return this.forced.debug ?? parseCacheDebug(process.env.TAPD_CACHE_DEBUG);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 命中返回深拷贝(消费方 mutate 不污染缓存);未命中/已过期/未启用返回 undefined。
|
|
185
|
+
* 命中顺带刷新 LRU 新近度;过期条目惰性清除。
|
|
186
|
+
*/
|
|
187
|
+
peek(key) {
|
|
188
|
+
if (!this.enabled)
|
|
189
|
+
return undefined;
|
|
190
|
+
const entry = this.entries.get(key);
|
|
191
|
+
if (entry === undefined) {
|
|
192
|
+
this.misses += 1;
|
|
193
|
+
this.logLookup(key, false);
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
if (entry.expiresAt <= this.now()) {
|
|
197
|
+
this.entries.delete(key);
|
|
198
|
+
this.misses += 1;
|
|
199
|
+
this.logLookup(key, false);
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
this.hits += 1;
|
|
203
|
+
this.entries.delete(key);
|
|
204
|
+
this.entries.set(key, entry); // LRU touch:重插到队尾
|
|
205
|
+
this.logLookup(key, true);
|
|
206
|
+
return safeClone(entry.value);
|
|
207
|
+
}
|
|
208
|
+
/** 写入缓存(存深拷贝,源头后续 mutate 不影响缓存);超限按 LRU 逐出最旧。 */
|
|
209
|
+
store(key, value, ttlMs, workspaceId) {
|
|
210
|
+
if (!this.enabled)
|
|
211
|
+
return;
|
|
212
|
+
const cloned = safeClone(value);
|
|
213
|
+
if (cloned === undefined)
|
|
214
|
+
return;
|
|
215
|
+
this.entries.delete(key);
|
|
216
|
+
this.entries.set(key, {
|
|
217
|
+
value: cloned,
|
|
218
|
+
expiresAt: this.now() + ttlMs * this.ttlMultiplier,
|
|
219
|
+
...(workspaceId !== undefined ? { workspaceId: String(workspaceId) } : {}),
|
|
220
|
+
});
|
|
221
|
+
while (this.entries.size > this.maxEntries) {
|
|
222
|
+
const oldest = this.entries.keys().next();
|
|
223
|
+
if (oldest.done)
|
|
224
|
+
break;
|
|
225
|
+
this.entries.delete(oldest.value);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** 取并发同键的 in-flight Promise(共享同一次回源,不发重复请求)。 */
|
|
229
|
+
inflight(key) {
|
|
230
|
+
return this.pending.get(key);
|
|
231
|
+
}
|
|
232
|
+
/** 登记 in-flight Promise,settle(成功/失败)后自清理;内部消费拒绝避免 unhandledRejection。 */
|
|
233
|
+
trackInflight(key, promise) {
|
|
234
|
+
this.pending.set(key, promise);
|
|
235
|
+
const cleanup = () => {
|
|
236
|
+
if (this.pending.get(key) === promise)
|
|
237
|
+
this.pending.delete(key);
|
|
238
|
+
};
|
|
239
|
+
promise.then(cleanup, cleanup);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 失效清除:无参全量清空;给 workspaceId 只清该项目的条目(其余项目保留命中)。
|
|
243
|
+
* 返回清除的条目数。只清已落盘条目,不打断在途回源(完成后的新值照常入库)。
|
|
244
|
+
*/
|
|
245
|
+
invalidate(workspaceId) {
|
|
246
|
+
if (workspaceId === undefined) {
|
|
247
|
+
const removed = this.entries.size;
|
|
248
|
+
this.entries.clear();
|
|
249
|
+
return removed;
|
|
250
|
+
}
|
|
251
|
+
const target = String(workspaceId);
|
|
252
|
+
let removed = 0;
|
|
253
|
+
for (const [key, entry] of this.entries) {
|
|
254
|
+
if (entry.workspaceId === target) {
|
|
255
|
+
this.entries.delete(key);
|
|
256
|
+
removed += 1;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return removed;
|
|
260
|
+
}
|
|
261
|
+
/** 统计快照(TAPD_CACHE_DEBUG 日志与运维观测共用)。 */
|
|
262
|
+
stats() {
|
|
263
|
+
const total = this.hits + this.misses;
|
|
264
|
+
return {
|
|
265
|
+
size: this.entries.size,
|
|
266
|
+
inflight: this.pending.size,
|
|
267
|
+
hits: this.hits,
|
|
268
|
+
misses: this.misses,
|
|
269
|
+
hitRate: total > 0 ? this.hits / total : 0,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/** 清零计数(测试/巡检用;不动条目)。 */
|
|
273
|
+
resetStats() {
|
|
274
|
+
this.hits = 0;
|
|
275
|
+
this.misses = 0;
|
|
276
|
+
}
|
|
277
|
+
logLookup(key, hit) {
|
|
278
|
+
if (!this.debug)
|
|
279
|
+
return;
|
|
280
|
+
const total = this.hits + this.misses;
|
|
281
|
+
const rate = total > 0 ? Math.round((this.hits / total) * 100) : 0;
|
|
282
|
+
this.log(`[tapd-cache] ${hit ? 'HIT' : 'MISS'} ${key} (hits ${this.hits}/${total}, ${rate}%)`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/** 进程级单例:TapdClient 的 GET 通道共用,跨工具调用保活。 */
|
|
286
|
+
export const readCache = new ReadCache();
|
|
287
|
+
/** 失效缓存:无参全量清空,传 workspaceId 只清该项目(长/短 ID 字符串语义均可)。 */
|
|
288
|
+
export function invalidateCache(workspaceId) {
|
|
289
|
+
return readCache.invalidate(workspaceId);
|
|
290
|
+
}
|
|
291
|
+
/** 缓存统计快照(命中率等,TAPD_CACHE_DEBUG=1 时日志同步输出)。 */
|
|
292
|
+
export function cacheStats() {
|
|
293
|
+
return readCache.stats();
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* TapdClient GET 通道的缓存门面:
|
|
297
|
+
* - 非 allowlist 端点或缓存关闭 → 原样直连(与无缓存行为逐字节一致)
|
|
298
|
+
* - 命中 → 深拷贝返回;并发同键 → 共享 in-flight Promise
|
|
299
|
+
* - 回源成功 → 写缓存后返回**原始值**(与直连返回同一对象,形态零变化)
|
|
300
|
+
* - 回源失败 → TapdError 原样上抛(不缓存失败,不换错误形态)
|
|
301
|
+
*/
|
|
302
|
+
export function cachedGet(baseUrl, path, params, fetcher) {
|
|
303
|
+
const ttlMs = ttlForPath(path);
|
|
304
|
+
if (ttlMs === undefined || !readCache.enabled)
|
|
305
|
+
return fetcher();
|
|
306
|
+
const key = cacheKeyFor(originNamespace(baseUrl), path, params);
|
|
307
|
+
const hit = readCache.peek(key);
|
|
308
|
+
if (hit !== undefined)
|
|
309
|
+
return Promise.resolve(hit);
|
|
310
|
+
const pending = readCache.inflight(key);
|
|
311
|
+
if (pending !== undefined)
|
|
312
|
+
return pending;
|
|
313
|
+
const rawWorkspaceId = params?.workspace_id;
|
|
314
|
+
const workspaceId = typeof rawWorkspaceId === 'boolean' ? undefined : rawWorkspaceId;
|
|
315
|
+
const promise = fetcher().then(value => {
|
|
316
|
+
readCache.store(key, value, ttlMs, workspaceId);
|
|
317
|
+
return value;
|
|
318
|
+
});
|
|
319
|
+
readCache.trackInflight(key, promise);
|
|
320
|
+
return promise;
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=read-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-cache.js","sourceRoot":"","sources":["../../src/cache/read-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-cache.test.d.ts","sourceRoot":"","sources":["../../src/cache/read-cache.test.ts"],"names":[],"mappings":""}
|