snapshot-checker 0.1.6 → 0.2.1

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.
Files changed (72) hide show
  1. package/README.md +55 -36
  2. package/dist/commands/context_demo.d.ts +1 -1
  3. package/dist/commands/context_demo.d.ts.map +1 -1
  4. package/dist/commands/context_demo.js +19 -14
  5. package/dist/commands/context_demo.js.map +1 -1
  6. package/dist/commands/forkall.d.ts +1 -1
  7. package/dist/commands/forkall.d.ts.map +1 -1
  8. package/dist/commands/forkall.js +78 -62
  9. package/dist/commands/forkall.js.map +1 -1
  10. package/dist/commands/mac-example.d.ts +1 -1
  11. package/dist/commands/mac-example.js +9 -9
  12. package/dist/commands/report.d.ts +1 -1
  13. package/dist/commands/report.d.ts.map +1 -1
  14. package/dist/commands/report.js +63 -46
  15. package/dist/commands/report.js.map +1 -1
  16. package/dist/commands/timeout_demo.d.ts +1 -1
  17. package/dist/commands/timeout_demo.d.ts.map +1 -1
  18. package/dist/commands/timeout_demo.js +8 -8
  19. package/dist/commands/timeout_demo.js.map +1 -1
  20. package/dist/src/cli.js +59 -56
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/executor.d.ts +4 -4
  23. package/dist/src/executor.js +2 -2
  24. package/dist/src/groupSpecs.d.ts +1 -1
  25. package/dist/src/groupSpecs.d.ts.map +1 -1
  26. package/dist/src/groupSpecs.js +5 -2
  27. package/dist/src/groupSpecs.js.map +1 -1
  28. package/dist/src/index.d.ts +5 -5
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +4 -4
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/lib/common_groups.d.ts +2 -2
  33. package/dist/src/lib/common_groups.d.ts.map +1 -1
  34. package/dist/src/lib/common_groups.js +37 -33
  35. package/dist/src/lib/common_groups.js.map +1 -1
  36. package/dist/src/lib/programmatic.d.ts +2 -2
  37. package/dist/src/lib/programmatic.d.ts.map +1 -1
  38. package/dist/src/lib/programmatic.js +5 -4
  39. package/dist/src/lib/programmatic.js.map +1 -1
  40. package/dist/src/lib/trace_formatter.d.ts +1 -1
  41. package/dist/src/lib/trace_formatter.d.ts.map +1 -1
  42. package/dist/src/lib/trace_formatter.js +12 -11
  43. package/dist/src/lib/trace_formatter.js.map +1 -1
  44. package/dist/src/runCommand.d.ts +2 -2
  45. package/dist/src/runCommand.d.ts.map +1 -1
  46. package/dist/src/runCommand.js +77 -49
  47. package/dist/src/runCommand.js.map +1 -1
  48. package/dist/src/runGroups.d.ts +1 -1
  49. package/dist/src/runGroups.d.ts.map +1 -1
  50. package/dist/src/runGroups.js +30 -16
  51. package/dist/src/runGroups.js.map +1 -1
  52. package/dist/src/runners/builtinFunctionRunner.d.ts +2 -2
  53. package/dist/src/runners/builtinFunctionRunner.d.ts.map +1 -1
  54. package/dist/src/runners/builtinFunctionRunner.js +13 -13
  55. package/dist/src/runners/builtinFunctionRunner.js.map +1 -1
  56. package/dist/src/runners/embedRunner.d.ts +2 -2
  57. package/dist/src/runners/embedRunner.d.ts.map +1 -1
  58. package/dist/src/runners/embedRunner.js +17 -15
  59. package/dist/src/runners/embedRunner.js.map +1 -1
  60. package/dist/src/runners/index.d.ts +4 -4
  61. package/dist/src/runners/index.js +3 -3
  62. package/dist/src/runners/shellRunner.d.ts +2 -2
  63. package/dist/src/runners/shellRunner.d.ts.map +1 -1
  64. package/dist/src/runners/shellRunner.js +28 -28
  65. package/dist/src/runners/shellRunner.js.map +1 -1
  66. package/dist/src/runners/types.d.ts +2 -2
  67. package/dist/src/runners/types.d.ts.map +1 -1
  68. package/dist/src/types.d.ts +1 -1
  69. package/dist/src/types.d.ts.map +1 -1
  70. package/dist/src/types.js +8 -4
  71. package/dist/src/types.js.map +1 -1
  72. package/package.json +3 -2
package/README.md CHANGED
@@ -4,11 +4,13 @@
4
4
 
5
5
  ## 命令类型
6
6
 
7
- | kind | 说明 | 默认执行范围 |
8
- |--------|------|----------------|
9
- | `bat` | Windows 下用 `cmd /c` 执行 | 仅 Windows |
10
- | `mac` | 面向 macOS 的命令 | 仅 macOS |
11
- | `shell`| 通用 shell,使用当前系统默认 shell | 全平台 |
7
+ | kind | 说明 | 默认执行范围 |
8
+ | ------------------ | ---------------------------------- | ------------ |
9
+ | `windows` | Windows 下执行命令 | 仅 Windows |
10
+ | `mac` | 面向 macOS 的命令 | 仅 macOS |
11
+ | `linux` | 面向 Linux 的命令 | Linux |
12
+ | `embed` | 内置指令(如 `sleep` / `timeout`) | 全平台 |
13
+ | `builtin-function` | 内置函数命令(JS/TS 函数) | 全平台 |
12
14
 
