| 1 | import type { ResolvedSlidevOptions, SlidevData, SlidevServerOptions } from '@slidev/types' |
| 2 | import type { ConfigEnv, InlineConfig } from 'vite' |
| 3 | import MarkdownExit from 'markdown-exit' |
| 4 | import { loadConfigFromFile, mergeConfig } from 'vite' |
| 5 | import { resolveSourceFiles } from '../resolver' |
| 6 | import markdownItLink from '../syntax/link' |
| 7 | import { stringifyMarkdownTokens } from '../utils' |
| 8 | import { ViteSlidevPlugin } from '../vite' |
| 9 | |
| 10 | export const sharedMd = MarkdownExit({ html: true }) |
| 11 | sharedMd.use(markdownItLink) |
| 12 | |
| 13 | export function getSlideTitle(data: SlidevData) { |
| 14 | const tokens = sharedMd.parseInline(data.config.title, {}) |
| 15 | const title = stringifyMarkdownTokens(tokens) |
| 16 | const slideTitle = data.config.titleTemplate.replace('%s', title) |
| 17 | return slideTitle === 'Slidev - Slidev' ? 'Slidev' : slideTitle |
| 18 | } |
| 19 | |
| 20 | export async function resolveViteConfigs( |
| 21 | options: ResolvedSlidevOptions, |
| 22 | baseConfig: InlineConfig, |
| 23 | overrideConfigs: InlineConfig, |
| 24 | command: 'serve' | 'build', |
| 25 | serverOptions?: SlidevServerOptions, |
| 26 | ) { |
| 27 | // Merge theme & addon & user configs |
| 28 | const configEnv: ConfigEnv = { |
| 29 | mode: command === 'build' ? 'production' : 'development', |
| 30 | command, |
| 31 | } |
| 32 | const files = resolveSourceFiles(options.roots, 'vite.config') |
| 33 | const configs = await Promise.all(files.map(file => loadConfigFromFile(configEnv, file))) |
| 34 | for (const config of configs) { |
| 35 | if (!config?.config) |
| 36 | continue |
| 37 | baseConfig = mergeConfig(baseConfig, config.config) |
| 38 | } |
| 39 | |
| 40 | // Merge command-specific overrides |
| 41 | baseConfig = mergeConfig(baseConfig, overrideConfigs) |
| 42 | |
| 43 | // Merge common overrides |
| 44 | baseConfig = mergeConfig(baseConfig, { |
| 45 | configFile: false, |
| 46 | root: options.userRoot, |
| 47 | plugins: await ViteSlidevPlugin(options, baseConfig.slidev, serverOptions), |
| 48 | define: { |
| 49 | // Fixes Vue production mode breaking PDF Export #1245 |
| 50 | __VUE_PROD_DEVTOOLS__: false, |
| 51 | }, |
| 52 | } satisfies InlineConfig) |
| 53 | |
| 54 | return baseConfig |
| 55 | } |
| 56 |