Portfolio/server/utils/providers/index.ts
2026-09-08 19:54:06 +02:00

43 lines
1.1 KiB
TypeScript

import type { ContentProvider, ProviderOptions } from './types'
import { createGiteaProvider } from './gitea'
import { createGithubProvider } from './github'
import { createLocalProvider } from './local'
let cachedProvider: ContentProvider | null = null
export function useContentProvider(): ContentProvider {
if (cachedProvider) return cachedProvider
const content = contentConfig()
const opts: ProviderOptions = {
repo: content.repo,
branch: content.branch,
dir: content.dir,
token: content.token,
giteaUrl: content.giteaUrl,
localDir: content.localDir,
}
switch (content.provider) {
case 'github':
cachedProvider = createGithubProvider(opts)
break
case 'local':
cachedProvider = createLocalProvider(opts)
break
case 'gitea':
cachedProvider = createGiteaProvider(opts)
break
default:
throw new Error(
`unknown CONTENT_PROVIDER "${content.provider}" — expected gitea, github or local`,
)
}
return cachedProvider
}
export function resetContentProvider(): void {
cachedProvider = null
}