/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @polyfill * * @format */ "use strict"; /* eslint-disable no-bitwise */ global.__r = metroRequire; global.__d = define; global.__c = clear; global.__registerSegment = registerSegment; var modules = clear(); // Don't use a Symbol here, it would pull in an extra polyfill with all sorts of // additional stuff (e.g. Array.from). var EMPTY = {}; var _ref = {}, hasOwnProperty = _ref.hasOwnProperty; function clear() { modules = Object.create(null); // We return modules here so that we can assign an initial value to modules // when defining it. Otherwise, we would have to do "let modules = null", // which will force us to add "nullthrows" everywhere. return modules; } if (__DEV__) { var verboseNamesToModuleIds = Object.create(null); var initializingModuleIds = []; } function define(factory, moduleId, dependencyMap) { if (modules[moduleId] != null) { if (__DEV__) { // (We take `inverseDependencies` from `arguments` to avoid an unused // named parameter in `define` in production. var inverseDependencies = arguments[4]; // If the module has already been defined and the define method has been // called with inverseDependencies, we can hot reload it. if (inverseDependencies) { global.__accept(moduleId, factory, dependencyMap, inverseDependencies); } } // prevent repeated calls to `global.nativeRequire` to overwrite modules // that are already loaded return; } modules[moduleId] = { dependencyMap: dependencyMap, factory: factory, hasError: false, importedAll: EMPTY, importedDefault: EMPTY, isInitialized: false, publicModule: { exports: {} } }; if (__DEV__) { // HMR modules[moduleId].hot = createHotReloadingObject(); // DEBUGGABLE MODULES NAMES // we take `verboseName` from `arguments` to avoid an unused named parameter // in `define` in production. var verboseName = arguments[3]; if (verboseName) { modules[moduleId].verboseName = verboseName; verboseNamesToModuleIds[verboseName] = moduleId; } } } function metroRequire(moduleId) { if (__DEV__ && typeof moduleId === "string") { var verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; if (moduleId == null) { throw new Error('Unknown named module: "'.concat(verboseName, '"')); } else { console.warn( 'Requiring module "'.concat( verboseName, '" by name is only supported for ' ) + "debugging purposes and will BREAK IN PRODUCTION!" ); } } //$FlowFixMe: at this point we know that moduleId is a number var moduleIdReallyIsNumber = moduleId; if (__DEV__) { var initializingIndex = initializingModuleIds.indexOf( moduleIdReallyIsNumber ); if (initializingIndex !== -1) { var cycle = initializingModuleIds .slice(initializingIndex) .map(function(id) { return modules[id].verboseName; }); // We want to show A -> B -> A: cycle.push(cycle[0]); console.warn( "Require cycle: ".concat(cycle.join(" -> "), "\n\n") + "Require cycles are allowed, but can result in uninitialized values. " + "Consider refactoring to remove the need for a cycle." ); } } var module = modules[moduleIdReallyIsNumber]; return module && module.isInitialized ? module.publicModule.exports : guardedLoadModule(moduleIdReallyIsNumber, module); } function metroImportDefault(moduleId) { if (__DEV__ && typeof moduleId === "string") { var verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; } //$FlowFixMe: at this point we know that moduleId is a number var moduleIdReallyIsNumber = moduleId; if ( modules[moduleIdReallyIsNumber] && modules[moduleIdReallyIsNumber].importedDefault !== EMPTY ) { return modules[moduleIdReallyIsNumber].importedDefault; } var exports = metroRequire(moduleIdReallyIsNumber); var importedDefault = exports && exports.__esModule ? exports.default : exports; return (modules[moduleIdReallyIsNumber].importedDefault = importedDefault); } metroRequire.importDefault = metroImportDefault; function metroImportAll(moduleId) { if (__DEV__ && typeof moduleId === "string") { var verboseName = moduleId; moduleId = verboseNamesToModuleIds[verboseName]; } //$FlowFixMe: at this point we know that moduleId is a number var moduleIdReallyIsNumber = moduleId; if ( modules[moduleIdReallyIsNumber] && modules[moduleIdReallyIsNumber].importedAll !== EMPTY ) { return modules[moduleIdReallyIsNumber].importedAll; } var exports = metroRequire(moduleIdReallyIsNumber); var importedAll; if (exports && exports.__esModule) { importedAll = exports; } else { importedAll = {}; // Refrain from using Object.assign, it has to work in ES3 environments. if (exports) { for (var _key in exports) { if (hasOwnProperty.call(exports, _key)) { importedAll[_key] = exports[_key]; } } } importedAll.default = exports; } return (modules[moduleIdReallyIsNumber].importedAll = importedAll); } metroRequire.importAll = metroImportAll; var inGuard = false; function guardedLoadModule(moduleId, module) { if (!inGuard && global.ErrorUtils) { inGuard = true; var returnValue; try { returnValue = loadModuleImplementation(moduleId, module); } catch (e) { global.ErrorUtils.reportFatalError(e); } inGuard = false; return returnValue; } else { return loadModuleImplementation(moduleId, module); } } var ID_MASK_SHIFT = 16; var LOCAL_ID_MASK = ~0 >>> ID_MASK_SHIFT; function unpackModuleId(moduleId) { var segmentId = moduleId >>> ID_MASK_SHIFT; var localId = moduleId & LOCAL_ID_MASK; return { segmentId: segmentId, localId: localId }; } metroRequire.unpackModuleId = unpackModuleId; function packModuleId(value) { return (value.segmentId << ID_MASK_SHIFT) + value.localId; } metroRequire.packModuleId = packModuleId; var hooks = []; function registerHook(cb) { var hook = { cb: cb }; hooks.push(hook); return { release: function release() { for (var i = 0; i < hooks.length; ++i) { if (hooks[i] === hook) { hooks.splice(i, 1); break; } } } }; } metroRequire.registerHook = registerHook; var moduleDefinersBySegmentID = []; function registerSegment(segmentID, moduleDefiner) { moduleDefinersBySegmentID[segmentID] = moduleDefiner; } function loadModuleImplementation(moduleId, module) { if (!module && moduleDefinersBySegmentID.length > 0) { var _unpackModuleId = unpackModuleId(moduleId), segmentId = _unpackModuleId.segmentId, localId = _unpackModuleId.localId; var definer = moduleDefinersBySegmentID[segmentId]; if (definer != null) { definer(localId); module = modules[moduleId]; } } var nativeRequire = global.nativeRequire; if (!module && nativeRequire) { var _unpackModuleId2 = unpackModuleId(moduleId), _segmentId = _unpackModuleId2.segmentId, _localId = _unpackModuleId2.localId; nativeRequire(_localId, _segmentId); module = modules[moduleId]; } if (!module) { throw unknownModuleError(moduleId); } if (module.hasError) { throw moduleThrewError(moduleId, module.error); } // `metroRequire` calls into the require polyfill itself are not analyzed and // replaced so that they use numeric module IDs. // The systrace module will expose itself on the metroRequire function so that // it can be used here. // TODO(davidaurelio) Scan polyfills for dependencies, too (t9759686) if (__DEV__) { var Systrace = metroRequire.Systrace; } // We must optimistically mark module as initialized before running the // factory to keep any require cycles inside the factory from causing an // infinite require loop. module.isInitialized = true; var _module = module, factory = _module.factory, dependencyMap = _module.dependencyMap; if (__DEV__) { initializingModuleIds.push(moduleId); } try { if (__DEV__) { // $FlowFixMe: we know that __DEV__ is const and `Systrace` exists Systrace.beginEvent("JS_require_" + (module.verboseName || moduleId)); } var _moduleObject = module.publicModule; if (__DEV__) { if (module.hot) { _moduleObject.hot = module.hot; } } _moduleObject.id = moduleId; if (hooks.length > 0) { for (var i = 0; i < hooks.length; ++i) { hooks[i].cb(moduleId, _moduleObject); } } // keep args in sync with with defineModuleCode in // metro/src/Resolver/index.js // and metro/src/ModuleGraph/worker.js factory( global, metroRequire, metroImportDefault, metroImportAll, _moduleObject, _moduleObject.exports, dependencyMap ); // avoid removing factory in DEV mode as it breaks HMR if (!__DEV__) { // $FlowFixMe: This is only sound because we never access `factory` again module.factory = undefined; module.dependencyMap = undefined; } if (__DEV__) { // $FlowFixMe: we know that __DEV__ is const and `Systrace` exists Systrace.endEvent(); } return _moduleObject.exports; } catch (e) { module.hasError = true; module.error = e; module.isInitialized = false; module.publicModule.exports = undefined; throw e; } finally { if (__DEV__) { if (initializingModuleIds.pop() !== moduleId) { throw new Error( "initializingModuleIds is corrupt; something is terribly wrong" ); } } } } function unknownModuleError(id) { var message = 'Requiring unknown module "' + id + '".'; if (__DEV__) { message += "If you are sure the module is there, try restarting Metro Bundler. " + "You may also want to run `yarn`, or `npm install` (depending on your environment)."; } return Error(message); } function moduleThrewError(id, error) { var displayName = (__DEV__ && modules[id] && modules[id].verboseName) || id; return Error( 'Requiring module "' + displayName + '", which threw an exception: ' + error ); } if (__DEV__) { metroRequire.Systrace = { beginEvent: function beginEvent() {}, endEvent: function endEvent() {} }; metroRequire.getModules = function() { return modules; }; // HOT MODULE RELOADING var createHotReloadingObject = function createHotReloadingObject() { var hot = { acceptCallback: null, accept: function accept(callback) { hot.acceptCallback = callback; }, disposeCallback: null, dispose: function dispose(callback) { hot.disposeCallback = callback; } }; return hot; }; var metroAcceptAll = function metroAcceptAll( dependentModules, inverseDependencies, patchedModules ) { if (!dependentModules || dependentModules.length === 0) { return true; } var notAccepted = dependentModules.filter(function(module) { return !metroAccept( module, /*factory*/ undefined, /*dependencyMap*/ undefined, inverseDependencies, patchedModules ); }); var parents = []; for (var i = 0; i < notAccepted.length; i++) { // if the module has no parents then the change cannot be hot loaded if (inverseDependencies[notAccepted[i]].length === 0) { return false; } parents.push.apply(parents, inverseDependencies[notAccepted[i]]); } return parents.length == 0; }; var metroAccept = function metroAccept( id, factory, dependencyMap, inverseDependencies ) { var patchedModules = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; if (id in patchedModules) { // Do not patch the same module more that once during an update. return true; } patchedModules[id] = true; var mod = modules[id]; if (!mod && factory) { // New modules are going to be handled by the define() method. return true; } var hot = mod.hot; if (!hot) { console.warn( "Cannot accept module because Hot Module Replacement " + "API was not installed." ); return false; } if (hot.disposeCallback) { try { hot.disposeCallback(); } catch (error) { console.error( "Error while calling dispose handler for module ".concat(id, ": "), error ); } } // replace and initialize factory if (factory) { mod.factory = factory; } if (dependencyMap) { mod.dependencyMap = dependencyMap; } mod.hasError = false; mod.isInitialized = false; metroRequire(id); if (hot.acceptCallback) { try { hot.acceptCallback(); return true; } catch (error) { console.error( "Error while calling accept handler for module ".concat(id, ": "), error ); } } // need to have inverseDependencies to bubble up accept if (!inverseDependencies) { throw new Error("Undefined `inverseDependencies`"); } // accept parent modules recursively up until all siblings are accepted return metroAcceptAll( inverseDependencies[id], inverseDependencies, patchedModules ); }; global.__accept = metroAccept; }