prepack
Version:
Execute a JS bundle, serialize global state and side effects to a snapshot that can be quickly restored.
155 lines (122 loc) • 5.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _index = require("../../values/index.js");
var _reactMocks = require("./react-mocks.js");
var _reactDomMocks = require("./react-dom-mocks.js");
var _reactNativeMocks = require("./react-native-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 = _interopRequireDefault(require("../../invariant"));
var _utils2 = require("../../react/utils.js");
var _descriptors = require("../../descriptors.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
/* strict-local */
function _default(realm) {
let global = realm.$GlobalObject;
if (realm.react.enabled) {
// Create it eagerly so it's created outside effect branches
realm.react.defaultPropsHelper = (0, _utils2.createDefaultPropsHelper)(realm);
let emptyArray = new _index.ArrayValue(realm);
emptyArray.makeFinal();
realm.react.emptyArray = emptyArray;
let emptyObject = new _index.ObjectValue(realm, realm.intrinsics.ObjectPrototype);
emptyObject.makeFinal();
realm.react.emptyObject = emptyObject;
} // 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", new _descriptors.PropertyDescriptor({
value: moduleExportsValue,
writable: true,
enumerable: false,
configurable: true
}));
global.$DefineOwnProperty("module", new _descriptors.PropertyDescriptor({
value: moduleValue,
writable: true,
enumerable: false,
configurable: true
})); // apply require() mock
global.$DefineOwnProperty("require", new _descriptors.PropertyDescriptor({
value: new _index.NativeFunctionValue(realm, "require", "require", 0, (context, [requireNameVal]) => {
(0, _invariant.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-dom" || requireNameValValue === "ReactDOM") {
if (realm.fbLibraries.reactDom === undefined) {
let reactDom = (0, _reactDomMocks.createMockReactDOM)(realm, requireNameValValue);
realm.fbLibraries.reactDom = reactDom;
return reactDom;
}
return realm.fbLibraries.reactDom;
} else if (requireNameValValue === "react-dom/server" || requireNameValValue === "ReactDOMServer") {
if (realm.fbLibraries.reactDomServer === undefined) {
let reactDomServer = (0, _reactDomMocks.createMockReactDOMServer)(realm, requireNameValValue);
realm.fbLibraries.reactDomServer = reactDomServer;
return reactDomServer;
}
return realm.fbLibraries.reactDomServer;
} else if (requireNameValValue === "react-native" || requireNameValValue === "ReactNative") {
if (realm.fbLibraries.reactNative === undefined) {
let reactNative = (0, _reactNativeMocks.createMockReactNative)(realm, requireNameValValue);
realm.fbLibraries.reactNative = reactNative;
return reactNative;
}
return realm.fbLibraries.reactNative;
} 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, _invariant.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, _invariant.default)(requireVal instanceof _index.AbstractValue);
return requireVal;
}
}),
writable: true,
enumerable: false,
configurable: true
}));
if (realm.isCompatibleWith("fb-www")) {
(0, _fbMocks.createFbMocks)(realm, global);
}
}
//# sourceMappingURL=global.js.map