Compare commits

...

6 Commits

Author SHA1 Message Date
Taran Vohra 5e48e703b9 Merge branch 'main' into taran/resolve-page-meta-links-cr-or-space 2025-12-10 11:19:07 +05:30
Taran Vohra bbb97e65b4 Merge branch 'main' into taran/resolve-page-meta-links-cr-or-space 2025-12-05 11:54:57 +05:30
Taran Vohra 81161a814b Merge branch 'main' into taran/resolve-page-meta-links-cr-or-space 2025-12-01 16:31:18 +05:30
taranvohra 0f309c2b47 refactor 2025-11-27 18:09:42 +05:30
Taran Vohra 66d89a62dc Merge branch 'main' into taran/resolve-page-meta-links-cr-or-space 2025-11-27 17:11:14 +05:30
taranvohra 4806e35438 List page meta links in the context of a space or change request 2025-11-27 17:10:42 +05:30
3 changed files with 118 additions and 7 deletions
@@ -318,13 +318,34 @@ async function resolvePageMetaLinks(
context: GitBookSiteContext,
pageId: string
): Promise<PageMetaLinks> {
const pageMetaLinks = await getDataOrNull(
context.dataFetcher.listRevisionPageMetaLinks({
spaceId: context.space.id,
revisionId: context.revisionId,
pageId,
})
);
const pageMetaLinks = await (async () => {
if (context.changeRequest) {
return getDataOrNull(
context.dataFetcher.listChangeRequestPageMetaLinks({
spaceId: context.space.id,
changeRequestId: context.changeRequest.id,
pageId,
})
);
}
if (context.revisionId !== context.space.revision) {
return getDataOrNull(
context.dataFetcher.listRevisionPageMetaLinks({
spaceId: context.space.id,
revisionId: context.revisionId,
pageId,
})
);
}
return getDataOrNull(
context.dataFetcher.listSpacePageMetaLinks({
spaceId: context.space.id,
pageId,
})
);
})();
if (pageMetaLinks) {
const canonicalResolution = pageMetaLinks.canonical
+73
View File
@@ -159,6 +159,21 @@ export function createDataFetcher(
pageId: params.pageId,
});
},
listSpacePageMetaLinks(params) {
return listSpacePageMetaLinks(input, {
spaceId: params.spaceId,
pageId: params.pageId,
});
},
listChangeRequestPageMetaLinks(params) {
return listChangeRequestPageMetaLinks(input, {
spaceId: params.spaceId,
changeRequestId: params.changeRequestId,
pageId: params.pageId,
});
},
};
}
@@ -744,6 +759,64 @@ const listRevisionPageMetaLinks = cache(
}
);
/**
* List all the meta links for a given page in a space.
*/
const listSpacePageMetaLinks = cache(
async (input: DataFetcherInput, params: { spaceId: string; pageId: string }) => {
'use cache';
return wrapCacheDataFetcherError(async () => {
return trace(
`listSpacePageMetaLinks(${params.spaceId}, ${params.pageId})`,
async () => {
const api = apiClient(input);
const res = await api.spaces.listSpacePageMetaLinks(
params.spaceId,
params.pageId,
{
...noCacheFetchOptions,
}
);
cacheTag(...getCacheTagsFromResponse(res));
cacheLife('days');
return res.data;
}
);
});
}
);
/**
* List all the meta links for a given page in a change request.
*/
const listChangeRequestPageMetaLinks = cache(
async (
input: DataFetcherInput,
params: { spaceId: string; changeRequestId: string; pageId: string }
) => {
'use cache';
return wrapCacheDataFetcherError(async () => {
return trace(
`listChangeRequestPageMetaLinks(${params.spaceId}, ${params.changeRequestId}, ${params.pageId})`,
async () => {
const api = apiClient(input);
const res = await api.spaces.listChangeRequestPageMetaLinks(
params.spaceId,
params.changeRequestId,
params.pageId,
{
...noCacheFetchOptions,
}
);
cacheTag(...getCacheTagsFromResponse(res));
cacheLife('days');
return res.data;
}
);
});
}
);
/**
* Create a new API client.
*/
+17
View File
@@ -182,4 +182,21 @@ export interface GitBookDataFetcher {
revisionId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;
/**
* List change request meta links.
*/
listChangeRequestPageMetaLinks(params: {
spaceId: string;
changeRequestId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;
/**
* List space meta links.
*/
listSpacePageMetaLinks(params: {
spaceId: string;
pageId: string;
}): Promise<DataFetcherResponse<api.RevisionPageMetaLinks>>;
}