Files
openmonetis/lib/logo/index.ts

72 lines
1.4 KiB
TypeScript

/**
* Logo utilities
*
* Consolidated from:
* - /lib/logo.ts (utility functions)
*/
/**
* Normalizes logo path to get just the filename
* @param logo - Logo path or URL
* @returns Filename only
*/
export const normalizeLogo = (logo?: string | null) =>
logo?.split("/").filter(Boolean).pop() ?? "";
/**
* Derives a display name from a logo filename
* @param logo - Logo path or filename
* @returns Formatted display name
* @example
* deriveNameFromLogo("my-company-logo.png") // "My Company Logo"
*/
export const deriveNameFromLogo = (logo?: string | null) => {
if (!logo) {
return "";
}
const fileName = normalizeLogo(logo);
if (!fileName) {
return "";
}
const withoutExtension = fileName.replace(/\.[^/.]+$/, "");
return withoutExtension
.split(/[-_.\s]+/)
.filter(Boolean)
.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
.join(" ");
};
const LOGO_SRC_PATTERN = /^(https?:\/\/|data:)/;
type ResolveLogoSrcOptions = {
basePath?: string;
};
export const resolveLogoSrc = (
logo?: string | null,
options?: ResolveLogoSrcOptions,
) => {
if (!logo) {
return null;
}
if (LOGO_SRC_PATTERN.test(logo)) {
return logo;
}
if (logo.startsWith("/")) {
return logo;
}
const fileName = normalizeLogo(logo);
if (!fileName) {
return null;
}
const basePath = options?.basePath?.replace(/\/$/, "") || "/logos";
return `${basePath}/${fileName}`;
};