From 407de65c867eba33f73dd1e31e4c9d22bfe36dfc Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:23:28 +0000 Subject: [PATCH] feat: add page-size configuration option for changelog pagination Co-Authored-By: Catherine Deskur --- fern/apis/docs-yml/definition/docs.yml | 4 ++++ packages/cli/cli/versions.yml | 8 ++++++++ .../src/docs-yml/parseDocsConfiguration.ts | 1 + .../configuration/src/docs-yml/ParsedDocsConfiguration.ts | 1 + .../api/resources/docs/types/ChangelogConfiguration.ts | 2 ++ .../resources/docs/types/ChangelogConfiguration.ts | 2 ++ packages/cli/docs-resolver/src/ChangelogNodeConverter.ts | 2 ++ packages/cli/docs-resolver/src/DocsDefinitionResolver.ts | 3 ++- 8 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fern/apis/docs-yml/definition/docs.yml b/fern/apis/docs-yml/definition/docs.yml index cfb23242f938..834634810ec0 100644 --- a/fern/apis/docs-yml/definition/docs.yml +++ b/fern/apis/docs-yml/definition/docs.yml @@ -1058,6 +1058,10 @@ types: slug: optional icon: optional hidden: optional + page-size: + type: optional + docs: | + The number of changelog entries to display per page. If not specified, all entries are displayed on a single page. # skip-slug: optional # skip-slug is not needed for changelog SectionConfiguration: diff --git a/packages/cli/cli/versions.yml b/packages/cli/cli/versions.yml index 066e5c4c9dab..4282100ede07 100644 --- a/packages/cli/cli/versions.yml +++ b/packages/cli/cli/versions.yml @@ -1,4 +1,12 @@ # yaml-language-server: $schema=../../../fern-versions-yml.schema.json +- version: 3.63.0 + changelogEntry: + - summary: | + Add `page-size` configuration option for changelog navigation items. This allows users to control how many changelog entries are displayed per page. If not specified, all entries are displayed on a single page. + type: feat + createdAt: "2026-02-04" + irVersion: 63 + - version: 3.62.0 changelogEntry: - summary: | diff --git a/packages/cli/configuration-loader/src/docs-yml/parseDocsConfiguration.ts b/packages/cli/configuration-loader/src/docs-yml/parseDocsConfiguration.ts index 43ee859b03f8..f3e77a843459 100644 --- a/packages/cli/configuration-loader/src/docs-yml/parseDocsConfiguration.ts +++ b/packages/cli/configuration-loader/src/docs-yml/parseDocsConfiguration.ts @@ -1088,6 +1088,7 @@ async function convertNavigationItem({ icon: resolveIconPath(rawConfig.icon, absolutePathToConfig), title: rawConfig.title ?? DEFAULT_CHANGELOG_TITLE, slug: rawConfig.slug, + pageSize: rawConfig.pageSize, viewers: parseRoles(rawConfig.viewers), orphaned: rawConfig.orphaned, featureFlags: convertFeatureFlag(rawConfig.featureFlag) diff --git a/packages/cli/configuration/src/docs-yml/ParsedDocsConfiguration.ts b/packages/cli/configuration/src/docs-yml/ParsedDocsConfiguration.ts index eccdda856e54..38f7420cbbc8 100644 --- a/packages/cli/configuration/src/docs-yml/ParsedDocsConfiguration.ts +++ b/packages/cli/configuration/src/docs-yml/ParsedDocsConfiguration.ts @@ -370,6 +370,7 @@ export declare namespace DocsNavigationItem { icon: string | AbsoluteFilePath | undefined; hidden: boolean | undefined; slug: string | undefined; + pageSize: number | undefined; } export interface PythonDocsSection { diff --git a/packages/cli/configuration/src/docs-yml/schemas/sdk/api/resources/docs/types/ChangelogConfiguration.ts b/packages/cli/configuration/src/docs-yml/schemas/sdk/api/resources/docs/types/ChangelogConfiguration.ts index 4c63f6346a67..9b67cb947c94 100644 --- a/packages/cli/configuration/src/docs-yml/schemas/sdk/api/resources/docs/types/ChangelogConfiguration.ts +++ b/packages/cli/configuration/src/docs-yml/schemas/sdk/api/resources/docs/types/ChangelogConfiguration.ts @@ -8,4 +8,6 @@ export interface ChangelogConfiguration extends FernDocsConfig.WithPermissions, slug?: string; icon?: string; hidden?: boolean; + /** The number of changelog entries to display per page. If not specified, all entries are displayed on a single page. */ + pageSize?: number; } diff --git a/packages/cli/configuration/src/docs-yml/schemas/sdk/serialization/resources/docs/types/ChangelogConfiguration.ts b/packages/cli/configuration/src/docs-yml/schemas/sdk/serialization/resources/docs/types/ChangelogConfiguration.ts index 4244932db26d..8e0e6758e877 100644 --- a/packages/cli/configuration/src/docs-yml/schemas/sdk/serialization/resources/docs/types/ChangelogConfiguration.ts +++ b/packages/cli/configuration/src/docs-yml/schemas/sdk/serialization/resources/docs/types/ChangelogConfiguration.ts @@ -17,6 +17,7 @@ export const ChangelogConfiguration: core.serialization.ObjectSchema< slug: core.serialization.string().optional(), icon: core.serialization.string().optional(), hidden: core.serialization.boolean().optional(), + pageSize: core.serialization.property("page-size", core.serialization.number().optional()), }) .extend(WithPermissions) .extend(WithFeatureFlags); @@ -28,5 +29,6 @@ export declare namespace ChangelogConfiguration { slug?: string | null; icon?: string | null; hidden?: boolean | null; + "page-size"?: number | null; } } diff --git a/packages/cli/docs-resolver/src/ChangelogNodeConverter.ts b/packages/cli/docs-resolver/src/ChangelogNodeConverter.ts index 0fa264375c95..b09b6926d3ae 100644 --- a/packages/cli/docs-resolver/src/ChangelogNodeConverter.ts +++ b/packages/cli/docs-resolver/src/ChangelogNodeConverter.ts @@ -18,6 +18,7 @@ interface ConvertOptions { icon?: string; hidden?: boolean; slug?: string; + pageSize?: number; viewers?: APIV1Write.RoleId[]; orphaned?: boolean; // skipUrlSlug?: boolean; @@ -119,6 +120,7 @@ export class ChangelogNodeConverter { children: changelogYears, overviewPageId, noindex, + pageSize: opts.pageSize, authed: undefined, viewers: opts.viewers, orphaned: opts.orphaned, diff --git a/packages/cli/docs-resolver/src/DocsDefinitionResolver.ts b/packages/cli/docs-resolver/src/DocsDefinitionResolver.ts index 0a8add890fba..3c22b543b7de 100644 --- a/packages/cli/docs-resolver/src/DocsDefinitionResolver.ts +++ b/packages/cli/docs-resolver/src/DocsDefinitionResolver.ts @@ -1498,7 +1498,8 @@ export class DocsDefinitionResolver { icon: this.resolveIconFileId(item.icon), viewers: item.viewers, hidden: hideChildren || item.hidden, - slug: item.slug + slug: item.slug, + pageSize: item.pageSize }); }