返回 slidev
shared.ts
根目录 / packages / slidev / node / commands / shared.ts
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
56 lines TYPESCRIPT