@xihe-lab/tapd-cli 2.0.0-rc.5 → 2.0.0-rc.7

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 (71) hide show
  1. package/LICENSE +16 -4
  2. package/README.md +13 -1
  3. package/package.json +7 -4
  4. package/dist/advisor/domain-axis.test.d.ts +0 -2
  5. package/dist/advisor/domain-axis.test.d.ts.map +0 -1
  6. package/dist/advisor/domain-axis.test.js +0 -198
  7. package/dist/advisor/domain-axis.test.js.map +0 -1
  8. package/dist/flags.test.d.ts +0 -2
  9. package/dist/flags.test.d.ts.map +0 -1
  10. package/dist/flags.test.js +0 -56
  11. package/dist/flags.test.js.map +0 -1
  12. package/dist/output/formatter.test.d.ts +0 -2
  13. package/dist/output/formatter.test.d.ts.map +0 -1
  14. package/dist/output/formatter.test.js +0 -170
  15. package/dist/output/formatter.test.js.map +0 -1
  16. package/dist/pipeline/engine.test.d.ts +0 -2
  17. package/dist/pipeline/engine.test.d.ts.map +0 -1
  18. package/dist/pipeline/engine.test.js +0 -419
  19. package/dist/pipeline/engine.test.js.map +0 -1
  20. package/dist/pipeline/expression.test.d.ts +0 -2
  21. package/dist/pipeline/expression.test.d.ts.map +0 -1
  22. package/dist/pipeline/expression.test.js +0 -111
  23. package/dist/pipeline/expression.test.js.map +0 -1
  24. package/dist/pipeline/record.test.d.ts +0 -2
  25. package/dist/pipeline/record.test.d.ts.map +0 -1
  26. package/dist/pipeline/record.test.js +0 -109
  27. package/dist/pipeline/record.test.js.map +0 -1
  28. package/dist/pipeline/template.test.d.ts +0 -2
  29. package/dist/pipeline/template.test.d.ts.map +0 -1
  30. package/dist/pipeline/template.test.js +0 -94
  31. package/dist/pipeline/template.test.js.map +0 -1
  32. package/dist/pipeline/unwrap.test.d.ts +0 -2
  33. package/dist/pipeline/unwrap.test.d.ts.map +0 -1
  34. package/dist/pipeline/unwrap.test.js +0 -36
  35. package/dist/pipeline/unwrap.test.js.map +0 -1
  36. package/dist/pipeline/validate.test.d.ts +0 -2
  37. package/dist/pipeline/validate.test.d.ts.map +0 -1
  38. package/dist/pipeline/validate.test.js +0 -166
  39. package/dist/pipeline/validate.test.js.map +0 -1
  40. package/dist/pm/discovery.test.d.ts +0 -2
  41. package/dist/pm/discovery.test.d.ts.map +0 -1
  42. package/dist/pm/discovery.test.js +0 -147
  43. package/dist/pm/discovery.test.js.map +0 -1
  44. package/dist/pm/domains.test.d.ts +0 -2
  45. package/dist/pm/domains.test.d.ts.map +0 -1
  46. package/dist/pm/domains.test.js +0 -141
  47. package/dist/pm/domains.test.js.map +0 -1
  48. package/dist/pm/iteration.test.d.ts +0 -2
  49. package/dist/pm/iteration.test.d.ts.map +0 -1
  50. package/dist/pm/iteration.test.js +0 -125
  51. package/dist/pm/iteration.test.js.map +0 -1
  52. package/dist/pm/pm-command.test.d.ts +0 -2
  53. package/dist/pm/pm-command.test.d.ts.map +0 -1
  54. package/dist/pm/pm-command.test.js +0 -321
  55. package/dist/pm/pm-command.test.js.map +0 -1
  56. package/dist/pm/tpl-communication-stakeholder.test.d.ts +0 -2
  57. package/dist/pm/tpl-communication-stakeholder.test.d.ts.map +0 -1
  58. package/dist/pm/tpl-communication-stakeholder.test.js +0 -392
  59. package/dist/pm/tpl-communication-stakeholder.test.js.map +0 -1
  60. package/dist/pm/tpl-integration-scope.test.d.ts +0 -2
  61. package/dist/pm/tpl-integration-scope.test.d.ts.map +0 -1
  62. package/dist/pm/tpl-integration-scope.test.js +0 -387
  63. package/dist/pm/tpl-integration-scope.test.js.map +0 -1
  64. package/dist/pm/tpl-quality-risk.test.d.ts +0 -2
  65. package/dist/pm/tpl-quality-risk.test.d.ts.map +0 -1
  66. package/dist/pm/tpl-quality-risk.test.js +0 -414
  67. package/dist/pm/tpl-quality-risk.test.js.map +0 -1
  68. package/dist/pm/tpl-schedule-cost.test.d.ts +0 -2
  69. package/dist/pm/tpl-schedule-cost.test.d.ts.map +0 -1
  70. package/dist/pm/tpl-schedule-cost.test.js +0 -376
  71. package/dist/pm/tpl-schedule-cost.test.js.map +0 -1
