Skip to content

Commit b9a453a

Browse files
committed
feat: add strings as possible module keys
1 parent 728d1e8 commit b9a453a

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

specs/module.spec.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,20 @@ describe('Module', () => {
1313
});
1414

1515
describe('When a module is loaded', () => {
16-
it('should return all module dependencies', () => {
17-
// Arrange
18-
const myModule = createModule();
19-
myModule.bind('SIMPLE_FUNCTION').toFunction(sayHelloWorld);
20-
container.load(Symbol('myModule'), myModule);
16+
describe.each([Symbol('myModule'), 'myModule'])
17+
('When the module has dependencies', (moduleKey) => {
18+
it(`should return all dependencies of module with key: ${moduleKey.toString()}`, () => {
19+
// Arrange
20+
const myModule = createModule();
21+
myModule.bind('SIMPLE_FUNCTION').toFunction(sayHelloWorld);
22+
container.load(moduleKey, myModule);
2123

22-
// Act
23-
const sayHello = container.get<SayHelloType>('SIMPLE_FUNCTION');
24+
// Act
25+
const sayHello = container.get<SayHelloType>('SIMPLE_FUNCTION');
2426

25-
// Assert
26-
expect(sayHello()).toBe('hello world');
27+
// Assert
28+
expect(sayHello()).toBe('hello world');
29+
});
2730
});
2831

2932
describe('When a dependency of the module is registered in another module', () => {

src/container.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {Binding, Container, DependencyKey, Module} from './types';
1+
import {Binding, Container, DependencyKey, Module, ModuleKey} from './types';
22
import {createModule} from './module';
33

44
export function createContainer(): Container {
5-
const modules = new Map<symbol, Module>();
5+
const modules = new Map<ModuleKey, Module>();
66
const singletonInstances = new Map<DependencyKey, unknown>();
77
const scopedInstances = new Map<DependencyKey, Map<DependencyKey, unknown>>();
88
const resolutionStack: DependencyKey[] = [];
@@ -16,7 +16,7 @@ export function createContainer(): Container {
1616

1717
const load = (moduleKey: symbol, module: Module) => modules.set(moduleKey, module);
1818

19-
const unload = (moduleKey: symbol) => {
19+
const unload = (moduleKey: ModuleKey) => {
2020
singletonInstances.clear();
2121
modules.delete(moduleKey);
2222
};

src/types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export type DependencyKey = symbol | string;
22

3+
export type ModuleKey = symbol | string;
4+
35
export interface DependencyObject {
46
[key: string]: DependencyKey;
57
}
@@ -30,11 +32,11 @@ export interface Container {
3032
) => void;
3133
};
3234

33-
load(moduleKey: symbol, module: Module): void;
35+
load(moduleKey: ModuleKey, module: Module): void;
3436

3537
get<T>(key: DependencyKey): T;
3638

37-
unload(key: symbol): void;
39+
unload(key: ModuleKey): void;
3840

3941
runInScope<T>(callback: () => T): T;
4042
}

0 commit comments

Comments
 (0)