@docusaurus/plugin-content-docs 2.0.0-beta.1decd6f80 → 2.0.0-beta.20

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