-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfunctionMetadata.ts
More file actions
36 lines (32 loc) · 1.23 KB
/
functionMetadata.ts
File metadata and controls
36 lines (32 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { isAsync } from './isAsync';
import { FunctionMetadata } from '../models/executionFunction.model';
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function extractFunctionParamNames(fn: Function): string[]{
const source = fn.toString();
const paramMatch = source.match(/\(([^)]*)\)/);
const rawParams = paramMatch ? paramMatch[1] : '';
return rawParams
.split(',')
.map((param) => param.trim())
.filter((param) => param);
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function extractFunctionMetadata(fn: Function): FunctionMetadata {
return {
name: fn.name || 'anonymous',
parameters: extractFunctionParamNames(fn),
isAsync: isAsync(fn),
isBound: fn.name.startsWith('bound ')
// source,
};
}
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function extractClassMethodMetadata(className: string, methodName: string | symbol, fn: Function): FunctionMetadata {
const functionMetadata = extractFunctionMetadata(fn);
return {
class: className,
method: methodName,
methodSignature: `${className}.${methodName?.toString()}(${functionMetadata.parameters.join(',')})`,
...functionMetadata
};
}