starlight-auto-drafts
Version:
Starlight plugin to tweak draft pages default behavior and automatically remove sidebar links to draft pages in production mode.
40 lines (32 loc) • 1.17 kB
text/typescript
import type { ViteUserConfig } from 'astro'
import type { StarlightAutoDraftsConfig } from './config'
import type { DraftIds } from './content'
export function vitePluginStarlightAutoDrafts(config: StarlightAutoDraftsConfig, draftIds: DraftIds): VitePlugin {
const modules = {
'virtual:starlight-auto-drafts/context': `export default {
config: ${JSON.stringify(config)},
draftIds: new Set(${JSON.stringify([...draftIds])}),
}`,
}
const moduleResolutionMap = Object.fromEntries(
(Object.keys(modules) as (keyof typeof modules)[]).map((key) => [resolveVirtualModuleId(key), key]),
)
return {
name: 'vite-plugin-starlight-auto-drafts',
load(id) {
const moduleId = moduleResolutionMap[id]
return moduleId ? modules[moduleId] : undefined
},
resolveId(id) {
return id in modules ? resolveVirtualModuleId(id) : undefined
},
}
}
function resolveVirtualModuleId<TModuleId extends string>(id: TModuleId): `\0${TModuleId}` {
return `\0${id}`
}
export interface StarlightAutoDraftsContext {
config: StarlightAutoDraftsConfig
draftIds: DraftIds
}
type VitePlugin = NonNullable<ViteUserConfig['plugins']>[number]