All files / src string-helpers.ts

60% Statements 9/15
66.67% Branches 6/9
66.67% Functions 2/3
60% Lines 9/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62                    33x 33x 17x   16x                       19x     19x 19x 16x             3x                                              
// runtime polyfills
import 'core-js/es/string/match-all';
 
/**
 * @returns [`true`, modifiedContent: string] if replacement is successful, [`false`, originalContent] otherwise.
 */
export function replace(
  content: string,
  { replaceContent, replacePattern }: { replaceContent: string; replacePattern: string | RegExp }
): [boolean, string] {
  const replacePatternOccurrence = content.search(replacePattern);
  if (replacePatternOccurrence !== -1) {
    return [true, content.replace(replacePattern, replaceContent)];
  }
  return [false, content];
}
 
/**
 * Inserts content just before first occurrence of provided pattern.
 * @returns [`true`, modifiedContent: string] if insertion is successful, [`false`, originalContent] otherwise.
 */
export function insert(
  content: string,
  { insertContent, insertPattern }: { insertContent: string; insertPattern: RegExp | string },
  insertBeforeLastOccurrence: boolean = false
): [boolean, string] {
  Iif (insertBeforeLastOccurrence) {
    return insertBeforeLastOccurrenceFun(content, { insertContent, insertPattern });
  }
  const insertPatternOccurrence = content.search(insertPattern);
  if (insertPatternOccurrence !== -1) {
    return [
      true,
      `${content.slice(0, insertPatternOccurrence)}${insertContent}${content.slice(
        insertPatternOccurrence
      )}`,
    ];
  }
  return [false, content];
}
 
/**
 * Finds last occurrence of provided pattern and inserts content just before it.
 *@returns [`true`, modifiedContent: string] if insertion is successful, [`false`, originalContent] otherwise.
 */
function insertBeforeLastOccurrenceFun(
  content: string,
  { insertContent, insertPattern }: { insertContent: string; insertPattern: RegExp | string }
): [boolean, string] {
  const results = [...content.matchAll(new RegExp(insertPattern, 'gm'))];
  const patternLastOccurrence = results[results.length - 1];
  if (!patternLastOccurrence) {
    return [false, content];
  }
  return [
    true,
    `${content.slice(0, patternLastOccurrence.index)}${insertContent}${content.slice(
      patternLastOccurrence.index
    )}`,
  ];
}