@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
68 lines (62 loc) • 2.81 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _extends from "@babel/runtime/helpers/esm/extends";
/**
* Add path utility to add path property to each file in a variant
* Uses calculateMainFilePath utility and URL resolution for simplified path calculation
*/
import { calculateMaxBackNavigation, createSyntheticDirectories } from "./pathUtils.js";
import { calculateMainFilePath } from "./calculateMainFilePath.js";
/**
* Add flat paths to all files in a variant
*/
export function addPathsToVariant(variant) {
var url = variant.url || '';
var fileName = variant.fileName || '';
// Calculate actual back navigation needed based on extraFiles
var backNavResult = variant.extraFiles ? calculateMaxBackNavigation(variant.extraFiles) : {
maxBackNavigation: 0,
maxSourceBackNavigation: 0
};
// Create a synthetic URL for variants without URL to ensure consistent processing
var effectiveUrl = url;
if (!url && fileName) {
effectiveUrl = "file:///".concat(fileName);
}
// Calculate main file path using only the back navigation needed by source files
var mainFileUrl = effectiveUrl ? calculateMainFilePath(effectiveUrl, backNavResult.maxBackNavigation, backNavResult.maxSourceBackNavigation, variant.metadataPrefix, fileName || undefined // Only pass fileName if it's not empty
) : undefined;
// Extract just the path part from the file:// URL and remove leading slash
var path = mainFileUrl ? new URL(mainFileUrl).pathname.slice(1) : undefined;
return _extends(_extends({}, variant), {}, {
path: path,
extraFiles: calculateExtraFilesPaths(variant.extraFiles, mainFileUrl || "file:///".concat(backNavResult.maxBackNavigation > 0 ? "".concat(createSyntheticDirectories(backNavResult.maxBackNavigation).join('/'), "/") : '', "temp.txt"))
});
}
/**
* Calculate paths for all extra files using the same logic as the main file
*/
function calculateExtraFilesPaths(extraFiles, mainFileUrl) {
if (!extraFiles) {
return undefined;
}
var result = {};
for (var _i = 0, _Object$entries = Object.entries(extraFiles); _i < _Object$entries.length; _i++) {
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
relativePath = _Object$entries$_i[0],
fileContent = _Object$entries$_i[1];
// Resolve the relative path against the main file URL
try {
var resolvedUrl = new URL(relativePath, mainFileUrl);
var file = typeof fileContent === 'string' ? {
source: fileContent
} : fileContent;
result[relativePath] = _extends(_extends({}, file), {}, {
path: resolvedUrl.pathname.slice(1)
});
} catch (_unused) {
// If URL resolution fails, skip this file
continue;
}
}
return _extends(_extends({}, extraFiles), result);
}