process-worker-executor
Version:
将多进程和多线程封装为统一的 Async/Await 调用方式, 简化 IPC 消息通信的复杂性
81 lines (70 loc) • 2.45 kB
TypeScript
export type Executor = 'Process' | 'Worker'
export interface ExecutorOptions {
/**
* 执行器存活时间(毫秒)。
* 所有任务完成后,经过此时间未新任务则释放资源
* @default 60000 (1分钟)
*/
ttl?: number
/**
* 属性代理筛选器。
* 返回 true 则代理该属性
* @default (prop, value) => true
*/
predicate?: (prop: string, value: unknown) => boolean
/**
* 日志目录路径(需确保有写入权限)
* @remarks 与 `logFile` 同时设置时生效
*/
logPath?: string
/**
* 日志文件名(无需后缀,自动追加 `.txt`)
* @example "log" → 生成 `log.txt`
* @remarks 与 `logPath` 同时设置时生效
*/
logFile?: string
/**
* 代理对象的目标脚本路径(必须为绝对路径)
* @required 当使用 `requireObject()` 时必须指定
*/
scriptPath?: string
/**
* 元数据,可通过 `this._metadata` 在子进程/线程中访问
*/
metedata?: Record<string, unknown>
}
/**
* 异步代理对象类型
* @remarks 所有被代理方法均返回 Promise,支持通过最后一个 `boolean` 参数控制同步/异步模式
*/
export interface AsyncProxy<T> {
/** 终止执行器并释放资源 */
_dispose: () => Promise<void>
/** 原始对象的代理方法 */
[key: string]: (...args: [...unknown[], boolean]) => Promise<unknown>
}
/**
* 为对象创建跨进程/线程代理
* @param object - 需代理的原始对象(需导出对象/函数)
* @param executor - 执行器类型(进程或线程)
* @param options - 配置项(必须提供 `scriptPath`)
* @returns 异步代理对象
*/
declare function requireObject<T extends object>(
object: T,
executor: Executor,
options: ExecutorOptions & { scriptPath: string }
): AsyncProxy<T>
/**
* 加载脚本文件并创建跨进程/线程代理
* @param scriptPath - 脚本绝对路径(需导出对象/函数)
* @param executor - 执行器类型(进程或线程)
* @param options - 配置项(可选提供 `scriptPath`)
* @returns 异步代理对象
*/
declare function requireScript<T extends object>(
scriptPath: string,
executor: Executor,
options?: ExecutorOptions
): AsyncProxy<T>
export { requireObject, requireScript }