mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
refactor: add better typings for sern event modules
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
import { CommandMeta, CommandModule, Module } from '../types/modules';
|
||||
import { CommandType } from '../structures';
|
||||
import { CommandMeta, CommandModule, CommandModuleDefs, Module } from '../types/modules';
|
||||
|
||||
/**
|
||||
* @since 2.0.0
|
||||
*/
|
||||
export interface ModuleManager {
|
||||
get(id: string): string | undefined;
|
||||
getMetadata(m: Module): CommandMeta;
|
||||
getMetadata(m: Module): CommandMeta|undefined;
|
||||
setMetadata(m: Module, c: CommandMeta): void;
|
||||
set(id: string, path: string): void;
|
||||
getPublishableCommands(): Promise<CommandModule[]>;
|
||||
getByNameCommandType<T extends CommandType>(name: string, commandType: T): Promise<CommandModuleDefs[T]>|undefined;
|
||||
remove(id: string): boolean;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { uniqueId } from '../../../handler/id';
|
||||
import { CoreModuleStore, ModuleManager } from '../../contracts';
|
||||
import { importModule } from '../../module-loading';
|
||||
import { CommandMeta, CommandModule, Module } from '../../types/modules';
|
||||
import { CommandMeta, CommandModule, CommandModuleDefs, Module } from '../../types/modules';
|
||||
import { CommandType } from '../enums';
|
||||
/**
|
||||
* @internal
|
||||
* @since 2.0.0
|
||||
@@ -8,6 +10,15 @@ import { CommandMeta, CommandModule, Module } from '../../types/modules';
|
||||
*/
|
||||
export class DefaultModuleManager implements ModuleManager {
|
||||
constructor(private moduleStore: CoreModuleStore) {}
|
||||
|
||||
getByNameCommandType<T extends CommandType>(name: string, commandType: T) {
|
||||
const id = this.get(`${name}_${uniqueId(commandType)}`);
|
||||
if(!id) {
|
||||
return undefined;
|
||||
}
|
||||
return importModule<CommandModuleDefs[T]>(id);
|
||||
}
|
||||
|
||||
setMetadata(m: Module, c: CommandMeta): void {
|
||||
this.moduleStore.metadata.set(m, c);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ export function init(wrapper: Wrapper) {
|
||||
startReadyEvent(dependencies, getFullPathTree(wrapper.commands, mode))
|
||||
.add(() => {
|
||||
const time = ((performance.now() - startTime) / 1000).toFixed(2);
|
||||
dependencies[0].emit('modulesLoaded');
|
||||
dependencies[0].emit('modulesLoaded' );
|
||||
logger?.info({
|
||||
message: `sern: registered all modules in ${time} s`,
|
||||
});
|
||||
|
||||
@@ -21,7 +21,7 @@ export interface SernEventsMapping {
|
||||
'module.activate': [Payload];
|
||||
error: [Payload];
|
||||
warning: [Payload];
|
||||
'modulesLoaded' : [];
|
||||
'modulesLoaded': [never?];
|
||||
}
|
||||
|
||||
export type Awaitable<T> = PromiseLike<T> | T;
|
||||
|
||||
Reference in New Issue
Block a user