prepack
Version:
Execute a JS bundle, serialize global state and side effects to a snapshot that can be quickly restored.
98 lines (80 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (realm) {
let global = realm.$GlobalObject;
// module.exports support
let moduleValue = _index.AbstractValue.createAbstractObject(realm, "module");
moduleValue.kind = "resolved";
let moduleExportsValue = _index.AbstractValue.createAbstractObject(realm, "module.exports");
moduleExportsValue.kind = "resolved";
moduleValue.$DefineOwnProperty("exports", {
value: moduleExportsValue,
writable: true,
enumerable: false,
configurable: true
});
global.$DefineOwnProperty("module", {
value: moduleValue,
writable: true,
enumerable: false,
configurable: true
});
// apply require() mock
global.$DefineOwnProperty("require", {
value: new _index.NativeFunctionValue(realm, "require", "require", 0, (context, [requireNameVal]) => {
(0, _invariant2.default)(requireNameVal instanceof _index.StringValue);
let requireNameValValue = requireNameVal.value;
if (requireNameValValue === "react" || requireNameValValue === "React") {
if (realm.fbLibraries.react === undefined) {
let react = (0, _reactMocks.createMockReact)(realm, requireNameValValue);
realm.fbLibraries.react = react;
return react;
}
return realm.fbLibraries.react;
} else if (requireNameValValue === "react-relay" || requireNameValValue === "RelayModern") {
if (realm.fbLibraries.reactRelay === undefined) {
let reactRelay = (0, _relayMocks.createMockReactRelay)(realm, requireNameValValue);
realm.fbLibraries.reactRelay = reactRelay;
return reactRelay;
}
return realm.fbLibraries.reactRelay;
} else if (requireNameValValue === "prop-types" || requireNameValValue === "PropTypes") {
if (realm.fbLibraries.react === undefined) {
throw new _errors.FatalError("unable to require PropTypes due to React not being referenced in scope");
}
let propTypes = (0, _index2.Get)(realm, realm.fbLibraries.react, "PropTypes");
(0, _invariant2.default)(propTypes instanceof _index.ObjectValue);
return propTypes;
} else {
let requireVal;
if (realm.fbLibraries.other.has(requireNameValValue)) {
requireVal = realm.fbLibraries.other.get(requireNameValValue);
} else {
requireVal = (0, _utils.createAbstract)(realm, "function", `require("${requireNameValValue}")`);
realm.fbLibraries.other.set(requireNameValValue, requireVal);
}
(0, _invariant2.default)(requireVal instanceof _index.AbstractValue);
return requireVal;
}
}),
writable: true,
enumerable: false,
configurable: true
});
if (realm.isCompatibleWith("fb-www")) {
(0, _fbMocks.createFbMocks)(realm, global);
}
};
var _index = require("../../values/index.js");
var _reactMocks = require("./react-mocks.js");
var _relayMocks = require("./relay-mocks.js");
var _utils = require("../prepack/utils.js");
var _fbMocks = require("./fb-mocks.js");
var _errors = require("../../errors");
var _index2 = require("../../methods/index.js");
var _invariant = require("../../invariant");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=global.js.map