feat(api-extractor): support multiple entrypoints (#10829)

* feat(api-extractor): support multiple entrypoints

* chore: initial support in generateSplitDocumentation

* chore: bring in line with upstream

* refactor: multiple entrypoints in scripts

* fix: split docs

* feat: website

* fix: docs failing on next

* fix: don't include dtypes for now

* refactor: don't fetch entrypoint if there is none

---------

Co-authored-by: iCrawl <buechler.noel@outlook.com>
This commit is contained in:
Qjuh
2025-05-12 23:48:41 +02:00
committed by GitHub
parent 4f5e5c7c14
commit b3db92edfb
93 changed files with 2330 additions and 1956 deletions

View File

@@ -1,3 +1,5 @@
'use cache';
import { VscSymbolParameter } from '@react-icons/all-files/vsc/VscSymbolParameter';
import { ConstructorNode } from './ConstructorNode';
import { DeprecatedNode } from './DeprecatedNode';
@@ -26,8 +28,6 @@ async function OverloadNode({
readonly packageName: string;
readonly version: string;
}) {
'use cache';
return (
<Tabs className="flex flex-col gap-4">
<TabList className="flex flex-wrap gap-2">
@@ -63,8 +63,6 @@ export async function DocItem({
readonly packageName: string;
readonly version: string;
}) {
'use cache';
if (node.overloads?.length) {
return <OverloadNode node={node} packageName={packageName} version={version} />;
}

View File

@@ -0,0 +1,43 @@
'use client';
import { useParams, useRouter } from 'next/navigation';
import { use } from 'react';
import { parseDocsPathParams } from '@/util/parseDocsPathParams';
import { Select, SelectList, SelectOption, SelectTrigger } from './ui/Select';
export function EntryPointSelect({
entryPointsPromise,
}: {
readonly entryPointsPromise: Promise<{ readonly entryPoint: string }[]>;
}) {
const router = useRouter();
const params = useParams();
const entryPoints = use(entryPointsPromise);
const { entryPoints: parsedEntrypoints } = parseDocsPathParams(params.item as string[] | undefined);
return (
<Select
aria-label="Select an entrypoint"
defaultSelectedKey={parsedEntrypoints.length ? parsedEntrypoints.join('/') : 'global'}
>
<SelectTrigger className="bg-[#f3f3f4] dark:bg-[#121214]" />
<SelectList classNames={{ popover: 'bg-[#f3f3f4] dark:bg-[#28282d]' }} items={entryPoints}>
{(item) => (
<SelectOption
className="dark:pressed:bg-[#313135] bg-[#f3f3f4] dark:bg-[#28282d] dark:hover:bg-[#313135]"
href={`/docs/packages/${params.packageName}/${params.version}/${item.entryPoint}`}
id={item.entryPoint || 'global'}
key={item.entryPoint || 'global'}
onHoverStart={() =>
router.prefetch(`/docs/packages/${params.packageName}/${params.version}/${item.entryPoint}`)
}
textValue={item.entryPoint || 'global'}
>
{item.entryPoint || 'global'}
</SelectOption>
)}
</SelectList>
</Select>
);
}

View File

@@ -5,8 +5,16 @@ import { resolveNodeKind } from './DocKind';
import { NavigationItem } from './NavigationItem';
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from './ui/Collapsible';
export async function Navigation({ packageName, version }: { readonly packageName: string; readonly version: string }) {
const node = await fetchSitemap({ packageName, version });
export async function Navigation({
entryPoint,
packageName,
version,
}: {
readonly entryPoint?: string | undefined;
readonly packageName: string;
readonly version: string;
}) {
const node = await fetchSitemap({ entryPoint, packageName, version });
if (!node) {
notFound();