Skip to content

Commit 2b4b800

Browse files
authored
feat: provide transformHtml hook (#1022)
1 parent 4b38736 commit 2b4b800

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/node/build/render.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,16 @@ export async function renderPage(
173173
</html>`.trim()
174174
const htmlFileName = path.join(config.outDir, page.replace(/\.md$/, '.html'))
175175
await fs.ensureDir(path.dirname(htmlFileName))
176-
await fs.writeFile(htmlFileName, html)
176+
const transformedHtml = await config.transformHtml?.(html, htmlFileName, {
177+
siteConfig: config,
178+
siteData,
179+
pageData,
180+
title,
181+
description,
182+
head,
183+
content
184+
})
185+
await fs.writeFile(htmlFileName, transformedHtml || html)
177186
}
178187

179188
function resolvePageImports(

src/node/config.ts

+22-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import {
1616
LocaleConfig,
1717
DefaultTheme,
1818
APPEARANCE_KEY,
19-
createLangDictionary
19+
createLangDictionary,
20+
PageData
2021
} from './shared'
2122
import { resolveAliases, DEFAULT_THEME_PATH } from './alias'
2223
import { MarkdownOptions } from './markdown/markdown'
@@ -77,6 +78,23 @@ export interface UserConfig<ThemeConfig = any> {
7778
* @param siteConfig The resolved configuration.
7879
*/
7980
buildEnd?: (siteConfig: SiteConfig) => Promise<void>
81+
82+
/**
83+
* HTML transform hook: runs before writing HTML to dist.
84+
*/
85+
transformHtml?: (
86+
code: string,
87+
id: string,
88+
ctx: {
89+
siteConfig: SiteConfig
90+
siteData: SiteData
91+
pageData: PageData
92+
title: string
93+
description: string
94+
head: HeadConfig[]
95+
content: string
96+
}
97+
) => Promise<string | void>
8098
}
8199

82100
export type RawConfigExports<ThemeConfig = any> =
@@ -95,6 +113,7 @@ export interface SiteConfig<ThemeConfig = any>
95113
| 'lastUpdated'
96114
| 'ignoreDeadLinks'
97115
| 'buildEnd'
116+
| 'transformHtml'
98117
> {
99118
root: string
100119
srcDir: string
@@ -174,7 +193,8 @@ export async function resolveConfig(
174193
shouldPreload: userConfig.shouldPreload,
175194
mpa: !!userConfig.mpa,
176195
ignoreDeadLinks: userConfig.ignoreDeadLinks,
177-
buildEnd: userConfig.buildEnd
196+
buildEnd: userConfig.buildEnd,
197+
transformHtml: userConfig.transformHtml
178198
}
179199

180200
return config

0 commit comments

Comments
 (0)