All files / src/apis/shared url-part.ts

13.33% Statements 2/15
0% Branches 0/3
0% Functions 0/3
15.38% Lines 2/13

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 393x                         3x                                                  
import { formatQuerystring } from "./querystring";
import type { AnyRecord } from "./types";
 
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();
    Iif (typeof insertion === "string") url += insertion;
  }
 
  return function createUrl(queryParameters: AnyRecord = {}): string {
    const querystring = formatQuerystring(queryParameters);
 
    Iif (querystring.length > 0) url += `?${querystring}`;
 
    return url;
  };
}