import { Extension } from './extension/extension'; export default class Container { constructor(private instances = new Map()) {} register(token: string, instance: AnyExtension) { this.instances.set(token, instance); } resolve(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