UNPKG

vitepress-openapi

Version:

Generate VitePress API Documentation from OpenAPI Specification.

58 lines (48 loc) 1.69 kB
import type { Awaitable } from 'vitepress' import type { EnhanceAppContext, Theme } from 'vitepress/client' import type { Component } from 'vue' import type { OpenApiSpecInstance } from './lib/spec/createOpenApiSpec' import { createI18n } from '@byjohann/vue-i18n' import { watch } from 'vue' import * as components from './components' import { DEFAULT_OPERATION_SLOTS, useTheme } from './composables/useTheme' interface OAEnhanceAppContext extends EnhanceAppContext { openapi?: OpenApiSpecInstance | null } interface VPTheme { Layout: Component enhanceApp: (ctx: OAEnhanceAppContext) => Awaitable<void> extends?: Theme } export const theme = { enhanceApp({ app }) { const themeConfig = useTheme() const i18nConfig = themeConfig.getI18nConfig() const i18n = createI18n({ defaultLocale: i18nConfig.locale?.value || 'en', messages: i18nConfig.messages || {}, }) app.use(i18n) watch( () => themeConfig.getLocale(), () => { i18n.setLocale(themeConfig.getLocale()) }, { immediate: true, }, ) Object.entries(components).forEach(([key, component]) => { app.component(key, component) }) }, } as VPTheme export { useOpenapi } from './composables/useOpenapi' export { usePlayground } from './composables/usePlayground' export { DEFAULT_OPERATION_SLOTS } export { useShiki } from './composables/useShiki' export { useTheme } from './composables/useTheme' export { generateCodeSample } from './lib/codeSamples/generateCodeSample' export { OARequest } from './lib/codeSamples/request' export { createOpenApiSpec } from './lib/spec/createOpenApiSpec' export { locales } from './locales'