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

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 (140) hide show
  1. package/lib/.tsbuildinfo +1 -1
  2. package/lib/categoryGeneratedIndex.d.ts +12 -0
  3. package/lib/categoryGeneratedIndex.js +37 -0
  4. package/lib/cli.d.ts +2 -2
  5. package/lib/cli.js +12 -34
  6. package/lib/client/docsClientUtils.d.ts +1 -4
  7. package/lib/client/docsClientUtils.js +21 -31
  8. package/lib/docFrontMatter.d.ts +1 -1
  9. package/lib/docFrontMatter.js +10 -6
  10. package/lib/docs.d.ts +25 -3
  11. package/lib/docs.js +125 -38
  12. package/lib/globalData.d.ts +1 -1
  13. package/lib/index.d.ts +1 -1
  14. package/lib/index.js +104 -138
  15. package/lib/lastUpdate.js +9 -10
  16. package/lib/markdown/index.d.ts +3 -6
  17. package/lib/markdown/index.js +3 -3
  18. package/lib/markdown/linkify.js +2 -2
  19. package/lib/numberPrefix.d.ts +1 -1
  20. package/lib/options.d.ts +3 -3
  21. package/lib/options.js +49 -17
  22. package/lib/props.d.ts +7 -2
  23. package/lib/props.js +61 -9
  24. package/lib/routes.d.ts +27 -0
  25. package/lib/routes.js +105 -0
  26. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +5 -2
  27. package/lib/sidebars/generator.js +216 -0
  28. package/lib/sidebars/index.d.ts +15 -0
  29. package/lib/sidebars/index.js +73 -0
  30. package/lib/sidebars/normalization.d.ts +14 -0
  31. package/lib/sidebars/normalization.js +77 -0
  32. package/lib/sidebars/processor.d.ts +18 -0
  33. package/lib/sidebars/processor.js +85 -0
  34. package/lib/sidebars/types.d.ts +127 -0
  35. package/lib/sidebars/types.js +8 -0
  36. package/lib/sidebars/utils.d.ts +35 -0
  37. package/lib/sidebars/utils.js +228 -0
  38. package/lib/sidebars/validation.d.ts +10 -0
  39. package/lib/sidebars/validation.js +138 -0
  40. package/lib/slug.d.ts +4 -3
  41. package/lib/slug.js +27 -15
  42. package/lib/tags.d.ts +8 -0
  43. package/lib/tags.js +20 -0
  44. package/lib/theme/hooks/useDocs.js +24 -21
  45. package/lib/translations.d.ts +2 -2
  46. package/lib/translations.js +71 -29
  47. package/lib/types.d.ts +52 -62
  48. package/lib/versions.d.ts +3 -3
  49. package/lib/versions.js +76 -24
  50. package/package.json +22 -20
  51. package/src/__tests__/__fixtures__/simple-site/docs/_partials/somePartial.md +3 -0
  52. package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +3 -0
  53. package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +3 -0
  54. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +5 -0
  55. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +2 -0
  56. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +2 -0
  57. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +2 -0
  58. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +2 -0
  59. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +2 -0
  60. package/src/__tests__/__fixtures__/simple-site/sidebars.json +15 -1
  61. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +1 -0
  62. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +6 -0
  63. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +3 -0
  64. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +3 -0
  65. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +3 -0
  66. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +3 -0
  67. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/somePartial.md +3 -0
  68. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +3 -0
  69. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +3 -0
  70. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +3 -0
  71. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +2 -2
  72. package/src/__tests__/__snapshots__/cli.test.ts.snap +48 -73
  73. package/src/__tests__/__snapshots__/docs.test.ts.snap +140 -0
  74. package/src/__tests__/__snapshots__/index.test.ts.snap +753 -112
  75. package/src/__tests__/__snapshots__/translations.test.ts.snap +45 -18
  76. package/src/__tests__/cli.test.ts +15 -11
  77. package/src/__tests__/docFrontMatter.test.ts +195 -40
  78. package/src/__tests__/docs.test.ts +311 -150
  79. package/src/__tests__/index.test.ts +112 -69
  80. package/src/__tests__/lastUpdate.test.ts +3 -2
  81. package/src/__tests__/options.test.ts +48 -4
  82. package/src/__tests__/props.test.ts +62 -0
  83. package/src/__tests__/slug.test.ts +127 -20
  84. package/src/__tests__/translations.test.ts +7 -2
  85. package/src/__tests__/versions.test.ts +93 -67
  86. package/src/categoryGeneratedIndex.ts +57 -0
  87. package/src/cli.ts +8 -41
  88. package/src/client/__tests__/docsClientUtils.test.ts +4 -5
  89. package/src/client/docsClientUtils.ts +19 -41
  90. package/{types.d.ts → src/deps.d.ts} +0 -0
  91. package/src/docFrontMatter.ts +13 -7
  92. package/src/docs.ts +158 -29
  93. package/src/globalData.ts +6 -1
  94. package/src/index.ts +134 -179
  95. package/src/lastUpdate.ts +10 -9
  96. package/src/markdown/index.ts +8 -12
  97. package/src/numberPrefix.ts +5 -3
  98. package/src/options.ts +59 -28
  99. package/src/plugin-content-docs.d.ts +179 -35
  100. package/src/props.ts +91 -16
  101. package/src/routes.ts +173 -0
  102. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -0
  103. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -0
  104. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -0
  105. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category.js +0 -0
  106. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -0
  107. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed.json +0 -0
  108. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -0
  109. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -0
  110. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -0
  111. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -0
  112. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link.json +0 -0
  113. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-unknown-type.json +0 -0
  114. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-wrong-field.json +0 -0
  115. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars.json +0 -0
  116. package/src/{__tests__/__snapshots__/sidebars.test.ts.snap → sidebars/__tests__/__snapshots__/index.test.ts.snap} +36 -6
  117. package/src/{__tests__/sidebarItemsGenerator.test.ts → sidebars/__tests__/generator.test.ts} +143 -18
  118. package/src/sidebars/__tests__/index.test.ts +204 -0
  119. package/src/sidebars/__tests__/processor.test.ts +237 -0
  120. package/src/sidebars/__tests__/utils.test.ts +695 -0
  121. package/src/sidebars/__tests__/validation.test.ts +105 -0
  122. package/src/sidebars/generator.ts +310 -0
  123. package/src/sidebars/index.ts +94 -0
  124. package/src/sidebars/normalization.ts +112 -0
  125. package/src/sidebars/processor.ts +154 -0
  126. package/src/sidebars/types.ts +211 -0
  127. package/src/sidebars/utils.ts +329 -0
  128. package/src/sidebars/validation.ts +168 -0
  129. package/src/slug.ts +32 -17
  130. package/src/tags.ts +19 -0
  131. package/src/theme/hooks/useDocs.ts +5 -1
  132. package/src/translations.ts +103 -47
  133. package/src/types.ts +67 -105
  134. package/src/versions.ts +117 -21
  135. package/lib/sidebarItemsGenerator.js +0 -211
  136. package/lib/sidebars.d.ts +0 -43
  137. package/lib/sidebars.js +0 -319
  138. package/src/__tests__/sidebars.test.ts +0 -639
  139. package/src/sidebarItemsGenerator.ts +0 -307
  140. package/src/sidebars.ts +0 -506
