@docusaurus/plugin-content-docs 2.0.0-beta.fc64c12e4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/lib/categoryGeneratedIndex.d.ts +12 -0
  2. package/lib/categoryGeneratedIndex.js +37 -0
  3. package/lib/cli.d.ts +3 -2
  4. package/lib/cli.js +57 -73
  5. package/lib/client/docsClientUtils.d.ts +9 -28
  6. package/lib/client/docsClientUtils.js +34 -43
  7. package/lib/client/index.d.ts +81 -0
  8. package/lib/client/index.js +67 -0
  9. package/lib/constants.d.ts +4 -0
  10. package/lib/constants.js +4 -1
  11. package/lib/docs.d.ts +33 -6
  12. package/lib/docs.js +201 -78
  13. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
  14. package/lib/{docFrontMatter.js → frontMatter.js} +22 -3
  15. package/lib/globalData.d.ts +3 -3
  16. package/lib/globalData.js +35 -6
  17. package/lib/index.d.ts +3 -3
  18. package/lib/index.js +120 -153
  19. package/lib/lastUpdate.d.ts +4 -6
  20. package/lib/lastUpdate.js +22 -26
  21. package/lib/markdown/index.d.ts +3 -6
  22. package/lib/markdown/index.js +3 -3
  23. package/lib/markdown/linkify.d.ts +1 -1
  24. package/lib/markdown/linkify.js +6 -3
  25. package/lib/numberPrefix.d.ts +1 -1
  26. package/lib/numberPrefix.js +16 -21
  27. package/lib/options.d.ts +3 -5
  28. package/lib/options.js +34 -26
  29. package/lib/props.d.ts +7 -2
  30. package/lib/props.js +84 -13
  31. package/lib/routes.d.ts +29 -0
  32. package/lib/routes.js +96 -0
  33. package/lib/server-export.d.ts +9 -0
  34. package/lib/server-export.js +25 -0
  35. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -7
  36. package/lib/sidebars/generator.js +209 -0
  37. package/lib/sidebars/index.d.ts +13 -0
  38. package/lib/sidebars/index.js +92 -0
  39. package/lib/sidebars/normalization.d.ts +13 -0
  40. package/lib/sidebars/normalization.js +59 -0
  41. package/lib/sidebars/postProcessor.d.ts +11 -0
  42. package/lib/sidebars/postProcessor.js +81 -0
  43. package/lib/sidebars/processor.d.ts +10 -0
  44. package/lib/sidebars/processor.js +79 -0
  45. package/lib/sidebars/types.d.ts +183 -0
  46. package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
  47. package/lib/sidebars/utils.d.ts +55 -0
  48. package/lib/sidebars/utils.js +259 -0
  49. package/lib/sidebars/validation.d.ts +11 -0
  50. package/lib/sidebars/validation.js +143 -0
  51. package/lib/slug.d.ts +5 -4
  52. package/lib/slug.js +28 -18
  53. package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
  54. package/lib/tags.js +21 -0
  55. package/lib/translations.d.ts +3 -3
  56. package/lib/translations.js +100 -93
  57. package/lib/types.d.ts +13 -192
  58. package/lib/versions/files.d.ts +50 -0
  59. package/lib/versions/files.js +141 -0
  60. package/lib/versions/index.d.ts +36 -0
  61. package/lib/versions/index.js +154 -0
  62. package/lib/versions/validation.d.ts +17 -0
  63. package/lib/versions/validation.js +71 -0
  64. package/package.json +44 -30
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +88 -118
  67. package/src/client/docsClientUtils.ts +44 -71
  68. package/src/client/index.ts +158 -0
  69. package/src/constants.ts +4 -2
  70. package/src/docs.ts +277 -80
  71. package/src/frontMatter.ts +63 -0
  72. package/src/globalData.ts +57 -7
  73. package/src/index.ts +174 -221
  74. package/src/lastUpdate.ts +27 -38
  75. package/src/markdown/index.ts +10 -16
  76. package/src/markdown/linkify.ts +7 -4
  77. package/src/numberPrefix.ts +19 -26
  78. package/src/options.ts +38 -38
  79. package/src/plugin-content-docs.d.ts +570 -91
  80. package/src/props.ts +121 -20
  81. package/src/routes.ts +159 -0
  82. package/src/server-export.ts +26 -0
  83. package/src/sidebars/README.md +10 -0
  84. package/src/sidebars/generator.ts +292 -0
  85. package/src/sidebars/index.ts +118 -0
  86. package/src/sidebars/normalization.ts +91 -0
  87. package/src/sidebars/postProcessor.ts +112 -0
  88. package/src/sidebars/processor.ts +123 -0
  89. package/src/sidebars/types.ts +280 -0
  90. package/src/sidebars/utils.ts +393 -0
  91. package/src/sidebars/validation.ts +179 -0
  92. package/src/slug.ts +41 -22
  93. package/src/tags.ts +20 -0
  94. package/src/translations.ts +155 -124
  95. package/src/types.ts +17 -259
  96. package/src/versions/files.ts +216 -0
  97. package/src/versions/index.ts +246 -0
  98. package/src/versions/validation.ts +115 -0
  99. package/lib/.tsbuildinfo +0 -1
  100. package/lib/sidebarItemsGenerator.js +0 -215
  101. package/lib/sidebars.d.ts +0 -45
  102. package/lib/sidebars.js +0 -354
  103. package/lib/theme/hooks/useDocs.d.ts +0 -20
  104. package/lib/theme/hooks/useDocs.js +0 -75
  105. package/lib/versions.d.ts +0 -16
  106. package/lib/versions.js +0 -319
  107. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  108. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  109. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  110. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  111. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  112. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  113. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  114. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  115. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  116. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  117. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  118. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  119. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  120. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  121. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  122. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  123. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  124. package/src/__tests__/__fixtures__/simple-site/docs/_partials/somePartial.md +0 -3
  125. package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +0 -3
  126. package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +0 -3
  127. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  128. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  129. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  130. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  131. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  132. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  133. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  134. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  135. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  136. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  137. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  138. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  139. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  140. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  141. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  142. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  143. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  149. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  150. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  151. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  152. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  153. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  154. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  155. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  156. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  157. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  158. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  159. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  160. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  161. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  162. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
  163. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  164. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  165. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  166. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  167. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  168. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  169. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  170. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  171. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  172. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  173. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  174. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  175. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  176. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  177. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  178. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  179. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  180. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  181. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  182. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  183. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  184. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  185. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  186. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/somePartial.md +0 -3
  187. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +0 -3
  188. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +0 -3
  189. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  190. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  191. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  192. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  193. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  194. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  195. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  196. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  197. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  198. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  199. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  200. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  201. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  202. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  203. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -95
  204. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1926
  205. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -233
  206. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -484
  207. package/src/__tests__/cli.test.ts +0 -337
  208. package/src/__tests__/docFrontMatter.test.ts +0 -244
  209. package/src/__tests__/docs.test.ts +0 -878
  210. package/src/__tests__/index.test.ts +0 -1885
  211. package/src/__tests__/lastUpdate.test.ts +0 -69
  212. package/src/__tests__/numberPrefix.test.ts +0 -199
  213. package/src/__tests__/options.test.ts +0 -272
  214. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -358
  215. package/src/__tests__/sidebars.test.ts +0 -746
  216. package/src/__tests__/slug.test.ts +0 -109
  217. package/src/__tests__/translations.test.ts +0 -158
  218. package/src/__tests__/versions.test.ts +0 -741
  219. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  220. package/src/docFrontMatter.ts +0 -41
  221. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  222. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  223. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  224. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  225. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  226. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  227. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  228. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  229. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  230. package/src/markdown/__tests__/linkify.test.ts +0 -190
  231. package/src/sidebarItemsGenerator.ts +0 -315
  232. package/src/sidebars.ts +0 -589
  233. package/src/theme/hooks/useDocs.ts +0 -103
  234. package/src/versions.ts +0 -572
  235. package/tsconfig.json +0 -9
  236. package/types.d.ts +0 -13
