import { createContext, useCallback, useMemo } from 'react'; type Vars = Record; type RunnerContextValue = { vars: Vars; run: (fn: (vars: Vars) => Promise) => Promise; }; type RunnerProviderProps = { vars?: Vars; children: React.ReactNode; }; const RunnerContext = createContext({ vars: {}, run: async () => {}, }); const RunnerProvider: React.FC = ({ vars = {}, children, }) => { const currentVars = useMemo(() => vars, [vars]); const run = useCallback( async (fn: (vars: Vars) => Promise) => { const output = await fn(currentVars); return output; }, [currentVars], ); return ( {children} ); }; export type { Vars }; export { RunnerContext, RunnerProvider };