From 3d9d86465d0837cbb8a3d9b7e236c6911fa51d42 Mon Sep 17 00:00:00 2001 From: jun0315 <1072505283@qq.com> Date: Sat, 16 May 2026 23:02:17 +0800 Subject: [PATCH] refactor(browser): type eval helper callbacks --- src/browser/utils.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/browser/utils.ts b/src/browser/utils.ts index 547385901..0326cafdb 100644 --- a/src/browser/utils.ts +++ b/src/browser/utils.ts @@ -2,7 +2,9 @@ * Utility functions for browser operations */ -type EvaluateFunction = (...args: any[]) => unknown; +import type { BrowserEvaluateFunction } from '../types.js'; + +type EvaluateFunction = BrowserEvaluateFunction; function describeJsonError(err: unknown): string { return err instanceof Error ? err.message : String(err); @@ -14,6 +16,10 @@ function describeJsonError(err: unknown): string { * Functions execute in the browser page context, so they cannot close over * Node-side variables. Pass external values as JSON-serializable args instead. */ +export function serializeFunctionForEval( + fn: EvaluateFunction, + args?: readonly [...Args], +): string; export function serializeFunctionForEval(fn: EvaluateFunction, args: readonly unknown[] = []): string { const source = fn.toString().trim(); const isFunctionSource = /^(async\s+)?function[\s(]/.test(source) @@ -59,6 +65,12 @@ export function wrapForEval(js: string): string { return code; } +export function buildEvaluateExpression(input: string, args?: readonly unknown[]): string; +export function buildEvaluateExpression( + input: EvaluateFunction, + args?: readonly [...Args], +): string; +export function buildEvaluateExpression(input: string | EvaluateFunction, args?: readonly unknown[]): string; export function buildEvaluateExpression(input: string | EvaluateFunction, args: readonly unknown[] = []): string { if (typeof input === 'function') { return serializeFunctionForEval(input, args);