async function deltaUrlToBlobUrl(deltaUrl) {
    let cachedBundle = cachedBundleUrls.get(deltaUrl);

    const deltaBundleId = cachedBundle
      ? `&deltaBundleId=${cachedBundle.id}`
      : '';

    const data = await fetch(deltaUrl + deltaBundleId);
    const bundle = await data.json();

    const deltaPatcher = global.DeltaPatcher.get(bundle.id).applyDelta({
      pre: new Map(bundle.pre),
      post: new Map(bundle.post),
      delta: new Map(bundle.delta),
      reset: bundle.reset,
    });

    // If nothing changed, avoid recreating a bundle blob by reusing the
    // previous one.
    if (deltaPatcher.getLastNumModifiedFiles() === 0 && cachedBundle) {
      return cachedBundle.url;
    }

    // Clean up the previous bundle URL to not leak memory.
    if (cachedBundle) {
      URL.revokeObjectURL(cachedBundle.url);
    }

    // To make Source Maps work correctly, we need to add a newline between
    // modules.
    const blobContent = deltaPatcher
      .getAllModules()
      .map(module => module + '\n');

    // Build the blob with the whole JS bundle.
    const blob = new Blob(blobContent, {
      type: 'application/javascript',
    });

    const bundleUrl = URL.createObjectURL(blob);
    cachedBundleUrls.set(deltaUrl, {
      id: bundle.id,
      url: bundleUrl,
    });

    return bundleUrl;
  }
Converts the passed delta URL into an URL object containing already the
whole JS bundle Blob.