polyfill.js 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import tldRules from 'tldjs/rules.json';
  2. import { JSDOM } from 'jsdom';
  3. global.window = global;
  4. global.browser = {
  5. storage: {
  6. local: {
  7. get() {
  8. return Promise.resolve({
  9. 'dat:tldRules': tldRules,
  10. });
  11. },
  12. set() {
  13. return Promise.resolve();
  14. },
  15. },
  16. },
  17. runtime: {
  18. getURL: path => path,
  19. },
  20. };
  21. const domProps = Object.getOwnPropertyDescriptors(new JSDOM('').window);
  22. for (const k of Object.keys(domProps)) {
  23. if (k.endsWith('Storage') || k in global) delete domProps[k];
  24. }
  25. delete domProps.performance;
  26. Object.defineProperties(global, domProps);
  27. global.Response = { prototype: {} };
  28. global.URL = {
  29. _cache: {},
  30. createObjectURL(blob) {
  31. const blobUrl = `blob:${Math.random()}`;
  32. URL._cache[blobUrl] = blob;
  33. return blobUrl;
  34. },
  35. };
  36. const globalsCommon = require('#/common/safe-globals');
  37. const globalsInjected = require('#/injected/safe-injected-globals');
  38. Object.assign(global, globalsCommon, globalsInjected);