import graphRegistry from './graph/registry/GraphRegistry'; import { ObjectGraph } from './graph/ObjectGraph'; import { GraphInternals, ServiceLocator, type Constructable } from './types'; import { GraphMiddleware } from './graph/registry/GraphMiddleware'; import lateInjector from './injectors/class/LateInjector'; import serviceLocatorFactory from './graph/ServiceLocatorFactory'; export default class Obsidian { registerGraph(key: string, generator: () => Constructable) { graphRegistry.registerGraphGenerator(key, generator); } obtain, P = unknown>( keyOrGraph: string | (new(...args: P[]) => T), props?: P, ): ServiceLocator> { return serviceLocatorFactory.fromGraph(keyOrGraph, props); } inject(target: T, keyOrGraph?: string | ObjectGraph) { return lateInjector.inject(target, keyOrGraph); } addGraphMiddleware(middleware: GraphMiddleware) { graphRegistry.addGraphMiddleware(middleware); } clearGraphMiddlewares() { graphRegistry.clearGraphMiddlewares(); } clearGraphs() { graphRegistry.clearGraphMiddlewares(); graphRegistry.clearAll(); } }