diff --git a/packages/fern-docs/bundle/src/components/playground/ExplorerContent.tsx b/packages/fern-docs/bundle/src/components/playground/ExplorerContent.tsx index 2fd188fae9..95eaf47599 100644 --- a/packages/fern-docs/bundle/src/components/playground/ExplorerContent.tsx +++ b/packages/fern-docs/bundle/src/components/playground/ExplorerContent.tsx @@ -32,7 +32,7 @@ export async function ExplorerContent({ } catch (error) { console.error(error); // TODO: don't revalidate too often - revalidate(loader); + revalidate(await loader.getBaseUrl()); } if (api == null) { diff --git a/packages/fern-docs/bundle/src/server/docs-loader.test.ts b/packages/fern-docs/bundle/src/server/docs-loader.test.ts new file mode 100644 index 0000000000..fe6f89a8c1 --- /dev/null +++ b/packages/fern-docs/bundle/src/server/docs-loader.test.ts @@ -0,0 +1,15 @@ +import { cleanBasePath } from "./docs-loader"; + +vi.mock("server-only", () => ({})); + +describe("basePath", () => { + it("should clean basepath", () => { + expect(cleanBasePath(undefined)).toBe(""); + expect(cleanBasePath("")).toBe(""); + expect(cleanBasePath("/")).toBe(""); + expect(cleanBasePath("/foo")).toBe("/foo"); + expect(cleanBasePath("/foo/")).toBe("/foo"); + expect(cleanBasePath("/foo/bar")).toBe("/foo/bar"); + expect(cleanBasePath("/foo/bar/")).toBe("/foo/bar"); + }); +}); diff --git a/packages/fern-docs/bundle/src/server/docs-loader.ts b/packages/fern-docs/bundle/src/server/docs-loader.ts index d7091d6cae..d86d12a90a 100644 --- a/packages/fern-docs/bundle/src/server/docs-loader.ts +++ b/packages/fern-docs/bundle/src/server/docs-loader.ts @@ -45,8 +45,7 @@ import { withoutStaging, } from "@fern-docs/utils"; -import { findEndpoint } from "@/components/util/processRequestSnippetComponents"; - +import { findEndpoint } from "../components/util/processRequestSnippetComponents"; import { AuthState, createGetAuthState } from "./auth/getAuthState"; import { cacheSeed } from "./cache-seed"; import { generateFernColorPalette } from "./generateFernColors"; @@ -171,6 +170,8 @@ export interface DocsLoader { getAuthState: (pathname?: string) => Promise; getEdgeFlags: () => Promise; + + getBaseUrl: () => Promise; } function kvSet(domain: string, key: string, value: unknown) { @@ -187,6 +188,14 @@ const cachedGetEdgeFlags = cache(async (domain: string) => { return await getEdgeFlags(domain); }); +export function cleanBasePath(basePath: string | undefined) { + const basepath = removeTrailingSlash(addLeadingSlash(slugjoin(basePath))); + if (basepath === "/") { + return ""; + } + return basepath; +} + export const getMetadataFromResponse = async ( domain: string, responsePromise: AsyncOrSync @@ -197,9 +206,7 @@ export const getMetadataFromResponse = async ( ]); return { domain: response.baseUrl.domain, - basePath: removeTrailingSlash( - addLeadingSlash(slugjoin(response.baseUrl.basePath)) - ), + basePath: cleanBasePath(response.baseUrl.basePath), url: docsUrlMetadata.url, org: docsUrlMetadata.org, isPreview: docsUrlMetadata.isPreview, @@ -808,6 +815,10 @@ export const createCachedDocsLoader = async ( getFonts: () => getFonts(domain), getAuthState, getEdgeFlags: () => cachedGetEdgeFlags(domain), + getBaseUrl: async () => { + const m = await metadata; + return `https://${m.domain}${m.basePath}`; + }, }; }; diff --git a/packages/fern-docs/bundle/src/server/loadWithUrl.ts b/packages/fern-docs/bundle/src/server/loadWithUrl.ts index 1087569ce7..974ae2d56c 100644 --- a/packages/fern-docs/bundle/src/server/loadWithUrl.ts +++ b/packages/fern-docs/bundle/src/server/loadWithUrl.ts @@ -5,9 +5,8 @@ import { cache } from "react"; import { APIResponse, FdrAPI } from "@fern-api/fdr-sdk/client/types"; import { withoutStaging } from "@fern-docs/utils"; -import { provideRegistryService } from "@/server/registry"; - import { loadDocsDefinitionFromS3 } from "./loadDocsDefinitionFromS3"; +import { provideRegistryService } from "./registry"; export type LoadWithUrlResponse = APIResponse< FdrAPI.docs.v2.read.LoadDocsForUrlResponse, diff --git a/packages/fern-docs/bundle/src/server/revalidate.ts b/packages/fern-docs/bundle/src/server/revalidate.ts index 136c222ecd..ef960b148b 100644 --- a/packages/fern-docs/bundle/src/server/revalidate.ts +++ b/packages/fern-docs/bundle/src/server/revalidate.ts @@ -2,11 +2,8 @@ import "server-only"; import { after } from "next/server"; -import { DocsLoader } from "./docs-loader"; - -export function revalidate(loader: DocsLoader) { +export function revalidate(baseUrl: string) { return after(async () => { - const { domain, basePath } = await loader.getMetadata(); - await fetch(`https://${domain}${basePath}/api/fern-docs/revalidate`); + await fetch(`${baseUrl}/api/fern-docs/revalidate`); }); }