feat: 新增 GraphTracer 并重构 ArrayTracer 的初始化方式
- 新增 GraphTracer 及其类型定义,支持图的创建和操作命令 - 重构 ArrayTracer 的 create 函数,使用 walker/commit 模式替代直接的 array 参数,提高灵活性 - 更新类型导出和命令联合类型以包含 GraphTracer - 调整示例代码以使用新的初始化方式
This commit is contained in:
@@ -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 变量)
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
export * from './array-tracer';
|
||||
export * from './control-tracer';
|
||||
export * from './graph-tracer';
|
||||
export * from './log-tracer';
|
||||
|
||||
Reference in New Issue
Block a user