refactor: improve site data parsing (#780)

pull/798/head
meteorlxy 3 years ago committed by GitHub
parent 7b76bc21c1
commit 48fae52d17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,6 +1,6 @@
import { InjectionKey, Ref, shallowRef, readonly, computed, inject } from 'vue'
import { Route } from './router'
import serializedSiteData from '@siteData'
import siteData from '@siteData'
import {
PageData,
SiteData,
@ -25,17 +25,14 @@ export interface VitePressData<T = any> {
// site data is a singleton
export type SiteDataRef<T = any> = Ref<SiteData<T>>
export const siteDataRef: Ref<SiteData> = shallowRef(parse(serializedSiteData))
function parse(data: string): SiteData {
const parsed = JSON.parse(data)
return (import.meta.env.DEV ? readonly(parsed) : parsed) as SiteData
}
export const siteDataRef: Ref<SiteData> = shallowRef(
import.meta.env.PROD ? siteData : readonly(siteData)
)
// hmr
if (import.meta.hot) {
import.meta.hot!.accept('/@siteData', (m) => {
siteDataRef.value = parse(m.default)
siteDataRef.value = m.default
})
}

@ -10,7 +10,8 @@ declare module '*.vue' {
}
declare module '@siteData' {
const data: string
import type { SiteData } from './shared'
const data: SiteData
export default data
}

@ -126,7 +126,9 @@ export async function createVitePressPlugin(
if (config.command === 'build') {
data = { ...siteData, head: [] }
}
return `export default ${JSON.stringify(JSON.stringify(data))}`
return `export default JSON.parse(${JSON.stringify(
JSON.stringify(data)
)})`
}
},

Loading…
Cancel
Save