@@ -1,419 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { z } from 'zod';
3
- import { ToolRegistry } from '@xihe-lab/tapd-core';
4
- import { buildPreview, runPipeline } from './engine.js';
5
- import { PipelineError } from './types.js';
6
- import { parseTemplate } from './template.js';
7
- function makeRegistry() {
8
- const executed = [];
9
- const peakActive = { value: 0 };
10
- const active = { value: 0 };
11
- const track = (name, fn) => {
12
- active.value++;
13
- peakActive.value = Math.max(peakActive.value, active.value);
14
- return fn()
15
- .then(result => {
16
- executed.push(name);
17
- return result;
18
- })
19
- .finally(() => {
20
- active.value--;
21
- });
22
- };
23
- const tools = [
24
- {
25
- name: 'tapd_get_stories',
26
- description: 'read: 按 iteration_id 拉需求(返回计数)',
27
- inputSchema: z.object({ iteration_id: z.string().optional(), limit: z.number().optional(), fields: z.string().optional() }),
28
- handler: (_client, params) => track('tapd_get_stories', () => Promise.resolve({
29
- count: params.limit ?? 3,
30
- iteration: params.iteration_id ?? 'unset',
31
- })),
32
- },
33
- {
34
- name: 'tapd_get_bugs',
35
- description: 'read: 拉缺陷(返回固定数组)',
36
- inputSchema: z.object({ status: z.string().optional(), fields: z.string().optional() }),
37
- handler: () => track('tapd_get_bugs', () => Promise.resolve([
38
- { id: 'b1', title: 'bug-1', current_owner: '' },
39
- { id: 'b2', title: 'zzz-delete-me', current_owner: '' },
40
- { id: 'b3', title: 'bug-3', current_owner: 'qa' },
41
- ])),
42
- },
43
- {
44
- name: 'tapd_update_story',
45
- description: 'write: 状态扭转',
46
- write: true,
47
- inputSchema: z.object({ id: z.string(), status: z.string().optional() }),
48
- handler: (_client, params) => track('tapd_update_story', () => Promise.resolve({ patched: params })),
49
- },
50
- {
51
- name: 'tapd_boom',
52
- description: 'write: 必失败的写步骤',
53
- write: true,
54
- inputSchema: z.object({}),
55
- handler: () => track('tapd_boom', () => Promise.reject(new Error('TAPD API error: mock down'))),
56
- },
57
- ];
58
- const registry = new ToolRegistry();
59
- registry.register(tools);
60
- return { registry, executed, peakActive };
61
- }
62
- function clientFactory() {
63
- return {}; // mock handler 不触达 client
64
- }
65
- function tpl(yaml) {
66
- return parseTemplate(yaml, 'inline');
67
- }
68
- const nodesOf = (t, registry) =>
69
- // planWaves 接收 StepNode[];测试经由 buildPreview 间接构造,保持单一构建路径
70
- buildPreview(t, registry, {});
71
- const checks = [
72
- ['planWaves: 无依赖步骤同波次,依赖串行排后', () => {
73
- const t = tpl(`
74
- name: waves
75
- write: false
76
- steps:
77
- - id: a
78
- uses: tapd_get_stories
79
- args: { iteration_id: "1" }
80
- - id: b
81
- uses: tapd_get_bugs
82
- - id: c
83
- uses: tapd_update_story
84
- args: { id: "${'$'}{steps.a.data.count}" }
85
- depends_on: [a, b]
86
- `);
87
- const preview = nodesOf(t, makeRegistry().registry);
88
- const waves = [...new Set(preview.map(p => p.wave))].sort();
89
- assert.deepEqual(waves, [0, 1]);
90
- assert.deepEqual(preview.filter(p => p.wave === 0).map(p => p.id).sort(), ['a', 'b']);
91
- assert.deepEqual(preview.filter(p => p.wave === 1).map(p => p.id), ['c']);
92
- assert.equal(preview.find(p => p.id === 'c').write, true);
93
- }],
94
- ['planWaves: 循环依赖 → DEPENDENCY_CYCLE', () => {
95
- const t = tpl(`
96
- name: cycle
97
- write: false
98
- steps:
99
- - id: a
100
- uses: tapd_get_stories
101
- args: { id: "${'$'}{steps.b.data}" }
102
- - id: b
103
- uses: tapd_get_stories
104
- args: { id: "${'$'}{steps.a.data}" }
105
- `);
106
- assert.throws(() => buildPreview(t, makeRegistry().registry, {}), (error) => error instanceof PipelineError && error.code === 'DEPENDENCY_CYCLE');
107
- }],
108
- ['runPipeline: 纯只读模板直接执行,无需 --yes', async () => {
109
- const fx = makeRegistry();
110
- const t = tpl(`
111
- name: read-only
112
- write: false
113
- steps:
114
- - id: stories
115
- uses: tapd_get_stories
116
- args: { iteration_id: "1001" }
117
- `);
118
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory });
119
- assert.equal(summary.ok, true);
120
- assert.equal(summary.dryRun, false);
121
- assert.equal(summary.gateBlocked, false);
122
- assert.deepEqual(fx.executed, ['tapd_get_stories']);
123
- assert.deepEqual(summary.steps.map(s => s.status), ['ok']);
124
- }],
125
- ['写闸门: 含写步骤未 --yes → 拒绝执行 + 预览 + gateBlocked', async () => {
126
- const fx = makeRegistry();
127
- const t = tpl(`
128
- name: gated
129
- write: true
130
- steps:
131
- - id: fetch
132
- uses: tapd_get_stories
133
- args: { iteration_id: "1001" }
134
- - id: patch
135
- uses: tapd_update_story
136
- args: { id: "123", status: developing }
137
- depends_on: [fetch]
138
- `);
139
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory });
140
- assert.equal(summary.ok, false);
141
- assert.equal(summary.gateBlocked, true);
142
- assert.equal(summary.dryRun, true);
143
- assert.deepEqual(fx.executed, [], '写闸门下任何步骤都不得执行');
144
- assert.equal(summary.preview?.length, 2);
145
- const patch = summary.preview?.find(p => p.id === 'patch');
146
- assert.ok(patch);
147
- assert.equal(patch.write, true);
148
- assert.deepEqual(patch.args, { id: '123', status: 'developing' });
149
- assert.ok(summary.report.includes('write gate'));
150
- assert.ok(summary.report.includes('[write]'));
151
- }],
152
- ['写闸门: --yes 放行,写步骤真实执行', async () => {
153
- const fx = makeRegistry();
154
- const t = tpl(`
155
- name: gated-yes
156
- write: true
157
- steps:
158
- - id: patch
159
- uses: tapd_update_story
160
- args: { id: "123", status: developing }
161
- `);
162
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, yes: true });
163
- assert.equal(summary.ok, true);
164
- assert.equal(summary.gateBlocked, false);
165
- assert.deepEqual(fx.executed, ['tapd_update_story']);
166
- }],
167
- ['--dry-run: 只读模板也只出预览不执行', async () => {
168
- const fx = makeRegistry();
169
- const t = tpl(`
170
- name: explicit-dry
171
- write: false
172
- steps:
173
- - id: bugs
174
- uses: tapd_get_bugs
175
- `);
176
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, dryRun: true });
177
- assert.equal(summary.ok, true, '显式 --dry-run 是合法请求,退出码应为 0');
178
- assert.equal(summary.dryRun, true);
179
- assert.equal(summary.gateBlocked, false);
180
- assert.deepEqual(fx.executed, []);
181
- assert.equal(summary.preview?.[0].id, 'bugs');
182
- }],
183
- ['变量注入: --input 覆盖模板 vars,步骤参数取到注入值', async () => {
184
- const fx = makeRegistry();
185
- const t = tpl(`
186
- name: vars-inject
187
- write: false
188
- vars:
189
- iteration_id: "template-default"
190
- limit: 1
191
- steps:
192
- - id: stories
193
- uses: tapd_get_stories
194
- args:
195
- iteration_id: "${'$'}{vars.iteration_id}"
196
- limit: "${'$'}{vars.limit}"
197
- `);
198
- const summary = await runPipeline(t, {
199
- registry: fx.registry,
200
- clientFactory,
201
- vars: { iteration_id: 'from-input', limit: 9 },
202
- });
203
- assert.equal(summary.ok, true);
204
- const outcome = summary.steps[0];
205
- assert.deepEqual(JSON.parse(JSON.stringify(outcome.data)), { count: 9, iteration: 'from-input' });
206
- }],
207
- ['步骤引用: 后续步骤消费前序输出,filter 生效', async () => {
208
- const fx = makeRegistry();
209
- const t = tpl(`
210
- name: chained
211
- write: false
212
- steps:
213
- - id: bugs
214
- uses: tapd_get_bugs
215
- filter: "!item.title.startsWith('zzz-delete-me')"
216
- - id: summary
217
- expr: "({ unassigned: steps.bugs.data.filter(b => !b.current_owner).length, total: steps.bugs.data.length })"
218
- depends_on: [bugs]
219
- `);
220
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory });
221
- assert.equal(summary.ok, true);
222
- assert.equal(summary.steps[0].data.length, 2, 'zzz-delete-me 被过滤');
223
- assert.deepEqual(JSON.parse(JSON.stringify(summary.steps[1].data)), { unassigned: 1, total: 2 });
224
- }],
225
- ['where: 表达式为假时跳过且不执行工具', async () => {
226
- const fx = makeRegistry();
227
- const t = tpl(`
228
- name: where-skip
229
- write: false
230
- steps:
231
- - id: bugs
232
- uses: tapd_get_bugs
233
- - id: patch
234
- uses: tapd_update_story
235
- args: { id: "x" }
236
- where: "steps.bugs.data.length > 999"
237
- depends_on: [bugs]
238
- `);
239
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, yes: true });
240
- assert.equal(summary.ok, true, 'where 跳过不算失败');
241
- assert.equal(summary.steps[1].status, 'skipped');
242
- assert.equal(summary.steps[1].skipReason, 'where');
243
- assert.deepEqual(fx.executed, ['tapd_get_bugs']);
244
- }],
245
- ['并发: 无依赖步骤同波次并行(峰值活跃数 > 1)', async () => {
246
- const fx = makeRegistry();
247
- const t = tpl(`
248
- name: parallel
249
- write: false
250
- steps:
251
- - id: a
252
- uses: tapd_get_stories
253
- args: { iteration_id: "1" }
254
- - id: b
255
- uses: tapd_get_bugs
256
- `);
257
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory });
258
- assert.equal(summary.ok, true);
259
- assert.ok(fx.peakActive.value >= 2, `期望两个步骤并发,峰值活跃=${fx.peakActive.value}`);
260
- }],
261
- ['失败中止: 步骤失败 → 下游依赖跳过,独立步骤照常完成,ok=false', async () => {
262
- const fx = makeRegistry();
263
- const t = tpl(`
264
- name: fail-fast
265
- write: true
266
- steps:
267
- - id: boom
268
- uses: tapd_boom
269
- - id: patch
270
- uses: tapd_update_story
271
- args: { id: "1" }
272
- depends_on: [boom]
273
- - id: after
274
- uses: tapd_get_stories
275
- `);
276
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, yes: true });
277
- assert.equal(summary.ok, false);
278
- const boom = summary.steps.find(s => s.id === 'boom');
279
- assert.equal(boom.status, 'failed');
280
- assert.match(boom.error.message, /mock down/);
281
- const patch = summary.steps.find(s => s.id === 'patch');
282
- assert.equal(patch.status, 'skipped');
283
- assert.equal(patch.skipReason, 'pipeline-failed');
284
- assert.equal(summary.steps.find(s => s.id === 'after').status, 'ok', '无依赖的独立步骤不受兄弟失败影响');
285
- assert.deepEqual([...fx.executed].sort(), ['tapd_get_stories'], 'executed 只记成功执行');
286
- assert.ok(!fx.executed.includes('tapd_update_story'), '下游写步骤不得执行');
287
- }],
288
- ['readOnly: 传入 ExecContext.readOnly,registry 拦截写步骤', async () => {
289
- const fx = makeRegistry();
290
- const t = tpl(`
291
- name: ro-block
292
- write: true
293
- steps:
294
- - id: patch
295
- uses: tapd_update_story
296
- args: { id: "1", status: developing }
297
- `);
298
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, yes: true, readOnly: true });
299
- assert.equal(summary.ok, false);
300
- const patch = summary.steps[0];
301
- assert.equal(patch.status, 'failed');
302
- assert.match(patch.error.message, /READ_ONLY_BLOCKED/);
303
- }],
304
- ['事件流: JSONL 覆盖 pipeline/step 全生命周期(执行与跳过路径)', async () => {
305
- const fx = makeRegistry();
306
- const captured = [];
307
- const t = tpl(`
308
- name: events-demo
309
- write: false
310
- steps:
311
- - id: bugs
312
- uses: tapd_get_bugs
313
- - id: skipped
314
- uses: tapd_update_story
315
- args: { id: "x" }
316
- where: "false"
317
- depends_on: [bugs]
318
- `);
319
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory, yes: true, eventsPath: '/tmp/x.jsonl' }, (path, content) => captured.push({ path, content }));
320
- assert.equal(summary.ok, true);
321
- assert.equal(captured.length, 1);
322
- assert.equal(captured[0].path, '/tmp/x.jsonl');
323
- const events = captured[0].content.trimEnd().split('\n').map(l => JSON.parse(l));
324
- assert.deepEqual(events.map(e => e.event), ['pipeline.start', 'step.start', 'step.end', 'step.skip', 'pipeline.end']);
325
- assert.equal(events[2].step, 'bugs');
326
- assert.equal(events[3].step, 'skipped');
327
- assert.equal(events[3].skipReason, 'where');
328
- assert.ok(events.every(e => e.pipeline === 'events-demo'));
329
- }],
330
- ['事件流: 写闸门路径输出 dry-run 事件', async () => {
331
- const fx = makeRegistry();
332
- const captured = [];
333
- const t = tpl(`
334
- name: gate-events
335
- write: true
336
- steps:
337
- - id: patch
338
- uses: tapd_update_story
339
- args: { id: "1" }
340
- `);
341
- await runPipeline(t, { registry: fx.registry, clientFactory, eventsPath: 'gate.jsonl' }, (path, content) => captured.push({ path, content }));
342
- const events = captured[0].content.trimEnd().split('\n').map(l => JSON.parse(l));
343
- assert.equal(events[0].event, 'pipeline.dry-run');
344
- assert.equal(events[1].event, 'step.skip');
345
- assert.equal(events[1].skipReason, 'dry-run');
346
- assert.equal(events.at(-1).event, 'pipeline.gate-blocked');
347
- assert.deepEqual(fx.executed, []);
348
- }],
349
- ['report: 模板 report.template 插值渲染(含 rows 过滤器)', async () => {
350
- const fx = makeRegistry();
351
- const t = tpl(`
352
- name: report-demo
353
- write: false
354
- steps:
355
- - id: bugs
356
- uses: tapd_get_bugs
357
- report:
358
- format: markdown
359
- template: |
360
- # 缺陷
361
- 总数 ${'$'}{steps.bugs.data | length}
362
- ${'$'}{steps.bugs.data | rows id,title}
363
- `);
364
- const summary = await runPipeline(t, { registry: fx.registry, clientFactory });
365
- assert.match(summary.report, /# 缺陷/);
366
- assert.match(summary.report, /总数 3/);
367
- assert.match(summary.report, /\| b1 \| bug-1 \|/);
368
- }],
369
- ['defaultArgs: workspace_id 兜底注入,步骤显式值优先', async () => {
370
- const seen = [];
371
- const registry = new ToolRegistry();
372
- registry.register([
373
- {
374
- name: 'tapd_probe',
375
- description: 'capture args',
376
- inputSchema: z.object({ workspace_id: z.number().optional() }),
377
- handler: (_c, params) => {
378
- seen.push(params.workspace_id);
379
- return Promise.resolve('ok');
380
- },
381
- },
382
- ]);
383
- const t = tpl(`
384
- name: default-args
385
- write: false
386
- steps:
387
- - id: p1
388
- uses: tapd_probe
389
- - id: p2
390
- uses: tapd_probe
391
- args: { workspace_id: 42 }
392
- `);
393
- const summary = await runPipeline(t, {
394
- registry,
395
- clientFactory,
396
- defaultArgs: { workspace_id: 39814312 },
397
- });
398
- assert.equal(summary.ok, true);
399
- assert.deepEqual(seen, [39814312, 42]);
400
- }],
401
- ];
402
- let failed = 0;
403
- for (const [name, fn] of checks) {
404
- try {
405
- await fn();
406
- console.log(`ok - ${name}`);
407
- }
408
- catch (error) {
409
- failed++;
410
- console.error(`FAIL - ${name}`);
411
- console.error(error);
412
- }
413
- }
414
- if (failed > 0) {
415
- console.error(`\n${failed}/${checks.length} failed`);
416
- process.exit(1);
417
- }
418
- console.log(`\n${checks.length}/${checks.length} passed`);
419
- //# sourceMappingURL=engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/pipeline/engine.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=expression.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/expression.test.ts"],"names":[],"mappings":""}
@@ -1,111 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { checkExprSyntax, evalExprStep, evalFilter, evalRef, evalWhere, extractStepRefs, interpolate, interpolateForPreview, isDeferredStepRef, } from './expression.js';
3
- import { PipelineError } from './types.js';
4
- const ctx = {
5
- vars: { iteration_id: '1001', owners: ['alice', 'bob'], nested: { a: { b: 'c' } } },
6
- steps: {
7
- stories: { data: [{ id: '1', name: 's1' }, { id: '2', name: 'zzz-delete-me' }] },
8
- stats: { data: { total: 2 } },
9
- },
10
- };
11
- const checks = [
12
- ['evalRef: vars 取值', () => {
13
- assert.equal(evalRef('vars.iteration_id', ctx), '1001');
14
- }],
15
- ['evalRef: steps → step → data → 数组下标 → 字段', () => {
16
- assert.equal(evalRef('steps.stories.data.0.id', ctx), '1');
17
- assert.equal(evalRef('steps.stats.data.total', ctx), 2);
18
- }],
19
- ['evalRef: 缺失路径返回 undefined 而非抛错', () => {
20
- assert.equal(evalRef('vars.nope', ctx), undefined);
21
- assert.equal(evalRef('steps.stories.data.9.id', ctx), undefined);
22
- }],
23
- ['evalRef: 非 vars/steps 开头 → EXPR_ERROR', () => {
24
- assert.throws(() => evalRef('item.name', ctx), (error) => error instanceof PipelineError && error.code === 'EXPR_ERROR');
25
- }],
26
- ['interpolate: 整串 ${...} 保留原生类型(数字/数组/对象)', () => {
27
- assert.deepEqual(interpolate('${vars.owners}', ctx), ['alice', 'bob']);
28
- assert.deepEqual(interpolate('${steps.stats.data}', ctx), { total: 2 });
29
- }],
30
- ['interpolate: 嵌入式插值按字符串拼接', () => {
31
- assert.equal(interpolate('迭代 ${vars.iteration_id} 共 ${steps.stats.data.total} 条', ctx), '迭代 1001 共 2 条');
32
- assert.equal(interpolate('缺失=${vars.nope}!', ctx), '缺失=!');
33
- }],
34
- ['interpolate: 深遍历对象与数组', () => {
35
- assert.deepEqual(interpolate({ a: ['${vars.iteration_id}'], b: { c: '${steps.stats.data.total}' } }, ctx), {
36
- a: ['1001'],
37
- b: { c: 2 },
38
- });
39
- }],
40
- ['filters: length / count / json / join / keys', () => {
41
- assert.equal(evalRef('steps.stories.data | length', ctx), 2);
42
- assert.equal(evalRef('steps.stories.data | count', ctx), 2);
43
- assert.equal(evalRef('steps.stats.data | json', ctx), '{\n "total": 2\n}');
44
- assert.equal(evalRef('vars.owners | join "、"', ctx), 'alice、bob');
45
- assert.deepEqual(evalRef('steps.stats.data | keys', ctx), ['total']);
46
- }],
47
- ['filters: rows 渲染 markdown 表格行并转义管道符', () => {
48
- const rows = evalRef('steps.stories.data | rows id,name', ctx);
49
- assert.equal(rows, '| 1 | s1 |\n| 2 | zzz-delete-me |');
50
- const escaped = evalRef('vars.piped | rows x', { vars: { piped: [{ x: 'a|b' }] }, steps: {} });
51
- assert.equal(escaped, '| a\\|b |');
52
- }],
53
- ['filters: 未知过滤器 → EXPR_ERROR', () => {
54
- assert.throws(() => evalRef('steps.stats.data | bogus', ctx), (error) => error instanceof PipelineError && error.code === 'EXPR_ERROR');
55
- }],
56
- ['extractStepRefs: 收集 args/where/filter 中的步骤引用(去重)', () => {
57
- assert.deepEqual(extractStepRefs({ id: '${steps.a.data.0.id}', flag: 'steps.a.data.length > 0' }), ['a']);
58
- assert.deepEqual(extractStepRefs('steps.b.data.length > 0 && steps.a.ok'), ['b', 'a']);
59
- assert.deepEqual(extractStepRefs('${vars.x}'), []);
60
- }],
61
- ['evalWhere: 布尔上下文与 today 变量', () => {
62
- assert.equal(evalWhere('steps.stories.data.length > 1', ctx), true);
63
- assert.equal(evalWhere('vars.iteration_id == "1001" && today.length === 10', ctx), true);
64
- assert.equal(evalWhere('false', ctx), false);
65
- }],
66
- ['evalFilter: item/index 上下文逐项过滤', () => {
67
- const kept = evalFilter("!item.name.startsWith('zzz-delete-me')", ctx.steps.stories.data, ctx);
68
- assert.deepEqual(kept, [{ id: '1', name: 's1' }]);
69
- assert.deepEqual(evalFilter('index > 0', [1, 2, 3], ctx), [2, 3]);
70
- }],
71
- ['evalExprStep: 本地计算(map/reduce/对象字面量)', () => {
72
- const out = evalExprStep('({ sum: steps.stories.data.length + 1, names: steps.stories.data.map(i => i.id) })', ctx);
73
- // vm 独立 realm 产出的对象原型不同,用 JSON 回环做结构断言
74
- assert.deepEqual(JSON.parse(JSON.stringify(out)), { sum: 3, names: ['1', '2'] });
75
- }],
76
- ['evalExprStep: 非法表达式 → EXPR_ERROR', () => {
77
- assert.throws(() => evalExprStep(')not js(', ctx), (error) => error instanceof PipelineError && error.code === 'EXPR_ERROR');
78
- }],
79
- ['checkExprSyntax: 语法错误被捕获且不执行', () => {
80
- checkExprSyntax('a === b && c(1)', true); // 合法,不抛
81
- assert.throws(() => checkExprSyntax('a ===', true), PipelineError);
82
- }],
83
- ['isDeferredStepRef: 整串 steps 引用识别', () => {
84
- assert.equal(isDeferredStepRef('${steps.a.data.0.id}'), true);
85
- assert.equal(isDeferredStepRef('${steps.a.data | json}'), true);
86
- assert.equal(isDeferredStepRef('${vars.x}'), false);
87
- assert.equal(isDeferredStepRef('prefix ${steps.a.data} suffix'), false);
88
- }],
89
- ['interpolateForPreview: 步骤引用保留原表达式,vars 正常解析', () => {
90
- assert.equal(interpolateForPreview('${steps.a.data.0.id}', { vars: {}, steps: {} }), '${steps.a.data.0.id}');
91
- assert.equal(interpolateForPreview('${vars.iteration_id}', ctx), '1001');
92
- }],
93
- ];
94
- let failed = 0;
95
- for (const [name, fn] of checks) {
96
- try {
97
- await fn();
98
- console.log(`ok - ${name}`);
99
- }
100
- catch (error) {
101
- failed++;
102
- console.error(`FAIL - ${name}`);
103
- console.error(error);
104
- }
105
- }
106
- if (failed > 0) {
107
- console.error(`\n${failed}/${checks.length} failed`);
108
- process.exit(1);
109
- }
110
- console.log(`\n${checks.length}/${checks.length} passed`);
111
- //# sourceMappingURL=expression.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expression.test.js","sourceRoot":"","sources":["../../src/pipeline/expression.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EACL,eAAe,EACf,YAAY,EACZ,UAAU,EACV,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;IACnF,KAAK,EAAE;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE;QAChF,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;KAC9B;CACF,CAAC;AAEF,MAAM,MAAM,GAA2C;IACrD,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC,CAAC;IACF,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;IACF,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC;IACF,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAC/B,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAClF,CAAC;QACJ,CAAC,CAAC;IACF,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,qBAAqB,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC;IACF,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,uDAAuD,EAAE,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;YACzG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC;IACF,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,2BAA2B,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;gBACzG,CAAC,EAAE,CAAC,MAAM,CAAC;gBACX,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;aACZ,CAAC,CAAC;QACL,CAAC,CAAC;IACF,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC;IACF,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,mCAAmC,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/F,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrC,CAAC,CAAC;IACF,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAC9C,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAClF,CAAC;QACJ,CAAC,CAAC;IACF,CAAC,kDAAkD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1G,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,uCAAuC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC;IACF,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,+BAA+B,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,oDAAoD,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACzF,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC;IACF,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACtC,MAAM,IAAI,GAAG,UAAU,CAAC,wCAAwC,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/F,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC;IACF,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,oFAAoF,EAAE,GAAG,CAAC,CAAC;YACpH,uCAAuC;YACvC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;IACF,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,EACnC,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAClF,CAAC;QACJ,CAAC,CAAC;IACF,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACpC,eAAe,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ;YAClD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC,CAAC;IACF,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,EAAE,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC;IACF,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,sBAAsB,CAAC,CAAC;YAC7G,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC,CAAC;CACH,CAAC;AAEF,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=record.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"record.test.d.ts","sourceRoot":"","sources":["../../src/pipeline/record.test.ts"],"names":[],"mappings":""}