astro-ghostcms/packages/starlight-ghostcms/index.ts

87 lines
2.3 KiB
TypeScript
Raw Normal View History

import type { StarlightPlugin, StarlightUserConfig } from "@astrojs/starlight/types";
2024-03-03 16:49:15 +00:00
import type { AstroIntegrationLogger } from "astro";
import { type StarlightGhostConfig, validateConfig } from "./src/schemas/config";
import starlightGhostcms from "./src/integrations/starlight-ghostcms";
2024-03-03 16:49:15 +00:00
export type { StarlightGhostConfig };
2024-02-19 02:52:08 +00:00
2024-03-03 16:49:15 +00:00
export default function starlightGhostCMS(
userConfig?: StarlightGhostConfig,
): StarlightPlugin {
const config: StarlightGhostConfig = validateConfig(userConfig);
2024-03-03 16:49:15 +00:00
return {
name: "@matthiesenxyz/starlight-ghostcms-plugin",
hooks: {
setup({
astroConfig,
addIntegration,
config: starlightConfig,
logger,
updateConfig: updateStarlightConfig,
}) {
// Add the Starlight-GhostCMS integration
addIntegration(starlightGhostcms(config));
2024-03-06 04:24:59 +00:00
// Update the Starlight config with the GhostCMS config
2024-03-03 16:49:15 +00:00
updateStarlightConfig({
social: {
...starlightConfig.social,
...overrideRSS(starlightConfig.social, astroConfig.site),
2024-03-03 16:49:15 +00:00
},
components: {
...starlightConfig.components,
...overrideStarlightComponent(
starlightConfig.components,
logger,
"MarkdownContent",
),
...overrideStarlightComponent(
starlightConfig.components,
logger,
"Sidebar",
),
...overrideStarlightComponent(
starlightConfig.components,
logger,
"SiteTitle",
),
},
});
},
},
};
2024-02-19 02:52:08 +00:00
}
function overrideRSS(
socials: StarlightUserConfig["social"],
url: string | undefined
2024-03-06 06:31:18 +00:00
) {
if (socials?.rss) { return {}; }
if (url === undefined) { return undefined; }
return { rss: `${url}/rss.xml` };
}
2024-02-19 02:52:08 +00:00
function overrideStarlightComponent(
2024-03-03 16:49:15 +00:00
components: StarlightUserConfig["components"],
logger: AstroIntegrationLogger,
component: keyof NonNullable<StarlightUserConfig["components"]>,
) {
if (components?.[component]) {
logger.warn(
`It looks like you already have a \`${component}\` component override in your Starlight configuration.`,
);
logger.warn(
`To use \`starlight-ghostcms\`, remove the override for the \`${component}\` component.\n`,
);
logger.warn("This Warning can be ignored if you know what your doing ;)");
return {};
}
return {
[component]: `@matthiesenxyz/starlight-ghostcms/overrides/${component}.astro`,
};
}