@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
36 lines (31 loc) • 1.43 kB
JavaScript
import { toKebabCase } from "./toKebabCase.mjs";
/**
* Generates a file slug based on main slug, file name, and variant name
* All variants except "Default" include the variant name in the hash
* @param mainSlug - The main component/demo slug
* @param fileName - The file name
* @param variantName - The variant name
* @returns Generated file slug
*/
export function generateFileSlug(mainSlug, fileName, variantName) {
// Extract base name from filename (strip extension)
const lastDotIndex = fileName.lastIndexOf('.');
const baseName = lastDotIndex !== -1 ? fileName.substring(0, lastDotIndex) : fileName;
const extension = lastDotIndex !== -1 ? fileName.substring(lastDotIndex) : '';
// Convert to kebab-case
const kebabMainSlug = toKebabCase(mainSlug);
const kebabBaseName = toKebabCase(baseName);
const kebabVariantName = toKebabCase(variantName);
// Reconstruct filename with kebab-case base name but preserved extension
const kebabFileName = `${kebabBaseName}${extension}`;
// Handle empty main slug case
if (!kebabMainSlug) {
return kebabFileName;
}
// Format: mainSlug:fileName.ext (for Default variant) or mainSlug:variantName:fileName.ext
// "Default" variant is treated specially and doesn't include variant name in hash
if (variantName === 'Default') {
return `${kebabMainSlug}:${kebabFileName}`;
}
return `${kebabMainSlug}:${kebabVariantName}:${kebabFileName}`;
}