react-native-desktop
Version:
A framework for building native desktop apps using React
97 lines (80 loc) • 2.31 kB
JavaScript
;
const {ErrorUtils, nativeRequire} = global;
global.require = require;
global.__d = define;
const modules = Object.create(null);
const loadModule = ErrorUtils ?
guardedLoadModule : loadModuleImplementation;
function define(moduleId, factory) {
if (moduleId in modules) {
// prevent repeated calls to `global.nativeRequire` to overwrite modules
// that are already loaded
return;
}
modules[moduleId] = {
factory,
hasError: false,
exports: undefined,
};
}
function require(moduleId) {
const module = modules[moduleId];
return module && module.exports || loadModule(moduleId, module);
}
function guardedLoadModule(moduleId, module) {
try {
return loadModuleImplementation(moduleId, module);
} catch (e) {
ErrorUtils.reportFatalError(e);
}
}
function loadModuleImplementation(moduleId, module) {
if (!module) {
nativeRequire(moduleId);
module = modules[moduleId];
}
if (!module) {
throw unknownModuleError(moduleId);
}
if (module.hasError) {
throw moduleThrewError(moduleId);
}
// `require` calls int the require polyfill itself are not analyzed and
// replaced so that they use numeric module IDs.
// The systrace module will expose itself on the require function so that
// it can be used here.
// TODO(davidaurelio) Scan polyfills for dependencies, too (t9759686)
if (__DEV__) {
var {Systrace} = require;
}
const exports = module.exports = {};
const {factory} = module;
try {
if (__DEV__) {
Systrace.beginEvent('JS_require_' + moduleId);
}
const moduleObject = {exports};
factory(global, require, moduleObject, exports);
if (__DEV__) {
Systrace.endEvent();
}
return (module.exports = moduleObject.exports);
} catch (e) {
module.hasError = true;
module.exports = undefined;
}
}
function unknownModuleError(id) {
let message = 'Requiring unknown module "' + id + '".';
if (__DEV__) {
message +=
'If you are sure the module is there, try restarting the packager or running "npm install".';
}
return Error(message);
}
function moduleThrewError(id) {
return Error('Requiring module "' + id + '", which threw an exception.');
}
if (__DEV__) {
require.Systrace = { beginEvent: () => {}, endEvent: () => {} };
}