import type { StarlightPlugin } from '@astrojs/starlight/types'; import { validateConfig, type StarlightSiteGraphConfig } from './config'; import integration from './integration'; import { translations } from './i18n'; import { ensureTrailingSlash } from './sitemap/util'; export default function plugin(userConfig?: StarlightSiteGraphConfig): StarlightPlugin { const parsedConfig = validateConfig(userConfig); return { name: 'starlight-site-graph-plugin', hooks: { 'i18n:setup'({ injectTranslations }) { injectTranslations(translations); }, 'config:setup': async ({ addIntegration, config, astroConfig, command, logger, updateConfig }) => { if (command === 'preview') return; const addTrailingSlashes = astroConfig.trailingSlash !== "never"; // TODO: Temporary implementation of graph/backlinks exclusion from plugin if (!parsedConfig.graph) { parsedConfig.graphConfig.visibilityRules = []; } if (!parsedConfig.backlinks) { parsedConfig.backlinksConfig.visibilityRules = []; } if (!(parsedConfig.graph || parsedConfig.backlinks)) { // EXPL: This bypasses the sitemap generation, so page contents don't have to be parsed parsedConfig.sitemapConfig.pageInclusionRules = []; } // DEPRECATED: Removed in 0.5.0 in favor of `sitemapConfig.ignoreLinksInSelectors` // May be relevant if somehow credit/edit link is moved outside of