core/converters/text.converter.ts

core/converters/text.converter.ts is a file in Bane's Lab Deploy. 44 lines of code and 12 definitions.

import {
    BYTES_PER_GB,
    BYTES_PER_MB,
    CLOCK_FILL,
    CLOCK_PAD,
    CLOCK_SEPARATOR,
    DECIMALS,
    MS_PER_SECOND,
    SECONDS_PER_HOUR,
    SECONDS_PER_MINUTE,
    STAMP_LENGTH,
    STAMP_SEPARATOR,
} from "#configuration/constants/deployment.constants";
import { GIGABYTE, MEGABYTE } from "#configuration/strings/notification.strings";

const STAMP_PUNCTUATION = new Set([":", ".", "T"]);

export const formatBytes = function formatBytes(bytes: number): string {
    if (bytes >= BYTES_PER_GB) {
        return (bytes / BYTES_PER_GB).toFixed(DECIMALS) + GIGABYTE;
    }
    return (bytes / BYTES_PER_MB).toFixed(DECIMALS) + MEGABYTE;
};

export const formatDuration = function formatDuration(milliseconds: number): string {
    return (milliseconds / MS_PER_SECOND).toFixed(DECIMALS);
};

const padded = function padded(value: number): string {
    return String(value).padStart(CLOCK_PAD, CLOCK_FILL);
};

export const formatClock = function formatClock(seconds: number): string {
    const whole = Math.max(0, Math.round(seconds));
    const hours = Math.floor(whole / SECONDS_PER_HOUR);
    const minutes = Math.floor((whole % SECONDS_PER_HOUR) / SECONDS_PER_MINUTE);
    return [hours, minutes, whole % SECONDS_PER_MINUTE].map(padded).join(CLOCK_SEPARATOR);
};

export const stamp = function stamp(): string {
    const iso = new Date().toISOString().slice(0, STAMP_LENGTH);
    let out = "";
    for (const character of iso) {
        out += STAMP_PUNCTUATION.has(character) ? STAMP_SEPARATOR : character;
    }
    return out;
};

export const truncate = function truncate(text: string, limit: number, marker: string): string {
    return text.length > limit ? text.slice(0, limit) + marker : text;
};