@mintlify/common
Version:
Commonly shared code within Mintlify
35 lines (34 loc) • 1.66 kB
JavaScript
import { divisions } from '@mintlify/validation';
import { optionallyRemoveLeadingSlash } from '../optionallyRemoveLeadingSlash.js';
import { iterateObjectArrayProperty } from './iterateObjectArrayProperty.js';
export function generatePathToVersionDictForDocsConfig(nav) {
const pathToVersionDict = new Map();
traverseNavigation(pathToVersionDict, nav, undefined);
return pathToVersionDict;
}
function traverseNavigation(pathToVersionDict, nav, nearestVersion) {
const currentVersion = 'version' in nav ? nav.version : nearestVersion;
if ('pages' in nav) {
if ('root' in nav && typeof nav.root === 'object') {
traverseGroup(pathToVersionDict, nav.root, currentVersion);
}
nav.pages.forEach((page) => traverseGroup(pathToVersionDict, page, currentVersion));
return;
}
for (const division of ['groups', 'tabs', ...divisions]) {
iterateObjectArrayProperty(nav, division, (item) => traverseNavigation(pathToVersionDict, item, currentVersion));
}
}
function traverseGroup(pathToVersionDict, entry, nearestVersion) {
if ('pages' in entry) {
const currentVersion = 'version' in entry ? entry.version : nearestVersion;
if ('root' in entry && typeof entry.root === 'object') {
traverseGroup(pathToVersionDict, entry.root, currentVersion);
}
entry.pages.forEach((page) => traverseGroup(pathToVersionDict, page, currentVersion));
}
else if ('href' in entry) {
const version = 'version' in entry ? entry.version : nearestVersion;
pathToVersionDict.set(optionallyRemoveLeadingSlash(entry.href), version);
}
}