@pleger/esa-js 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts ADDED
@@ -0,0 +1,123 @@
1
+ type AdviceKind = "before" | "around" | "after";
2
+
3
+ interface JoinPoint {
4
+ target: unknown;
5
+ fun: unknown;
6
+ name?: string;
7
+ value?: unknown;
8
+ args: unknown[];
9
+ methods: string[];
10
+ finalResult: unknown;
11
+ metaLevel: number;
12
+ ctx?: unknown;
13
+ eventType?: string;
14
+ proceed(...args: unknown[]): unknown;
15
+ clone(): JoinPoint;
16
+ isCall(): boolean;
17
+ isExec(): boolean;
18
+ isInit(): boolean;
19
+ isCreation(): boolean;
20
+ isPropRead(): boolean;
21
+ isPropWrite(): boolean;
22
+ isEvent(): boolean;
23
+ toString(): string;
24
+ }
25
+
26
+ declare class Env {
27
+ constructor(map?: Map<unknown, unknown>);
28
+ bind(key: unknown, value: unknown): Env;
29
+ bind(pair: [unknown, unknown]): Env;
30
+ unbind(...keys: unknown[]): Env;
31
+ get(key: unknown): unknown;
32
+ }
33
+
34
+ type PointcutResult = boolean | Env | unknown;
35
+ type PointcutFn = (jp: JoinPoint, env: Env) => PointcutResult;
36
+ type PointcutLike = Pointcut | PointcutFn;
37
+ type AdviceFn = (jp: JoinPoint, env?: Env) => unknown;
38
+ type StrategyPredicate = boolean | ((jp: JoinPoint) => boolean);
39
+ type ScopingStrategy = [StrategyPredicate, StrategyPredicate, StrategyPredicate];
40
+
41
+ interface Pointcut extends PointcutFn {
42
+ and(other: PointcutLike): Pointcut;
43
+ or(other: PointcutLike): Pointcut;
44
+ not(): Pointcut;
45
+ inCFlowOf(other: PointcutLike): Pointcut;
46
+ }
47
+
48
+ interface Aspect {
49
+ kind: AdviceKind;
50
+ pointcut: Pointcut;
51
+ advice: AdviceFn;
52
+ option?: unknown;
53
+ }
54
+
55
+ interface TraceEntry {
56
+ label: string;
57
+ kind: string;
58
+ matched: boolean;
59
+ beforeOrAroundMatches: number;
60
+ afterMatches: number;
61
+ }
62
+
63
+ interface Tracer {
64
+ enable(): void;
65
+ disable(): void;
66
+ reset(): void;
67
+ getEntries(): TraceEntry[];
68
+ dump(): TraceEntry[];
69
+ toJSON(pretty?: boolean): string;
70
+ saveToFile(filePath: string, pretty?: boolean): void;
71
+ }
72
+
73
+ interface PointcutsApi {
74
+ call(fun: unknown): Pointcut;
75
+ exec(fun: unknown): Pointcut;
76
+ init(fun: unknown): Pointcut;
77
+ creation(fun: unknown): Pointcut;
78
+ get(name: string): Pointcut;
79
+ get(target: unknown, name: string): Pointcut;
80
+ set(name: string): Pointcut;
81
+ set(target: unknown, name: string): Pointcut;
82
+ event(type: string): Pointcut;
83
+ cflow(other: PointcutLike): Pointcut;
84
+ within(target: unknown): Pointcut;
85
+ noBR(other: PointcutLike, ctxFn?: (jp: JoinPoint) => unknown): Pointcut;
86
+ }
87
+
88
+ interface AspectScriptRuntime {
89
+ BEFORE: "before";
90
+ AROUND: "around";
91
+ AFTER: "after";
92
+ Pointcuts: PointcutsApi;
93
+ emptyEnv: Env;
94
+ globalObject: unknown;
95
+ tracer: Tracer;
96
+ i13n: Record<string, (...args: unknown[]) => unknown>;
97
+ Env: typeof Env;
98
+
99
+ aspect(kind: AdviceKind, pointcut: PointcutLike, advice: AdviceFn, option?: unknown): Aspect;
100
+ before(pointcut: PointcutLike, advice: AdviceFn, option?: unknown): unknown;
101
+ around(pointcut: PointcutLike, advice: AdviceFn, option?: unknown): unknown;
102
+ after(pointcut: PointcutLike, advice: AdviceFn, option?: unknown): unknown;
103
+
104
+ deploy(aspect: Aspect, thunk?: () => unknown, strategy?: ScopingStrategy): unknown;
105
+ deploy(strategy: ScopingStrategy, aspect: Aspect, thunk?: () => unknown): unknown;
106
+ undeploy(deployment: unknown): void;
107
+ deployOn(aspect: Aspect, target: unknown, strategy?: ScopingStrategy): unknown;
108
+ deployOn(strategy: ScopingStrategy, aspect: Aspect, target: unknown): unknown;
109
+
110
+ up<T>(thunk: () => T): T;
111
+ down<T>(thunk: () => T): T;
112
+ event(type: string, ctx: unknown, block: (...args: unknown[]) => unknown): unknown;
113
+
114
+ createAspectScript(runtimeGlobal?: unknown): AspectScriptRuntime;
115
+ }
116
+
117
+ declare const AspectScript: AspectScriptRuntime;
118
+
119
+ declare global {
120
+ var AspectScript: AspectScriptRuntime;
121
+ }
122
+
123
+ export = AspectScript;