From 77a349954c8af114df20bcbe3f2f9d0c0fef83bc Mon Sep 17 00:00:00 2001 From: Jacob Hummer Date: Tue, 24 Oct 2023 20:10:03 +0000 Subject: [PATCH] support site config .extends being an array --- __tests__/e2e/.vitepress/config.ts | 14 +++++++++++--- src/node/config.ts | 9 +++++++-- src/node/siteConfig.ts | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) 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 b2425c3e..7824f3e2 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -180,8 +180,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 10cd3967..c426d1e5 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