z-biz-tool-shared 0.1.5 → 0.1.6
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/dist/testkit/index.d.ts +2 -0
- package/dist/testkit/index.d.ts.map +1 -0
- package/dist/testkit/index.js +6 -0
- package/dist/testkit/index.js.map +1 -0
- package/dist/testkit/ipcContract.d.ts +68 -0
- package/dist/testkit/ipcContract.d.ts.map +1 -0
- package/dist/testkit/ipcContract.js +108 -0
- package/dist/testkit/ipcContract.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testkit/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testkit/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,EAAE;AACF,+CAA+C;AAC/C,+CAA+C;AAC/C,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 契约测试的公共件:让各仓的「前端 invoke ⇄ Rust 命令」门禁能认出
|
|
3
|
+
* **经由共享层消费**的命令。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么需要这个
|
|
6
|
+
*
|
|
7
|
+
* 2026-10-31 起,深链接收侧改用共享层(`startDeepLinkReceiver`)。
|
|
8
|
+
* 取队列的 `invoke` **发生在共享层内部**,各仓源码里扫不到那个调用点。
|
|
9
|
+
*
|
|
10
|
+
* 于是各仓的门禁会把 `zbiz_take_pending` 判成「实现了却没人用」。
|
|
11
|
+
* **门禁失灵比测试挂掉更严重**:误报久了大家就会把命令塞进「预留未接线」清单,
|
|
12
|
+
* 门禁就名存实亡了。
|
|
13
|
+
*
|
|
14
|
+
* 修法如果让每个仓各写一遍,又回到「私有副本」的老路 ——
|
|
15
|
+
* 而且每份副本都会漂移(有的仓改了、有的没改)。
|
|
16
|
+
*
|
|
17
|
+
* 所以这份清单放在共享层,各仓直接用。
|
|
18
|
+
*
|
|
19
|
+
* ## 两类「扫不到」
|
|
20
|
+
*
|
|
21
|
+
* 1. **命令名是常量**:前端把 `invoke("zbiz_take_pending")` 提成
|
|
22
|
+
* `invoke(ZBIZ_TAKE_PENDING)`(为的是拼错能编译期报错)。
|
|
23
|
+
* 只认字面量的扫描器会漏掉它。
|
|
24
|
+
* 2. **调用发生在共享层内部**:共享层替各仓调了这条命令。
|
|
25
|
+
*
|
|
26
|
+
* ## 用法
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* import {
|
|
30
|
+
* collectSharedConsumedCommands,
|
|
31
|
+
* collectCmdConstants,
|
|
32
|
+
* } from "z-biz-tool-shared/testkit";
|
|
33
|
+
*
|
|
34
|
+
* const sharedConsumed = collectSharedConsumedCommands(sourceFiles);
|
|
35
|
+
* const cmdConstants = collectCmdConstants(sourceFiles);
|
|
36
|
+
* // 然后把 sharedConsumed 并进「被调用过的命令」集合
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* 共享层各模块内部调用了哪些 Rust 命令。
|
|
41
|
+
*
|
|
42
|
+
* key = 共享层模块的导出名;value = 它内部调用的 Rust 命令。
|
|
43
|
+
*
|
|
44
|
+
* **这份表是「共享层 ↔ Rust」之间的契约** ——
|
|
45
|
+
* 共享层改了调用方式(比如不再调某条命令),这里要同步改,
|
|
46
|
+
* 否则各仓的门禁会继续以为那条命令被消费着。
|
|
47
|
+
*/
|
|
48
|
+
export declare const SHARED_CONSUMED_COMMANDS: Record<string, readonly string[]>;
|
|
49
|
+
/**
|
|
50
|
+
* 收集「命令名常量」:`export const ZBIZ_TAKE_PENDING = "zbiz_take_pending"`。
|
|
51
|
+
*
|
|
52
|
+
* 为什么要认常量:前端把命令名提成常量,是为了让拼错在**编译期**就报错。
|
|
53
|
+
* 若扫描器只认字面量,就得让前端退回 `invoke("zbiz_take_pending")` ——
|
|
54
|
+
* 那样拼错**编译期也发现不了**,常量就白提了。
|
|
55
|
+
*/
|
|
56
|
+
export declare function collectCmdConstants(files: readonly string[]): Map<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* 本仓通过共享层消费掉的 Rust 命令。
|
|
59
|
+
*
|
|
60
|
+
* 判据:本仓源码里 import 了共享层的协议子路径。
|
|
61
|
+
* 「import 了」是**足够强**的证据 —— 不用去解析调用点,
|
|
62
|
+
* 也不用共享层暴露运行时信息。
|
|
63
|
+
*
|
|
64
|
+
* @param files 本仓源文件列表
|
|
65
|
+
* @param sharedPath 共享层子路径(默认 `z-biz-tool-shared/protocol`)
|
|
66
|
+
*/
|
|
67
|
+
export declare function collectSharedConsumedCommands(files: readonly string[], sharedPath?: string): Set<string>;
|
|
68
|
+
//# sourceMappingURL=ipcContract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipcContract.d.ts","sourceRoot":"","sources":["../../src/testkit/ipcContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAYH;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAGtE,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,SAA+B,GACxC,GAAG,CAAC,MAAM,CAAC,CAWb"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 契约测试的公共件:让各仓的「前端 invoke ⇄ Rust 命令」门禁能认出
|
|
3
|
+
* **经由共享层消费**的命令。
|
|
4
|
+
*
|
|
5
|
+
* ## 为什么需要这个
|
|
6
|
+
*
|
|
7
|
+
* 2026-10-31 起,深链接收侧改用共享层(`startDeepLinkReceiver`)。
|
|
8
|
+
* 取队列的 `invoke` **发生在共享层内部**,各仓源码里扫不到那个调用点。
|
|
9
|
+
*
|
|
10
|
+
* 于是各仓的门禁会把 `zbiz_take_pending` 判成「实现了却没人用」。
|
|
11
|
+
* **门禁失灵比测试挂掉更严重**:误报久了大家就会把命令塞进「预留未接线」清单,
|
|
12
|
+
* 门禁就名存实亡了。
|
|
13
|
+
*
|
|
14
|
+
* 修法如果让每个仓各写一遍,又回到「私有副本」的老路 ——
|
|
15
|
+
* 而且每份副本都会漂移(有的仓改了、有的没改)。
|
|
16
|
+
*
|
|
17
|
+
* 所以这份清单放在共享层,各仓直接用。
|
|
18
|
+
*
|
|
19
|
+
* ## 两类「扫不到」
|
|
20
|
+
*
|
|
21
|
+
* 1. **命令名是常量**:前端把 `invoke("zbiz_take_pending")` 提成
|
|
22
|
+
* `invoke(ZBIZ_TAKE_PENDING)`(为的是拼错能编译期报错)。
|
|
23
|
+
* 只认字面量的扫描器会漏掉它。
|
|
24
|
+
* 2. **调用发生在共享层内部**:共享层替各仓调了这条命令。
|
|
25
|
+
*
|
|
26
|
+
* ## 用法
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* import {
|
|
30
|
+
* collectSharedConsumedCommands,
|
|
31
|
+
* collectCmdConstants,
|
|
32
|
+
* } from "z-biz-tool-shared/testkit";
|
|
33
|
+
*
|
|
34
|
+
* const sharedConsumed = collectSharedConsumedCommands(sourceFiles);
|
|
35
|
+
* const cmdConstants = collectCmdConstants(sourceFiles);
|
|
36
|
+
* // 然后把 sharedConsumed 并进「被调用过的命令」集合
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
/* ------------------------------------------------------------------ *
|
|
40
|
+
* 依赖
|
|
41
|
+
* ------------------------------------------------------------------ */
|
|
42
|
+
import { readFileSync } from "node:fs";
|
|
43
|
+
/* ------------------------------------------------------------------ *
|
|
44
|
+
* 共享层消费的命令清单
|
|
45
|
+
* ------------------------------------------------------------------ */
|
|
46
|
+
/**
|
|
47
|
+
* 共享层各模块内部调用了哪些 Rust 命令。
|
|
48
|
+
*
|
|
49
|
+
* key = 共享层模块的导出名;value = 它内部调用的 Rust 命令。
|
|
50
|
+
*
|
|
51
|
+
* **这份表是「共享层 ↔ Rust」之间的契约** ——
|
|
52
|
+
* 共享层改了调用方式(比如不再调某条命令),这里要同步改,
|
|
53
|
+
* 否则各仓的门禁会继续以为那条命令被消费着。
|
|
54
|
+
*/
|
|
55
|
+
export const SHARED_CONSUMED_COMMANDS = {
|
|
56
|
+
/** 深链接收侧:取队列。 */
|
|
57
|
+
startDeepLinkReceiver: ["zbiz_take_pending"],
|
|
58
|
+
};
|
|
59
|
+
/* ------------------------------------------------------------------ *
|
|
60
|
+
* 扫描器
|
|
61
|
+
* ------------------------------------------------------------------ */
|
|
62
|
+
/**
|
|
63
|
+
* 收集「命令名常量」:`export const ZBIZ_TAKE_PENDING = "zbiz_take_pending"`。
|
|
64
|
+
*
|
|
65
|
+
* 为什么要认常量:前端把命令名提成常量,是为了让拼错在**编译期**就报错。
|
|
66
|
+
* 若扫描器只认字面量,就得让前端退回 `invoke("zbiz_take_pending")` ——
|
|
67
|
+
* 那样拼错**编译期也发现不了**,常量就白提了。
|
|
68
|
+
*/
|
|
69
|
+
export function collectCmdConstants(files) {
|
|
70
|
+
const map = new Map();
|
|
71
|
+
const re = /export\s+const\s+([A-Za-z_$][\w$]*)\s*(?::[^=]+)?=\s*["']([a-z_]+)["']/g;
|
|
72
|
+
for (const f of files) {
|
|
73
|
+
const txt = readFileSync(f, "utf8");
|
|
74
|
+
for (const m of txt.matchAll(re)) {
|
|
75
|
+
map.set(m[1], m[2]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return map;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 本仓通过共享层消费掉的 Rust 命令。
|
|
82
|
+
*
|
|
83
|
+
* 判据:本仓源码里 import 了共享层的协议子路径。
|
|
84
|
+
* 「import 了」是**足够强**的证据 —— 不用去解析调用点,
|
|
85
|
+
* 也不用共享层暴露运行时信息。
|
|
86
|
+
*
|
|
87
|
+
* @param files 本仓源文件列表
|
|
88
|
+
* @param sharedPath 共享层子路径(默认 `z-biz-tool-shared/protocol`)
|
|
89
|
+
*/
|
|
90
|
+
export function collectSharedConsumedCommands(files, sharedPath = "z-biz-tool-shared/protocol") {
|
|
91
|
+
const out = new Set();
|
|
92
|
+
const re = new RegExp(`from\\s+["']${escapeRe(sharedPath)}["']`);
|
|
93
|
+
for (const f of files) {
|
|
94
|
+
const txt = readFileSync(f, "utf8");
|
|
95
|
+
if (!re.test(txt))
|
|
96
|
+
continue;
|
|
97
|
+
for (const cmds of Object.values(SHARED_CONSUMED_COMMANDS)) {
|
|
98
|
+
for (const c of cmds)
|
|
99
|
+
out.add(c);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
/** 正则里的特殊字符要转义(路径里有 `-` 和 `/`,`-` 在字符类外是安全的,但统一处理更稳)。 */
|
|
105
|
+
function escapeRe(s) {
|
|
106
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ipcContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipcContract.js","sourceRoot":"","sources":["../../src/testkit/ipcContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH;;wEAEwE;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;wEAEwE;AAExE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAsC;IACzE,iBAAiB;IACjB,qBAAqB,EAAE,CAAC,mBAAmB,CAAC;CAC7C,CAAC;AAEF;;wEAEwE;AAExE;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,EAAE,GAAG,yEAAyE,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAwB,EACxB,UAAU,GAAG,4BAA4B;IAEzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,eAAe,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC3D,KAAK,MAAM,CAAC,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yDAAyD;AACzD,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "z-biz-tool-shared",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "z-biz-tool 核心共享模块(AI/Agent/主题/快捷键/组件)",
|
|
6
6
|
"type": "module",
|
|
@@ -59,6 +59,10 @@
|
|
|
59
59
|
"types": "./dist/protocol/index.d.ts",
|
|
60
60
|
"default": "./dist/protocol/index.js"
|
|
61
61
|
},
|
|
62
|
+
"./testkit": {
|
|
63
|
+
"types": "./dist/testkit/index.d.ts",
|
|
64
|
+
"default": "./dist/testkit/index.js"
|
|
65
|
+
},
|
|
62
66
|
"./types": {
|
|
63
67
|
"types": "./dist/types/index.d.ts",
|
|
64
68
|
"default": "./dist/types/index.js"
|