polyfill.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import tldRules from 'tldjs/rules.json';
  2. import { JSDOM } from 'jsdom';
  3. global.window = new JSDOM('').window;
  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. global.chrome = {
  22. runtime: {
  23. getURL: browser.runtime.getURL,
  24. },
  25. };
  26. if (!window.Response) window.Response = { prototype: {} };
  27. const domProps = Object.getOwnPropertyDescriptors(window);
  28. for (const k of Object.keys(domProps)) {
  29. // Skipping ***Storage and native global methods
  30. if (k.endsWith('Storage') || /^[a-z]/.test(k) && (k in global)) {
  31. delete domProps[k];
  32. }
  33. }
  34. Object.defineProperties(global, domProps);
  35. global.__VAULT_ID__ = false;
  36. Object.assign(global, require('@/common/safe-globals'));
  37. Object.assign(global, require('@/injected/safe-globals-injected'));
  38. Object.assign(global, require('@/injected/content/safe-globals-content'));
  39. Object.assign(global, require('@/injected/web/safe-globals-web'));