@mintlify/common
Version:
Commonly shared code within Mintlify
40 lines (39 loc) • 1.8 kB
JavaScript
import { divisions, } from '@mintlify/validation';
import { optionallyRemoveLeadingSlash } from '../optionallyRemoveLeadingSlash.js';
import { iterateObjectArrayProperty } from './iterateObjectArrayProperty.js';
export function generatePathToLanguageDict(nav) {
const pathToLanguageDict = new Map();
traverseNavigation(pathToLanguageDict, nav, undefined);
return pathToLanguageDict;
}
function traverseNavigation(pathToLanguageDict, nav, nearestLanguage) {
const currentLanguage = 'language' in nav ? nav.language : nearestLanguage;
if ('pages' in nav) {
if ('root' in nav && typeof nav.root === 'object') {
traverseGroup(pathToLanguageDict, nav.root, currentLanguage);
}
nav.pages.forEach((page) => traverseGroup(pathToLanguageDict, page, currentLanguage));
return;
}
for (const division of ['groups', ...divisions]) {
iterateObjectArrayProperty(nav, division, (item) => traverseNavigation(pathToLanguageDict, item, currentLanguage));
}
}
function traverseGroup(pathToLanguageDict, entry, nearestLanguage) {
if ('pages' in entry) {
if ('root' in entry && typeof entry.root === 'object') {
traverseGroup(pathToLanguageDict, entry.root, nearestLanguage);
}
entry.pages.forEach((page) => traverseGroup(pathToLanguageDict, page, nearestLanguage));
}
else if ('href' in entry) {
const key = optionallyRemoveLeadingSlash(entry.href);
const existingLanguage = pathToLanguageDict.get(key);
if (!pathToLanguageDict.has(key)) {
pathToLanguageDict.set(key, nearestLanguage);
}
else if (existingLanguage !== nearestLanguage && existingLanguage !== undefined) {
pathToLanguageDict.set(key, undefined);
}
}
}