mirror of https://github.com/vuejs/vitepress
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
export const inBrowser = typeof window !== 'undefined'
|
|
|
|
/**
|
|
* Join two paths by resolving the slash collision.
|
|
*/
|
|
export function joinPath(base: string, path: string): string {
|
|
return `${base}${path}`.replace(/\/+/g, '/')
|
|
}
|
|
|
|
/**
|
|
* Converts a url path to the corresponding js chunk filename.
|
|
*/
|
|
export function pathToFile(path: string): string {
|
|
let pagePath = path.replace(/\.html$/, '')
|
|
if (pagePath.endsWith('/')) {
|
|
pagePath += 'index'
|
|
}
|
|
|
|
if (import.meta.env.DEV) {
|
|
// awlays force re-fetch content in dev
|
|
pagePath += `.md?t=${Date.now()}`
|
|
} else {
|
|
// in production, each .md file is built into a .md.js file following
|
|
// the path conversion scheme.
|
|
// /foo/bar.html -> ./foo_bar.md
|
|
if (inBrowser) {
|
|
const base = import.meta.env.BASE_URL
|
|
pagePath = pagePath.slice(base.length).replace(/\//g, '_') + '.md'
|
|
// client production build needs to account for page hash, which is
|
|
// injected directly in the page's html
|
|
const pageHash = __VP_HASH_MAP__[pagePath]
|
|
pagePath = `${base}_assets/${pagePath}.${pageHash}.js`
|
|
} else {
|
|
// ssr build uses much simpler name mapping
|
|
pagePath = `./${pagePath.slice(1).replace(/\//g, '_')}.md.js`
|
|
}
|
|
}
|
|
|
|
return pagePath
|
|
}
|