/**
 * 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";

const meta = require("../../shared/output/meta");

const _require = require("./util"),
  getModuleCodeAndMap = _require.getModuleCodeAndMap,
  concat = _require.concat;

const _require2 = require("metro-source-map"),
  createIndexMap = _require2.createIndexMap;

function asPlainBundle(_ref) {
  let filename = _ref.filename,
    idsForPath = _ref.idsForPath,
    modules = _ref.modules,
    requireCalls = _ref.requireCalls,
    sourceMapPath = _ref.sourceMapPath,
    enableIDInlining = _ref.enableIDInlining;
  let code = "";
  let line = 0;
  const sections = [];

  const modIdForPath = x => idsForPath(x).moduleId;

  for (const module of concat(modules, requireCalls)) {
    const _getModuleCodeAndMap = getModuleCodeAndMap(module, modIdForPath, {
        enableIDInlining
      }),
      moduleCode = _getModuleCodeAndMap.moduleCode,
      moduleMap = _getModuleCodeAndMap.moduleMap;

    code += moduleCode + "\n";

    if (moduleMap) {
      sections.push({
        map: moduleMap,
        offset: {
          column: 0,
          line
        }
      });
    }

    line += countLines(moduleCode);
  }

  if (sourceMapPath) {
    code += `//# sourceMappingURL=${sourceMapPath}`;
  }

  return {
    code,
    extraFiles: [[`${filename}.meta`, meta(code)]],
    map: createIndexMap(filename, sections)
  };
}

module.exports = asPlainBundle;
const reLine = /^/gm;

function countLines(string) {
  //$FlowFixMe This regular expression always matches
  return string.match(reLine).length;
}