pull/5299/merge
TowyTowy 1 day ago committed by GitHub
commit 18e83c3998
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,51 @@
import { resolveConfig } from 'node/config'
import { createContentLoader } from 'node/contentLoader'
import { mkdtemp, rm, writeFile } from 'node:fs/promises'
import { tmpdir } from 'node:os'
import path from 'node:path'
describe('node/contentLoader', () => {
let root: string | undefined
afterEach(async () => {
if (root) {
await rm(root, { recursive: true, force: true })
root = undefined
}
delete (global as any).VITEPRESS_CONFIG
})
async function setup(cleanUrls: boolean) {
root = await mkdtemp(path.join(tmpdir(), 'vitepress-content-loader-'))
await writeFile(
path.join(root, 'index.md'),
'# Home\n\n[link](./other.md)\n'
)
await writeFile(path.join(root, 'other.md'), '# Other\n')
const siteConfig = await resolveConfig(root, 'build', 'production')
siteConfig.cleanUrls = cleanUrls
;(global as any).VITEPRESS_CONFIG = siteConfig
}
test('rendered internal links get .html when cleanUrls is false', async () => {
await setup(false)
const data = await createContentLoader('index.md', {
render: true
}).load()
expect(data[0].html).toContain('href="./other.html"')
})
test('rendered internal links are clean when cleanUrls is true', async () => {
await setup(true)
const data = await createContentLoader('index.md', {
render: true
}).load()
expect(data[0].html).toContain('href="./other"')
expect(data[0].html).not.toContain('./other.html')
})
})

@ -5,7 +5,7 @@ import pMap from 'p-map'
import { normalizePath } from 'vite'
import type { SiteConfig } from './config'
import { createMarkdownRenderer } from './markdown/markdown'
import type { Awaitable } from './shared'
import type { Awaitable, MarkdownEnv } from './shared'
import { glob, normalizeGlob, type GlobOptions } from './utils/glob'
export interface ContentOptions<T = ContentData[]> {
@ -127,15 +127,29 @@ export function createContentLoader<T = ContentData[]>(
: { excerpt: renderExcerpt as any } // gray-matter types are wrong
)
const relativePath = normalizePath(path.relative(config.srcDir, file))
const url =
'/' +
normalizePath(path.relative(config.srcDir, file))
relativePath
.replace(/(^|\/)index\.md$/, '$1')
.replace(/\.md$/, config.cleanUrls ? '' : '.html')
const html = options.render ? await md.renderAsync(src) : undefined
// pass a markdown env so plugins (e.g. the internal link plugin)
// resolve links, `cleanUrls` and paths the same way as during a
// normal page render instead of falling back to defaults
const env: MarkdownEnv = {
path: file,
relativePath,
cleanUrls: !!config.cleanUrls,
realPath: file
}
const html = options.render
? await md.renderAsync(src, env)
: undefined
const renderedExcerpt = renderExcerpt
? excerpt && (await md.renderAsync(excerpt))
? excerpt && (await md.renderAsync(excerpt, env))
: undefined
const data: ContentData = {

Loading…
Cancel
Save