@teambit/harmony
Version:
abstract extension system
23 lines (17 loc) • 565 B
text/typescript
import { Extension } from './extension/extension';
export default class Container {
constructor(private instances = new Map()) {}
register<AnyExtension>(token: string, instance: AnyExtension) {
this.instances.set(token, instance);
}
resolve<AnyExtension>(token: string) {
return this.instances.get(token);
}
static loadWith(defaults: Extension[]) {
const extensionMap = new Map(defaults.map(extension => [extension.name, extension]));
return new Container(extensionMap);
}
}
// A -> B -> C
// A -> C
// instantiate A then B and C