export { default as TimeUtils } from './time';
export default class Utils {
/**
* Ensures that the given string ends in a period.
*/
public static period(msg: string): string {
if (msg.endsWith('.')) return msg;
return `${msg}.`;
}
/**
* Capitalizes the first letter of the given string.
*/
public static caps(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1);
}
/**
* Helper function that returns the intersection of two given arrays (using
* the given `compare` function to check if elements overlap).
* @see {@link https://stackoverflow.com/a/16227294/10023158}
*/
public static intersection(
arrA: Array,
arrB: Array,
compare: (a: A, b: B) => boolean = (a, b) => a === b
): Array {
return arrA.filter((itemA: A) => {
return arrB.findIndex((itemB: B) => compare(itemA, itemB)) > -1;
});
}
/**
* Joins the array like the typicall `Array.join` function but adds the
* `ending` concatenator between the last two items.
* @example
* const Utils = require('@tutorbook/utils');
* const subjects = ['Chemistry', 'Chemistry H', 'Algebra 1'];
* const str = Utils.join(subjects, 'or');
* assert(str === 'Chemistry, Chemistry H, or Algebra 1');
* @param {any[]} arr - The array of (typically) strings to concatenate.
* @param {string} [ending='and'] - The concatenator to insert between the last
* two items in the given `arr`.
* @param {bool} [oxfordComma=false] - Whether or not to have the Oxford
* comma before the last item.
* @return {string} The concatenated array in string form (with the given
* `ending` between the last two items in the given `arr`).
*/
public static join(
arr: Array,
ending = 'and',
oxfordComma = false
): string {
/* eslint-disable @typescript-eslint/restrict-template-expressions */
if (arr.length === 0) return '';
if (arr.length === 1) return `${arr[0]}`;
const lastItem: T | undefined = arr.pop();
const str: string = arr.join(', ');
return `${str + (oxfordComma ? ', ' : ' ') + ending} ${lastItem}`;
/* eslint-enable @typescript-eslint/restrict-template-expressions */
}
}