Initial Commit
This commit is contained in:
62
packages/util/src/text.ts
Normal file
62
packages/util/src/text.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
export function truncateText(input: string, length: number = 1000): string {
|
||||
return input.length > length ? input.substring(0, length) + '...' : input;
|
||||
}
|
||||
|
||||
export function formatNumberToShortForm(number: number, locale: string = 'en-uS') {
|
||||
let suffix = '';
|
||||
let value = number;
|
||||
|
||||
if (Math.abs(number) >= 1e9) {
|
||||
value = number / 1e9;
|
||||
suffix = 'b';
|
||||
} else if (Math.abs(number) >= 1e6) {
|
||||
value = number / 1e6;
|
||||
suffix = 'M';
|
||||
} else if (Math.abs(number) >= 1e3) {
|
||||
value = number / 1e3;
|
||||
suffix = 'k';
|
||||
}
|
||||
|
||||
// Format the number to have up to 4 significant digits
|
||||
const formattedValue = new Intl.NumberFormat(locale, {
|
||||
maximumSignificantDigits: 4,
|
||||
minimumSignificantDigits: 3,
|
||||
minimumFractionDigits: 0,
|
||||
maximumFractionDigits: 2,
|
||||
}).format(value);
|
||||
|
||||
return `${formattedValue}${suffix}`;
|
||||
}
|
||||
|
||||
export function normalize(value: string) {
|
||||
return value
|
||||
.toString()
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.replace(/[^a-zA-Z\s\d]/g, '')
|
||||
.trim();
|
||||
}
|
||||
|
||||
export function toTitleCase(value: string) {
|
||||
return value.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
|
||||
}
|
||||
|
||||
export function escapeMarkdown(text: string) {
|
||||
return text.replace(/([\\_*~`|])/g, '\\$1');
|
||||
}
|
||||
|
||||
export function escapeCodeBlock(text: string) {
|
||||
return text.replace(/```/g, '`\u200b``');
|
||||
}
|
||||
|
||||
export function escapeInlineCode(text: string) {
|
||||
return text.replace(/`/g, '\u200b`');
|
||||
}
|
||||
|
||||
export function escapeSpoiler(text: string) {
|
||||
return text.replace(/\|\|/g, '|\u200b|');
|
||||
}
|
||||
|
||||
export function escapeAll(text: string) {
|
||||
return escapeMarkdown(escapeCodeBlock(escapeInlineCode(escapeSpoiler(text))));
|
||||
}
|
||||
Reference in New Issue
Block a user