export type Constructor = new (...args: any[]) => T; export type Listener = (...args: any[]) => void; export type DeepKeyOf = { [K in Extract]: O[K] extends Array ? K : O[K] extends Record ? `${K}` | `${K}.${DeepKeyOf}` : K; }[Extract]; export type DeepGet = P extends `${infer Key}.${infer Rest}` ? Key extends keyof O | `${bigint}` ? DeepGet : never : P extends keyof O | `${bigint}` ? O[P & keyof O] : never; export type ComponentEventsType = "*" | "attachPlugins" | "detachPlugins"; export type PluginEventsType = "*";