GoonCord/src/core/plugins/index.ts

56 lines
1.8 KiB
TypeScript
Raw Normal View History

import { PluginInstanceInternal } from "@lib/addons/plugins/types";
2024-02-28 17:59:47 +08:00
2024-07-30 00:18:01 +08:00
interface CorePlugin {
default: PluginInstanceInternal;
preenabled: boolean;
loader: () => PluginInstanceInternal;
}
type CorePluginRecord = Record<string, CorePlugin>;
function makeLazyPlugin(loaderFn: () => any, preenabled = true): CorePlugin {
const container: any = {
loader: () => {
// loaderFn should synchronously require the module
const mod = loaderFn();
// module may be an object with `.default` or the instance directly
const inst = mod && (mod.default ?? mod);
return inst;
},
preenabled,
get default() {
// load and cache the instance on first access
const inst = container.loader();
Object.defineProperty(container, "default", { value: inst, writable: false, enumerable: true });
return inst;
},
};
return container as CorePlugin;
2024-07-30 00:18:01 +08:00
}
// Called from @lib/plugins
export const getCorePlugins = (): CorePluginRecord => ({
"bunny.quickinstall": makeLazyPlugin(() => require("./quickinstall"), true),
"bunny.badges": makeLazyPlugin(() => require("./badges")),
"bunny.notrack": makeLazyPlugin(() => require("./notrack")),
"bunny.fixembed": makeLazyPlugin(() => require("./fixembed")),
2026-09-03 17:14:22 +02:00
"bunny.favouriteanything": makeLazyPlugin(() => require("./favouriteanything")),
"bunny.nodelete": makeLazyPlugin(() => require("./nodelete")),
"bunny.maxverstappen": makeLazyPlugin(() => require("./maxverstappen")),
2026-09-11 08:02:23 +02:00
"bunny.backgroundmusic": makeLazyPlugin(() => require("./CustomBackgroundMusic")),
2026-09-03 17:14:22 +02:00
2024-07-30 00:18:01 +08:00
});
2024-02-28 17:59:47 +08:00
2024-07-30 00:18:01 +08:00
/**
* @internal
*/
export function defineCorePlugin(
instance: PluginInstanceInternal,
): PluginInstanceInternal {
// @ts-expect-error
instance[Symbol.for("bunny.core.plugin")] = true;
return instance;
2024-03-06 01:57:59 +08:00
}