Skip to content

Commit bf5c175

Browse files
committed
fix(vitepress): fix sidebar links when "out" and "docsRoot" are the same value (#695)
1 parent 974a60d commit bf5c175

File tree

8 files changed

+36
-6
lines changed

8 files changed

+36
-6
lines changed

.changeset/fluffy-spies-shop.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'typedoc-vitepress-theme': patch
3+
---
4+
5+
- Fix sidebar links when "out" and "docsRoot" are the same value (#695)

devtools/examples/vitepress/typedoc.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
2-
"extends": [
3-
"../../../packages/typedoc-plugin-markdown/test/fixtures/typedoc.cjs"
4-
],
2+
"extends": ["../../packages/fixtures/typedoc.cjs"],
3+
"tsconfig": "../../../packages/typedoc-plugin-markdown/test/fixtures/tsconfig.json",
54
"entryPoints": [
65
"../../../packages/typedoc-plugin-markdown/test/fixtures/src/groups/**/*.ts"
76
],

packages/typedoc-vitepress-theme/src/sidebars/sidebar.vitepress.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,21 @@ function getNavigationItem(
1515
) {
1616
const hasChildren = navigationItem?.children?.length;
1717

18+
const linkParts: string[] = [];
19+
20+
if (navigationItem?.path) {
21+
if (basePath.length) {
22+
linkParts.push(basePath);
23+
}
24+
linkParts.push(
25+
getParsedUrl(navigationItem.path as string).replace(/\\/g, '/'),
26+
);
27+
}
28+
1829
return {
1930
text: navigationItem.title,
20-
...(Boolean(navigationItem?.path) && {
21-
link: `/${basePath}/${getParsedUrl(navigationItem.path as string).replace(/\\/g, '/')}`,
31+
...(linkParts.length && {
32+
link: `/${linkParts.join('/')}`,
2233
}),
2334
...(hasChildren && { collapsed: options.collapsed }),
2435
...(hasChildren && {

packages/typedoc-vitepress-theme/test/__scripts__/prepare.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ fs.removeSync(`./test/out`);
1212
const fixtures = [
1313
{ options: 'typedoc.base.json', outDir: 'default' },
1414
{ options: 'typedoc.sidebar-options.json', outDir: 'sidebar-options' },
15+
{ options: 'typedoc.sidebar-options-2.json', outDir: 'sidebar-options-2' },
1516
];
1617

1718
// write fixtures

packages/typedoc-vitepress-theme/test/specs/__snapshots__/vitepress.spec.ts.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
exports[`VitePress should generate typedoc sidebar 1`] = `"[{"text":"module-1","link":"/test/out/default/module-1/","collapsed":true,"items":[{"text":"Classes","collapsed":true,"items":[{"text":"ClassA","link":"/test/out/default/module-1/classes/ClassA.md"},{"text":"ClassB","link":"/test/out/default/module-1/classes/ClassB.md"}]},{"text":"Interfaces","collapsed":true,"items":[{"text":"InterfaceA","link":"/test/out/default/module-1/interfaces/InterfaceA.md"},{"text":"InterfaceB","link":"/test/out/default/module-1/interfaces/InterfaceB.md"}]}]},{"text":"module-2","link":"/test/out/default/module-2/","collapsed":true,"items":[{"text":"Classes","collapsed":true,"items":[{"text":"ClassA","link":"/test/out/default/module-2/classes/ClassA.md"},{"text":"ClassB","link":"/test/out/default/module-2/classes/ClassB.md"}]},{"text":"Interfaces","collapsed":true,"items":[{"text":"InterfaceA","link":"/test/out/default/module-2/interfaces/InterfaceA.md"},{"text":"InterfaceB","link":"/test/out/default/module-2/interfaces/InterfaceB.md"}]}]}]"`;
44

5+
exports[`VitePress should generate typedoc sidebar with duplicate out and docsRoots 1`] = `"[{"text":"module-1","link":"/module-1/","collapsed":true,"items":[{"text":"Classes","collapsed":true,"items":[{"text":"ClassA","link":"/module-1/classes/ClassA.md"},{"text":"ClassB","link":"/module-1/classes/ClassB.md"}]},{"text":"Interfaces","collapsed":true,"items":[{"text":"InterfaceA","link":"/module-1/interfaces/InterfaceA.md"},{"text":"InterfaceB","link":"/module-1/interfaces/InterfaceB.md"}]}]},{"text":"module-2","link":"/module-2/","collapsed":true,"items":[{"text":"Classes","collapsed":true,"items":[{"text":"ClassA","link":"/module-2/classes/ClassA.md"},{"text":"ClassB","link":"/module-2/classes/ClassB.md"}]},{"text":"Interfaces","collapsed":true,"items":[{"text":"InterfaceA","link":"/module-2/interfaces/InterfaceA.md"},{"text":"InterfaceB","link":"/module-2/interfaces/InterfaceB.md"}]}]}]"`;
6+
57
exports[`VitePress should generate typedoc sidebar with options 1`] = `
68
"[
79
{

packages/typedoc-vitepress-theme/test/specs/vitepress.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,13 @@ describe(`VitePress`, () => {
3535
.toString();
3636
expect(contents).toMatchSnapshot();
3737
});
38+
39+
test(`should generate typedoc sidebar with duplicate out and docsRoots`, async () => {
40+
const contents = fs
41+
.readFileSync(
42+
path.join(__dirname, '../out/sidebar-options-2/typedoc-sidebar.json'),
43+
)
44+
.toString();
45+
expect(contents).toMatchSnapshot();
46+
});
3847
});

packages/typedoc-vitepress-theme/test/typedoc.base.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
{
22
"entryPoints": ["./stubs/*.ts"],
33
"tsconfig": "./stubs/tsconfig.json",
4-
"out": "./out",
54
"plugin": ["typedoc-plugin-markdown", "typedoc-vitepress-theme"],
65
"readme": "none",
76
"disableSources": true,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"extends": "./typedoc.base.json",
3+
"docsRoot": "./out/sidebar-options-2"
4+
}

0 commit comments

Comments
 (0)