File size: 1,417 Bytes
bf48b89 | 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 | import os from 'node:os';
import title from 'title';
import { parseDate } from '@/utils/parse-date';
// convert a string into title case
const toTitleCase = (str: string) => title(str);
const rWhiteSpace = /\s+/;
const rAllWhiteSpace = /\s+/g;
// collapse all whitespaces into a single space (like "white-space: normal;" would do), and trim
const collapseWhitespace = (str?: string | null) => {
if (str && rWhiteSpace.test(str)) {
return str.replaceAll(rAllWhiteSpace, ' ').trim();
}
return str;
};
const convertDateToISO8601 = (date?: string | Date | number | null) => {
if (!date) {
return date;
}
if (typeof date !== 'object') {
// some routes may call `.toUTCString()` before passing the date to ctx...
date = parseDate(date);
}
return date.toISOString();
};
const getSubPath = (ctx) => {
const subPath = ctx.req.path.replace(/\/[^/]*/, '') || '/';
return subPath;
};
const getLocalhostAddress = () => {
const interfaces = os.networkInterfaces();
const address = Object.keys(interfaces)
.flatMap((name) => interfaces[name] ?? [])
.filter((iface) => iface?.family === 'IPv4' && !iface.internal)
.map((iface) => iface?.address)
.filter(Boolean);
address.push('[::]');
return address;
};
export { collapseWhitespace, convertDateToISO8601, getLocalhostAddress, getSubPath, toTitleCase };
|