@mintlify/common
Version:
Commonly shared code within Mintlify
46 lines (45 loc) • 1.93 kB
JavaScript
import { divisions, } from '@mintlify/validation';
import { isPage } from '../navigation/isPage.js';
import { optionallyRemoveLeadingSlash } from '../optionallyRemoveLeadingSlash.js';
import { iterateObjectArrayProperty } from './iterateObjectArrayProperty.js';
/**
* Assumes page hrefs in navWithPageContext have a leading / but config page paths do not.
* Outputted dictionary will NOT have a leading / in the dictionary keys.
*/
export function generatePathToVersionDict(decoratedNav) {
const pathToVersionDict = new Map();
generatePathToVersionDictRecursive(pathToVersionDict, decoratedNav);
return pathToVersionDict;
}
function generatePathToVersionDictRecursive(pathToVersionDict, nav, nearestVersion) {
if (typeof nav !== 'object')
return;
if (isPage(nav)) {
const key = optionallyRemoveLeadingSlash(nav.href);
const existingVersion = pathToVersionDict.get(key);
if (!pathToVersionDict.has(key)) {
pathToVersionDict.set(key, nearestVersion);
}
else if (existingVersion !== undefined && existingVersion !== nearestVersion) {
pathToVersionDict.set(key, undefined);
}
}
if ('pages' in nav && Array.isArray(nav.pages)) {
if ('root' in nav && typeof nav.root === 'object') {
generatePathToVersionDictRecursive(pathToVersionDict, nav.root, nearestVersion);
}
for (const page of nav.pages) {
if (typeof page === 'object') {
generatePathToVersionDictRecursive(pathToVersionDict, page, nearestVersion);
}
}
}
for (const key of ['groups', ...divisions]) {
iterateObjectArrayProperty(nav, key, (item) => {
let version = nearestVersion;
if (key === 'versions')
version = item.version;
generatePathToVersionDictRecursive(pathToVersionDict, item, version);
});
}
}