All files / src/services shared.ts

92.31% Statements 12/13
50% Branches 1/2
75% Functions 3/4
91.67% Lines 11/12

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 553x               8x                   3x 4x 4x 4x   4x   4x               3x                           3x 9x            
import qs from "query-string";
import { AnyResponse } from "./shared.types";
 
/**
 * Форматирует часть даты
 * @param {number} x
 * @return {string}
 */
const fd = (x: number) => x.toString().padStart(2, "0");
 
/**
 * Форматирует дату в понятную для QIWI строку:
 *
 * `ГГГГ-ММ-ДДTЧЧ:ММ:СС+\-ЧЧ:ММ`
 *
 * @param {Date | number | string} date Аргумент для конструктора
 * @return {string}
 */
export function formatDate(date: Date | number | string): string {
  const d = new Date(date);
  const tz = d.getTimezoneOffset();
  const sign = tz > 0 ? "-" : "+";
 
  const base = d.toISOString().split(".")[0];
 
  return base + sign + fd(Math.trunc(Math.abs(tz) / 60)) + ":" + fd(tz % 60);
}
 
/**
 * Разбирает строку запроса, в том формате, который передаёт QIWI
 * @param {string} querystring Строка запроса
 * @return {*}
 */
export function parseQS(querystring: string): AnyResponse {
  return qs.parse(querystring, {
    arrayFormat: "index",
    parseBooleans: true,
    parseNumbers: true
  }) as any;
}
 
/**
 * Создаёт строку запроса, в формате, который понимает QIWI
 *
 * @param {AnyResponse} object Объект для преобразования
 * @return {string}
 */
export function createQS(object: AnyResponse): string {
  return qs.stringify(object as any, {
    arrayFormat: "index",
    skipNull: true,
    skipEmptyString: false
  });
}