All files index.ts

100% Statements 11/11
100% Branches 5/5
100% Functions 3/3
100% Lines 11/11

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      9x 9x 7x 7x       16x 6x     10x 17x 17x 2x   15x    
import url from 'node:url';
 
export default function pathTemplater(str: string, options: Record<string, string> = {}) {
  const parsedUrl = url.parse(str);
  parsedUrl.pathname = replace(parsedUrl.pathname, options);
  parsedUrl.search = replace(parsedUrl.search, options);
  return url.format(parsedUrl);
}
 
function replace(str: string, options: Record<string, string>) {
  if (!str) {
    return str;
  }
 
  return str.replace(/:(\w+)/gi, (match, p1) => {
    const replacement = options[p1];
    if (!replacement) {
      throw new Error('Could not find url parameter ' + p1 + ' in passed options object');
    }
    return replacement;
  });
}