UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

36 lines (31 loc) 1.43 kB
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}`; }