import { onUnmounted } from "vue"; import type { MoleculeScopeOptions } from "../shared/MoleculeScopeOptions"; import type { MoleculeOrInterface } from "../vanilla"; import { useInjector } from "./useInjector"; import { getTuples } from "./useScopes"; /** * Gets an instance of a provided value from a {@link MoleculeOrInterface} * * @param mol - a molecule that will provided an instance * @param options - optional overrides for explicit scoping * @returns an instance provided by this molecule */ export const useMolecule = ( mol: MoleculeOrInterface, options?: MoleculeScopeOptions, ) => { const tuples = getTuples(options); const injector = useInjector(); const [, handle] = injector.useLazily(mol, ...tuples); onUnmounted(() => { handle.stop(); }); return handle.start(); };