UNPKG

@mdfriday/foundry

Version:

The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.

88 lines 3.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Navigation = void 0; exports.newNavigation = newNavigation; const log_1 = require("../../../../pkg/log"); const menu_1 = require("../valueobject/menu"); // Create domain-specific logger for navigation operations const log = (0, log_1.getDomainLogger)('site', { component: 'navigation' }); /** * Navigation - TypeScript equivalent of Go's Navigation entity * Handles navigation and taxonomy functionality with menu generation support */ class Navigation { constructor(langSvc) { this.taxonomiesBuilder = null; this.taxonomiesCache = new Map(); // Track which languages have generated taxonomies this.menuBuilder = null; this.menuCache = new Map(); // Track which languages have generated menus this.taxonomies = new Map(); this.menus = new Map(); // Initialize menus for each language for (const lang of langSvc.languageKeys()) { this.menus.set(lang, (0, menu_1.newEmptyMenus)()); this.menuCache.set(lang, false); // Mark as not generated } } setMenuBuilder(menuBuilder) { this.menuBuilder = menuBuilder; } setTaxonomiesBuilder(taxonomiesBuilder) { this.taxonomiesBuilder = taxonomiesBuilder; } async generateMenusForLanguage(lang, langIndex) { if (!this.menuBuilder) { log.error('Menu builder not set, cannot generate menus'); return; } // Check if menus are already generated for this language if (this.menuCache.get(lang) === true) { return; } try { const generatedMenus = await this.menuBuilder.buildMenusForLanguage(langIndex); this.menus.set(lang, generatedMenus); this.menuCache.set(lang, true); // Mark as generated } catch (error) { log.error(`Failed to generate menus for language ${lang}: ${error}`); } } async generateTaxonomiesForLanguage(lang, langIndex, site) { if (!this.taxonomiesBuilder) { log.error('Taxonomies builder not set, cannot generate taxonomies'); return; } // Check if taxonomies are already generated for this language if (this.taxonomiesCache.get(lang) === true) { return; } try { const generatedTaxonomies = await this.taxonomiesBuilder.buildTaxonomiesForLanguage(langIndex, site); this.taxonomies.set(lang, generatedTaxonomies); this.taxonomiesCache.set(lang, true); // Mark as generated } catch (error) { log.error(`Failed to generate taxonomies for language ${lang}: ${error}`); } } getMenus(lang) { let menus = this.menus.get(lang); if (menus === undefined) { menus = (0, menu_1.newEmptyMenus)(); // Return empty menus if not found } return menus; } getTaxonomies(lang) { return this.taxonomies.get(lang); } } exports.Navigation = Navigation; /** * Factory function to create new Navigation * TypeScript equivalent of NewNavigation function from Go */ function newNavigation(langSvc) { return new Navigation(langSvc); } //# sourceMappingURL=navigation.js.map