/**
 * 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.
 *
 *
 * @format
 */
"use strict";

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
  try {
    var info = gen[key](arg);
    var value = info.value;
  } catch (error) {
    reject(error);
    return;
  }
  if (info.done) {
    resolve(value);
  } else {
    Promise.resolve(value).then(_next, _throw);
  }
}

function _asyncToGenerator(fn) {
  return function() {
    var self = this,
      args = arguments;
    return new Promise(function(resolve, reject) {
      var gen = fn.apply(self, args);
      function _next(value) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
      }
      function _throw(err) {
        asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
      }
      _next(undefined);
    });
  };
}

const blacklist = require("./defaults/blacklist");

const os = require("os");

const path = require("path");

const _require = require("./defaults/defaults"),
  defaultCreateModuleIdFactory = _require.defaultCreateModuleIdFactory,
  platforms = _require.platforms,
  providesModuleNodeModules = _require.providesModuleNodeModules;

const _require2 = require("metro-cache"),
  FileStore = _require2.FileStore;

const DEFAULT = {
  allowPnp: true,
  assetRegistryPath: "missing-asset-registry-path",
  enhanceMiddleware: middleware => middleware,
  extraNodeModules: {},
  cacheStores: [
    new FileStore({
      root: path.join(os.tmpdir(), "metro-cache")
    })
  ],
  cacheVersion: "1.0",
  createModuleIdFactory: defaultCreateModuleIdFactory,
  dynamicDepsInPackages: "throwAtRuntime",
  getAsyncRequireModulePath: () => "metro/src/lib/bundle-modules/asyncRequire",
  getAssetExts: () => [],
  getBlacklistRE: () => blacklist(),
  getEnableBabelRCLookup: () => true,
  getPlatforms: () => platforms,
  getPolyfillModuleNames: () => [],
  getProjectRoots: undefined,
  // We assume the default project path is two levels up from
  // node_modules/metro/
  getProjectRoot: () => path.resolve(__dirname, "../../.."),
  getWatchFolders: () => [],
  getProvidesModuleNodeModules: () => providesModuleNodeModules.slice(),
  getRunModuleStatement: moduleId => `__r(${JSON.stringify(moduleId)});`,
  getSourceExts: () => [],
  getTransformModulePath: () => "metro-babel-transformer",
  getTransformOptions: (function() {
    var _ref = _asyncToGenerator(function*() {
      return {
        transform: {
          experimentalImportSupport: false,
          inlineRequires: false
        },
        preloadedModules: false,
        ramGroups: []
      };
    });

    return function getTransformOptions() {
      return _ref.apply(this, arguments);
    };
  })(),
  getPolyfills: () => [],
  getUseGlobalHotkey: () => true,
  postMinifyProcess: x => x,
  postProcessBundleSourcemap: _ref2 => {
    let code = _ref2.code,
      map = _ref2.map,
      outFileName = _ref2.outFileName;
    return {
      code,
      map
    };
  },
  resolveRequest: null,
  getResolverMainFields: () => ["browser", "main"],
  getModulesRunBeforeMainModule: () => [],
  getWorkerPath: () => "metro/src/DeltaBundler/Worker",
  processModuleFilter: module => true,
  transformVariants: () => ({
    default: {}
  }),
  virtualMapper: file => [file]
};
module.exports = {
  DEFAULT
};