polyfill.js 1.1 KB

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