import { BreadcrumbListSchema } from './types'; interface BreadcrumbItem { name: string; url?: string; // Optional for last item (current page) } /** * Generate BreadcrumbList schema (JSON-LD) * Pure function - takes breadcrumb items, returns schema object * * @param items - Array of breadcrumb items with name and optional URL * @returns BreadcrumbListSchema object * @example * const breadcrumbs = [ * { name: 'Home', url: 'https://example.com' }, * { name: 'Products', url: 'https://example.com/products' }, * { name: 'Product Name' } // Current page (no URL) * ]; * const schema = generateBreadcrumbSchema(breadcrumbs); */ export function generateBreadcrumbSchema( items: BreadcrumbItem[] ): BreadcrumbListSchema { return { '@context': 'https://schema.org', '@type': 'BreadcrumbList', itemListElement: items.map((item, index) => ({ '@type': 'ListItem', position: index + 1, name: item.name, ...(item.url && { item: item.url }), // Only include item if URL exists })), }; } /** * Generate standard breadcrumbs for product pages * * @param baseUrl - Site base URL * @param locale - Locale code * @param productName - Product name * @param productSlug - Product slug * @returns BreadcrumbListSchema object */ export function generateProductBreadcrumbs( baseUrl: string, locale: string, productName: string, productSlug: string ): BreadcrumbListSchema { const localePrefix = locale === 'sr' ? '' : `/${locale}`; const items: BreadcrumbItem[] = [ { name: 'Home', url: `${baseUrl}${localePrefix || '/'}` }, { name: 'Products', url: `${baseUrl}${localePrefix}/products` }, { name: productName }, // Current page ]; return generateBreadcrumbSchema(items); } /** * Generate breadcrumbs for static pages * * @param baseUrl - Site base URL * @param locale - Locale code * @param pageName - Current page name * @returns BreadcrumbListSchema object */ export function generatePageBreadcrumbs( baseUrl: string, locale: string, pageName: string ): BreadcrumbListSchema { const localePrefix = locale === 'sr' ? '' : `/${locale}`; const items: BreadcrumbItem[] = [ { name: 'Home', url: `${baseUrl}${localePrefix || '/'}` }, { name: pageName }, // Current page ]; return generateBreadcrumbSchema(items); }