diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 251223308..9891941bd 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -10,6 +10,7 @@ import { resourcesSidebar } from './sidebar/resources'; import llmstxt from 'vitepress-plugin-llms'; import { transformPageData } from './transformPageData'; import getHeadConfig from './getHeadConfig'; +import { ALGOLIA_APP_ID, ALGOLIA_SEARCH_API_KEY } from './theme/utils/algolia'; const defaultSandpackCSS = await readFile( fileURLToPath(new URL('./theme/sandpack-default.css', import.meta.url)), @@ -134,8 +135,8 @@ export default defineConfig({ search: { provider: 'algolia', options: { - appId: 'R7KKMCPXOB', - apiKey: 'dd3101054267d35fb28f49c42715f1aa', + appId: ALGOLIA_APP_ID, + apiKey: ALGOLIA_SEARCH_API_KEY, indexName: 'lucide', }, }, diff --git a/docs/.vitepress/getStructuredData.ts b/docs/.vitepress/getStructuredData.ts index 7fde3ff12..6b7fabc60 100644 --- a/docs/.vitepress/getStructuredData.ts +++ b/docs/.vitepress/getStructuredData.ts @@ -15,6 +15,11 @@ export default async function getStructuredData(iconName: string, pageData: Page const awaitingRelease = Boolean(params.awaitingRelease); + // Aliases come through either as plain names or as `{ name, deprecated, ... }` objects. + const aliases: string[] = (params.aliases ?? []) + .map((alias: string | { name?: string }) => (typeof alias === 'string' ? alias : alias?.name)) + .filter((alias?: string): alias is string => Boolean(alias)); + return { '@context': 'https://schema.org', '@type': 'WebPage', @@ -39,6 +44,7 @@ export default async function getStructuredData(iconName: string, pageData: Page '@type': 'ImageObject', '@id': `${url}#icon`, name: iconName, + ...(aliases.length ? { alternateName: aliases } : {}), // TODO: Add support for description extraction from icon metadata // description: 'An ...SVG icon from the Lucide icon set.', // `/api/icons/` only renders core icons, a lab name would 404 there. diff --git a/docs/.vitepress/theme/utils/algolia.ts b/docs/.vitepress/theme/utils/algolia.ts index a38df778a..3929b326c 100644 --- a/docs/.vitepress/theme/utils/algolia.ts +++ b/docs/.vitepress/theme/utils/algolia.ts @@ -1,23 +1,7 @@ import type { LiteClient } from 'algoliasearch/lite'; -/** - * Public search credentials. The search-only key is meant to be shipped in the client - * bundle, so local dev, forks and preview deployments search the production index - * without any configuration. `VITE_ALGOLIA_*` env vars override these defaults. - * - * The index itself is populated by the Algolia crawler; nothing in the docs writes to it. - */ -const DEFAULTS = { - appId: 'R7KKMCPXOB', - searchApiKey: 'dd3101054267d35fb28f49c42715f1aa', - indexName: 'icons', -}; - -export const ALGOLIA_APP_ID = import.meta.env.VITE_ALGOLIA_APP_ID || DEFAULTS.appId; -export const ALGOLIA_SEARCH_API_KEY = - import.meta.env.VITE_ALGOLIA_SEARCH_API_KEY || DEFAULTS.searchApiKey; -export const ALGOLIA_INDEX_NAME = import.meta.env.VITE_ALGOLIA_INDEX_NAME || DEFAULTS.indexName; - +export const ALGOLIA_APP_ID = 'R7KKMCPXOB'; +export const ALGOLIA_SEARCH_API_KEY = 'dd3101054267d35fb28f49c42715f1aa'; // public key. /** * The index caps retrievable hits at 1000 per query (`paginationLimitedTo`), * so a single page of this size is the most we can ever get back. @@ -67,7 +51,7 @@ export async function searchIconIds(query: string): Promise { } = await client.searchForHits<{ objectID: string }>({ requests: [ { - indexName: ALGOLIA_INDEX_NAME, + indexName: 'icons', query, hitsPerPage: HITS_PER_PAGE, attributesToRetrieve: ['objectID'],