electron.js 1006 B

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. const moduleList = require('@electron/internal/common/api/module-list');
  3. exports.handleESModule = (loader) => () => {
  4. const value = loader();
  5. if (value.__esModule && value.default) return value.default;
  6. return value;
  7. };
  8. exports.memoizedGetter = (getter) => {
  9. /*
  10. * It's ok to leak this value as it would be leaked by the global
  11. * node module cache anyway at `Module._cache`. This memoization
  12. * is dramatically faster than relying on nodes module cache however
  13. */
  14. let memoizedValue = null;
  15. return () => {
  16. if (memoizedValue === null) {
  17. memoizedValue = getter();
  18. }
  19. return memoizedValue;
  20. };
  21. };
  22. // Attaches properties to |targetExports|.
  23. exports.defineProperties = function (targetExports) {
  24. const descriptors = {};
  25. for (const module of moduleList) {
  26. descriptors[module.name] = {
  27. enumerable: !module.private,
  28. get: exports.handleESModule(module.loader)
  29. };
  30. }
  31. return Object.defineProperties(targetExports, descriptors);
  32. };