refactor: improve site data parsing (#780)

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

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

Loading…
Cancel
Save