13
15
  ## 安装与运行
14
16
 
@@ -22,10 +24,23 @@ npm start -- foo # 或: node dist/cli.js foo
22
24
 
23
25
  ```bash
24
26
  npm run dev -- run
25
- # 或
26
- npm run run:example
27
27
  ```
28
28
 
29
+ ## 测试
30
+
31
+ 项目使用 `node:test` + `tsx` 运行测试,测试文件位于 `tests/*.test.ts`。
32
+
33
+ ```bash
34
+ npm test
35
+ ```
36
+
37
+ 当前已覆盖的核心模块(`src/`):
38
+
39
+ - `src/groupSpecs.ts`:组参数解析(默认展开、`name:repeat`、非法 repeat 回退)
40
+ - `src/lib/programmatic.ts`:场景解析、group 参数规范化、按组执行的 stopOnError 行为
41
+ - `src/runGroups.ts`(通过 programmatic 入口间接覆盖):跨组共享命令上下文
42
+ - `src/lib/trace_formatter.ts`:profile 列表、未知 profile 回退、`dev` 配置映射
43
+
29
44
  ## 配置命令与组(commands 目录)
30
45
 
31
46
  所有命令配置均放在项目根目录的 `commands/` 目录中:
@@ -37,15 +52,13 @@ npm run run:example
37
52
  ```ts
38
53
  export const groups: Groups = {
39
54
  env: [
40
- { kind: 'shell', description: '打印当前目录', run: 'pwd' },
41
- { kind: 'shell', description: 'Node 版本', run: 'node -v' },
42
- ],
43
- list: [
44
- { kind: 'shell', description: '列出文件', run: 'ls -la' },
55
+ { kind: "shell", description: "打印当前目录", run: "pwd" },
56
+ { kind: "shell", description: "Node 版本", run: "node -v" },
45
57
  ],
58
+ list: [{ kind: "shell", description: "列出文件", run: "ls -la" }],
46
59
  };
47
60
 
48
- export const defaultGroupOrder: string[] = ['env', 'list'];
61
+ export const defaultGroupOrder: string[] = ["env", "list"];
49
62
  ```
50
63
 
51
64
  - 不指定 `--group` 时:按 `defaultGroupOrder` 依次执行各组,且**只执行当前系统支持**的命令(shell 全平台;bat 仅 Windows;mac 仅 macOS)。
@@ -119,32 +132,32 @@ import { buildTag, buildUserGreeting } from '../src/lib/foo.js';
119
132
 
120
133
  ```ts
121
134
  // commands/example.ts
122
- import type { Groups } from '../src/types.js';
135
+ import type { Groups } from "../src/types.js";
123
136
 
124
137
  export const groups: Groups = {
125
138
  env: [
126
139
  {
127
- kind: 'shell',
128
- description: '获取当前用户名',
129
- run: 'whoami',
140
+ kind: "shell",
141
+ description: "获取当前用户名",
142
+ run: "whoami",
130
143
  // 将整段 stdout 写入变量 user
131
144
  // (比如 "alice"),供后续命令使用
132
145
  // @ts-expect-error: 由执行器在运行时识别的扩展字段
133
146
  captureToVar: {
134
- name: 'user',
147
+ name: "user",
135
148
  },
136
149
  },
137
150
  ],
138
151
  greet: [
139
152
  {
140
- kind: 'shell',
141
- description: '使用上一条命令得到的用户名',
153
+ kind: "shell",
154
+ description: "使用上一条命令得到的用户名",
142
155
  run: 'echo "hello, {{user}}"',
143
156
  },
144
157
  ],
145
158
  };
146
159
 
147
- export const defaultGroupOrder = ['env', 'greet'];
160
+ export const defaultGroupOrder = ["env", "greet"];
148
161
  ```
149
162
 
150
163
  #### 仅提取输出的一部分
@@ -186,13 +199,13 @@ export const defaultGroupOrder = ['env', 'greet'];
186
199
  // commands/foo.ts
187
200
  export const groups: Groups = {
188
201
  env: [
189
- { kind: 'shell', description: '[foo] 打印当前目录', run: 'pwd' },
190
- { kind: 'shell', description: '[foo] 显示 Node 版本', run: 'node -v' },
202
+ { kind: "shell", description: "[foo] 打印当前目录", run: "pwd" },
203
+ { kind: "shell", description: "[foo] 显示 Node 版本", run: "node -v" },
191
204
  ],
192
- list: [{ kind: 'shell', description: '[foo] 列出当前目录', run: 'ls -la' }],
205
+ list: [{ kind: "shell", description: "[foo] 列出当前目录", run: "ls -la" }],
193
206
  };
194
207
 
