interface ComponentMetaState { [key: string]: any } const useComponentsMetaState = () => useState('components-meta', () => ({})) export const fetchComponentMeta = async (name: string) => { const state = useComponentsMetaState() if (state.value[name]?.then) { await state.value[name] return state.value[name] } if (state.value[name]) { return state.value[name] } if (import.meta.server) { const event = useRequestEvent() if (event && event.node && event.node.res) { event.node.res.setHeader( 'x-nitro-prerender', [ event.node.res.getHeader('x-nitro-prerender'), `/api/component-meta/${name}.json`, ].filter(Boolean) as string[], ) } } state.value[name] = $fetch(`/api/component-meta/${name}.json`).then( (meta) => { state.value[name] = meta }, ) await state.value[name] return state.value[name] }