From 59bc231ccde7831fdb6b392d81ad192ccd67dfb1 Mon Sep 17 00:00:00 2001 From: taranvohra Date: Fri, 18 Sep 2026 12:22:53 +0530 Subject: [PATCH] Resolve repository page URLs without an opt-in flag --- .../DocumentView/BlockContentRef.tsx | 1 - .../components/DocumentView/InlineButton.tsx | 4 +-- .../DocumentView/InlineLink/InlineLink.tsx | 1 - .../src/components/DocumentView/Mention.tsx | 1 - .../DocumentView/Table/RecordCard.tsx | 4 +-- .../DocumentView/Table/RecordColumnValue.tsx | 1 - packages/gitbook/src/lib/references.test.ts | 30 ++++++++----------- packages/gitbook/src/lib/references.tsx | 4 +-- 8 files changed, 16 insertions(+), 30 deletions(-) diff --git a/packages/gitbook/src/components/DocumentView/BlockContentRef.tsx b/packages/gitbook/src/components/DocumentView/BlockContentRef.tsx index 27d1a79c2..cdbc07978 100644 --- a/packages/gitbook/src/components/DocumentView/BlockContentRef.tsx +++ b/packages/gitbook/src/components/DocumentView/BlockContentRef.tsx @@ -18,7 +18,6 @@ export async function BlockContentRef(props: BlockProps const resolved = context.contentContext ? await resolveContentRefInDocument(document, block.data.ref, context.contentContext, { - resolveGitPageURLs: true, resolveAnchorText: true, iconStyle: ['text-xl', 'text-tint'], }) diff --git a/packages/gitbook/src/components/DocumentView/InlineButton.tsx b/packages/gitbook/src/components/DocumentView/InlineButton.tsx index ae699232c..40ba19c41 100644 --- a/packages/gitbook/src/components/DocumentView/InlineButton.tsx +++ b/packages/gitbook/src/components/DocumentView/InlineButton.tsx @@ -76,9 +76,7 @@ export async function InlineLinkButton( const resolved = context.contentContext && inline.data.ref - ? await resolveContentRefInDocument(document, inline.data.ref, context.contentContext, { - resolveGitPageURLs: true, - }) + ? await resolveContentRefInDocument(document, inline.data.ref, context.contentContext) : null; const href = diff --git a/packages/gitbook/src/components/DocumentView/InlineLink/InlineLink.tsx b/packages/gitbook/src/components/DocumentView/InlineLink/InlineLink.tsx index d53ad41e4..88bed7195 100644 --- a/packages/gitbook/src/components/DocumentView/InlineLink/InlineLink.tsx +++ b/packages/gitbook/src/components/DocumentView/InlineLink/InlineLink.tsx @@ -19,7 +19,6 @@ export async function InlineLink(props: InlineProps) { const resolved = context.contentContext ? await resolveContentRefInDocument(document, inline.data.ref, context.contentContext, { - resolveGitPageURLs: true, // We don't want to resolve the anchor text here, as it can be very expensive and will block rendering if there is a lot of anchors link. resolveAnchorText: false, }) diff --git a/packages/gitbook/src/components/DocumentView/Mention.tsx b/packages/gitbook/src/components/DocumentView/Mention.tsx index 3979a7e71..7802f6ccf 100644 --- a/packages/gitbook/src/components/DocumentView/Mention.tsx +++ b/packages/gitbook/src/components/DocumentView/Mention.tsx @@ -9,7 +9,6 @@ export async function Mention(props: InlineProps) { const resolved = context.contentContext ? await resolveContentRefInDocument(document, inline.data.ref, context.contentContext, { - resolveGitPageURLs: true, resolveAnchorText: true, }) : null; diff --git a/packages/gitbook/src/components/DocumentView/Table/RecordCard.tsx b/packages/gitbook/src/components/DocumentView/Table/RecordCard.tsx index e3b1020de..ddedaf3bb 100644 --- a/packages/gitbook/src/components/DocumentView/Table/RecordCard.tsx +++ b/packages/gitbook/src/components/DocumentView/Table/RecordCard.tsx @@ -41,9 +41,7 @@ export async function RecordCard( ? resolveContentRefInDocument(document, dark.contentRef, context.contentContext) : null, targetRef && context.contentContext - ? resolveContentRefInDocument(document, targetRef, context.contentContext, { - resolveGitPageURLs: true, - }) + ? resolveContentRefInDocument(document, targetRef, context.contentContext) : null, ]); diff --git a/packages/gitbook/src/components/DocumentView/Table/RecordColumnValue.tsx b/packages/gitbook/src/components/DocumentView/Table/RecordColumnValue.tsx index e2a3f3a8b..7c16b951a 100644 --- a/packages/gitbook/src/components/DocumentView/Table/RecordColumnValue.tsx +++ b/packages/gitbook/src/components/DocumentView/Table/RecordColumnValue.tsx @@ -253,7 +253,6 @@ export async function RecordColumnValue( const resolved = value && context.contentContext ? await resolveContentRefInDocument(document, value, context.contentContext, { - resolveGitPageURLs: true, resolveAnchorText: true, iconStyle: ['mr-2', 'text-tint-subtle'], }) diff --git a/packages/gitbook/src/lib/references.test.ts b/packages/gitbook/src/lib/references.test.ts index 7befe167d..9098f01be 100644 --- a/packages/gitbook/src/lib/references.test.ts +++ b/packages/gitbook/src/lib/references.test.ts @@ -807,11 +807,10 @@ describe('repository page links', () => { kind: 'url' as const, url: 'https://github.com/acme/docs/tree/main/api/auth.md#tokens', }; - const options = { resolveGitPageURLs: true }; it('renders a matching repository URL as a site page link with its anchor', async () => { const { context, getRevision } = fixture(); - const result = await resolveContentRef(ref, context, options); + const result = await resolveContentRef(ref, context); expect(result?.href).toBe('/api/authentication#tokens'); expect(result?.text).toBe('Authentication'); expect(result?.ancestors?.[0]?.label).toBe('API'); @@ -829,10 +828,13 @@ describe('repository page links', () => { expect(ref.kind).toBe('url'); }); - it('keeps media/resource URL resolution unchanged unless enabled', async () => { - const { context, getSpace } = fixture(); - expect((await resolveContentRef(ref, context))?.href).toBe(ref.url); - expect(getSpace).not.toHaveBeenCalled(); + it('preserves asset URLs that do not match a page', async () => { + const { context } = fixture(); + const assetRef = { + kind: 'url' as const, + url: ref.url.replace('auth.md#tokens', 'diagram.png'), + }; + expect((await resolveContentRef(assetRef, context))?.href).toBe(assetRef.url); }); it('reads only the matching space in a 500-space site', async () => { @@ -855,9 +857,7 @@ describe('repository page links', () => { }, })) ); - expect((await resolveContentRef(ref, context, options))?.href).toBe( - '/api/authentication#tokens' - ); + expect((await resolveContentRef(ref, context))?.href).toBe('/api/authentication#tokens'); expect(getSpace).toHaveBeenCalledTimes(1); expect(getRevision).toHaveBeenCalledTimes(1); }); @@ -866,7 +866,7 @@ describe('repository page links', () => { 'preserves the fallback for unavailable content: %j', async (state) => { const { context } = fixture(state); - const result = await resolveContentRef(ref, context, options); + const result = await resolveContentRef(ref, context); expect(result).toEqual({ href: ref.url, text: ref.url, active: false }); } ); @@ -877,9 +877,7 @@ describe('repository page links', () => { ref.url.replace('/main/', '/preview/'), ref.url.replace('/acme/', '/other/'), ]) { - expect((await resolveContentRef({ kind: 'url', url }, context, options))?.href).toBe( - url - ); + expect((await resolveContentRef({ kind: 'url', url }, context))?.href).toBe(url); } expect(getRevision).not.toHaveBeenCalled(); }); @@ -887,10 +885,8 @@ describe('repository page links', () => { it('resolves the unchanged stored URL when the target becomes available', async () => { const state = { missing: true }; const { context } = fixture(state); - expect((await resolveContentRef(ref, context, options))?.href).toBe(ref.url); + expect((await resolveContentRef(ref, context))?.href).toBe(ref.url); state.missing = false; - expect((await resolveContentRef(ref, context, options))?.href).toBe( - '/api/authentication#tokens' - ); + expect((await resolveContentRef(ref, context))?.href).toBe('/api/authentication#tokens'); }); }); diff --git a/packages/gitbook/src/lib/references.tsx b/packages/gitbook/src/lib/references.tsx index 10ff273a1..6f9ce7b21 100644 --- a/packages/gitbook/src/lib/references.tsx +++ b/packages/gitbook/src/lib/references.tsx @@ -84,8 +84,6 @@ export interface ResolvedContentRef { } export interface ResolveContentRefOptions { - /** Enable repository-page lookup for navigational links. */ - resolveGitPageURLs?: boolean; /** * Should the content ref be rendered as text. * @default false @@ -149,7 +147,7 @@ export async function resolveContentRef( switch (contentRef.kind) { case 'url': { - if (options.resolveGitPageURLs && 'site' in context) { + if ('site' in context) { const target = findGitPageURLTarget( contentRef.url, listAllSiteSpaces(context.structure)