import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
var keywordRegExps = [/(const\s)(item)(\d+)/gm, /(const\s)(map)(\d+)/gm];
export default function replaceExistConsts(code, text) {
  var cache = {}; // すでに使われている変数名をここに追加していく

  var exists = function exists(searchText) {
    if (searchText in cache) return cache[searchText];
    return cache[searchText] = code.includes(searchText);
  };

  for (var _i = 0; _i < keywordRegExps.length; _i++) {
    var keyword = keywordRegExps[_i];
    // すでに使われている const item{N} のような変数を探す.
    keyword.lastIndex = 0; // カーソルをリセット

    for (var result = keyword.exec(text); result !== null; result = keyword.exec(text)) {
      // e.g. When 'const item1 = 1;': result === ['const item1', 'const ', 'item', '1']
      var _result = result,
          _result2 = _slicedToArray(_result, 4),
          all = _result2[0],
          prefix = _result2[1],
          identifier = _result2[2],
          init = _result2[3];

      if (!exists(all)) continue; // 被っていない => OK
      // もし名前が競合していたら, number を 1 ずつインクリメントする

      var number = (init >> 0) + 1;

      while (exists(prefix + identifier + number)) {
        number++;
      } // ユニークな名前が見つかった => 置き換え


      text = text.split(identifier + init).join(identifier + number);
      cache[prefix + identifier + number] = true; // この変数は使われている
    }
  }

  return text;
}