195
- export const defaultGroupOrder: string[] = ['env', 'list'];
208
+ export const defaultGroupOrder: string[] = ["env", "list"];
196
209
  ```
197
210
 
198
211
  - 在 `commands/bar.ts` 中定义 `bar` 场景:
@@ -201,14 +214,20 @@ export const defaultGroupOrder: string[] = ['env', 'list'];
201
214
  // commands/bar.ts
202
215
  export const groups: Groups = {
203
216
  env: [
204
- { kind: 'shell', description: '[bar] 打印当前目录', run: 'pwd' },
205
- { kind: 'shell', description: '[bar] 显示 Node 版本', run: 'node -v' },
217
+ { kind: "shell", description: "[bar] 打印当前目录", run: "pwd" },
218
+ { kind: "shell", description: "[bar] 显示 Node 版本", run: "node -v" },
219
+ ],
220
+ list: [{ kind: "shell", description: "[bar] 列出当前目录", run: "ls -la" }],
221
+ extra: [
222
+ {
223
+ kind: "shell",
224
+ description: "[bar] 额外命令示例",
225
+ run: "echo extra from bar",
226
+ },
206
227
  ],
207
- list: [{ kind: 'shell', description: '[bar] 列出当前目录', run: 'ls -la' }],
208
- extra: [{ kind: 'shell', description: '[bar] 额外命令示例', run: 'echo extra from bar' }],
209
228
  };
210
229
 
211
- export const defaultGroupOrder: string[] = ['env', 'extra', 'list'];
230
+ export const defaultGroupOrder: string[] = ["env", "extra", "list"];
212
231
  ```
213
232
 
214
233
  CLI 会自动将 `commands` 目录下除 `config.*` 外的每个文件视为一个**场景命令**,文件名即子命令名:
@@ -281,14 +300,14 @@ npm install snapshot-checker
281
300
  在业务项目中调用**运行接口**(入口与源码中 `src/index.ts` 导出一致),并从一个或多个**包内场景模块**生成命令组(发布产物中为 `dist/commands/*.js`,通过 `exports` 暴露):
282
301
 
