diff --git a/packages/gitbook-v2/src/lib/data/pages.ts b/packages/gitbook-v2/src/lib/data/pages.ts index 642b486b82..f4cbb1acab 100644 --- a/packages/gitbook-v2/src/lib/data/pages.ts +++ b/packages/gitbook-v2/src/lib/data/pages.ts @@ -42,7 +42,7 @@ export async function getPageDocument( } // Pre-fetch the document to start filling the cache before we migrate to this API. - if (isInPercentRollout(space.id, 10)) { + if (isInPercentRollout(space.id, 10) || process.env.VERCEL_ENV === 'preview') { await waitUntil( getDataOrNull( dataFetcher.getRevisionPageDocument({ diff --git a/packages/gitbook/src/lib/waitUntil.ts b/packages/gitbook/src/lib/waitUntil.ts index e81e662e2d..ed606e959d 100644 --- a/packages/gitbook/src/lib/waitUntil.ts +++ b/packages/gitbook/src/lib/waitUntil.ts @@ -1,5 +1,6 @@ import type { ExecutionContext, IncomingRequestCfProperties } from '@cloudflare/workers-types'; import { getCloudflareContext as getCloudflareContextV2 } from '@v2/lib/data/cloudflare'; +import { GITBOOK_RUNTIME } from '@v2/lib/env'; import { isV2 } from './v2'; let pendings: Array> = []; @@ -49,20 +50,32 @@ export async function waitUntil(promise: Promise) { return; } - if (isV2()) { - const context = getCloudflareContextV2(); - if (context) { - context.ctx.waitUntil(promise); - return; + if (GITBOOK_RUNTIME === 'cloudflare') { + if (isV2()) { + const context = getCloudflareContextV2(); + if (context) { + context.ctx.waitUntil(promise); + return; + } + } else { + const cloudflareContext = await getGlobalContext(); + if ('waitUntil' in cloudflareContext) { + cloudflareContext.waitUntil(promise); + return; + } } } - const cloudflareContext = await getGlobalContext(); - if ('waitUntil' in cloudflareContext) { - cloudflareContext.waitUntil(promise); - } else { - await promise; + if (GITBOOK_RUNTIME === 'vercel' && isV2()) { + // @ts-expect-error - `after` is not exported by `next/server` in next 14 + const { after } = await import('next/server'); + if (typeof after === 'function') { + after(() => promise); + return; + } } + + await promise; } /**