diff --git a/__tests__/e2e/.vitepress/config.ts b/__tests__/e2e/.vitepress/config.ts index 84fc64f2..8ecc514a 100644 --- a/__tests__/e2e/.vitepress/config.ts +++ b/__tests__/e2e/.vitepress/config.ts @@ -84,10 +84,18 @@ const sidebar: DefaultTheme.Config['sidebar'] = { } export default defineConfig({ - title: 'Example', - description: 'An example app using VitePress.', + extends: [ + { + title: 'Example', + description: 'An example app using VitePress.' + }, + { + themeConfig: { + sidebar + } + } + ], themeConfig: { - sidebar, search: { provider: 'local', options: { diff --git a/src/node/config.ts b/src/node/config.ts index d4a76de6..77137fef 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -195,8 +195,13 @@ async function resolveConfigExtends( ): Promise { const resolved = await (typeof config === 'function' ? config() : config) if (resolved.extends) { - const base = await resolveConfigExtends(resolved.extends) - return mergeConfig(base, resolved) + const extendsRaw = [resolved.extends].flat() + const manyBases = await Promise.all( + extendsRaw.map((config) => resolveConfigExtends(config)) + ) + // or reduceRight() depending on which side gets priority + const singleBase = manyBases.reduce((prev, curr) => mergeConfig(prev, curr)) + return mergeConfig(singleBase, resolved) } return resolved } diff --git a/src/node/siteConfig.ts b/src/node/siteConfig.ts index 74174280..c4b8dc76 100644 --- a/src/node/siteConfig.ts +++ b/src/node/siteConfig.ts @@ -56,7 +56,7 @@ export interface TransformPageContext { export interface UserConfig extends LocaleSpecificConfig { - extends?: RawConfigExports + extends?: RawConfigExports | RawConfigExports[] base?: string srcDir?: string