From 76ee9c6edf469a090bf6394dfea97a2b77b39060 Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:34:08 -0500 Subject: [PATCH] Remove module store, manager, and Intializable type --- src/core/_internal.ts | 1 - src/core/contracts/index.ts | 3 +- src/core/contracts/module-manager.ts | 34 ------------- src/core/contracts/module-store.ts | 9 ---- src/core/ioc/container.ts | 8 +-- src/core/structures/index.ts | 1 - src/core/structures/module-store.ts | 11 ---- src/core/structures/services/index.ts | 1 - .../structures/services/module-manager.ts | 51 ------------------- src/handlers/event-utils.ts | 7 ++- src/handlers/ready-event.ts | 11 ++-- src/sern.ts | 35 +++++++------ src/types/ioc.ts | 13 +---- 13 files changed, 27 insertions(+), 158 deletions(-) delete mode 100644 src/core/contracts/module-manager.ts delete mode 100644 src/core/contracts/module-store.ts delete mode 100644 src/core/structures/module-store.ts delete mode 100644 src/core/structures/services/module-manager.ts diff --git a/src/core/_internal.ts b/src/core/_internal.ts index 1e8f203..be7f2a5 100644 --- a/src/core/_internal.ts +++ b/src/core/_internal.ts @@ -5,7 +5,6 @@ export * from './operators'; export * as Files from './module-loading'; export * from './functions'; export { SernError } from './structures/enums'; -export { ModuleStore } from './structures/module-store'; export * as __Services from './structures/services'; export { useContainerRaw } from './ioc/base'; diff --git a/src/core/contracts/index.ts b/src/core/contracts/index.ts index f0eb130..fdd9bc6 100644 --- a/src/core/contracts/index.ts +++ b/src/core/contracts/index.ts @@ -1,6 +1,5 @@ export * from './error-handling'; export * from './logging'; -export * from './module-manager'; -export * from './module-store'; export * from './hooks'; export * from './emitter'; + diff --git a/src/core/contracts/module-manager.ts b/src/core/contracts/module-manager.ts deleted file mode 100644 index 5dbeaee..0000000 --- a/src/core/contracts/module-manager.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { - CommandMeta, - CommandModule, - CommandModuleDefs, - Module, -} from '../../types/core-modules'; -import { CommandType } from '../structures'; - -interface MetadataAccess { - getMetadata(m: Module): CommandMeta | undefined; - setMetadata(m: Module, c: CommandMeta): void; -} - -/** - * @since 2.0.0 - * @internal - direct access to the module manager will be removed in version 4 - */ -export interface ModuleManager extends MetadataAccess { - get(id: string): Module | undefined; - - set(id: string, path: Module): void; - /** - * @deprecated - */ - getPublishableCommands(): CommandModule[]; - - /* - * @deprecated - */ - getByNameCommandType( - name: string, - commandType: T, - ): CommandModuleDefs[T] | undefined; -} diff --git a/src/core/contracts/module-store.ts b/src/core/contracts/module-store.ts deleted file mode 100644 index 90818f8..0000000 --- a/src/core/contracts/module-store.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { CommandMeta, Module } from '../../types/core-modules'; - -/** - * Represents a core module store that stores IDs mapped to file paths. - */ -export interface CoreModuleStore { - commands: Map; - metadata: WeakMap; -} diff --git a/src/core/ioc/container.ts b/src/core/ioc/container.ts index e8c4970..b063aca 100644 --- a/src/core/ioc/container.ts +++ b/src/core/ioc/container.ts @@ -2,7 +2,7 @@ import { Container } from 'iti'; import { Disposable } from '../'; import * as assert from 'node:assert'; import { Subject } from 'rxjs'; -import { __Services, ModuleStore } from '../_internal'; +import { __Services } from '../_internal'; import * as Hooks from './hooks'; import { EventEmitter } from 'node:events'; @@ -24,11 +24,7 @@ export class CoreContainer> extends Container) .add({ '@sern/errors': () => new __Services.DefaultErrorHandling, - '@sern/emitter': () => new EventEmitter({ captureRejections: true }), - '@sern/store': () => new ModuleStore }) - .add(ctx => { - return { '@sern/modules': new __Services.DefaultModuleManager(ctx['@sern/store'])}; - }); + '@sern/emitter': () => new EventEmitter({ captureRejections: true }) }) } isReady() { diff --git a/src/core/structures/index.ts b/src/core/structures/index.ts index 8eeb6f9..64b8755 100644 --- a/src/core/structures/index.ts +++ b/src/core/structures/index.ts @@ -1,5 +1,4 @@ export { CommandType, PluginType, PayloadType, EventType } from './enums'; export * from './context'; export * from './services'; -export * from './module-store'; diff --git a/src/core/structures/module-store.ts b/src/core/structures/module-store.ts deleted file mode 100644 index 49b22c5..0000000 --- a/src/core/structures/module-store.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { CommandMeta, Module } from '../../types/core-modules'; - -/* - * @deprecated - * Version 4.0.0 will internalize this api. Please refrain from using ModuleStore! - * For interacting with modules, use the ModuleManager instead. - */ -export class ModuleStore { - metadata = new WeakMap(); - commands = new Map(); -} diff --git a/src/core/structures/services/index.ts b/src/core/structures/services/index.ts index 3f1d4ab..3074d8f 100644 --- a/src/core/structures/services/index.ts +++ b/src/core/structures/services/index.ts @@ -1,3 +1,2 @@ export * from './error-handling'; export * from './logger'; -export * from './module-manager'; diff --git a/src/core/structures/services/module-manager.ts b/src/core/structures/services/module-manager.ts deleted file mode 100644 index dad2888..0000000 --- a/src/core/structures/services/module-manager.ts +++ /dev/null @@ -1,51 +0,0 @@ -import * as Id from '../../../core/id'; -import { CoreModuleStore, ModuleManager } from '../../contracts'; -import { CommandMeta, CommandModule, CommandModuleDefs, Module } from '../../../types/core-modules'; -import { CommandType } from '../enums'; -/** - * @internal - * @since 2.0.0 - * Version 4.0.0 will internalize this api. Please refrain from using DefaultModuleManager! - */ -export class DefaultModuleManager implements ModuleManager { - constructor(private moduleStore: CoreModuleStore) {} - - - getByNameCommandType(name: string, commandType: T) { - const module = this.get(Id.create(name, commandType)); - if (!module) { - return undefined; - } - return module as CommandModuleDefs[T]; - } - - setMetadata(m: Module, c: CommandMeta): void { - this.moduleStore.metadata.set(m, c); - } - - getMetadata(m: Module): CommandMeta { - const maybeModule = this.moduleStore.metadata.get(m); - if (!maybeModule) { - throw Error('Could not find metadata in store for ' + m); - } - return maybeModule; - } - - get(id: string) { - return this.moduleStore.commands.get(id); - } - set(id: string, path: CommandModule): void { - this.moduleStore.commands.set(id, path); - } - //not tested - getPublishableCommands(): CommandModule[] { - const entries = this.moduleStore.commands.entries(); - const publishable = 0b000000110; - return Array.from(entries) - .filter(([id]) => { - const last_entry = id.at(-1); - return last_entry == 'B' || !(publishable & Number.parseInt(last_entry!)); - }) - .map(([, path]) => path as CommandModule); - } -} diff --git a/src/handlers/event-utils.ts b/src/handlers/event-utils.ts index bd2df77..6eff29f 100644 --- a/src/handlers/event-utils.ts +++ b/src/handlers/event-utils.ts @@ -10,7 +10,6 @@ import { tap, catchError, finalize, - map, } from 'rxjs'; import { Files, @@ -23,7 +22,7 @@ import { VoidResult, resultPayload, } from '../core/_internal'; -import { Emitter, ErrorHandling, Logging, ModuleManager, PayloadType } from '../core'; +import { Emitter, ErrorHandling, Logging, PayloadType } from '../core'; import { contextArgs, createDispatcher } from './dispatchers'; import { ObservableInput, pipe } from 'rxjs'; import { Err, Ok, Result } from 'ts-results-es'; @@ -65,7 +64,7 @@ export function fmt(msg: string, prefix: string): string[] { */ export function createInteractionHandler( source: Observable, - mg: ModuleManager, + mg: any, //TODO ) { return createGenericHandler, void>>( source, @@ -86,7 +85,7 @@ export function createInteractionHandler( export function createMessageHandler( source: Observable, defaultPrefix: string, - mg: ModuleManager, + mg: any, //TODO ) { return createGenericHandler(source, async event => { const [prefix, ...rest] = fmt(event.content, defaultPrefix); diff --git a/src/handlers/ready-event.ts b/src/handlers/ready-event.ts index 12500dc..7be2e7a 100644 --- a/src/handlers/ready-event.ts +++ b/src/handlers/ready-event.ts @@ -1,15 +1,10 @@ import { ObservableInput, concat, first, fromEvent, ignoreElements, pipe, tap } from 'rxjs'; -import { SernError, _Module } from '../core/_internal'; -import { Result } from 'ts-results-es'; -import { Logging, ModuleManager } from '../core/contracts'; -import { buildModules, callInitPlugins } from './_internal'; -import * as assert from 'node:assert'; -import * as util from 'node:util'; +import { _Module } from '../core/_internal'; +import { Logging, } from '../core/contracts'; import type { DependencyList } from '../types/ioc'; -import type { AnyModule, CommandMeta, Processed } from '../types/core-modules'; export function readyHandler( - [sEmitter, , log , moduleManager, client]: DependencyList, + [sEmitter, , log ,, client]: DependencyList, allPaths: ObservableInput, ) { //Todo: add module manager on on ready diff --git a/src/sern.ts b/src/sern.ts index e763942..769c8d2 100644 --- a/src/sern.ts +++ b/src/sern.ts @@ -29,36 +29,35 @@ export function init(maybeWrapper: Wrapper | 'file') { const dependencies = Services('@sern/emitter', '@sern/errors', '@sern/logger', - '@sern/modules', '@sern/client'); const logger = dependencies[2], errorHandler = dependencies[1]; const wrapper = Files.loadConfig(maybeWrapper, logger); if (wrapper.events !== undefined) { - eventsHandler(dependencies, Files.getFullPathTree(wrapper.events)); + //eventsHandler(dependencies, Files.getFullPathTree(wrapper.events)); } const initCallsite = callsites()[1].getFileName(); const presencePath = Files.shouldHandle(initCallsite!, "presence"); //Ready event: load all modules and when finished, time should be taken and logged - readyHandler(dependencies, Files.getFullPathTree(wrapper.commands)) - .add(() => { - logger?.info({ message: "Client signaled ready, registering modules" }); - const time = ((performance.now() - startTime) / 1000).toFixed(2); - dependencies[0].emit('modulesLoaded'); - logger?.info({ message: `sern: registered in ${time} s`, }); - if(presencePath.exists) { - const setPresence = async (p: any) => { - return (dependencies[4] as Client).user?.setPresence(p); - } - presenceHandler(presencePath.path, setPresence).subscribe(); - } - }); +// readyHandler(dependencies, Files.getFullPathTree(wrapper.commands)) +// .add(() => { +// logger?.info({ message: "Client signaled ready, registering modules" }); +// const time = ((performance.now() - startTime) / 1000).toFixed(2); +// dependencies[0].emit('modulesLoaded'); +// logger?.info({ message: `sern: registered in ${time} s`, }); +// if(presencePath.exists) { +// const setPresence = async (p: any) => { +// return (dependencies[4] as Client).user?.setPresence(p); +// } +// presenceHandler(presencePath.path, setPresence).subscribe(); +// } +// }); - const messages$ = messageHandler(dependencies, wrapper.defaultPrefix); - const interactions$ = interactionHandler(dependencies); + //const messages$ = messageHandler(dependencies, wrapper.defaultPrefix); + //const interactions$ = interactionHandler(dependencies); // listening to the message stream and interaction stream - merge(messages$, interactions$).pipe(handleCrash(errorHandler, dependencies[0], logger)).subscribe(); + //merge(messages$, interactions$).pipe(handleCrash(errorHandler, dependencies[0], logger)).subscribe(); } diff --git a/src/types/ioc.ts b/src/types/ioc.ts index be5278a..290ce28 100644 --- a/src/types/ioc.ts +++ b/src/types/ioc.ts @@ -10,29 +10,18 @@ export type Singleton = () => T; * Every time this is called, a new object is created */ export type Transient = () => () => T; -/** - * Type to annotate that something is initializable. - * If T has an init method, this will be called. - */ -export type Initializable = T export type DependencyList = [ Contracts.Emitter, Contracts.ErrorHandling, Contracts.Logging | undefined, - Contracts.ModuleManager, + null, Contracts.Emitter, ]; export interface CoreDependencies { '@sern/client': () => Contracts.Emitter; '@sern/emitter': () => Contracts.Emitter; - /** - * @deprecated - * Will be removed and turned internal - */ - '@sern/store': () => Contracts.CoreModuleStore; - '@sern/modules': () => Contracts.ModuleManager; '@sern/errors': () => Contracts.ErrorHandling; '@sern/logger'?: () => Contracts.Logging; }