@@ -1,746 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import path from 'path';
9
- import {
10
- loadSidebars,
11
- collectSidebarDocItems,
12
- collectSidebarsDocIds,
13
- createSidebarsUtils,
14
- collectSidebarCategories,
15
- collectSidebarLinks,
16
- transformSidebarItems,
17
- processSidebars,
18
- DefaultSidebars,
19
- DisabledSidebars,
20
- fixSidebarItemInconsistencies,
21
- } from '../sidebars';
22
- import {
23
- Sidebar,
24
- SidebarItem,
25
- SidebarItemsGenerator,
26
- Sidebars,
27
- UnprocessedSidebars,
28
- SidebarOptions,
29
- SidebarItemCategory,
30
- } from '../types';
31
- import {DefaultSidebarItemsGenerator} from '../sidebarItemsGenerator';
32
-
33
- /* eslint-disable global-require, import/no-dynamic-require */
34
-
35
- describe('loadSidebars', () => {
36
- const fixtureDir = path.join(__dirname, '__fixtures__', 'sidebars');
37
- const options: SidebarOptions = {
38
- sidebarCollapsed: true,
39
- sidebarCollapsible: true,
40
- };
41
- test('sidebars with known sidebar item type', async () => {
42
- const sidebarPath = path.join(fixtureDir, 'sidebars.json');
43
- const result = loadSidebars(sidebarPath, options);
44
- expect(result).toMatchSnapshot();
45
- });
46
-
47
- test('sidebars with deep level of category', async () => {
48
- const sidebarPath = path.join(fixtureDir, 'sidebars-category.js');
49
- const result = loadSidebars(sidebarPath, options);
50
- expect(result).toMatchSnapshot();
51
- });
52
-
53
- test('sidebars shorthand and longform lead to exact same sidebar', async () => {
54
- const sidebarPath1 = path.join(fixtureDir, 'sidebars-category.js');
55
- const sidebarPath2 = path.join(
56
- fixtureDir,
57
- 'sidebars-category-shorthand.js',
58
- );
59
- const sidebar1 = loadSidebars(sidebarPath1, options);
60
- const sidebar2 = loadSidebars(sidebarPath2, options);
61
- expect(sidebar1).toEqual(sidebar2);
62
- });
63
-
64
- test('sidebars with category but category.items is not an array', async () => {
65
- const sidebarPath = path.join(
66
- fixtureDir,
67
- 'sidebars-category-wrong-items.json',
68
- );
69
- expect(() =>
70
- loadSidebars(sidebarPath, options),
71
- ).toThrowErrorMatchingInlineSnapshot(
72
- `"Error loading {\\"type\\":\\"category\\",\\"label\\":\\"Category Label\\",\\"items\\":\\"doc1\\"}: \\"items\\" must be an array."`,
73
- );
74
- });
75
-
76
- test('sidebars with category but category label is not a string', async () => {
77
- const sidebarPath = path.join(
78
- fixtureDir,
79
- 'sidebars-category-wrong-label.json',
80
- );
81
- expect(() =>
82
- loadSidebars(sidebarPath, options),
83
- ).toThrowErrorMatchingInlineSnapshot(
84
- `"Error loading {\\"type\\":\\"category\\",\\"label\\":true,\\"items\\":[\\"doc1\\"]}: \\"label\\" must be a string."`,
85
- );
86
- });
87
-
88
- test('sidebars item doc but id is not a string', async () => {
89
- const sidebarPath = path.join(
90
- fixtureDir,
91
- 'sidebars-doc-id-not-string.json',
92
- );
93
- expect(() =>
94
- loadSidebars(sidebarPath, options),
95
- ).toThrowErrorMatchingInlineSnapshot(
96
- `"Error loading {\\"type\\":\\"doc\\",\\"id\\":[\\"doc1\\"]}: \\"id\\" must be a string."`,
97
- );
98
- });
99
-
100
- test('sidebars with first level not a category', async () => {
101
- const sidebarPath = path.join(
102
- fixtureDir,
103
- 'sidebars-first-level-not-category.js',
104
- );
105
- const result = loadSidebars(sidebarPath, options);
106
- expect(result).toMatchSnapshot();
107
- });
108
-
109
- test('sidebars link', async () => {
110
- const sidebarPath = path.join(fixtureDir, 'sidebars-link.json');
111
- const result = loadSidebars(sidebarPath, options);
112
- expect(result).toMatchSnapshot();
113
- });
114
-
115
- test('sidebars link wrong label', async () => {
116
- const sidebarPath = path.join(fixtureDir, 'sidebars-link-wrong-label.json');
117
- expect(() =>
118
- loadSidebars(sidebarPath, options),
119
- ).toThrowErrorMatchingInlineSnapshot(
120
- `"Error loading {\\"type\\":\\"link\\",\\"label\\":false,\\"href\\":\\"https://github.com\\"}: \\"label\\" must be a string."`,
121
- );
122
- });
123
-
124
- test('sidebars link wrong href', async () => {
125
- const sidebarPath = path.join(fixtureDir, 'sidebars-link-wrong-href.json');
126
- expect(() =>
127
- loadSidebars(sidebarPath, options),
128
- ).toThrowErrorMatchingInlineSnapshot(
129
- `"Error loading {\\"type\\":\\"link\\",\\"label\\":\\"GitHub\\",\\"href\\":[\\"example.com\\"]}: \\"href\\" must be a string."`,
130
- );
131
- });
132
-
133
- test('sidebars with unknown sidebar item type', async () => {
134
- const sidebarPath = path.join(fixtureDir, 'sidebars-unknown-type.json');
135
- expect(() => loadSidebars(sidebarPath, options))
136
- .toThrowErrorMatchingInlineSnapshot(`
137
- "Unknown sidebar item type \\"superman\\". Sidebar item is {\\"type\\":\\"superman\\"}.
138
- "
139
- `);
140
- });
141
-
142
- test('sidebars with known sidebar item type but wrong field', async () => {
143
- const sidebarPath = path.join(fixtureDir, 'sidebars-wrong-field.json');
144
- expect(() =>
145
- loadSidebars(sidebarPath, options),
146
- ).toThrowErrorMatchingInlineSnapshot(
147
- `"Unknown sidebar item keys: href. Item: {\\"type\\":\\"category\\",\\"label\\":\\"category\\",\\"href\\":\\"https://github.com\\"}"`,
148
- );
149
- });
150
-
151
- test('unexisting path', () => {
152
- expect(loadSidebars('badpath', options)).toEqual(DisabledSidebars);
153
- });
154
-
155
- test('undefined path', () => {
156
- expect(loadSidebars(undefined, options)).toEqual(DefaultSidebars);
157
- });
158
-
159
- test('literal false path', () => {
160
- expect(loadSidebars(false, options)).toEqual(DisabledSidebars);
161
- });
162
-
163
- test('sidebars with category.collapsed property', async () => {
164
- const sidebarPath = path.join(fixtureDir, 'sidebars-collapsed.json');
165
- const result = loadSidebars(sidebarPath, options);
166
- expect(result).toMatchSnapshot();
167
- });
168
-
169
- test('sidebars with category.collapsed property at first level', async () => {
170
- const sidebarPath = path.join(
171
- fixtureDir,
172
- 'sidebars-collapsed-first-level.json',
173
- );
174
- const result = loadSidebars(sidebarPath, options);
175
- expect(result).toMatchSnapshot();
176
- });
177
- });
178
-
179
- describe('collectSidebarDocItems', () => {
180
- test('can collect docs', async () => {
181
- const sidebar: Sidebar = [
182
- {
183
- type: 'category',
184
- collapsed: false,
185
- collapsible: true,
186
- label: 'Category1',
187
- items: [
188
- {
189
- type: 'category',
190
- collapsed: false,
191
- collapsible: true,
192
- label: 'Subcategory 1',
193
- items: [{type: 'doc', id: 'doc1'}],
194
- },
195
- {
196
- type: 'category',
197
- collapsed: false,
198
- collapsible: true,
199
- label: 'Subcategory 2',
200
- items: [
201
- {type: 'doc', id: 'doc2'},
202
- {
203
- type: 'category',
204
- collapsed: false,
205
- collapsible: true,
206
- label: 'Sub sub category 1',
207
- items: [{type: 'doc', id: 'doc3'}],
208
- },
209
- ],
210
- },
211
- ],
212
- },
213
- {
214
- type: 'category',
215
- collapsed: false,
216
- collapsible: true,
217
- label: 'Category2',
218
- items: [
219
- {type: 'doc', id: 'doc4'},
220
- {type: 'doc', id: 'doc5'},
221
- ],
222
- },
223
- ];
224
-
225
- expect(collectSidebarDocItems(sidebar).map((doc) => doc.id)).toEqual([
226
- 'doc1',
227
- 'doc2',
228
- 'doc3',
229
- 'doc4',
230
- 'doc5',
231
- ]);
232
- });
233
- });
234
-
235
- describe('collectSidebarCategories', () => {
236
- test('can collect categories', async () => {
237
- const sidebar: Sidebar = [
238
- {
239
- type: 'category',
240
- collapsed: false,
241
- collapsible: true,
242
- label: 'Category1',
243
- items: [
244
- {
245
- type: 'category',
246
- collapsed: false,
247
- collapsible: true,
248
- label: 'Subcategory 1',
249
- items: [{type: 'doc', id: 'doc1'}],
250
- },
251
- {
252
- type: 'category',
253
- collapsed: false,
254
- collapsible: true,
255
- label: 'Subcategory 2',
256
- items: [
257
- {type: 'doc', id: 'doc2'},
258
- {
259
- type: 'category',
260
- collapsed: false,
261
- collapsible: true,
262
- label: 'Sub sub category 1',
263
- items: [{type: 'doc', id: 'doc3'}],
264
- },
265
- ],
266
- },
267
- ],
268
- },
269
- {
270
- type: 'category',
271
- collapsed: false,
272
- collapsible: true,
273
- label: 'Category2',
274
- items: [
275
- {type: 'doc', id: 'doc4'},
276
- {type: 'doc', id: 'doc5'},
277
- ],
278
- },
279
- ];
280
-
281
- expect(
282
- collectSidebarCategories(sidebar).map((category) => category.label),
283
- ).toEqual([
284
- 'Category1',
285
- 'Subcategory 1',
286
- 'Subcategory 2',
287
- 'Sub sub category 1',
288
- 'Category2',
289
- ]);
290
- });
291
- });
292
-
293
- describe('collectSidebarLinks', () => {
294
- test('can collect links', async () => {
295
- const sidebar: Sidebar = [
296
- {
297
- type: 'category',
298
- collapsed: false,
299
- collapsible: true,
300
- label: 'Category1',
301
- items: [
302
- {
303
- type: 'link',
304
- href: 'https://google.com',
305
- label: 'Google',
306
- },
307
- {
308
- type: 'category',
309
- collapsed: false,
310
- collapsible: true,
311
- label: 'Subcategory 2',
312
- items: [
313
- {
314
- type: 'link',
315
- href: 'https://facebook.com',
316
- label: 'Facebook',
317
- },
318
- ],
319
- },
320
- ],
321
- },
322
- ];
323
-
324
- expect(collectSidebarLinks(sidebar).map((link) => link.href)).toEqual([
325
- 'https://google.com',
326
- 'https://facebook.com',
327
- ]);
328
- });
329
- });
330
-
331
- describe('collectSidebarsDocIds', () => {
332
- test('can collect sidebars doc items', async () => {
333
- const sidebar1: Sidebar = [
334
- {
335
- type: 'category',
336
- collapsed: false,
337
- collapsible: true,
338
- label: 'Category1',
339
- items: [
340
- {
341
- type: 'category',
342
- collapsed: false,
343
- collapsible: true,
344
- label: 'Subcategory 1',
345
- items: [{type: 'doc', id: 'doc1'}],
346
- },
347
- {type: 'doc', id: 'doc2'},
348
- ],
349
- },
350
- ];
351
-
352
- const sidebar2: Sidebar = [
353
- {
354
- type: 'category',
355
- collapsed: false,
356
- collapsible: true,
357
- label: 'Category2',
358
- items: [
359
- {type: 'doc', id: 'doc3'},
360
- {type: 'doc', id: 'doc4'},
361
- ],
362
- },
363
- ];
364
-
365
- const sidebar3: Sidebar = [
366
- {type: 'doc', id: 'doc5'},
367
- {type: 'doc', id: 'doc6'},
368
- ];
369
- expect(collectSidebarsDocIds({sidebar1, sidebar2, sidebar3})).toEqual({
370
- sidebar1: ['doc1', 'doc2'],
371
- sidebar2: ['doc3', 'doc4'],
372
- sidebar3: ['doc5', 'doc6'],
373
- });
374
- });
375
- });
376
-
377
- describe('transformSidebarItems', () => {
378
- test('can transform sidebar items', async () => {
379
- const sidebar: Sidebar = [
380
- {
381
- type: 'category',
382
- collapsed: false,
383
- collapsible: true,
384
- label: 'Category1',
385
- items: [
386
- {
387
- type: 'category',
388
- collapsed: false,
389
- collapsible: true,
390
- label: 'Subcategory 1',
391
- items: [{type: 'doc', id: 'doc1'}],
392
- customProps: {fakeProp: false},
393
- },
394
- {
395
- type: 'category',
396
- collapsed: false,
397
- collapsible: true,
398
- label: 'Subcategory 2',
399
- items: [
400
- {type: 'doc', id: 'doc2'},
401
- {
402
- type: 'category',
403
- collapsed: false,
404
- collapsible: true,
405
- label: 'Sub sub category 1',
406
- items: [
407
- {type: 'doc', id: 'doc3', customProps: {lorem: 'ipsum'}},
408
- ],
409
- },
410
- ],
411
- },
412
- ],
413
- },
414
- {
415
- type: 'category',
416
- collapsed: false,
417
- collapsible: true,
418
- label: 'Category2',
419
- items: [
420
- {type: 'doc', id: 'doc4'},
421
- {type: 'doc', id: 'doc5'},
422
- ],
423
- },
424
- ];
425
-
426
- expect(
427
- transformSidebarItems(sidebar, (item) => {
428
- if (item.type === 'category') {
429
- return {...item, label: `MODIFIED LABEL: ${item.label}`};
430
- }
431
- return item;
432
- }),
433
- ).toEqual([
434
- {
435
- type: 'category',
436
- collapsed: false,
437
- collapsible: true,
438
- label: 'MODIFIED LABEL: Category1',
439
- items: [
440
- {
441
- type: 'category',
442
- collapsed: false,
443
- collapsible: true,
444
- label: 'MODIFIED LABEL: Subcategory 1',
445
- items: [{type: 'doc', id: 'doc1'}],
446
- customProps: {fakeProp: false},
447
- },
448
- {
449
- type: 'category',
450
- collapsed: false,
451
- collapsible: true,
452
- label: 'MODIFIED LABEL: Subcategory 2',
453
- items: [
454
- {type: 'doc', id: 'doc2'},
455
- {
456
- type: 'category',
457
- collapsed: false,
458
- collapsible: true,
459
- label: 'MODIFIED LABEL: Sub sub category 1',
460
- items: [
461
- {type: 'doc', id: 'doc3', customProps: {lorem: 'ipsum'}},
462
- ],
463
- },
464
- ],
465
- },
466
- ],
467
- },
468
- {
469
- type: 'category',
470
- collapsed: false,
471
- collapsible: true,
472
- label: 'MODIFIED LABEL: Category2',
473
- items: [
474
- {type: 'doc', id: 'doc4'},
475
- {type: 'doc', id: 'doc5'},
476
- ],
477
- },
478
- ]);
479
- });
480
- });
481
-
482
- describe('processSidebars', () => {
483
- const StaticGeneratedSidebarSlice: SidebarItem[] = [
484
- {type: 'doc', id: 'doc-generated-id-1'},
485
- {type: 'doc', id: 'doc-generated-id-2'},
486
- ];
487
-
488
- const StaticSidebarItemsGenerator: SidebarItemsGenerator = jest.fn(
489
- async () => {
490
- return StaticGeneratedSidebarSlice;
491
- },
492
- );
493
-
494
- async function testProcessSidebars(unprocessedSidebars: UnprocessedSidebars) {
495
- return processSidebars({
496
- sidebarItemsGenerator: StaticSidebarItemsGenerator,
497
- unprocessedSidebars,
498
- docs: [],
499
- // @ts-expect-error: useless for this test
500
- version: {},
501
- });
502
- }
503
-
504
- test('let sidebars without autogenerated items untouched', async () => {
505
- const unprocessedSidebars: UnprocessedSidebars = {
506
- someSidebar: [
507
- {type: 'doc', id: 'doc1'},
508
- {
509
- type: 'category',
510
- collapsed: false,
511
- collapsible: true,
512
- items: [{type: 'doc', id: 'doc2'}],
513
- label: 'Category',
514
- },
515
- {type: 'link', href: 'https://facebook.com', label: 'FB'},
516
- ],
517
- secondSidebar: [
518
- {type: 'doc', id: 'doc3'},
519
- {type: 'link', href: 'https://instagram.com', label: 'IG'},
520
- {
521
- type: 'category',
522
- collapsed: false,
523
- collapsible: true,
524
- items: [{type: 'doc', id: 'doc4'}],
525
- label: 'Category',
526
- },
527
- ],
528
- };
529
-
530
- const processedSidebar = await testProcessSidebars(unprocessedSidebars);
531
- expect(processedSidebar).toEqual(unprocessedSidebars);
532
- });
533
-
534
- test('replace autogenerated items by generated sidebars slices', async () => {
535
- const unprocessedSidebars: UnprocessedSidebars = {
536
- someSidebar: [
537
- {type: 'doc', id: 'doc1'},
538
- {
539
- type: 'category',
540
- collapsed: false,
541
- collapsible: true,
542
- items: [
543
- {type: 'doc', id: 'doc2'},
544
- {type: 'autogenerated', dirName: 'dir1'},
545
- ],
546
- label: 'Category',
547
- },
548
- {type: 'link', href: 'https://facebook.com', label: 'FB'},
549
- ],
550
- secondSidebar: [
551
- {type: 'doc', id: 'doc3'},
552
- {type: 'autogenerated', dirName: 'dir2'},
553
- {type: 'link', href: 'https://instagram.com', label: 'IG'},
554
- {type: 'autogenerated', dirName: 'dir3'},
555
- {
556
- type: 'category',
557
- collapsed: false,
558
- collapsible: true,
559
- items: [{type: 'doc', id: 'doc4'}],
560
- label: 'Category',
561
- },
562
- ],
563
- };
564
-
565
- const processedSidebar = await testProcessSidebars(unprocessedSidebars);
566
-
567
- expect(StaticSidebarItemsGenerator).toHaveBeenCalledTimes(3);
568
- expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
569
- defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
570
- item: {type: 'autogenerated', dirName: 'dir1'},
571
- docs: [],
572
- version: {},
573
- });
574
- expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
575
- defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
576
- item: {type: 'autogenerated', dirName: 'dir2'},
577
- docs: [],
578
- version: {},
579
- });
580
- expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
581
- defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
582
- item: {type: 'autogenerated', dirName: 'dir3'},
583
- docs: [],
584
- version: {},
585
- });
586
-
587
- expect(processedSidebar).toEqual({
588
- someSidebar: [
589
- {type: 'doc', id: 'doc1'},
590
- {
591
- type: 'category',
592
- collapsed: false,
593
- collapsible: true,
594
- items: [{type: 'doc', id: 'doc2'}, ...StaticGeneratedSidebarSlice],
595
- label: 'Category',
596
- },
597
- {type: 'link', href: 'https://facebook.com', label: 'FB'},
598
- ],
599
- secondSidebar: [
600
- {type: 'doc', id: 'doc3'},
601
- ...StaticGeneratedSidebarSlice,
602
- {type: 'link', href: 'https://instagram.com', label: 'IG'},
603
- ...StaticGeneratedSidebarSlice,
604
- {
605
- type: 'category',
606
- collapsed: false,
607
- collapsible: true,
608
- items: [{type: 'doc', id: 'doc4'}],
609
- label: 'Category',
610
- },
611
- ],
612
- } as Sidebars);
613
- });
614
- });
615
-
616
- describe('createSidebarsUtils', () => {
617
- const sidebar1: Sidebar = [
618
- {
619
- type: 'category',
620
- collapsed: false,
621
- collapsible: true,
622
- label: 'Category1',
623
- items: [
624
- {
625
- type: 'category',
626
- collapsed: false,
627
- collapsible: true,
628
- label: 'Subcategory 1',
629
- items: [{type: 'doc', id: 'doc1'}],
630
- },
631
- {type: 'doc', id: 'doc2'},
632
- ],
633
- },
634
- ];
635
-
636
- const sidebar2: Sidebar = [
637
- {
638
- type: 'category',
639
- collapsed: false,
640
- collapsible: true,
641
- label: 'Category2',
642
- items: [
643
- {type: 'doc', id: 'doc3'},
644
- {type: 'doc', id: 'doc4'},
645
- ],
646
- },
647
- ];
648
-
649
- const sidebars: Sidebars = {sidebar1, sidebar2};
650
-
651
- const {
652
- getFirstDocIdOfFirstSidebar,
653
- getSidebarNameByDocId,
654
- getDocNavigation,
655
- } = createSidebarsUtils(sidebars);
656
-
657
- test('getSidebarNameByDocId', async () => {
658
- expect(getFirstDocIdOfFirstSidebar()).toEqual('doc1');
659
- });
660
-
661
- test('getSidebarNameByDocId', async () => {
662
- expect(getSidebarNameByDocId('doc1')).toEqual('sidebar1');
663
- expect(getSidebarNameByDocId('doc2')).toEqual('sidebar1');
664
- expect(getSidebarNameByDocId('doc3')).toEqual('sidebar2');
665
- expect(getSidebarNameByDocId('doc4')).toEqual('sidebar2');
666
- expect(getSidebarNameByDocId('doc5')).toEqual(undefined);
667
- expect(getSidebarNameByDocId('doc6')).toEqual(undefined);
668
- });
669
-
670
- test('getDocNavigation', async () => {
671
- expect(getDocNavigation('doc1')).toEqual({
672
- sidebarName: 'sidebar1',
673
- previousId: undefined,
674
- nextId: 'doc2',
675
- });
676
- expect(getDocNavigation('doc2')).toEqual({
677
- sidebarName: 'sidebar1',
678
- previousId: 'doc1',
679
- nextId: undefined,
680
- });
681
-
682
- expect(getDocNavigation('doc3')).toEqual({
683
- sidebarName: 'sidebar2',
684
- previousId: undefined,
685
- nextId: 'doc4',
686
- });
687
- expect(getDocNavigation('doc4')).toEqual({
688
- sidebarName: 'sidebar2',
689
- previousId: 'doc3',
690
- nextId: undefined,
691
- });
692
- });
693
- });
694
-
695
- describe('fixSidebarItemInconsistencies', () => {
696
- test('should not fix good category', () => {
697
- const category: SidebarItemCategory = {
698
- type: 'category',
699
- label: 'Cat',
700
- items: [],
701
- collapsible: true,
702
- collapsed: true,
703
- };
704
- expect(fixSidebarItemInconsistencies(category)).toEqual(category);
705
- });
706
-
707
- test('should fix bad category', () => {
708
- const category: SidebarItemCategory = {
709
- type: 'category',
710
- label: 'Cat',
711
- items: [],
712
- collapsible: false,
713
- collapsed: true, // Bad because collapsible=false
714
- };
715
- expect(fixSidebarItemInconsistencies(category)).toEqual({
716
- ...category,
717
- collapsed: false,
718
- });
719
- });
720
-
721
- test('should fix bad subcategory', () => {
722
- const subCategory: SidebarItemCategory = {
723
- type: 'category',
724
- label: 'SubCat',
725
- items: [],
726
- collapsible: false,
727
- collapsed: true, // Bad because collapsible=false
728
- };
729
- const category: SidebarItemCategory = {
730
- type: 'category',
731
- label: 'Cat',
732
- items: [subCategory],
733
- collapsible: true,
734
- collapsed: true,
735
- };
736
- expect(fixSidebarItemInconsistencies(category)).toEqual({
737
- ...category,
738
- items: [
739
- {
740
- ...subCategory,
741
- collapsed: false,
742
- },
743
- ],
744
- });
745
- });
746
- });