@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
70 lines (64 loc) • 2.52 kB
JavaScript
/**
* Variant examination utility for analyzing variant structure and paths
*/
import { getUrlParts, calculateMaxSourceBackNavigation } from "./pathUtils.mjs";
/**
* Create path context for processing files with extended information
*/
export function examineCodeVariant(variant) {
const hasMetadata = variant.extraFiles ? Object.values(variant.extraFiles).some(file => typeof file === 'object' && file.metadata) : false;
// Calculate maxSourceBackNavigation based only on extraFiles structure
const maxSourceBackNavigation = variant.extraFiles ? calculateMaxSourceBackNavigation(variant.extraFiles) : 0;
// Parse URL to determine path structure
let urlDirectory = [];
let rootLevel = '';
let pathInwardFromRoot = '';
if (variant.url && variant.url.includes('://')) {
try {
const pathComponents = getUrlParts(variant.url);
if (pathComponents.length > 0) {
// Check if the last component looks like a filename (has an extension)
const lastComponent = pathComponents[pathComponents.length - 1];
const hasFileExtension = lastComponent.includes('.') && /\.[a-zA-Z0-9]+$/.test(lastComponent);
// If it has a file extension, exclude it from directory components
const directoryComponents = hasFileExtension ? pathComponents.slice(0, -1) : pathComponents;
urlDirectory = directoryComponents;
rootLevel = directoryComponents[0] || '';
// Only calculate pathInwardFromRoot if there's actual back navigation
if (maxSourceBackNavigation > 0 && directoryComponents.length >= maxSourceBackNavigation) {
// Take the last maxSourceBackNavigation components as the pathInwardFromRoot
const relevantComponents = directoryComponents.slice(-maxSourceBackNavigation);
pathInwardFromRoot = relevantComponents.join('/');
}
}
} catch {
// If URL parsing fails, keep defaults
urlDirectory = [];
rootLevel = '';
pathInwardFromRoot = '';
}
}
// We keep the URL info for compatibility, but don't use it for calculations
const hasUrl = Boolean(variant.url);
const actualUrl = variant.url;
if (hasUrl && actualUrl) {
return {
hasUrl: true,
hasMetadata,
maxSourceBackNavigation,
urlDirectory,
rootLevel,
pathInwardFromRoot,
actualUrl
};
}
return {
hasUrl: false,
hasMetadata,
maxSourceBackNavigation,
urlDirectory,
rootLevel,
pathInwardFromRoot,
actualUrl: undefined
};
}