All files / src/apis/shared url.ts

94.11% Statements 16/17
100% Branches 3/3
75% Functions 3/4
100% Lines 14/14

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 496x                         6x       82x 44x     82x   82x 126x   126x 126x                   82x   82x   82x     82x   82x    
import { formatQuerystring } from "./querystring";
import type { AnyRecord } from "./types";
 
export type URLResult = (queryParameters?: AnyRecord) => string;
 
/**
 *
 *
 * @export
 * @param {string[]} parts
 * @param {...unknown[]} insertions
 * @return {URLResult}
 */
export function url(
  parts: TemplateStringsArray,
  ...insertions: unknown[]
): URLResult {
  const safeInsertions = insertions.map((value) =>
    encodeURIComponent(String(value))
  );
 
  let url = "";
 
  for (const part of parts) {
    url += part;
 
    const insertion = safeInsertions.shift();
    if (typeof insertion === "string") url += insertion;
  }
 
  /**
   *
   *
   * @param {AnyRecord} [queryParameters={}]
   * @return {string}  {string}
   */
  function createUrl(queryParameters: AnyRecord = {}): string {
    const querystring = formatQuerystring(queryParameters);
 
    if (querystring.length > 0) url += `?${querystring}`;
 
    return url;
  }
 
  createUrl.toString = () => createUrl();
 
  return createUrl as URLResult;
}