diff --git a/src/module.ts b/src/module.ts index 5d7001a3f..c8f298cb8 100644 --- a/src/module.ts +++ b/src/module.ts @@ -533,16 +533,12 @@ export default defineNuxtModule({ nitro.options.runtimeConfig.public.content.wsUrl = url.replace('http', 'ws') // Watch contents - await nitro.storage.watch(async (event: WatchEvent, key: string) => { + await nitro.storage.watch((event: WatchEvent, key: string) => { // Ignore events that are not related to content if (!key.startsWith(MOUNT_PREFIX)) { return } key = key.substring(MOUNT_PREFIX.length) - - // Remove content Index - await nitro.storage.removeItem('cache:content:content-index.json') - // Broadcast a message to the server to refresh the page ws.broadcast({ event, key }) }) diff --git a/src/runtime/composables/query.ts b/src/runtime/composables/query.ts index d0d51f0d5..b2adb688b 100644 --- a/src/runtime/composables/query.ts +++ b/src/runtime/composables/query.ts @@ -35,7 +35,7 @@ export const createQueryFetch = (path?: string) => (query: Qu }) } - return $fetch(apiPath as any, { + return $fetch(apiPath as any, { method: 'GET', responseType: 'json', params: { diff --git a/src/runtime/server/api/cache.ts b/src/runtime/server/api/cache.ts index 589c4dd08..4e22ac63b 100644 --- a/src/runtime/server/api/cache.ts +++ b/src/runtime/server/api/cache.ts @@ -1,6 +1,5 @@ import { defineEventHandler } from 'h3' -import { getContentIndex } from '../content-index' -import { cacheStorage, serverQueryContent } from '../storage' +import { serverQueryContent } from '../storage' // This route is used to cache all the parsed content export default defineEventHandler(async (event) => { @@ -8,12 +7,6 @@ export default defineEventHandler(async (event) => { // Fetch all content await serverQueryContent(event).find() - // Generate Index - await getContentIndex(event) - - const navigation = await $fetch('/api/_content/navigation') - await cacheStorage.setItem('content-navigation.json', navigation) - return { generatedAt: now, generateTime: Date.now() - now diff --git a/src/runtime/server/api/navigation.ts b/src/runtime/server/api/navigation.ts index 7bc4bb7a7..6bd04fc55 100644 --- a/src/runtime/server/api/navigation.ts +++ b/src/runtime/server/api/navigation.ts @@ -1,21 +1,12 @@ import { defineEventHandler } from 'h3' -import { cacheStorage, serverQueryContent } from '../storage' +import { serverQueryContent } from '../storage' import { createNav } from '../navigation' import { ParsedContentMeta } from '../../types' import { getContentQuery } from '../../utils/query' -import { isPreview } from '../preview' export default defineEventHandler(async (event) => { const query = getContentQuery(event) - // Read from cache if not preview and there is no query - if (!isPreview(event) && Object.keys(query).length === 0) { - const cache = cacheStorage.getItem('content-navigation.json') - if (cache) { - return cache - } - } - const contents = await serverQueryContent(event, query) .where({ /** diff --git a/src/runtime/server/content-index.ts b/src/runtime/server/content-index.ts deleted file mode 100644 index 897ef9b99..000000000 --- a/src/runtime/server/content-index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import type { CompatibilityEvent } from 'h3' -import type { ParsedContent, QueryBuilder } from '../types' -import { isPreview } from './preview' -import { cacheStorage, getContent, getContentsList, serverQueryContent } from './storage' - -export async function getContentIndex (event: CompatibilityEvent) { - let contentIndex = await cacheStorage.getItem('content-index.json') as Record - if (!contentIndex) { - // Fetch all content - const data = await serverQueryContent(event).find() - - contentIndex = data.reduce((acc, item) => { - acc[item._path!] = item._id - return acc - }, {} as Record) - - await cacheStorage.setItem('content-index.json', contentIndex) - } - - return contentIndex -} - -export async function getIndexedContentsList (event: CompatibilityEvent, query: QueryBuilder): Promise { - const params = query.params() - const path = params?.where?.find(wh => wh._path)?._path - - // Read from Index is not preview and path is string or RegExp - if (!isPreview(event) && (typeof path === 'string' || path instanceof RegExp)) { - const index = await getContentIndex(event) - const keys = Object.keys(index) - .filter(key => (path as any).test ? (path as any).test(key) : key === String(path)) - .map(key => index[key]) - - const contents = await Promise.all(keys.map(key => getContent(event, key))) - return contents as unknown as Promise - } - - return getContentsList(event) as unknown as Promise -} diff --git a/src/runtime/server/storage.ts b/src/runtime/server/storage.ts index 24afbfd66..c082c04b7 100644 --- a/src/runtime/server/storage.ts +++ b/src/runtime/server/storage.ts @@ -10,7 +10,6 @@ import { createPipelineFetcher } from '../query/match/pipeline' import { transformContent } from '../transformers' import type { ModuleOptions } from '../../module' import { getPreview, isPreview } from './preview' -import { getIndexedContentsList } from './content-index' // eslint-disable-next-line import/named // @ts-ignore import { useNitroApp, useRuntimeConfig, useStorage } from '#imports' @@ -201,7 +200,9 @@ export const createServerQueryFetch = (event: CompatibilityEv query.sort({ _file: 1, $numeric: true }) } - return createPipelineFetcher(() => getIndexedContentsList(event, query))(query) + return createPipelineFetcher( + () => getContentsList(event) as unknown as Promise + )(query) } /** diff --git a/src/runtime/types.d.ts b/src/runtime/types.d.ts index a4c62063e..a8df4b855 100644 --- a/src/runtime/types.d.ts +++ b/src/runtime/types.d.ts @@ -471,7 +471,7 @@ export interface QueryBuilder { /** * Fetch sorround contents */ - findSurround(query: string | QueryBuilderWhere, options?: Partial<{ before: number; after: number }>): Promise> + findSurround(query: string | object, options?: Partial<{ before: number; after: number }>): Promise> /** * Filter contents based on locale