UNPKG

@mintlify/common

Version:

Commonly shared code within Mintlify

40 lines (39 loc) 1.8 kB
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); } } }