From 3d088d73ec50e736f3cda528b9a77531d3394215 Mon Sep 17 00:00:00 2001 From: Deep Singhvi <deep@buildwithfern.com> Date: Wed, 7 Aug 2024 11:59:02 -0400 Subject: [PATCH] (fix): reload docs preview server on specs outside of the fern folder (#4227) --- packages/cli/docs-preview/src/runPreviewServer.ts | 4 +++- .../src/workspaces/AbstractAPIWorkspace.ts | 6 ++++++ .../workspace-loader/src/workspaces/FernWorkspace.ts | 8 ++++++++ .../workspace-loader/src/workspaces/OSSWorkspace.ts | 10 ++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/cli/docs-preview/src/runPreviewServer.ts b/packages/cli/docs-preview/src/runPreviewServer.ts index 5807397ff4d..6fdbf772ebc 100644 --- a/packages/cli/docs-preview/src/runPreviewServer.ts +++ b/packages/cli/docs-preview/src/runPreviewServer.ts @@ -114,7 +114,9 @@ export async function runPreviewServer({ // initialize docs definition docsDefinition = await reloadDocsDefinition(); - const watcher = new Watcher(absoluteFilePathToFern, { + const additionalFilepaths = project.apiWorkspaces.flatMap((workspace) => workspace.getAbsoluteFilepaths()); + + const watcher = new Watcher([absoluteFilePathToFern, ...additionalFilepaths], { recursive: true, ignoreInitial: true, debounce: 1000, diff --git a/packages/cli/workspace-loader/src/workspaces/AbstractAPIWorkspace.ts b/packages/cli/workspace-loader/src/workspaces/AbstractAPIWorkspace.ts index 5f9039780a2..477102c0be7 100644 --- a/packages/cli/workspace-loader/src/workspaces/AbstractAPIWorkspace.ts +++ b/packages/cli/workspace-loader/src/workspaces/AbstractAPIWorkspace.ts @@ -1,3 +1,4 @@ +import { AbsoluteFilePath } from "@fern-api/fs-utils"; import { TaskContext } from "@fern-api/task-context"; import { FernDefinition } from "../types/Workspace"; import { FernWorkspace } from "./FernWorkspace"; @@ -19,4 +20,9 @@ export abstract class AbstractAPIWorkspace<Settings> { { context }: { context?: TaskContext }, settings?: Settings ): Promise<FernWorkspace>; + + /** + * @returns all filepaths related to this workspace + */ + public abstract getAbsoluteFilepaths(): AbsoluteFilePath[]; } diff --git a/packages/cli/workspace-loader/src/workspaces/FernWorkspace.ts b/packages/cli/workspace-loader/src/workspaces/FernWorkspace.ts index 182c25379ca..c77e3c07981 100644 --- a/packages/cli/workspace-loader/src/workspaces/FernWorkspace.ts +++ b/packages/cli/workspace-loader/src/workspaces/FernWorkspace.ts @@ -51,6 +51,10 @@ export class FernWorkspace extends AbstractAPIWorkspace<void> { public async toFernWorkspace(): Promise<FernWorkspace> { return this; } + + public getAbsoluteFilepaths(): AbsoluteFilePath[] { + return [this.absoluteFilepath]; + } } export declare namespace LazyFernWorkspace { @@ -166,4 +170,8 @@ export class LazyFernWorkspace extends AbstractAPIWorkspace<OSSWorkspace.Setting return workspace; } + + public getAbsoluteFilepaths(): AbsoluteFilePath[] { + return [this.absoluteFilepath]; + } } diff --git a/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts b/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts index ae0404524b1..2637a01c32c 100644 --- a/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts +++ b/packages/cli/workspace-loader/src/workspaces/OSSWorkspace.ts @@ -1,4 +1,5 @@ import { FERN_PACKAGE_MARKER_FILENAME, generatorsYml } from "@fern-api/configuration"; +import { isNonNullish } from "@fern-api/core-utils"; import { AbsoluteFilePath, RelativeFilePath } from "@fern-api/fs-utils"; import { convert } from "@fern-api/openapi-ir-to-fern"; import { parse, ParseOpenAPIOptions } from "@fern-api/openapi-parser"; @@ -119,6 +120,15 @@ export class OSSWorkspace extends AbstractAPIWorkspace<OSSWorkspace.Settings> { changelog: this.changelog }); } + + public getAbsoluteFilepaths(): AbsoluteFilePath[] { + return [ + this.absoluteFilepath, + ...this.specs + .flatMap((spec) => [spec.absoluteFilepath, spec.absoluteFilepathToOverrides]) + .filter(isNonNullish) + ]; + } } export function getOSSWorkspaceSettingsFromGeneratorInvocation(