From 74024355e2abae047a6c90455d93b19f3d291618 Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Wed, 3 Apr 2024 00:37:56 -0500 Subject: [PATCH] ss --- packages/ioc/src/container.ts | 3 ++- packages/ioc/src/global.ts | 21 +++++++++++++++++---- packages/ioc/test/index.test.ts | 28 ++++++++++++++++++++++++++-- yarn.lock | 2 +- 4 files changed, 46 insertions(+), 8 deletions(-) diff --git a/packages/ioc/src/container.ts b/packages/ioc/src/container.ts index f9a7c1e..5b6459f 100644 --- a/packages/ioc/src/container.ts +++ b/packages/ioc/src/container.ts @@ -22,8 +22,9 @@ export class Container { } private registerHooks(hookname: string, insert: object) { if(hasCallableMethod(insert, hookname)) { + console.log(hookname) //@ts-ignore - this.addHook(hookname, () => insert[hookname]()) + this.addHook(hookname, async () => await insert[hookname]()) } } addSingleton(key: string, insert: object) { diff --git a/packages/ioc/src/global.ts b/packages/ioc/src/global.ts index 3f11466..d513a27 100644 --- a/packages/ioc/src/global.ts +++ b/packages/ioc/src/global.ts @@ -1,8 +1,25 @@ +<<<<<<< HEAD +======= +import assert from 'assert'; +>>>>>>> 82054aa (sss) import { Container } from './container'; //SIDE EFFECT: GLOBAL DI let containerSubject: Container; +<<<<<<< HEAD +======= +/** + * Don't use this unless you know what you're doing. Destroys old containerSubject if it exists and disposes everything + * then it will swap + */ +export async function __swap_container(c: Container) { + if(containerSubject) { + await containerSubject.disposeAll() + } + containerSubject = c; +} +>>>>>>> 82054aa (sss) /** * Don't use this unless you know what you're doing. Destroys old containerSubject if it exists and disposes everything @@ -20,11 +37,7 @@ export function __init_container(options: { autowire: boolean; path?: string | undefined; }) { - if(containerSubject) { - return false; - } containerSubject = new Container(options); - return true; } /** diff --git a/packages/ioc/test/index.test.ts b/packages/ioc/test/index.test.ts index 11a67d6..207f242 100644 --- a/packages/ioc/test/index.test.ts +++ b/packages/ioc/test/index.test.ts @@ -84,13 +84,37 @@ describe('CoreContainer Tests', () => { }) it('dispose', async () => { - let dfn = vi.fn(); + let dfn = vi.fn() const wiredSingletonFn = { value: 'wiredSingletonValue', dispose: dfn }; coreContainer.addSingleton('sk', wiredSingletonFn); - //@ts-ignore + await coreContainer.disposeAll(); expect(dfn).toHaveBeenCalledOnce() }) + it('Checking if container is ready', async () => { + expect(coreContainer.isReady()).toBe(false); + await coreContainer.ready(); + expect(coreContainer.isReady()).toBe(true); + }); + it('Registering and executing hooks - init should be called once after ready', async () => { + let initCount = 0; + + const singletonWithInit = { + value: 'singletonValueWithInit', + init: async () => { + initCount++; + } + }; + + coreContainer.addSingleton('singletonKeyWithInit', singletonWithInit); + + // Call ready twice to ensure hooks are executed only once + await coreContainer.ready(); + await coreContainer.ready(); + + expect(initCount).toBe(1); + }); + }) diff --git a/yarn.lock b/yarn.lock index 356cbe2..9a5b984 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2837,7 +2837,7 @@ __metadata: "typescript@patch:typescript@^5.0.0#~builtin, typescript@patch:typescript@^5.0.4#~builtin": version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=f3b441" + resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=14eedb" bin: tsc: bin/tsc tsserver: bin/tsserver