Files
electron/lib/common/api/exports/electron.js
2020-03-23 09:18:46 -07:00

38 lines
1006 B
JavaScript

'use strict';
const moduleList = require('@electron/internal/common/api/module-list');
exports.handleESModule = (loader) => () => {
const value = loader();
if (value.__esModule && value.default) return value.default;
return value;
};
exports.memoizedGetter = (getter) => {
/*
* It's ok to leak this value as it would be leaked by the global
* node module cache anyway at `Module._cache`. This memoization
* is dramatically faster than relying on nodes module cache however
*/
let memoizedValue = null;
return () => {
if (memoizedValue === null) {
memoizedValue = getter();
}
return memoizedValue;
};
};
// Attaches properties to |targetExports|.
exports.defineProperties = function (targetExports) {
const descriptors = {};
for (const module of moduleList) {
descriptors[module.name] = {
enumerable: !module.private,
get: exports.handleESModule(module.loader)
};
}
return Object.defineProperties(targetExports, descriptors);
};