Skip to content

Commit 7e39712

Browse files
authored
Merge pull request #25 from barocss/feat/core-plugins-wiring
feat(core): barodoc.config.json plugins 연동
2 parents 7c25566 + 125c634 commit 7e39712

3 files changed

Lines changed: 44 additions & 8 deletions

File tree

.changeset/core-plugins-wiring.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@barodoc/core": minor
3+
---
4+
5+
Wire barodoc.config.json plugins into integration: load plugins, run config:loaded hook, merge plugin Astro integrations. Add plugins to config schema.

packages/core/src/config/schema.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ export const searchSchema = z.object({
4141
enabled: z.boolean().optional(),
4242
}).optional();
4343

44+
export const pluginConfigSchema = z.union([
45+
z.string(),
46+
z.tuple([z.string(), z.record(z.unknown())]),
47+
]);
48+
4449
export const barodocConfigSchema = z.object({
4550
name: z.string(),
4651
logo: z.string().optional(),
@@ -50,6 +55,7 @@ export const barodocConfigSchema = z.object({
5055
navigation: z.array(navItemSchema),
5156
topbar: topbarSchema,
5257
search: searchSchema,
58+
plugins: z.array(pluginConfigSchema).optional(),
5359
customCss: z.array(z.string()).optional(),
5460
});
5561

packages/core/src/integration.ts

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import type { AstroIntegration } from "astro";
22
import { loadConfig } from "./config/loader.js";
3+
import {
4+
loadPlugins,
5+
runConfigHook,
6+
getPluginIntegrations,
7+
} from "./plugins/loader.js";
38
import type { BarodocOptions, ResolvedBarodocConfig } from "./types.js";
9+
import type { PluginContext } from "./plugins/types.js";
410

511
const VIRTUAL_CONFIG_ID = "virtual:barodoc/config";
612
const VIRTUAL_I18N_ID = "virtual:barodoc/i18n";
@@ -53,36 +59,55 @@ export default function barodoc(options: BarodocOptions): AstroIntegration {
5359
config,
5460
updateConfig,
5561
logger,
62+
command,
5663
}) => {
5764
logger.info("Loading Barodoc configuration...");
5865

5966
// Convert URL to string path
60-
const rootPath = config.root instanceof URL
61-
? config.root.pathname
67+
const rootPath = config.root instanceof URL
68+
? config.root.pathname
6269
: String(config.root);
6370

6471
// Load config
6572
resolvedConfig = await loadConfig(configPath, rootPath);
6673
logger.info(`Loaded config: ${resolvedConfig.name}`);
6774

75+
const mode = command === "dev" ? "development" : "production";
76+
const pluginContext: PluginContext = {
77+
config: resolvedConfig,
78+
root: rootPath,
79+
mode,
80+
};
81+
82+
// Load and run plugins
83+
const pluginConfigs = resolvedConfig.plugins ?? [];
84+
const plugins = await loadPlugins(pluginConfigs, pluginContext);
85+
resolvedConfig = await runConfigHook(
86+
plugins,
87+
resolvedConfig,
88+
pluginContext
89+
);
90+
pluginContext.config = resolvedConfig;
91+
92+
if (plugins.length > 0) {
93+
logger.info(`Loaded ${plugins.length} plugin(s)`);
94+
}
95+
6896
// Setup i18n
6997
const i18nConfig = resolvedConfig.i18n || {
7098
defaultLocale: "en",
7199
locales: ["en"],
72100
};
73101

74-
// Merge theme integration
102+
// Theme + plugin integrations
75103
const themeIntegration = options.theme.integration();
76-
77-
// Merge theme integration
78-
// Note: i18n should be configured in astro.config.mjs, not here
79-
// to avoid Astro 5.x merge issues
104+
const pluginIntegrations = getPluginIntegrations(plugins, pluginContext);
80105

81106
updateConfig({
82107
vite: {
83108
plugins: [createVirtualModulesPlugin(resolvedConfig) as any],
84109
},
85-
integrations: [themeIntegration],
110+
integrations: [themeIntegration, ...pluginIntegrations],
86111
});
87112

88113
logger.info(

0 commit comments

Comments
 (0)