283
302
  ```ts
284
- import { resolveScenario, runScenarioGroups } from 'snapshot-checker';
285
- import * as contextDemo from 'snapshot-checker/commands/context_demo';
286
- import * as forkall from 'snapshot-checker/commands/forkall';
303
+ import { resolveScenario, runScenarioGroups } from "snapshot-checker";
304
+ import * as contextDemo from "snapshot-checker/commands/context_demo";
305
+ import * as forkall from "snapshot-checker/commands/forkall";
287
306
 
288
307
  const { groups, defaultGroupOrder } = resolveScenario(forkall, {
289
- app: 'com.example.app',
290
- eventPath: 'snapshot/hmb_forkall_report_image_failure',
291
- mode: 'monitor',
308
+ app: "com.example.app",
309
+ eventPath: "snapshot/hmb_forkall_report_image_failure",
310
+ mode: "monitor",
292
311
  });
293
312
 
294
313
  await runScenarioGroups({ groups, defaultGroupOrder, stopOnError: true });
@@ -1,4 +1,4 @@
1
- import { type Groups } from '../src/types.js';
1
+ import { type Groups } from "../src/types.js";
2
2
  /**
3
3
  * 示例场景:演示如何在命令之间传递变量(含跨不同 group)。
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"context_demo.d.ts","sourceRoot":"","sources":["../../commands/context_demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAMxG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,EAAE,MA8CpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAqD,CAAC"}
1
+ {"version":3,"file":"context_demo.d.ts","sourceRoot":"","sources":["../../commands/context_demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,EAAE,MA8CpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAKrC,CAAC"}
@@ -1,5 +1,5 @@
1
- import { CommandKind, getCurrentPlatformKind } from '../src/types.js';
2
- import { buildTag, buildUserGreeting } from '../src/lib/foo.js';
1
+ import { CommandKind, getCurrentPlatformKind, } from "../src/types.js";
2
+ import { buildTag, buildUserGreeting } from "../src/lib/foo.js";
3
3
  /** 与当前 OS 一致,避免示例在非 macOS 上被整组跳过 */
4
4
  const kind = getCurrentPlatformKind();
5
5
  /**
@@ -20,48 +20,53 @@ export const groups = {
20
20
  getUser: [
21
21
  {
22
22
  kind,
23
- description: '获取当前用户名,并写入变量 user',
24
- run: 'whoami',
23
+ description: "获取当前用户名,并写入变量 user",
24
+ run: "whoami",
25
25
  captureToVar: {
26
- name: 'user',
26
+ name: "user",
27
27
  },
28
28
  },
29
29
  ],
30
30
  greet: [
31
31
  {
32
32
  kind,
33
- description: '使用上一条命令得到的用户名',
33
+ description: "使用上一条命令得到的用户名",
34
34
  run: 'echo "hello, {{user}}"',
35
35
  },
36
36
  ],
37
37
  builtinFn: [
38
38
  {
39
39
  kind: CommandKind.BuiltinFunction,
40
- description: '调用 lib/foo 的工具函数写入变量',
40
+ description: "调用 lib/foo 的工具函数写入变量",
41
41
  func: (ctx) => {
42
- const user = ctx.get('user') ?? 'unknown';
43
- ctx.set('builtinTag', buildTag('context_demo'));
44
- ctx.set('fromFoo', buildUserGreeting(user));
42
+ const user = ctx.get("user") ?? "unknown";
43
+ ctx.set("builtinTag", buildTag("context_demo"));
44
+ ctx.set("fromFoo", buildUserGreeting(user));
45
45
  },
46
46
  },
47
47
  {
48
48
  kind,
49
- description: '读取内置函数写入的变量',
49
+ description: "读取内置函数写入的变量",
50
50
  run: 'echo "{{builtinTag}} | {{fromFoo}}"',
51
51
  },
52
52
  ],
53
53
  builtinFail: [
54
54
  {
55
55
  kind: CommandKind.BuiltinFunction,
56
- description: '演示:返回 false 表示失败(可配合 --stop-on-error)',
56
+ description: "演示:返回 false 表示失败(可配合 --stop-on-error)",
57
57
  func: () => false,
58
58
  },
59
59
  {
60
60
  kind,
61
- description: '这条命令在 --stop-on-error 下不会执行',
61
+ description: "这条命令在 --stop-on-error 下不会执行",
62
62
  run: 'echo "should not run when stop-on-error is enabled"',
63
63
  },
64
64
  ],
65
65
  };
66
- export const defaultGroupOrder = ['getUser', 'greet', 'builtinFn', 'builtinFail'];
66
+ export const defaultGroupOrder = [
67
+ "getUser",
68
+ "greet",
69
+ "builtinFn",
70
+ "builtinFail",
71
+ ];
67
72
  //# sourceMappingURL=context_demo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context_demo.js","sourceRoot":"","sources":["../../commands/context_demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAoC,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,oCAAoC;AACpC,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,OAAO,EAAE;QACP;YACE,IAAI;YACJ,WAAW,EAAE,oBAAoB;YACjC,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI;YACJ,WAAW,EAAE,eAAe;YAC5B,GAAG,EAAE,wBAAwB;SAC9B;KACF;IACD,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,CAAC,GAAmB,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAS,MAAM,CAAC,IAAI,SAAS,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;gBAChD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;SACF;QACD;YACE,IAAI;YACJ,WAAW,EAAE,aAAa;YAC1B,GAAG,EAAE,qCAAqC;SAC3C;KACF;IACD,WAAW,EAAE;QACX;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,uCAAuC;YACpD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK;SAClB;QACD;YACE,IAAI;YACJ,WAAW,EAAE,6BAA6B;YAC1C,GAAG,EAAE,qDAAqD;SAC3D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"context_demo.js","sourceRoot":"","sources":["../../commands/context_demo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,sBAAsB,GAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,oCAAoC;AACpC,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;AAEtC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,OAAO,EAAE;QACP;YACE,IAAI;YACJ,WAAW,EAAE,oBAAoB;YACjC,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE;gBACZ,IAAI,EAAE,MAAM;aACb;SACF;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI;YACJ,WAAW,EAAE,eAAe;YAC5B,GAAG,EAAE,wBAAwB;SAC9B;KACF;IACD,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,sBAAsB;YACnC,IAAI,EAAE,CAAC,GAAmB,EAAE,EAAE;gBAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAS,MAAM,CAAC,IAAI,SAAS,CAAC;gBAClD,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;gBAChD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;SACF;QACD;YACE,IAAI;YACJ,WAAW,EAAE,aAAa;YAC1B,GAAG,EAAE,qCAAqC;SAC3C;KACF;IACD,WAAW,EAAE;QACX;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,uCAAuC;YACpD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK;SAClB;QACD;YACE,IAAI;YACJ,WAAW,EAAE,6BAA6B;YAC1C,GAAG,EAAE,qDAAqD;SAC3D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,SAAS;IACT,OAAO;IACP,WAAW;IACX,aAAa;CACd,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Groups } from '../src/types.js';
1
+ import type { Groups } from "../src/types.js";
2
2
  /**
3
3
  * forkall 场景的基础占位配置。
4
4
  * 实际要执行的命令会在 applyOptions 中,根据 CLI 传入的参数(eventPath/app 等)动态生成。
@@ -1 +1 @@
1
- {"version":3,"file":"forkall.d.ts","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK1E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAAiD,CAAC;AAExF,eAAO,MAAM,OAAO;;;;;;;;IA+BnB,CAAC;AAEF,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAmJD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CA2FlD"}
1
+ {"version":3,"file":"forkall.d.ts","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAS1E;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,EAAE,MAAW,CAAC;AAEjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAKrC,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;IA0CnB,CAAC;AAEF,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAkJD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CA+FlD"}
@@ -1,7 +1,7 @@
1
- import { CommandKind } from '../src/types.js';
2
- import path from 'node:path';
3
- import { existsSync, mkdirSync } from 'node:fs';
4
- import { buildCommonAnalysisGroup, buildCommonCollectGroup, buildCommonInitEnvGroup } from '../src/lib/common_groups.js';
1
+ import { CommandKind } from "../src/types.js";
2
+ import path from "node:path";
3
+ import { existsSync, mkdirSync } from "node:fs";
4
+ import { buildCommonAnalysisGroup, buildCommonCollectGroup, buildCommonInitEnvGroup, } from "../src/lib/common_groups.js";
5
5
  /**
6
6
  * forkall 场景的基础占位配置。
7
7
  * 实际要执行的命令会在 applyOptions 中,根据 CLI 传入的参数(eventPath/app 等)动态生成。
@@ -12,47 +12,63 @@ import { buildCommonAnalysisGroup, buildCommonCollectGroup, buildCommonInitEnvGr
12
12
  * 完整示例见 demos/consumer-app。
13
13
  */
14
14
  export const groups = {};
15
- export const defaultGroupOrder = ['reboot', 'monitor', 'collect', 'analysis'];
15
+ export const defaultGroupOrder = [
16
+ "reboot",
17
+ "monitor",
18
+ "collect",
19
+ "analysis",
20
+ ];
16
21
  export const options = [
17
- { flags: '--event-path <path>', description: '事件路径' },
18
- { flags: '--app <app>', description: '应用名' },
19
- { flags: '--system-symbol-file-path <path>', description: '系统符号文件路径' },
20
- { flags: '--log-key <key>', description: '日志过滤关键字(默认 pid)', defaultValue: 'pid' },
21
- { flags: '--duration <seconds>', description: '采样持续时间(秒,默认 70)', defaultValue: '70' },
22
+ { flags: "--event-path <path>", description: "事件路径" },
23
+ { flags: "--app <app>", description: "应用名" },
24
+ {
25
+ flags: "--system-symbol-file-path <path>",
26
+ description: "系统符号文件路径",
27
+ },
28
+ {
29
+ flags: "--log-key <key>",
30
+ description: "日志过滤关键字(默认 pid)",
31
+ defaultValue: "pid",
32
+ },
33
+ {
34
+ flags: "--duration <seconds>",
35
+ description: "采样持续时间(秒,默认 70)",
36
+ defaultValue: "70",
37
+ },
22
38
  {
23
- flags: '--default-timeout <seconds>',
24
- description: '默认等待时间(秒,默认 90)',
25
- defaultValue: '90',
39
+ flags: "--default-timeout <seconds>",
40
+ description: "默认等待时间(秒,默认 90)",
41
+ defaultValue: "90",
26
42
  },
27
43
  {
28
- flags: '--buffer-size <bytes>',
29
- description: '缓冲区大小(字节,默认 512000)',
30
- defaultValue: '512000',
44
+ flags: "--buffer-size <bytes>",
45
+ description: "缓冲区大小(字节,默认 512000)",
46
+ defaultValue: "512000",
31
47
  },
32
48
  {
33
- flags: '--mode <mode>',
34
- description: '执行模式:monitor 或 reboot-monitor',
35
- defaultValue: 'monitor',
49
+ flags: "--mode <mode>",
50
+ description: "执行模式:monitor 或 reboot-monitor",
51
+ defaultValue: "monitor",
36
52
  },
37
53
  {
38
- flags: '--output-dir <path>',
39
- description: '本地输出目录(默认 .\\output)',
54
+ flags: "--output-dir <path>",
55
+ description: "本地输出目录(默认 .\\output)",
40
56
  defaultValue: String.raw `.\output`,
41
57
  },
42
58
  {
43
- flags: '--trace-format-profile <name>',
44
- description: 'trace 事件格式版本(默认 default)',
45
- defaultValue: 'default',
59
+ flags: "--trace-format-profile <name>",
60
+ description: "trace 事件格式版本(默认 default)",
61
+ defaultValue: "default",
46
62
  },
47
63
  ];
48
64
  function buildRebootGroup(input) {
49
65
  const { mode, eventPath, defaultTimeout } = input;
50
- if (mode !== 'reboot-monitor')
66
+ if (mode !== "reboot-monitor")
51
67
  return [];
52
68
  return [
53
69
  {
54
70
  kind: CommandKind.Windows,
55
- run: 'hdc shell remount',
71
+ run: "hdc shell remount",
56
72
  },
57
73
  {
58
74
  kind: CommandKind.Windows,
@@ -64,32 +80,32 @@ function buildRebootGroup(input) {
64
80
  },
65
81
  {
66
82
  kind: CommandKind.Windows,
67
- description: '上传hitrace配置文件',
83
+ description: "上传hitrace配置文件",
68
84
  run: String.raw `hdc file send .\config\hitrace\hitrace_utils_snapshot.json /system/etc/hiview/hitrace_utils.json`,
69
85
  },
70
86
  {
71
87
  kind: CommandKind.Windows,
72
- description: '上传hiperf',
88
+ description: "上传hiperf",
73
89
  run: String.raw `hdc file send .\tools\host\hiperf\hiperf /bin/hiperf`,
74
90
  },
75
91
  {
76
92
  kind: CommandKind.Windows,
77
- description: '配置自定义trace事件',
93
+ description: "配置自定义trace事件",
78
94
  run: String.raw `hdc shell "sed -i 's|<TARGET_EVENT>|${eventPath}|g' /system/etc/hiview/hitrace_utils.json"`,
79
95
  },
80
96
  {
81
97
  kind: CommandKind.Windows,
82
- description: '配置hiperf权限',
98
+ description: "配置hiperf权限",
83
99
  run: 'hdc shell "chmod 755 /bin/hiperf && chcon u:object_r:hiperf_exec:s0 /bin/hiperf"',
84
100
  },
85
101
  {
86
102
  kind: CommandKind.Windows,
87
- description: '重启设备',
88
- run: 'hdc shell reboot',
103
+ description: "重启设备",
104
+ run: "hdc shell reboot",
89
105
  },
90
106
  {
91
107
  kind: CommandKind.Embed,
92
- description: '等待设备重启中,按任意键可跳过',
108
+ description: "等待设备重启中,按任意键可跳过",
93
109
  run: `timeout ${defaultTimeout}`,
94
110
  },
95
111
  ];
@@ -99,59 +115,59 @@ function buildMonitorGroup(input) {
99
115
  return [
100
116
  {
101
117
  kind: CommandKind.Windows,
102
- description: '收集日志到本地',
118
+ description: "收集日志到本地",
103
119
  background: true,
104
120
  run: `hdc shell "hilog -t kmsg | grep ${logKey}" >> ${snapshotLogFile}`,
105
121
  },
106
122
  {
107
123
  kind: CommandKind.Windows,
108
- run: 'hdc shell pidof apppool',
124
+ run: "hdc shell pidof apppool",
109
125
  captureToVar: {
110
- name: 'apppool_pids',
126
+ name: "apppool_pids",
111
127
  },
112
128
  },
113
129
  {
114
130
  kind: CommandKind.BuiltinFunction,
115
- description: '提取检测目标信息',
131
+ description: "提取检测目标信息",
116
132
  func: (ctx) => {
117
- const apppoolPids = ctx.get('apppool_pids');
133
+ const apppoolPids = ctx.get("apppool_pids");
118
134
  if (!apppoolPids) {
119
- console.warn('[提取检测目标信息] apppool_pids 缺失或不是字符串,跳过处理');
135
+ console.warn("[提取检测目标信息] apppool_pids 缺失或不是字符串,跳过处理");
120
136
  return false;
121
137
  }
122
- const monitorTarget = apppoolPids.split(/\s+/).join(',');
123
- ctx.set('monitor_target', monitorTarget);
124
- console.info('提取检测目标: ', monitorTarget);
138
+ const monitorTarget = apppoolPids.split(/\s+/).join(",");
139
+ ctx.set("monitor_target", monitorTarget);
140
+ console.info("提取检测目标: ", monitorTarget);
125
141
  },
126
142
  },
127
143
  {
128
144
  kind: CommandKind.Windows,
129
- description: '收集风险事件数据',
145
+ description: "收集风险事件数据",
130
146
  run: [
131
147
  'hdc shell "',
132
148
  `hitrace custom_event --overwrite -b ${bufferSize} -t ${duration} -o /data/local/tmp/snapshot_hitrace.txt & `,
133
149
  eventName
134
150
  ? `hiperf record -e ${eventName} --period 1 -s fp --clockid boottime --cpu-limit 100 -o /data/local/tmp/perf.data -p {{monitor_target}} -d ${duration} & `
135
- : '',
136
- 'sleep 1 && ',
137
- app ? `${startAppCommand} && ` : '',
151
+ : "",
152
+ "sleep 1 && ",
153
+ app ? `${startAppCommand} && ` : "",
138
154
  `${checkStateCommand} & `,
139
- 'wait && ',
155
+ "wait && ",
140
156
  'hiperf dump -i /data/local/tmp/perf.data -o /data/local/tmp/snapshot_perf.data.txt"',
141
157
  ]
142
158
  .filter(Boolean)
143
- .join(''),
159
+ .join(""),
144
160
  },
145
161
  ];
146
162
  }
147
163
  function buildAnalysisPreDecodeCommands(input) {
148
- const { systemSymbolFilePath, snapshotPerfFile, parserSystemStackScript, } = input;
164
+ const { systemSymbolFilePath, snapshotPerfFile, parserSystemStackScript } = input;
149
165
  return [
150
166
  ...(systemSymbolFilePath
151
167
  ? [
152
168
  {
153
169
  kind: CommandKind.Windows,
154
- description: '系统栈解栈',
170
+ description: "系统栈解栈",
155
171
  run: `python ${parserSystemStackScript} ${snapshotPerfFile} ${snapshotPerfFile} -S ${systemSymbolFilePath}`,
156
172
  },
157
173
  ]
@@ -162,18 +178,18 @@ function buildAnalysisPreDecodeCommands(input) {
162
178
  * 将 CLI 解析出来的参数应用到 forkall 场景,动态生成各阶段命令。
163
179
  */
164
180
  export function applyOptions(ctx) {
165
- const { eventPath = '', app = '', systemSymbolFilePath = '', logKey = 'pid', duration = '70', defaultTimeout = '90', bufferSize = '512000', mode = 'monitor', outputDir = String.raw `.\output`, traceFormatProfile = 'default', } = ctx.options ?? {};
166
- const eventName = eventPath ? eventPath.replace(/\//g, ':') : '';
181
+ const { eventPath = "", app = "", systemSymbolFilePath = "", logKey = "pid", duration = "70", defaultTimeout = "90", bufferSize = "512000", mode = "monitor", outputDir = String.raw `.\output`, traceFormatProfile = "default", } = ctx.options ?? {};
182
+ const eventName = eventPath ? eventPath.replace(/\//g, ":") : "";
167
183
  const checkStateCommand = "hidumper -s 1901 -a '-p libforkall_plugin.z.so --list'";
168
184
  const outputDirNormalized = path.normalize(outputDir);
169
185
  const outputDirWithSep = outputDirNormalized.endsWith(path.sep)
170
186
  ? outputDirNormalized
171
187
  : `${outputDirNormalized}${path.sep}`;
172
- const snapshotLogFile = path.join(outputDirNormalized, 'snapshot_log.txt');
173
- const snapshotPerfFile = path.join(outputDirNormalized, 'snapshot_perf.data.txt');
174
- const dumpStackTxt = path.join(outputDirNormalized, 'dump_stack.txt');
175
- const dumpStackJson = path.join(outputDirNormalized, 'dump_stack.json');
176
- const parserSystemStackScript = path.normalize(path.join('.', 'tools', 'host', 'checker', 'parse_system_stack.py'));
188
+ const snapshotLogFile = path.join(outputDirNormalized, "snapshot_log.txt");
189
+ const snapshotPerfFile = path.join(outputDirNormalized, "snapshot_perf.data.txt");
190
+ const dumpStackTxt = path.join(outputDirNormalized, "dump_stack.txt");
191
+ const dumpStackJson = path.join(outputDirNormalized, "dump_stack.json");
192
+ const parserSystemStackScript = path.normalize(path.join(".", "tools", "host", "checker", "parse_system_stack.py"));
177
193
  const startAppCommand = `hidumper -s 1901 -a '-p libforkall_plugin.z.so --create 100 ${app}'`;
178
194
  if (!existsSync(outputDirNormalized)) {
179
195
  mkdirSync(outputDirNormalized, { recursive: true });
@@ -215,8 +231,8 @@ export function applyOptions(ctx) {
215
231
  dumpStackTxt,
216
232
  dumpStackJson,
217
233
  traceFormatProfile,
218
- decodeStageName: '风险调用栈数据分析',
219
- missingInputMessage: '[风险调用栈数据分析] 输入文件缺失,跳过处理',
234
+ decodeStageName: "风险调用栈数据分析",
235
+ missingInputMessage: "[风险调用栈数据分析] 输入文件缺失,跳过处理",
220
236
  });
221
237
  const resultGroups = {
222
238
  reboot: rebootGroup,
@@ -225,9 +241,9 @@ export function applyOptions(ctx) {
225
241
  collect: collectGroup,
226
242
  analysis: analysisGroup,
227
243
  };
228
- const order = mode === 'reboot-monitor'
229
- ? ['reboot', 'init', 'monitor', 'collect', 'analysis']
230
- : ['init', 'monitor', 'collect', 'analysis'];
244
+ const order = mode === "reboot-monitor"
245
+ ? ["reboot", "init", "monitor", "collect", "analysis"]
246
+ : ["init", "monitor", "collect", "analysis"];
231
247
  return {
232
248
  groups: resultGroups,
233
249
  defaultGroupOrder: order,
@@ -1 +1 @@
1
- {"version":3,"file":"forkall.js","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEzH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,EAAE;IACrD,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE;IAC5C,EAAE,KAAK,EAAE,kCAAkC,EAAE,WAAW,EAAE,UAAU,EAAE;IACtE,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,EAAE;IACjF,EAAE,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE;IACrF;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,iBAAiB;QAC9B,YAAY,EAAE,IAAI;KACnB;IACD;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,qBAAqB;QAClC,YAAY,EAAE,QAAQ;KACvB;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,+BAA+B;QAC5C,YAAY,EAAE,SAAS;KACxB;IACD;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,sBAAsB;QACnC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAA,UAAU;KACnC;IACD;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EAAE,0BAA0B;QACvC,YAAY,EAAE,SAAS;KACxB;CACF,CAAC;AAeF,SAAS,gBAAgB,CAAC,KAIzB;IACC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAClD,IAAI,IAAI,KAAK,gBAAgB;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO;QACL;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,mBAAmB;SACzB;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,sJAAsJ;SAC5J;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,wEAAwE;SAC9E;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,eAAe;YAC5B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,kGAAkG;SAClH;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,UAAU;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,sDAAsD;SACtE;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,cAAc;YAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,uCAAuC,SAAS,4CAA4C;SAC5G;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,YAAY;YACzB,GAAG,EAAE,kFAAkF;SACxF;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,kBAAkB;SACxB;QACD;YACE,IAAI,EAAE,WAAW,CAAC,KAAK;YACvB,WAAW,EAAE,iBAAiB;YAC9B,GAAG,EAAE,WAAW,cAAc,EAAE;SACjC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAS1B;IACC,MAAM,EACJ,SAAS,EACT,GAAG,EACH,MAAM,EACN,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,GAAG,KAAK,CAAC;IACV,OAAO;QACL;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,SAAS;YACtB,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,mCAAmC,MAAM,QAAQ,eAAe,EAAE;SACxE;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,GAAG,EAAE,yBAAyB;YAC9B,YAAY,EAAE;gBACZ,IAAI,EAAE,cAAc;aACrB;SACF;QACD;YACE,IAAI,EAAE,WAAW,CAAC,eAAe;YACjC,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,CAAC,GAAmB,EAAE,EAAE;gBAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAS,cAAc,CAAC,CAAC;gBACpD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;oBACtD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzD,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAC1C,CAAC;SACF;QACD;YACE,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,WAAW,EAAE,UAAU;YACvB,GAAG,EAAE;gBACH,aAAa;gBACb,uCAAuC,UAAU,OAAO,QAAQ,6CAA6C;gBAC7G,SAAS;oBACP,CAAC,CAAC,oBAAoB,SAAS,8GAA8G,QAAQ,KAAK;oBAC1J,CAAC,CAAC,EAAE;gBACN,aAAa;gBACb,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,MAAM,CAAC,CAAC,CAAC,EAAE;gBACnC,GAAG,iBAAiB,KAAK;gBACzB,UAAU;gBACV,qFAAqF;aACtF;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,EAAE,CAAC;SACZ;KACF,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,KAIvC;IACC,MAAM,EACJ,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,GACxB,GAAG,KAAK,CAAC;IACV,OAAO;QACL,GAAG,CAAC,oBAAoB;YACtB,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,WAAW,CAAC,OAAO;oBACzB,WAAW,EAAE,OAAO;oBACpB,GAAG,EAAE,UAAU,uBAAuB,IAAI,gBAAgB,IAAI,gBAAgB,OAAO,oBAAoB,EAAE;iBAC5G;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAI5B;IACC,MAAM,EACJ,SAAS,GAAG,EAAE,EACd,GAAG,GAAG,EAAE,EACR,oBAAoB,GAAG,EAAE,EACzB,MAAM,GAAG,KAAK,EACd,QAAQ,GAAG,IAAI,EACf,cAAc,GAAG,IAAI,EACrB,UAAU,GAAG,QAAQ,EACrB,IAAI,GAAG,SAAS,EAChB,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA,UAAU,EAChC,kBAAkB,GAAG,SAAS,GAC/B,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAEtB,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,iBAAiB,GAAG,wDAAwD,CAAC;IACnF,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7D,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACxE,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,CAAC,CACpE,CAAC;IACF,MAAM,eAAe,GAAG,+DAA+D,GAAG,GAAG,CAAC;IAE9F,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrC,SAAS,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,uBAAuB,CAAC;QAC3C,GAAG;QACH,eAAe;QACf,iBAAiB;QACjB,kBAAkB,EAAE;YAClB,mDAAmD,SAAS,4CAA4C,SAAS,UAAU;SAC5H;KACF,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,iBAAiB,CAAC;QACrC,SAAS;QACT,GAAG;QACH,MAAM;QACN,UAAU;QACV,QAAQ;QACR,eAAe;QACf,eAAe;QACf,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,uBAAuB,CAAC;QAC3C,iBAAiB;QACjB,6BAA6B,EAAE,gBAAgB;QAC/C,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,wBAAwB,CAAC;QAC7C,GAAG;QACH,gBAAgB;QAChB,oBAAoB,EAAE,KAAK;QAC3B,iBAAiB,EAAE,8BAA8B,CAAC;YAChD,oBAAoB;YACpB,gBAAgB;YAChB,uBAAuB;SACxB,CAAC;QACF,WAAW,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;QAChD,YAAY;QACZ,aAAa;QACb,kBAAkB;QAClB,eAAe,EAAE,WAAW;QAC5B,mBAAmB,EAAE,yBAAyB;KAC/C,CAAC,CAAC;IAEH,MAAM,YAAY,GAAW;QAC3B,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,aAAa;KACxB,CAAC;IAEF,MAAM,KAAK,GACT,IAAI,KAAK,gBAAgB;QACvB,CAAC,CAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAc;QACpE,CAAC,CAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAc,CAAC;IAE/D,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,iBAAiB,EAAE,KAAK;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"forkall.js","sourceRoot":"","sources":["../../commands/forkall.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Groups } from '../src/types.js';
1
+ import type { Groups } from "../src/types.js";
2
2
  /**
3
3
  * Mac 示例场景:仅在 macOS 下执行,接收 --app 参数,参数不为空时打印 app。
4
4
  */
@@ -1,4 +1,4 @@
1
- import { CommandKind } from '../src/types.js';
1
+ import { CommandKind } from "../src/types.js";
2
2
  /**
3
3
  * Mac 示例场景:仅在 macOS 下执行,接收 --app 参数,参数不为空时打印 app。
4
4
  */
@@ -6,28 +6,28 @@ export const groups = {
6
6
  info: [
7
7
  {
8
8
  kind: CommandKind.Mac,
9
- description: '[mac-example] 当前系统',
10
- run: 'uname -a',
9
+ description: "[mac-example] 当前系统",
10
+ run: "uname -a",
11
11
  },
12
12
  ],
13
13
  };
14
- export const defaultGroupOrder = ['info', 'app'];
14
+ export const defaultGroupOrder = ["info", "app"];
15
15
  export const options = [
16
- { flags: '--app <app>', description: '应用名,不为空时会打印该参数' },
16
+ { flags: "--app <app>", description: "应用名,不为空时会打印该参数" },
17
17
  ];
18
18
  export function applyOptions(ctx) {
19
19
  const { groups: baseGroups, defaultGroupOrder } = ctx;
20
- const app = ctx.options?.app?.trim() ?? '';
21
- const appGroup = app === ''
20
+ const app = ctx.options?.app?.trim() ?? "";
21
+ const appGroup = app === ""
22
22
  ? []
23
23
  : [
24
24
  {
25
25
  kind: CommandKind.Mac,
26
- description: '[mac-example] 打印 app 参数',
26
+ description: "[mac-example] 打印 app 参数",
27
27
  run: `echo ${app}`,
28
28
  },
29
29
  ];
30
- const order = appGroup.length > 0 ? ['info', 'app'] : ['info'];
30
+ const order = appGroup.length > 0 ? ["info", "app"] : ["info"];
31
31
  return {
32
32
  groups: {
33
33
  ...baseGroups,