import { useCallback, useEffect, useState } from 'react'; import * as fs from 'fs'; export function usePromise(f: () => Promise): T | null { const [value, setValue] = useState(null); useEffect(() => { setValue(null); let cancelled = false; (async (): Promise => { const v = await f(); if (!cancelled) { setValue(v); } })(); return (): void => { cancelled = true; }; }, [f]); return value; } export function useReadFile(path: string, encoding: BufferEncoding): string | null { const readFile = useCallback(() => fs.promises.readFile(path, encoding), [path, encoding]); return usePromise(readFile); }