{
  "version": 3,
  "sources": ["../../src/autocomplete/get-autocomplete-match.ts"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\n\n/**\n * Internal dependencies\n */\n\nexport function getAutocompleteMatch(textContent, completers, options) {\n  const {\n    matchCount,\n    isBackspacing,\n    getTextAfterSelection,\n    lastCompletion\n  } = options;\n  if (!textContent) {\n    return null;\n  }\n\n  // Find the completer whose trigger prefix ends closest to the cursor\n  // (rightmost end position). Comparing end positions instead of start\n  // positions correctly resolves overlapping prefixes like \"@\" and \"@@\".\n  let completer = null;\n  let triggerIndex = -1;\n  let matchedEndIndex = -1;\n  let matchedPrefixLength = 0;\n  for (const currentCompleter of completers) {\n    const currentIndex = textContent.lastIndexOf(currentCompleter.triggerPrefix);\n    if (currentIndex < 0) {\n      continue;\n    }\n    const currentEndIndex = currentIndex + currentCompleter.triggerPrefix.length;\n    if (currentEndIndex > matchedEndIndex || currentEndIndex === matchedEndIndex && currentCompleter.triggerPrefix.length > matchedPrefixLength) {\n      completer = currentCompleter;\n      triggerIndex = currentIndex;\n      matchedEndIndex = currentEndIndex;\n      matchedPrefixLength = currentCompleter.triggerPrefix.length;\n    }\n  }\n  if (!completer) {\n    return null;\n  }\n  const {\n    allowContext,\n    triggerPrefix\n  } = completer;\n  const textWithoutTrigger = textContent.slice(triggerIndex + triggerPrefix.length);\n\n  // Prevent matching with an extremely long string, which causes\n  // the editor to slow-down significantly. This could happen, for\n  // example, if `matchingWhileBackspacing` is true and one of the\n  // \"words\" ends up being too long. Returning null here intentionally\n  // resets the autocompleter state in the caller.\n  if (textWithoutTrigger.length > 50) {\n    return null;\n  }\n  const mismatch = matchCount === 0;\n  const wordsFromTrigger = textWithoutTrigger.split(/\\s/);\n\n  // Allow matching when typing a trigger + the match string or when\n  // clicking in an existing trigger word on the page.\n  // E.g. \"Some text @a\" \u2014 \"@a\" is detected as a trigger word.\n  const hasOneTriggerWord = wordsFromTrigger.length === 1;\n\n  // Allow matching when backspacing near a trigger word (up to 3\n  // words from the trigger character). This lets us recover from a\n  // mismatch when backspacing while still imposing sane limits.\n  // E.g. \"Some text @marcelo sekkkk\" \u2014 backspacing \"kkkk\" re-shows\n  // the popup once the text matches again.\n  const matchingWhileBackspacing = isBackspacing && wordsFromTrigger.length <= 3;\n  if (mismatch && !(matchingWhileBackspacing || hasOneTriggerWord)) {\n    return null;\n  }\n  if (allowContext && !allowContext(textContent.slice(0, triggerIndex), getTextAfterSelection())) {\n    return null;\n  }\n  if (/^\\s/.test(textWithoutTrigger) || /\\s\\s+$/.test(textWithoutTrigger)) {\n    return null;\n  }\n\n  // After a completion whose value starts with the trigger prefix\n  // (e.g. @username), the trigger remains in the text and would\n  // re-activate the autocompleter. Suppress the match when the\n  // filter value still corresponds to the recently completed text.\n  if (lastCompletion && lastCompletion.name === completer.name && textWithoutTrigger.trimEnd() === lastCompletion.value) {\n    return null;\n  }\n  return {\n    completer,\n    filterValue: removeAccents(textWithoutTrigger)\n  };\n}"],
  "mappings": ";AAGA,OAAO,mBAAmB;AAMnB,SAAS,qBAAqB,aAAa,YAAY,SAAS;AACrE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAKA,MAAI,YAAY;AAChB,MAAI,eAAe;AACnB,MAAI,kBAAkB;AACtB,MAAI,sBAAsB;AAC1B,aAAW,oBAAoB,YAAY;AACzC,UAAM,eAAe,YAAY,YAAY,iBAAiB,aAAa;AAC3E,QAAI,eAAe,GAAG;AACpB;AAAA,IACF;AACA,UAAM,kBAAkB,eAAe,iBAAiB,cAAc;AACtE,QAAI,kBAAkB,mBAAmB,oBAAoB,mBAAmB,iBAAiB,cAAc,SAAS,qBAAqB;AAC3I,kBAAY;AACZ,qBAAe;AACf,wBAAkB;AAClB,4BAAsB,iBAAiB,cAAc;AAAA,IACvD;AAAA,EACF;AACA,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,qBAAqB,YAAY,MAAM,eAAe,cAAc,MAAM;AAOhF,MAAI,mBAAmB,SAAS,IAAI;AAClC,WAAO;AAAA,EACT;AACA,QAAM,WAAW,eAAe;AAChC,QAAM,mBAAmB,mBAAmB,MAAM,IAAI;AAKtD,QAAM,oBAAoB,iBAAiB,WAAW;AAOtD,QAAM,2BAA2B,iBAAiB,iBAAiB,UAAU;AAC7E,MAAI,YAAY,EAAE,4BAA4B,oBAAoB;AAChE,WAAO;AAAA,EACT;AACA,MAAI,gBAAgB,CAAC,aAAa,YAAY,MAAM,GAAG,YAAY,GAAG,sBAAsB,CAAC,GAAG;AAC9F,WAAO;AAAA,EACT;AACA,MAAI,MAAM,KAAK,kBAAkB,KAAK,SAAS,KAAK,kBAAkB,GAAG;AACvE,WAAO;AAAA,EACT;AAMA,MAAI,kBAAkB,eAAe,SAAS,UAAU,QAAQ,mBAAmB,QAAQ,MAAM,eAAe,OAAO;AACrH,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL;AAAA,IACA,aAAa,cAAc,kBAAkB;AAAA,EAC/C;AACF;",
  "names": []
}
