patchUrl.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /* global __react_refresh_polyfill_url__ */
  2. /**
  3. * @typedef {Object} UrlAPIs
  4. * @property {typeof URL} URL
  5. * @property {typeof URLSearchParams} URLSearchParams
  6. */
  7. /**
  8. * Runs a callback with patched the DOM URL APIs.
  9. * @param {function(UrlAPIs): void} callback The code to run with patched URL globals.
  10. * @returns {void}
  11. */
  12. function runWithPatchedUrl(callback) {
  13. var __originalURL;
  14. var __originalURLSearchParams;
  15. // Polyfill the DOM URL and URLSearchParams constructors
  16. if (__react_refresh_polyfill_url__ || !window.URL) {
  17. __originalURL = window.URL;
  18. window.URL = require('core-js-pure/web/url');
  19. }
  20. if (__react_refresh_polyfill_url__ || !window.URLSearchParams) {
  21. __originalURLSearchParams = window.URLSearchParams;
  22. window.URLSearchParams = require('core-js-pure/web/url-search-params');
  23. }
  24. // Pass in URL APIs in case they are needed
  25. callback({ URL: window.URL, URLSearchParams: window.URLSearchParams });
  26. // Restore polyfill-ed APIs to their original state
  27. if (__originalURL) {
  28. window.URL = __originalURL;
  29. }
  30. if (__originalURLSearchParams) {
  31. window.URLSearchParams = __originalURLSearchParams;
  32. }
  33. }
  34. module.exports = runWithPatchedUrl;