-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.d.ts
104 lines (91 loc) · 2.59 KB
/
index.d.ts
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
* 函数变代码
* @version 1.2.1
* @license MIT
* @link https://github.com/E0SelmY4V/func2code
*/
declare module ".";
/**可以被解析的东西 */
export type Splitable = Function | { toString(...args: any[]): string; };
/**
* 获取 {@link fn|`fn`} 的源代码。
*
* 实际上就是调用 {@link Function.prototype.toString|`Function#toString`}
*/
export function getCode<F extends Splitable>(fn: F): ReturnType<F['toString']>;
/**函数解析出的信息 */
export interface FuncInfo {
/**是否是异步函数 */
isAsync: boolean;
/**是否是箭头函数 */
isArrow: boolean;
/**是否是迭代器函数 */
isGenerator: boolean;
/**是否是 get 访问器函数 */
isGetter: boolean;
/**是否是 set 访问器函数 */
isSetter: boolean;
/**名字 */
name?: string;
/**名字代码 */
nameCode: string;
/**内部代码 */
innerCode: string;
/**参数列表 */
params: string[];
/**导致解析失败的错误。如果此字段不为空,说明解析失败 */
error?: Error;
}
/**解析函数 {@link fn|`fn`} */
export function split(fn: Splitable): FuncInfo;
/**
* 获取 {@link fn|`fn`} 的内部代码
* @example
* function fn() {
* return 1 + 2;
* }
* const code = getInnerCode(fn);
*
* console.log(code); // '\n return 1 + 2;\n'
* @example
* const fn = () => 1 + 2;
* const code = getInnerCode(fn);
*
* console.log(code); // 'return 1 + 2;'
*/
export function getInnerCode(fn: Splitable): string;
/**
* 获取 {@link fn|`fn`} 的参数列表
* @example
* function fn(a, { b = NaN, x: c } = { x: 0 }, [d]=[4]) {
* return a + b + c + d;
* }
* const params = getParams(fn);
*
* console.log(params);
* // [ 'a', '{ b = NaN, x: c } = { x: 0 }', '[d]=[4]' ]
*/
export function getParams(fn: Splitable): string[];
/**
* 获取 {@link fn|`fn`} 的名字代码
* @example
* const obj = {
* ['a' + 'bc']() { return 0; }
* };
* const nameCode = getNameCode(obj.abc);
*
* console.log(nameCode); // 'a' + 'bc'
*/
export function getNameCode(fn: Splitable): string;
/**判断 {@link fn|`fn`} 是否是一个箭头函数 */
export function isArrow(fn: Splitable): boolean;
/**判断 {@link fn|`fn`} 是否是一个迭代器函数 */
export function isGenerator(fn: Splitable): boolean;
/**判断 {@link fn|`fn`} 是否是一个异步函数 */
export function isAsync(fn: Splitable): boolean;
/**判断 {@link fn|`fn`} 是否是一个 get 访问器函数 */
export function isGetter(fn: Splitable): boolean;
/**判断 {@link fn|`fn`} 是否是一个 set 访问器函数 */
export function isSetter(fn: Splitable): boolean;
import * as Imp from '.';
export default Imp;