From c09fc6c592e85da71e356a6a4f4d1624a0700257 Mon Sep 17 00:00:00 2001 From: 0t4u <61939142+0t4u@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:32:05 +0000 Subject: [PATCH] feat: plugin helpers --- src/Utils.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Utils.ts b/src/Utils.ts index f6af0eb1..b3be61d3 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,11 +1,20 @@ import { EventEmitter } from 'node:events'; +// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type, @typescript-eslint/no-empty-object-type +interface AnyClass extends Function { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + new(...args: any[]): InstanceType; + prototype: InstanceType; +} +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type AnyFunction = (...args: any) => any; export type Extension = Record; export type Plugin = (instance: T) => Extension; +export const definePlugin = >(plugin: B): B => plugin; + // https://stackoverflow.com/a/58603027 -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function withPlugins any>(Base: TBase) { +export function withPlugins(Base: TBase) { return class ClassWithPlugins extends Base { static plugins: Plugin[]; static plugin>(plugin: T) {