feat: 新增 GraphTracer 并重构 ArrayTracer 的初始化方式

- 新增 GraphTracer 及其类型定义,支持图的创建和操作命令
- 重构 ArrayTracer 的 create 函数,使用 walker/commit 模式替代直接的 array 参数,提高灵活性
- 更新类型导出和命令联合类型以包含 GraphTracer
- 调整示例代码以使用新的初始化方式
This commit is contained in:
2026-02-14 01:30:30 +08:00
parent 9d5a46129e
commit 4929ca496b
8 changed files with 160 additions and 7 deletions
+20 -3
View File
@@ -1,15 +1,32 @@
import { getTracerContext } from '../context';
import type { JsonValue } from '../types';
interface ArrayTracerCreateOptions<T extends JsonValue[]> {
interface BaseArrayTracerCreateOptions {
description?: string;
array?: T;
}
interface ArrayTracerCreateOptionsFromArray<
T extends JsonValue[],
> extends BaseArrayTracerCreateOptions {
array: T;
walker?: never;
}
interface ArrayTracerCreateOptionsFromWalker<
T extends JsonValue[],
> extends BaseArrayTracerCreateOptions {
array?: never;
walker: (commit: (item: T[number]) => void) => void;
}
type ArrayTracerCreateOptions<T extends JsonValue[]> =
| ArrayTracerCreateOptionsFromArray<T>
| ArrayTracerCreateOptionsFromWalker<T>;
export const createArrayTracer = <T extends JsonValue[]>(
options: ArrayTracerCreateOptions<T>,
) => {
const { description, array } = options;
const { description, array, walker } = options;
const tracer = crypto.randomUUID();
// 优化:仅维护数组长度作为影子状态,这在 C++/Java 等强类型语言中也极易实现(仅需一个 int 变量)
+33
View File
@@ -0,0 +1,33 @@
import { getTracerContext } from '../context';
import type { GraphTracerGraph } from '../types';
interface GraphTracerCreateOptions {
description?: string;
graph?: GraphTracerGraph;
}
// 不要了,改为 walker/commit 方案
// TODO: 后续我们会添加创建图的辅助函数
// export const createGraphTracerHelper = () => {};
export const createGraphTracer = (options: GraphTracerCreateOptions) => {
const { description, graph } = options;
const tracer = crypto.randomUUID();
const { command } = getTracerContext();
command({
type: 'GraphTracer',
tracer: tracer,
action: 'create',
params: {
description: description ?? 'GraphTracer',
graph: graph ?? {
directed: false,
weighted: false,
nodes: [],
edges: [],
},
},
});
};
+1
View File
@@ -1,3 +1,4 @@
export * from './array-tracer';
export * from './control-tracer';
export * from './graph-tracer';
export * from './log-tracer';