refactor: minor (#347)

* some refactoring

* accidental merge

* refactor: ensure all asserts have error message to avoid cryptic messages

* general refactoring

* move controller to create-plugin
This commit is contained in:
Jacob Nguyen
2024-01-02 13:04:59 -06:00
committed by GitHub
parent b962dae36c
commit b0399f9507
19 changed files with 54 additions and 98 deletions

View File

@@ -5,6 +5,7 @@ import { CoreContainer } from './container';
import { Result } from 'ts-results-es'
import { DefaultServices } from '../_internal';
import { AnyFunction } from '../../types/utility';
import type { Logging } from '../contracts/logging';
//SIDE EFFECT: GLOBAL DI
let containerSubject: CoreContainer<Partial<Dependencies>>;
@@ -22,6 +23,12 @@ export function useContainerRaw() {
return containerSubject;
}
export function disposeAll(logger: Logging|undefined) {
containerSubject
?.disposeAll()
.then(() => logger?.info({ message: 'Cleaning container and crashing' }));
}
const dependencyBuilder = (container: any, excluded: string[]) => {
type Insertable =
| ((container: CoreContainer<Dependencies>) => unknown )
@@ -82,16 +89,16 @@ export const insertLogger = (containerSubject: CoreContainer<any>) => {
}
export async function makeDependencies<const T extends Dependencies>
(conf: ValidDependencyConfig) {
//Until there are more optional dependencies, just check if the logger exists
//SIDE EFFECT
containerSubject = new CoreContainer();
if(typeof conf === 'function') {
const excluded: string[] = [];
conf(dependencyBuilder(containerSubject, excluded));
if(!excluded.includes('@sern/logger')
&& !containerSubject.getTokens()['@sern/logger']) {
insertLogger(containerSubject);
}
containerSubject.ready();
} else {
composeRoot(containerSubject, conf);

View File

@@ -22,19 +22,18 @@ export class CoreContainer<T extends Partial<Dependencies>> extends Container<T,
(this as Container<{}, {}>)
.add({ '@sern/errors': () => new DefaultServices.DefaultErrorHandling(),
'@sern/emitter': () => new SernEmitter(),
'@sern/store': () => new ModuleStore() })
'@sern/emitter': () => new SernEmitter,
'@sern/store': () => new ModuleStore })
.add(ctx => {
return {
'@sern/modules': () =>
new DefaultServices.DefaultModuleManager(ctx['@sern/store']),
};
return { '@sern/modules': () =>
new DefaultServices.DefaultModuleManager(ctx['@sern/store']) };
});
}
isReady() {
return this.ready$.closed;
}
override async disposeAll() {
const otherDisposables = Object