Open
Description
Currently, we have a target structure where we differentiate between classes, methods, functions, objects, and object functions.
This requires that during the collection of the targets, we keep track of what kind of sub-target we are currently in.
This can be pretty challenging, especially when properties are dynamically added, as in the following example:
class a {
methodOne() {
this.methodTwo = () => {...}
}
}
Or:
const a = {}
a.methodOne = () => {...}
Or:
const a = {
b: class {}
}
a.b.methodOne = () => {...}
These example show that it is difficult to keep track of what is a class and what is an object during the target discover.
Now since javascript internally uses object for classes anyway we can convert our entire targeting structure to be as follows:
interface Target {
filePath: string;
name: string;
subTargets: SubTarget[];
}
type SubTarget = (ObjectTarget | FunctionTarget) & {
name: string;
renamedTo: string;
default: boolean;
module: boolean;
}
interface ObjectTarget {
id: string
subTargets: SubTarget[]
}
interface FunctionTarget {
id: string
visibility: VisibilityType
functionType: "constructor" | "method" | "get" | "set" | "function"
isStatic: boolean
isAsync: boolean
}