@@ -0,0 +1,237 @@
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 {processSidebars, SidebarProcessorParams} from '../processor';
9
+ import type {
10
+ SidebarItem,
11
+ SidebarItemsGenerator,
12
+ Sidebars,
13
+ NormalizedSidebars,
14
+ } from '../types';
15
+ import {DefaultSidebarItemsGenerator} from '../generator';
16
+ import {createSlugger} from '@docusaurus/utils';
17
+ import {VersionMetadata} from '../../types';
18
+ import {DefaultNumberPrefixParser} from '../../numberPrefix';
19
+
20
+ describe('processSidebars', () => {
21
+ function createStaticSidebarItemGenerator(
22
+ sidebarSlice: SidebarItem[],
23
+ ): SidebarItemsGenerator {
24
+ return jest.fn(async () => sidebarSlice);
25
+ }
26
+
27
+ const StaticGeneratedSidebarSlice: SidebarItem[] = [
28
+ {type: 'doc', id: 'doc-generated-id-1'},
29
+ {type: 'doc', id: 'doc-generated-id-2'},
30
+ ];
31
+
32
+ const StaticSidebarItemsGenerator: SidebarItemsGenerator =
33
+ createStaticSidebarItemGenerator(StaticGeneratedSidebarSlice);
34
+
35
+ // @ts-expect-error: good enough for this test
36
+ const version: VersionMetadata = {
37
+ versionName: '1.0.0',
38
+ versionPath: '/docs/1.0.0',
39
+ };
40
+
41
+ const params: SidebarProcessorParams = {
42
+ sidebarItemsGenerator: StaticSidebarItemsGenerator,
43
+ docs: [],
44
+ version,
45
+ numberPrefixParser: DefaultNumberPrefixParser,
46
+ categoryLabelSlugger: createSlugger(),
47
+ sidebarOptions: {
48
+ sidebarCollapsed: true,
49
+ sidebarCollapsible: true,
50
+ },
51
+ };
52
+
53
+ async function testProcessSidebars(
54
+ unprocessedSidebars: NormalizedSidebars,
55
+ paramsOverrides: Partial<SidebarProcessorParams> = {},
56
+ ) {
57
+ return processSidebars(unprocessedSidebars, {
58
+ ...params,
59
+ ...paramsOverrides,
60
+ });
61
+ }
62
+
63
+ test('let sidebars without autogenerated items untouched', async () => {
64
+ const unprocessedSidebars: NormalizedSidebars = {
65
+ someSidebar: [
66
+ {type: 'doc', id: 'doc1'},
67
+ {
68
+ type: 'category',
69
+ collapsed: false,
70
+ collapsible: true,
71
+ items: [{type: 'doc', id: 'doc2'}],
72
+ label: 'Category',
73
+ },
74
+ {type: 'link', href: 'https://facebook.com', label: 'FB'},
75
+ ],
76
+ secondSidebar: [
77
+ {type: 'doc', id: 'doc3'},
78
+ {type: 'link', href: 'https://instagram.com', label: 'IG'},
79
+ {
80
+ type: 'category',
81
+ collapsed: false,
82
+ collapsible: true,
83
+ items: [{type: 'doc', id: 'doc4'}],
84
+ label: 'Category',
85
+ },
86
+ ],
87
+ };
88
+
89
+ const processedSidebar = await testProcessSidebars(unprocessedSidebars);
90
+ expect(processedSidebar).toEqual(unprocessedSidebars);
91
+ });
92
+
93
+ test('replace autogenerated items by generated sidebars slices', async () => {
94
+ const unprocessedSidebars: NormalizedSidebars = {
95
+ someSidebar: [
96
+ {type: 'doc', id: 'doc1'},
97
+ {
98
+ type: 'category',
99
+ label: 'Category',
100
+ link: {
101
+ type: 'generated-index',
102
+ slug: 'category-generated-index-slug',
103
+ permalink: 'category-generated-index-permalink',
104
+ },
105
+ collapsed: false,
106
+ collapsible: true,
107
+ items: [
108
+ {type: 'doc', id: 'doc2'},
109
+ {type: 'autogenerated', dirName: 'dir1'},
110
+ ],
111
+ },
112
+ {type: 'link', href: 'https://facebook.com', label: 'FB'},
113
+ ],
114
+ secondSidebar: [
115
+ {type: 'doc', id: 'doc3'},
116
+ {type: 'autogenerated', dirName: 'dir2'},
117
+ {type: 'link', href: 'https://instagram.com', label: 'IG'},
118
+ {type: 'autogenerated', dirName: 'dir3'},
119
+ {
120
+ type: 'category',
121
+ label: 'Category',
122
+ collapsed: false,
123
+ collapsible: true,
124
+ items: [{type: 'doc', id: 'doc4'}],
125
+ },
126
+ ],
127
+ };
128
+
129
+ const processedSidebar = await testProcessSidebars(unprocessedSidebars);
130
+
131
+ expect(StaticSidebarItemsGenerator).toHaveBeenCalledTimes(3);
132
+ expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
133
+ defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
134
+ item: {type: 'autogenerated', dirName: 'dir1'},
135
+ docs: params.docs,
136
+ version: {
137
+ versionName: version.versionName,
138
+ },
139
+ numberPrefixParser: DefaultNumberPrefixParser,
140
+ options: params.sidebarOptions,
141
+ });
142
+ expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
143
+ defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
144
+ item: {type: 'autogenerated', dirName: 'dir2'},
145
+ docs: params.docs,
146
+ version: {
147
+ versionName: version.versionName,
148
+ },
149
+ numberPrefixParser: DefaultNumberPrefixParser,
150
+ options: params.sidebarOptions,
151
+ });
152
+ expect(StaticSidebarItemsGenerator).toHaveBeenCalledWith({
153
+ defaultSidebarItemsGenerator: DefaultSidebarItemsGenerator,
154
+ item: {type: 'autogenerated', dirName: 'dir3'},
155
+ docs: params.docs,
156
+ version: {
157
+ versionName: version.versionName,
158
+ },
159
+ numberPrefixParser: DefaultNumberPrefixParser,
160
+ options: params.sidebarOptions,
161
+ });
162
+
163
+ expect(processedSidebar).toEqual({
164
+ someSidebar: [
165
+ {type: 'doc', id: 'doc1'},
166
+ {
167
+ type: 'category',
168
+ label: 'Category',
169
+ link: {
170
+ type: 'generated-index',
171
+ slug: 'category-generated-index-slug',
172
+ permalink: 'category-generated-index-permalink',
173
+ },
174
+ collapsed: false,
175
+ collapsible: true,
176
+ items: [{type: 'doc', id: 'doc2'}, ...StaticGeneratedSidebarSlice],
177
+ },
178
+ {type: 'link', href: 'https://facebook.com', label: 'FB'},
179
+ ],
180
+ secondSidebar: [
181
+ {type: 'doc', id: 'doc3'},
182
+ ...StaticGeneratedSidebarSlice,
183
+ {type: 'link', href: 'https://instagram.com', label: 'IG'},
184
+ ...StaticGeneratedSidebarSlice,
185
+ {
186
+ type: 'category',
187
+ label: 'Category',
188
+ collapsed: false,
189
+ collapsible: true,
190
+ items: [{type: 'doc', id: 'doc4'}],
191
+ },
192
+ ],
193
+ } as Sidebars);
194
+ });
195
+
196
+ test('ensure generated items are normalized', async () => {
197
+ const sidebarSliceContainingCategoryGeneratedIndex: SidebarItem[] = [
198
+ {
199
+ type: 'category',
200
+ label: 'Generated category',
201
+ link: {
202
+ type: 'generated-index',
203
+ slug: 'generated-cat-index-slug',
204
+ // @ts-expect-error: TODO undefined should be allowed here, typing error needing refactor
205
+ permalink: undefined,
206
+ },
207
+ },
208
+ ];
209
+
210
+ const unprocessedSidebars: NormalizedSidebars = {
211
+ someSidebar: [{type: 'autogenerated', dirName: 'dir2'}],
212
+ };
213
+
214
+ const processedSidebar = await testProcessSidebars(unprocessedSidebars, {
215
+ sidebarItemsGenerator: createStaticSidebarItemGenerator(
216
+ sidebarSliceContainingCategoryGeneratedIndex,
217
+ ),
218
+ });
219
+
220
+ expect(processedSidebar).toEqual({
221
+ someSidebar: [
222
+ {
223
+ type: 'category',
224
+ label: 'Generated category',
225
+ link: {
226
+ type: 'generated-index',
227
+ slug: 'generated-cat-index-slug',
228
+ permalink: '/docs/1.0.0/generated-cat-index-slug',
229
+ },
230
+ items: [],
231
+ collapsible: true,
232
+ collapsed: true,
233
+ },
234
+ ],
235
+ } as Sidebars);
236
+ });
237
+ });