UNPKG

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
"use strict"; 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