It currently looks like the `map.get(element)` returns `undefined` even for previously-loaded elements. Are we evicting from the cache prematurely? Why?

Our second level caching (inside of `parseHookNames`) is working but this is still resulting in a lot of unnecessary work.
const setPromises = [];
  locationKeyToHookSourceData.forEach(hookSourceData => {
    const {runtimeSourceURL} = hookSourceData;
    const fetchPromise =
      fetchPromises.get(runtimeSourceURL) ||
      fetchFile(runtimeSourceURL).then(runtimeSourceCode => {
        if (runtimeSourceCode.length > MAX_SOURCE_LENGTH) {
          throw Error('Source code too large to parse');
        }
        if (__DEBUG__) {
          console.groupCollapsed(
            `loadSourceFiles() runtimeSourceURL "${runtimeSourceURL}"`,
          );
          console.log(runtimeSourceCode);
          console.groupEnd();
        }
        return runtimeSourceCode;
      });
    fetchPromises.set(runtimeSourceURL, fetchPromise);
    setPromises.push(
      fetchPromise.then(runtimeSourceCode => {
        hookSourceData.runtimeSourceCode = runtimeSourceCode;
      }),
    );
  });
  return Promise.all(setPromises);
}
async function parseSourceAST(
  locationKeyToHookSourceData: Map<string, HookSourceData>,
): Promise<*> {