@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
@@ -5,16 +5,19 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {DocsMarkdownOption} from '../types';
9
- import {getDocsDirPaths} from '../versions';
10
- import {replaceMarkdownLinks} from '@docusaurus/utils';
8
+ import {replaceMarkdownLinks, getContentPathList} from '@docusaurus/utils';
9
+ import type {DocsMarkdownOption} from '../types';
11
10
 
12
11
  function getVersion(filePath: string, options: DocsMarkdownOption) {
13
12
  const versionFound = options.versionsMetadata.find((version) =>
14
- getDocsDirPaths(version).some((docsDirPath) =>
13
+ getContentPathList(version).some((docsDirPath) =>
15
14
  filePath.startsWith(docsDirPath),
16
15
  ),
17
16
  );
17
+ // At this point, this should never happen, because the MDX loaders' paths are
18
+ // literally using the version content paths; but if we allow sourcing content
19
+ // from outside the docs directory (through the `include` option, for example;
20
+ // is there a compelling use-case?), this would actually be testable
18
21
  if (!versionFound) {
19
22
  throw new Error(
20
23
  `Unexpected error: Markdown file at "${filePath}" does not belong to any docs version!`,
@@ -5,43 +5,36 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {NumberPrefixParser} from './types';
8
+ import type {NumberPrefixParser} from '@docusaurus/plugin-content-docs';
9
9
 
10
10
  // Best-effort to avoid parsing some patterns as number prefix
11
- const IgnoredPrefixPatterns = (function () {
12
- // ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
13
- const DateLikePrefixRegex = /^((\d{2}|\d{4})[-_.]\d{2}([-_.](\d{2}|\d{4}))?)(.*)$/;
14
-
15
- // ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
16
- // note: we could try to parse float numbers in filenames but that is probably not worth it
17
- // as a version such as "8.0" can be interpreted as both a version and a float
18
- // User can configure his own NumberPrefixParser if he wants 8.0 to be interpreted as a float
19
- const VersionLikePrefixRegex = /^(\d+[-_.]\d+)(.*)$/;
20
-
21
- return new RegExp(
22
- `${DateLikePrefixRegex.source}|${VersionLikePrefixRegex.source}`,
23
- );
24
- })();
25
-
26
- const NumberPrefixRegex = /^(?<numberPrefix>\d+)(?<separator>\s*[-_.]+\s*)(?<suffix>.*)$/;
11
+ // ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
12
+ // ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
13
+ // Both of them would look like 7.0-foo or 2021-11-foo
14
+ // note: we could try to parse float numbers in filenames, but that is probably
15
+ // not worth it, as a version such as "8.0" can be interpreted as either a
16
+ // version or a float. User can configure her own NumberPrefixParser if she
17
+ // wants 8.0 to be interpreted as a float
18
+ const ignoredPrefixPattern = /^\d+[-_.]\d+/;
19
+
20
+ const numberPrefixPattern =
21
+ /^(?<numberPrefix>\d+)\s*[-_.]+\s*(?<suffix>[^-_.\s].*)$/;
27
22
 
28
23
  // 0-myDoc => {filename: myDoc, numberPrefix: 0}
29
24
  // 003 - myDoc => {filename: myDoc, numberPrefix: 3}
30
25
  export const DefaultNumberPrefixParser: NumberPrefixParser = (
31
26
  filename: string,
32
27
  ) => {
33
- if (IgnoredPrefixPatterns.exec(filename)) {
28
+ if (ignoredPrefixPattern.test(filename)) {
29
+ return {filename, numberPrefix: undefined};
30
+ }
31
+ const match = numberPrefixPattern.exec(filename);
32
+ if (!match) {
34
33
  return {filename, numberPrefix: undefined};
35
34
  }
36
- const match = NumberPrefixRegex.exec(filename);
37
- const cleanFileName = match?.groups?.suffix ?? filename;
38
- const numberPrefixString = match?.groups?.numberPrefix;
39
- const numberPrefix = numberPrefixString
40
- ? parseInt(numberPrefixString, 10)
41
- : undefined;
42
35
  return {
43
- filename: cleanFileName,
44
- numberPrefix,
36
+ filename: match.groups!.suffix!,
37
+ numberPrefix: parseInt(match.groups!.numberPrefix!, 10),
45
38
  };
46
39
  };
47
40
 
package/src/options.ts CHANGED
@@ -4,7 +4,8 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import {PluginOptions} from './types';
7
+
8
+ import logger from '@docusaurus/logger';
8
9
  import {
9
10
  Joi,
10
11
  RemarkPluginsSchema,
@@ -13,33 +14,34 @@ import {
13
14
  URISchema,
14
15
  } from '@docusaurus/utils-validation';
15
16
  import {GlobExcludeDefault} from '@docusaurus/utils';
16
-
17
- import {OptionValidationContext, ValidationResult} from '@docusaurus/types';
18
- import chalk from 'chalk';
19
- import admonitions from 'remark-admonitions';
20
- import {DefaultSidebarItemsGenerator} from './sidebarItemsGenerator';
17
+ import {DefaultSidebarItemsGenerator} from './sidebars/generator';
21
18
  import {
22
19
  DefaultNumberPrefixParser,
23
20
  DisabledNumberPrefixParser,
24
21
  } from './numberPrefix';
22
+ import type {OptionValidationContext} from '@docusaurus/types';
23
+ import type {PluginOptions, Options} from '@docusaurus/plugin-content-docs';
25
24
 
26
25
  export const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'> = {
27
26
  path: 'docs', // Path to data on filesystem, relative to site dir.
28
27
  routeBasePath: 'docs', // URL Route.
29
- homePageId: undefined, // TODO remove soon, deprecated
28
+ tagsBasePath: 'tags', // URL Tags Route.
30
29
  include: ['**/*.{md,mdx}'], // Extensions to include.
31
30
  exclude: GlobExcludeDefault,
32
31
  sidebarItemsGenerator: DefaultSidebarItemsGenerator,
33
32
  numberPrefixParser: DefaultNumberPrefixParser,
34
33
  docLayoutComponent: '@theme/DocPage',
35
34
  docItemComponent: '@theme/DocItem',
35
+ docTagDocListComponent: '@theme/DocTagDocListPage',
36
+ docTagsListComponent: '@theme/DocTagsListPage',
37
+ docCategoryGeneratedIndexComponent: '@theme/DocCategoryGeneratedIndexPage',
36
38
  remarkPlugins: [],
37
39
  rehypePlugins: [],
38
40
  beforeDefaultRemarkPlugins: [],
39
41
  beforeDefaultRehypePlugins: [],
40
42
  showLastUpdateTime: false,
41
43
  showLastUpdateAuthor: false,
42
- admonitions: {},
44
+ admonitions: true,
43
45
  includeCurrentVersion: true,
44
46
  disableVersioning: false,
45
47
  lastVersion: undefined,
@@ -48,19 +50,22 @@ export const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'> = {
48
50
  editLocalizedFiles: false,
49
51
  sidebarCollapsible: true,
50
52
  sidebarCollapsed: true,
53
+ breadcrumbs: true,
51
54
  };
52
55
 
53
56
  const VersionOptionsSchema = Joi.object({
54
57
  path: Joi.string().allow('').optional(),
55
58
  label: Joi.string().optional(),
56
59
  banner: Joi.string().equal('none', 'unreleased', 'unmaintained').optional(),
60
+ badge: Joi.boolean().optional(),
61
+ className: Joi.string().optional(),
57
62
  });
58
63
 
59
64
  const VersionsOptionsSchema = Joi.object()
60
65
  .pattern(Joi.string().required(), VersionOptionsSchema)
61
66
  .default(DEFAULT_OPTIONS.versions);
62
67
 
63
- export const OptionsSchema = Joi.object({
68
+ const OptionsSchema = Joi.object<PluginOptions>({
64
69
  path: Joi.string().default(DEFAULT_OPTIONS.path),
65
70
  editUrl: Joi.alternatives().try(URISchema, Joi.function()),
66
71
  editCurrentVersion: Joi.boolean().default(DEFAULT_OPTIONS.editCurrentVersion),
@@ -69,7 +74,13 @@ export const OptionsSchema = Joi.object({
69
74
  // '' not allowed, see https://github.com/facebook/docusaurus/issues/3374
70
75
  // .allow('') ""
71
76
  .default(DEFAULT_OPTIONS.routeBasePath),
72
- homePageId: Joi.string().optional(),
77
+ tagsBasePath: Joi.string().default(DEFAULT_OPTIONS.tagsBasePath),
78
+ // @ts-expect-error: deprecated
79
+ homePageId: Joi.any().forbidden().messages({
80
+ 'any.unknown':
81
+ 'The docs plugin option homePageId is not supported anymore. To make a doc the "home", please add "slug: /" in its front matter. See: https://docusaurus.io/docs/next/docs-introduction#home-page-docs',
82
+ }),
83
+
73
84
  include: Joi.array().items(Joi.string()).default(DEFAULT_OPTIONS.include),
74
85
  exclude: Joi.array().items(Joi.string()).default(DEFAULT_OPTIONS.exclude),
75
86
  sidebarPath: Joi.alternatives().try(
@@ -86,7 +97,7 @@ export const OptionsSchema = Joi.object({
86
97
  Joi.function(),
87
98
  // Convert boolean values to functions
88
99
  Joi.alternatives().conditional(Joi.boolean(), {
89
- then: Joi.custom((val) =>
100
+ then: Joi.custom((val: boolean) =>
90
101
  val ? DefaultNumberPrefixParser : DisabledNumberPrefixParser,
91
102
  ),
92
103
  }),
@@ -94,6 +105,15 @@ export const OptionsSchema = Joi.object({
94
105
  .default(() => DEFAULT_OPTIONS.numberPrefixParser),
95
106
  docLayoutComponent: Joi.string().default(DEFAULT_OPTIONS.docLayoutComponent),
96
107
  docItemComponent: Joi.string().default(DEFAULT_OPTIONS.docItemComponent),
108
+ docTagsListComponent: Joi.string().default(
109
+ DEFAULT_OPTIONS.docTagsListComponent,
110
+ ),
111
+ docTagDocListComponent: Joi.string().default(
112
+ DEFAULT_OPTIONS.docTagDocListComponent,
113
+ ),
114
+ docCategoryGeneratedIndexComponent: Joi.string().default(
115
+ DEFAULT_OPTIONS.docCategoryGeneratedIndexComponent,
116
+ ),
97
117
  remarkPlugins: RemarkPluginsSchema.default(DEFAULT_OPTIONS.remarkPlugins),
98
118
  rehypePlugins: RehypePluginsSchema.default(DEFAULT_OPTIONS.rehypePlugins),
99
119
  beforeDefaultRemarkPlugins: RemarkPluginsSchema.default(
@@ -102,9 +122,7 @@ export const OptionsSchema = Joi.object({
102
122
  beforeDefaultRehypePlugins: RehypePluginsSchema.default(
103
123
  DEFAULT_OPTIONS.beforeDefaultRehypePlugins,
104
124
  ),
105
- admonitions: Joi.alternatives()
106
- .try(AdmonitionsSchema, Joi.boolean().invalid(true))
107
- .default(DEFAULT_OPTIONS.admonitions),
125
+ admonitions: AdmonitionsSchema.default(DEFAULT_OPTIONS.admonitions),
108
126
  showLastUpdateTime: Joi.bool().default(DEFAULT_OPTIONS.showLastUpdateTime),
109
127
  showLastUpdateAuthor: Joi.bool().default(
110
128
  DEFAULT_OPTIONS.showLastUpdateAuthor,
@@ -116,17 +134,19 @@ export const OptionsSchema = Joi.object({
116
134
  disableVersioning: Joi.bool().default(DEFAULT_OPTIONS.disableVersioning),
117
135
  lastVersion: Joi.string().optional(),
118
136
  versions: VersionsOptionsSchema,
137
+ breadcrumbs: Joi.bool().default(DEFAULT_OPTIONS.breadcrumbs),
119
138
  });
120
139
 
121
140
  export function validateOptions({
122
141
  validate,
123
142
  options: userOptions,
124
- }: OptionValidationContext<PluginOptions>): ValidationResult<PluginOptions> {
143
+ }: OptionValidationContext<Options, PluginOptions>): PluginOptions {
125
144
  let options = userOptions;
126
145
 
127
146
  if (options.sidebarCollapsible === false) {
128
- // When sidebarCollapsible=false and sidebarCollapsed=undefined, we don't want to have the inconsistency warning
129
- // We let options.sidebarCollapsible become the default value for options.sidebarCollapsed
147
+ // When sidebarCollapsible=false and sidebarCollapsed=undefined, we don't
148
+ // want to have the inconsistency warning. We let options.sidebarCollapsible
149
+ // become the default value for options.sidebarCollapsed
130
150
  if (typeof options.sidebarCollapsed === 'undefined') {
131
151
  options = {
132
152
  ...options,
@@ -134,11 +154,7 @@ export function validateOptions({
134
154
  };
135
155
  }
136
156
  if (options.sidebarCollapsed) {
137
- console.warn(
138
- chalk.yellow(
139
- 'The docs plugin config is inconsistent. It does not make sense to use sidebarCollapsible=false and sidebarCollapsed=true at the same time. sidebarCollapsed=false will be ignored.',
140
- ),
141
- );
157
+ logger.warn`The docs plugin config is inconsistent. It does not make sense to use code=${'sidebarCollapsible: false'} and code=${'sidebarCollapsed: true'} at the same time. code=${'sidebarCollapsed: true'} will be ignored.`;
142
158
  options = {
143
159
  ...options,
144
160
  sidebarCollapsed: false,
@@ -146,23 +162,7 @@ export function validateOptions({
146
162
  }
147
163
  }
148
164
 
149
- // TODO remove homePageId before end of 2020
150
- // "slug: /" is better because the home doc can be different across versions
151
- if (options.homePageId) {
152
- console.log(
153
- chalk.red(
154
- `The docs plugin option homePageId=${options.homePageId} is deprecated. To make a doc the "home", prefer frontmatter: "slug: /"`,
155
- ),
156
- );
157
- }
158
-
159
165
  const normalizedOptions = validate(OptionsSchema, options);
160
166
 
161
- if (normalizedOptions.admonitions) {
162
- normalizedOptions.remarkPlugins = normalizedOptions.remarkPlugins.concat([
163
- [admonitions, normalizedOptions.admonitions],
164
- ]);
165
- }
166
-
167
167
  return normalizedOptions;
168
168
  }