blob: 7c32edf8dc8b1561cbfa4208c22a7432ec4cfc9f [file] [log] [blame]
/**
* @license
* Copyright 2017 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Returns a count plus string that is pluralized when necessary.
*/
export function pluralize(count: number, noun: string): string {
if (count === 0) return '';
return `${count} ${noun}` + (count > 1 ? 's' : '');
}
export function addQuotesWhen(string: string, cond: boolean): string {
return cond ? `"${string}"` : string;
}
export function charsOnly(s: string): string {
return s.replace(/[^a-zA-Z]+/g, '');
}
export function ordinal(n?: number): string {
if (n === undefined) return '';
if (n % 10 === 1 && n % 100 !== 11) return `${n}st`;
if (n % 10 === 2 && n % 100 !== 12) return `${n}nd`;
if (n % 10 === 3 && n % 100 !== 13) return `${n}rd`;
return `${n}th`;
}
/**
* This converts any inputed value into string.
*
* This is so typescript checker doesn't fail.
*/
export function convertToString(key?: unknown) {
return key !== undefined ? String(key) : '';
}
export function capitalizeFirstLetter(str: string) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
/**
* Converts the items into a sentence-friendly format. Examples:
* listForSentence(["Foo", "Bar", "Baz"])
* => 'Foo, Bar, and Baz'
* listForSentence(["Foo", "Bar"])
* => 'Foo and Bar'
* listForSentence(["Foo"])
* => 'Foo'
*/
export function listForSentence(items: string[]): string {
if (items.length < 2) return items.join('');
if (items.length === 2) return items.join(' and ');
const firstItems = items.slice(0, items.length - 1);
const lastItem = items[items.length - 1];
return `${firstItems.join(', ')}, and ${lastItem}`;
}