From eb3cbd454a9d7c0c6acff1a040b0e7ed8c5401b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?=
 <roberto.pintos.lopez@gmail.com>
Date: Sat, 11 Jan 2025 13:31:39 +0100
Subject: [PATCH] feat(container): update ContainerModule load to support sync
 load functions

---
 .changeset/slimy-otters-sparkle.md                |  5 +++++
 .../src/container/models/ContainerModule.spec.ts  | 15 ++++++++++++---
 .../src/container/models/ContainerModule.ts       | 10 ++++++----
 3 files changed, 23 insertions(+), 7 deletions(-)
 create mode 100644 .changeset/slimy-otters-sparkle.md

diff --git a/.changeset/slimy-otters-sparkle.md b/.changeset/slimy-otters-sparkle.md
new file mode 100644
index 00000000..c2696453
--- /dev/null
+++ b/.changeset/slimy-otters-sparkle.md
@@ -0,0 +1,5 @@
+---
+"@inversifyjs/container": minor
+---
+
+Updated `ContainerModule.load` to support sync load functions
diff --git a/packages/container/libraries/container/src/container/models/ContainerModule.spec.ts b/packages/container/libraries/container/src/container/models/ContainerModule.spec.ts
index 70e06db7..baf73928 100644
--- a/packages/container/libraries/container/src/container/models/ContainerModule.spec.ts
+++ b/packages/container/libraries/container/src/container/models/ContainerModule.spec.ts
@@ -36,14 +36,23 @@ describe(ContainerModule.name, () => {
 
   describe('.load', () => {
     describe('when called', () => {
+      let optionsFixture: ContainerModuleLoadOptions;
+
       let result: unknown;
 
-      beforeAll(() => {
-        result = new ContainerModule(loadMock).load;
+      beforeAll(async () => {
+        optionsFixture = Symbol() as unknown as ContainerModuleLoadOptions;
+
+        result = await new ContainerModule(loadMock).load(optionsFixture);
+      });
+
+      it('should call load()', () => {
+        expect(loadMock).toHaveBeenCalledTimes(1);
+        expect(loadMock).toHaveBeenCalledWith(optionsFixture);
       });
 
       it('should return expected value', () => {
-        expect(result).toBe(loadMock);
+        expect(result).toBeUndefined();
       });
     });
   });
diff --git a/packages/container/libraries/container/src/container/models/ContainerModule.ts b/packages/container/libraries/container/src/container/models/ContainerModule.ts
index efa32e46..8c3d3518 100644
--- a/packages/container/libraries/container/src/container/models/ContainerModule.ts
+++ b/packages/container/libraries/container/src/container/models/ContainerModule.ts
@@ -24,9 +24,11 @@ export interface ContainerModuleLoadOptions {
 
 export class ContainerModule {
   readonly #id: number;
-  readonly #load: (options: ContainerModuleLoadOptions) => Promise<void>;
+  readonly #load: (options: ContainerModuleLoadOptions) => void | Promise<void>;
 
-  constructor(load: (options: ContainerModuleLoadOptions) => Promise<void>) {
+  constructor(
+    load: (options: ContainerModuleLoadOptions) => void | Promise<void>,
+  ) {
     this.#id = getContainerModuleId();
     this.#load = load;
   }
@@ -35,7 +37,7 @@ export class ContainerModule {
     return this.#id;
   }
 
-  public get load(): (options: ContainerModuleLoadOptions) => Promise<void> {
-    return this.#load;
+  public async load(options: ContainerModuleLoadOptions): Promise<void> {
+    await this.#load(options);
   }
 }