Skip to content

Commit f5bdd2b

Browse files
committed
update: add config type helper, clean up code
1 parent 7211246 commit f5bdd2b

File tree

3 files changed

+24
-17
lines changed

3 files changed

+24
-17
lines changed

src/client/app/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ function debugConfigLayers(path: string, layers: SiteData[]): SiteData[] {
7777
const summary = layers.map((c, i, arr) => {
7878
const n = i + 1
7979
if (n === arr.length) return `${n}. .vitepress/config (root)`
80-
return `${n}. ${(c as any)?.VP_SOURCE ?? '(Unknown Source)'}`
80+
return `${n}. ${(c as any)?.['[VP_SOURCE]'] ?? '(Unknown Source)'}`
8181
})
8282
console.debug(
8383
[summaryTitle, ''.padEnd(summaryTitle.length, '='), ...summary].join('\n')

src/node/siteConfig.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import type {
1414
SSGContext,
1515
SiteData
1616
} from './shared'
17-
import type { AdditionalConfig } from '../../types/shared'
17+
import type {
18+
AdditionalConfigDict,
19+
AdditionalConfigLoader
20+
} from '../../types/shared'
1821

1922
export type RawConfigExports<ThemeConfig = any> =
2023
| Awaitable<UserConfig<ThemeConfig>>
@@ -194,7 +197,9 @@ export interface UserConfig<ThemeConfig = any>
194197
* Multi-layer configuration overloading.
195198
* Auto-resolves to docs/.../config.(ts|js|json) when unspecified.
196199
*/
197-
additionalConfig?: AdditionalConfig
200+
additionalConfig?:
201+
| AdditionalConfigDict<ThemeConfig>
202+
| AdditionalConfigLoader<ThemeConfig>
198203
}
199204

200205
export interface SiteConfig<ThemeConfig = any>

types/shared.d.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ export type { DefaultTheme } from './default-theme.js'
55

66
export type Awaitable<T> = T | PromiseLike<T>
77

8+
// Beware that this may cause performance issues or infinite loops
9+
// Use only when absolutely necessary
10+
export type DeepPartial<T> = T extends object
11+
? {
12+
[K in keyof T]?: DeepPartial<T[K]>
13+
}
14+
: T
15+
816
export interface PageData {
917
relativePath: string
1018
/**
@@ -134,7 +142,9 @@ export interface SiteData<ThemeConfig = any> {
134142
router: {
135143
prefetchLinks: boolean
136144
}
137-
additionalConfig?: AdditionalConfig<ThemeConfig>
145+
additionalConfig?:
146+
| AdditionalConfigDict<ThemeConfig>
147+
| AdditionalConfigLoader<ThemeConfig>
138148
}
139149

140150
export type HeadConfig =
@@ -162,26 +172,18 @@ export interface LocaleSpecificConfig<ThemeConfig = any> {
162172
themeConfig?: ThemeConfig
163173
}
164174

165-
export interface AdditionalConfigEntry<ThemeConfig = any>
166-
extends LocaleSpecificConfig<ThemeConfig> {
167-
/**
168-
* Source of current config entry, only available in development mode
169-
*/
170-
src?: string
171-
}
175+
export type AdditionalConfig<ThemeConfig = any> = DeepPartial<
176+
LocaleSpecificConfig<ThemeConfig>
177+
>
172178

173179
export type AdditionalConfigDict<ThemeConfig = any> = Record<
174180
string,
175-
AdditionalConfigEntry<ThemeConfig>
181+
AdditionalConfig<ThemeConfig>
176182
>
177183

178184
export type AdditionalConfigLoader<ThemeConfig = any> = (
179185
path: string
180-
) => AdditionalConfigEntry<ThemeConfig>[]
181-
182-
export type AdditionalConfig<ThemeConfig = any> =
183-
| AdditionalConfigDict<ThemeConfig>
184-
| AdditionalConfigLoader<ThemeConfig>
186+
) => AdditionalConfig<ThemeConfig>[]
185187

186188
export type LocaleConfig<ThemeConfig = any> = Record<
187189
string,

0 commit comments

Comments
 (0)