async function fetchResource(src, type, url) {
  if (!src.reuseDeps && !isRemote(url)
  || src.update
  || await storage[type].getOne(url) == null) {
    const { portId } = src;
    if (portId) postToPort(depsPorts, portId, [url]);
    try {
      await storage[type].fetch(url, src[FETCH_OPTS]);
    } catch (err) {
      return err;
    } finally {
      if (portId) postToPort(depsPorts, portId, [url, true]);
      delete pendingDeps[type][url];
    }
  }
}
@param {VMScriptSourceOptions} src
@param {string} type
@param {string} url
@return {Promise<?>}