mirror of
https://github.com/sern-handler/handler
synced 2026-06-23 16:22:15 +00:00
feat!:(2.0 global services) (#156)
* style: prettier line feed changes
* style: prettier line feed changes
* feat: prototyping module manager
* feat: removing unused types
* feat: update location of module typings
* revert: port back to original interaction type checkers
* revert: port back to original interaction type checkers
* revert: remove unneeded type predicates
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* chore: fixing up and cleaning code
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: prototyping module manager
* feat: removing unused types
* feat: update location of module typings
* revert: port back to original interaction type checkers
* revert: port back to original interaction type checkers
* revert: remove unneeded type predicates
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* chore: fixing up and cleaning code
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: more merge conflicts
* feat: starting from scratch, add new typings
* feat: refactor ScopedPlugin typing
* feat: strengthening contracts
* chore: edit eslint
* feat: add addDependencies
* feat: add iti di
* feat: constfn util
* revert: delete old files
* remove: ModuleConfiguration
* feat: add sanity checker
* feat: add new error and update dependency
* feat: add sanity check for iti
* feat: add function helpers for di
* feat: add POC for sern di IOC
* feat: refactor DependenciesMap
* revert: remove old code
* feat: refactor makeDependencies fn
* chore(deps): update dependency @typescript-eslint/parser to v5.36.1 (#127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update dependency @typescript-eslint/eslint-plugin to v5.36.1 (#126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* docs: Fix the code example (#128)
* chore(deps): update dependency @typescript-eslint/eslint-plugin to v5.36.2 (#130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* chore(deps): update dependency @typescript-eslint/parser to v5.36.2 (#131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* feat: allow constructable modules (#133)
* Update readFile.ts
* Update userDefinedEventsHandling.ts
* Update readyHandler.ts
* fix: ts error
Co-authored-by: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* revert: feat of allow constructable modules (#138)
Revert "feat: allow constructable modules (#133)"
This reverts commit 03936eb2ea.
* feat: update CODEOWNERS
* feat: classmodules@arcs (#143)
* feat: add class based commands
* docs: add deprecation warnings
* feat: add deprecation warnings
* feat: add more deprecation warnings
* feat: add prototype ClassModule abstract class
* feat: add EventModuleClass prototype, change names
* feat: more flexible contract
* feat: EventExecutable
* fix: typo
* feat: made abstract classes because of defaults
* fix: typings
* feat: update Context typings, update to djs v15
* chore: update typescript dependency
* chore: bump version
* chore: update ignore
* chore: prettier
* docs: change readme to be docusaurus compliant
* chore(main): release 1.2.0 (#145)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(autocomplete): now support multiple autocomplete options (#147)
* chore(main): release 1.2.1 (#148)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat: update location of module typings
* feat: getting global plugins some typings and adding contracts
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* feat: removing unused types
* feat: update location of module typings
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: more merge conflicts
* feat: starting from scratch, add new typings
* feat: strengthening contracts
* feat: add sanity check for iti
* feat: refactor DependenciesMap
* feat: adding POC back
* docs: add some deprecation warnings
* feat: remove client and sernEmitter
* feat: rebase global_services
* chore: oops rebase pkgjson fix
* fix: typings
* feat: iti update and getting di working
* feat: adding contracts and default provider
* feat: update typings and change logger
* fix: MapDeps typings and useContainer typings
* feat: moving handlers to 2.0
* feat: injecting crash handler
* feat: alpha logging injection?
* feat: injecting modulemanager in interactionhandler
* fix: typos and fixups
* fix: typos and fixups
* feat: moduleManager injection
* fix: crash on no module
* feat: i think optional dependencies work
* feat: add more optional support
* feat: make exclusion optional
* perf: simplify typings and reduce compile time
* fix: some typings adjustment, deprecating a field
* perf: simplifying plugin typings
* feat: remove addExternal
* feat: more simplifying typings
* perf: allow any and interfacify some types
* revert: remove horrendous Override type
* revert: delete interaction type predicates
* fix: unchecked cast to EventEmitter
* perf: remove unneeded creation of instance members
* feat: init test dir
* refactor: rename fn and short circuit name fn
* refactor: insert function
* feat: starting event module onEvent plugins and log payload
* feat: basic eventmodule event plugins?
* refactor: DRY
* feat: unify warning typing
* fix: typings
* feat: more progress on new eventModules
* feat: event modules with plugins!!?!?
* feat: making sernEmitter create default!!, readjust typings
* feat: inject sernEmitter emits and catch possible errors
* feat: add optionality to Logger dep type
* feat: context upgrade, fix circular emissions, crap ton of shit
* feat!: Module -> AnyModule, Added new SelectMenuInteractions, Changed some CommandType names
* feat: rudimentary onClick handler
* feat!: rename select menu command types, no distinguishing between text and alias
* docs: adding docs
* fix: forgot to change
* fix: logging undefined
* revert: remove spreadparams
* feat: export useContainerRaw function and fix smol bug
* feat: add iti DI disposeAll on crash
* fix: deferred execute
* feat!: rename BasePlugin -> Plugin
* feat: commandplugins for event modules, ill test later
* refactor: rename
* refactor: remove import
* feat: add deprecation warnings
* feat: update documentation comments
* perf: static'ify command plugin and event plugin typings
* refactor: remove redundant assignment
* feat: switch to pnpm
* chore: update pnpm lock
* fix: errors crashing and completing subscription
* feat: update example
* fix: overriding dependencies no matter what
* fix: bad rxjs docs
* refactor: destructuring
* feat: update typings for addDisposer
* feat: update packageManager field in package.json
* feat: grammar
Co-authored-by: jacoobes <jacobnguyend@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
Co-authored-by: Arcs <73959934+HighArcs@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com>
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
import type { CommandInteractionOptionResolver } from 'discord.js';
|
||||
import type { CommandModule, EventModule, Module } from '../handler/structures/module';
|
||||
import type { PayloadType } from '../handler/structures/enums';
|
||||
import type { InteractionReplyOptions, MessageReplyOptions } from 'discord.js';
|
||||
export type Nullish<T> = T | undefined | null;
|
||||
|
||||
import type { EventEmitter } from 'events';
|
||||
import type { CommandModule, EventModule, AnyModule } from './module';
|
||||
import type { UnpackFunction } from 'iti';
|
||||
import type { ErrorHandling, Logging, ModuleManager } from '../handler/contracts';
|
||||
import type { ModuleStore } from '../handler/structures/moduleStore';
|
||||
import type SernEmitter from '../handler/sernEmitter';
|
||||
// Thanks to @kelsny
|
||||
export type ParseType<T> = {
|
||||
[K in keyof T]: T[K] extends unknown ? [k: K, args: T[K]] : never;
|
||||
@@ -13,46 +16,42 @@ export type Args = ParseType<{ text: string[]; slash: SlashOptions }>;
|
||||
|
||||
export type SlashOptions = Omit<CommandInteractionOptionResolver, 'getMessage' | 'getFocused'>;
|
||||
|
||||
// Source: https://dev.to/vborodulin/ts-how-to-override-properties-with-type-intersection-554l
|
||||
export type Override<T1, T2> = Omit<T1, keyof T2> & T2;
|
||||
|
||||
export type DefinitelyDefined<T, K extends keyof T = keyof T> = {
|
||||
[L in K]-?: T[L] extends Record<string, unknown>
|
||||
? DefinitelyDefined<T[L], keyof T[L]>
|
||||
: Required<T>[L];
|
||||
} & T;
|
||||
|
||||
export type EventInput =
|
||||
| string
|
||||
| { mod: EventModule; absPath: string }[]
|
||||
| (() => { mod: EventModule; absPath: string }[]);
|
||||
|
||||
/**
|
||||
* Turns a function with a union of array of args into a single union
|
||||
* [ T , V , B ] | [ A ] => T | V | B | A
|
||||
*/
|
||||
export type SpreadParams<T extends (...args: never) => unknown> = (
|
||||
args: Parameters<T>[number],
|
||||
) => unknown;
|
||||
|
||||
/**
|
||||
* After modules are transformed, name and description are given default values if none
|
||||
* are provided to Module. This type represents that transformation
|
||||
*/
|
||||
export type DefinedModule = DefinitelyDefined<Module, 'name' | 'description'>;
|
||||
export type DefinedCommandModule = DefinitelyDefined<CommandModule, 'name' | 'description'>;
|
||||
export type DefinedEventModule = DefinitelyDefined<EventModule, 'name' | 'description'>;
|
||||
export type DefinedCommandModule = CommandModule & { name: string; description: string };
|
||||
export type DefinedEventModule = EventModule & { name: string };
|
||||
export type AnyDefinedModule = DefinedCommandModule | DefinedEventModule
|
||||
export type Payload =
|
||||
| { type: PayloadType.Success; module: Module }
|
||||
| { type: PayloadType.Failure; module?: Module; reason: string | Error };
|
||||
| { type: PayloadType.Success; module: AnyModule }
|
||||
| { type: PayloadType.Failure; module?: AnyModule; reason: string | Error }
|
||||
| { type: PayloadType.Warning; reason: string};
|
||||
export type SernEventsMapping = {
|
||||
['module.register']: [Payload];
|
||||
['module.activate']: [Payload];
|
||||
['error']: [Payload];
|
||||
['warning']: [string];
|
||||
'module.register': [Payload];
|
||||
'module.activate': [Payload];
|
||||
'error': [Payload];
|
||||
'warning': [Payload];
|
||||
};
|
||||
export type LogPayload<T = unknown> = { message: T }
|
||||
export type Singleton<T> = () => T
|
||||
export type Transient<T> = () => () => T;
|
||||
|
||||
export type ReplyOptions =
|
||||
| string
|
||||
| Omit<InteractionReplyOptions, 'fetchReply'>
|
||||
| MessageReplyOptions;
|
||||
export interface Dependencies {
|
||||
'@sern/client': Singleton<EventEmitter>;
|
||||
'@sern/logger'?: Singleton<Logging>;
|
||||
'@sern/emitter': Singleton<SernEmitter>;
|
||||
'@sern/store' : Singleton<ModuleStore>;
|
||||
'@sern/modules' : Singleton<ModuleManager>;
|
||||
'@sern/errors': Singleton<ErrorHandling>;
|
||||
}
|
||||
|
||||
export type ReplyOptions = string | Omit<InteractionReplyOptions, 'fetchReply'> | MessageReplyOptions;
|
||||
|
||||
export type MapDeps<
|
||||
Deps extends Dependencies,
|
||||
T extends readonly unknown[]
|
||||
> = T extends [infer First extends keyof Deps, ...infer Rest extends readonly unknown[]]
|
||||
? [ UnpackFunction<Deps[First]>, ...(MapDeps<Deps, Rest> extends [never] ? [] : MapDeps<Deps,Rest>)] : [never]
|
||||
//Basically, '@sern/client' | '@sern/store' | '@sern/modules' | '@sern/error' | '@sern/emitter' will be provided defaults, and you can exclude the rest
|
||||
export type OptionalDependencies = '@sern/logger';
|
||||
Reference in New Issue
Block a user