Parse functions from string

function parseFunction(funcStr: string): (...args: any[]) => any {

if (!funcStr || typeof funcStr !== "string") {

throw new Error("Invalid function string: must be a non-empty string");

}

// Remove comments and normalize whitespace

let cleanStr = funcStr

.replace(/\/\*[\s\S]*?\*\//g, "") // Remove block comments

.replace(/\/\/.*$/gm, "") // Remove line comments

.trim();

if (!cleanStr) {

throw new Error("Invalid function string: empty after cleaning");

}

let match: RegExpMatchArray | null;

try {

// Regular function: function name(params) { body } or function(params) { body }

match = cleanStr.match(

/^(?:async\s+)?function\s*[^()]*\(([^)]*)\)\s*{([\s\S]*)}$/,

);

if (match) {

let params = match[1]

.split(",")

.map((p) => p.trim())

.filter(Boolean);

let body = match[2].trim();

return new Function(...params, body) as (...args: any[]) => any;

}

// Arrow function with braces: (params) => { body }

match = cleanStr.match(/^(?:async\s+)?\(([^)]*)\)\s*=>\s*{([\s\S]*)}$/);

if (match) {

let params = match[1]

.split(",")

.map((p) => p.trim())

.filter(Boolean);

let body = match[2].trim();

return new Function(...params, body) as (...args: any[]) => any;

}

// Arrow function with single parameter and braces: param => { body }

match = cleanStr.match(/^(?:async\s+)?([^=\s(]+)\s*=>\s*{([\s\S]*)}$/);

if (match) {

let param = match[1].trim();

let body = match[2].trim();

return new Function(param, body) as (...args: any[]) => any;

}

// Simple arrow function with parentheses: (params) => expression

match = cleanStr.match(/^(?:async\s+)?\(([^)]*)\)\s*=>\s*(.+)$/);

if (match) {

let params = match[1]

.split(",")

.map((p) => p.trim())

.filter(Boolean);

let expression = match[2].trim();

return new Function(...params, `return (${expression})`) as (

...args: any[]

) => any;

}

// Single parameter arrow function: param => expression

match = cleanStr.match(/^(?:async\s+)?([^=\s(]+)\s*=>\s*(.+)$/);

if (match) {

let param = match[1].trim();

let expression = match[2].trim();

return new Function(param, `return (${expression})`) as (

...args: any[]

) => any;

}

// If no patterns match, throw an error

throw new Error(`Unsupported function format: ${cleanStr}`);

} catch (error) {

if (error instanceof SyntaxError) {

throw new Error(`Invalid function syntax: ${error.message}`);

}

throw new Error(`Failed to create function: ${error.message}`);

}

}