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:
Jacob Nguyen
2022-12-28 14:18:36 -06:00
committed by GitHub
parent 59c1c9c6a9
commit 14556223fd
43 changed files with 2931 additions and 5834 deletions

View File

@@ -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';