@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
@@ -5,24 +5,27 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {
8
+ import type {
9
9
  LoadedVersion,
10
- Sidebar,
11
10
  LoadedContent,
11
+ } from '@docusaurus/plugin-content-docs';
12
+ import type {
13
+ Sidebar,
14
+ SidebarItemCategory,
15
+ SidebarItemCategoryLink,
12
16
  Sidebars,
13
- SidebarItem,
14
- } from './types';
17
+ } from './sidebars/types';
15
18
 
16
- import {chain, mapValues, flatten, keyBy} from 'lodash';
19
+ import _ from 'lodash';
17
20
  import {
18
21
  collectSidebarCategories,
19
22
  transformSidebarItems,
20
23
  collectSidebarLinks,
21
- } from './sidebars';
22
- import {
24
+ } from './sidebars/utils';
25
+ import type {
23
26
  TranslationFileContent,
24
27
  TranslationFile,
25
- TranslationFiles,
28
+ TranslationMessage,
26
29
  } from '@docusaurus/types';
27
30
  import {mergeTranslations} from '@docusaurus/utils';
28
31
  import {CURRENT_VERSION_NAME} from './constants';
@@ -30,11 +33,10 @@ import {CURRENT_VERSION_NAME} from './constants';
30
33
  function getVersionFileName(versionName: string): string {
31
34
  if (versionName === CURRENT_VERSION_NAME) {
32
35
  return versionName;
33
- } else {
34
- // I don't like this "version-" prefix,
35
- // but it's for consistency with site/versioned_docs
36
- return `version-${versionName}`;
37
36
  }
37
+ // I don't like this "version-" prefix,
38
+ // but it's for consistency with site/versioned_docs
39
+ return `version-${versionName}`;
38
40
  }
39
41
 
40
42
  // TODO legacy, the sidebar name is like "version-2.0.0-alpha.66/docs"
@@ -54,70 +56,61 @@ function getNormalizedSidebarName({
54
56
  return rest.join('/');
55
57
  }
56
58
 
57
- /*
58
- // Do we need to translate doc metadatas?
59
- // It seems translating frontmatter labels is good enough
60
- function getDocTranslations(doc: DocMetadata): TranslationFileContent {
61
- return {
62
- [`${doc.unversionedId}.title`]: {
63
- message: doc.title,
64
- description: `The title for doc with id=${doc.unversionedId}`,
65
- },
66
- ...(doc.sidebar_label
67
- ? {
68
- [`${doc.unversionedId}.sidebar_label`]: {
69
- message: doc.sidebar_label,
70
- description: `The sidebar label for doc with id=${doc.unversionedId}`,
71
- },
72
- }
73
- : undefined),
74
- };
75
- }
76
- function translateDoc(
77
- doc: DocMetadata,
78
- docsTranslations: TranslationFileContent,
79
- ): DocMetadata {
80
- return {
81
- ...doc,
82
- title: docsTranslations[`${doc.unversionedId}.title`]?.message ?? doc.title,
83
- sidebar_label:
84
- docsTranslations[`${doc.unversionedId}.sidebar_label`]?.message ??
85
- doc.sidebar_label,
86
- };
87
- }
88
-
89
- function getDocsTranslations(version: LoadedVersion): TranslationFileContent {
90
- return mergeTranslations(version.docs.map(getDocTranslations));
91
- }
92
- function translateDocs(
93
- docs: DocMetadata[],
94
- docsTranslations: TranslationFileContent,
95
- ): DocMetadata[] {
96
- return docs.map((doc) => translateDoc(doc, docsTranslations));
97
- }
98
- */
99
-
100
59
  function getSidebarTranslationFileContent(
101
60
  sidebar: Sidebar,
102
61
  sidebarName: string,
103
62
  ): TranslationFileContent {
63
+ type TranslationMessageEntry = [string, TranslationMessage];
64
+
104
65
  const categories = collectSidebarCategories(sidebar);
105
- const categoryContent: TranslationFileContent = chain(categories)
106
- .keyBy((category) => `sidebar.${sidebarName}.category.${category.label}`)
107
- .mapValues((category) => ({
108
- message: category.label,
109
- description: `The label for category ${category.label} in sidebar ${sidebarName}`,
110
- }))
111
- .value();
66
+
67
+ const categoryContent: TranslationFileContent = Object.fromEntries(
68
+ categories.flatMap((category) => {
69
+ const entries: TranslationMessageEntry[] = [];
70
+
71
+ entries.push([
72
+ `sidebar.${sidebarName}.category.${category.label}`,
73
+ {
74
+ message: category.label,
75
+ description: `The label for category ${category.label} in sidebar ${sidebarName}`,
76
+ },
77
+ ]);
78
+
79
+ if (category.link?.type === 'generated-index') {
80
+ if (category.link.title) {
81
+ entries.push([
82
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`,
83
+ {
84
+ message: category.link.title,
85
+ description: `The generated-index page title for category ${category.label} in sidebar ${sidebarName}`,
86
+ },
87
+ ]);
88
+ }
89
+ if (category.link.description) {
90
+ entries.push([
91
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`,
92
+ {
93
+ message: category.link.description,
94
+ description: `The generated-index page description for category ${category.label} in sidebar ${sidebarName}`,
95
+ },
96
+ ]);
97
+ }
98
+ }
99
+
100
+ return entries;
101
+ }),
102
+ );
112
103
 
113
104
  const links = collectSidebarLinks(sidebar);
114
- const linksContent: TranslationFileContent = chain(links)
115
- .keyBy((link) => `sidebar.${sidebarName}.link.${link.label}`)
116
- .mapValues((link) => ({
117
- message: link.label,
118
- description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
119
- }))
120
- .value();
105
+ const linksContent: TranslationFileContent = Object.fromEntries(
106
+ links.map((link) => [
107
+ `sidebar.${sidebarName}.link.${link.label}`,
108
+ {
109
+ message: link.label,
110
+ description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
111
+ },
112
+ ]),
113
+ );
121
114
 
122
115
  return mergeTranslations([categoryContent, linksContent]);
123
116
  }
@@ -131,29 +124,51 @@ function translateSidebar({
131
124
  sidebarName: string;
132
125
  sidebarsTranslations: TranslationFileContent;
133
126
  }): Sidebar {
134
- return transformSidebarItems(
135
- sidebar,
136
- (item: SidebarItem): SidebarItem => {
137
- if (item.type === 'category') {
138
- return {
139
- ...item,
140
- label:
141
- sidebarsTranslations[
142
- `sidebar.${sidebarName}.category.${item.label}`
143
- ]?.message ?? item.label,
144
- };
145
- }
146
- if (item.type === 'link') {
147
- return {
148
- ...item,
149
- label:
150
- sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
151
- ?.message ?? item.label,
152
- };
153
- }
154
- return item;
155
- },
156
- );
127
+ function transformSidebarCategoryLink(
128
+ category: SidebarItemCategory,
129
+ ): SidebarItemCategoryLink | undefined {
130
+ if (!category.link) {
131
+ return undefined;
132
+ }
133
+ if (category.link.type === 'generated-index') {
134
+ const title =
135
+ sidebarsTranslations[
136
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`
137
+ ]?.message ?? category.link.title;
138
+ const description =
139
+ sidebarsTranslations[
140
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`
141
+ ]?.message ?? category.link.description;
142
+ return {
143
+ ...category.link,
144
+ title,
145
+ description,
146
+ };
147
+ }
148
+ return category.link;
149
+ }
150
+
151
+ return transformSidebarItems(sidebar, (item) => {
152
+ if (item.type === 'category') {
153
+ const link = transformSidebarCategoryLink(item);
154
+ return {
155
+ ...item,
156
+ label:
157
+ sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]
158
+ ?.message ?? item.label,
159
+ ...(link && {link}),
160
+ };
161
+ }
162
+ if (item.type === 'link') {
163
+ return {
164
+ ...item,
165
+ label:
166
+ sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
167
+ ?.message ?? item.label,
168
+ };
169
+ }
170
+ return item;
171
+ });
157
172
  }
158
173
 
159
174
  function getSidebarsTranslations(
@@ -173,79 +188,71 @@ function translateSidebars(
173
188
  version: LoadedVersion,
174
189
  sidebarsTranslations: TranslationFileContent,
175
190
  ): Sidebars {
176
- return mapValues(version.sidebars, (sidebar, sidebarName) => {
177
- return translateSidebar({
191
+ return _.mapValues(version.sidebars, (sidebar, sidebarName) =>
192
+ translateSidebar({
178
193
  sidebar,
179
194
  sidebarName: getNormalizedSidebarName({
180
195
  sidebarName,
181
196
  versionName: version.versionName,
182
197
  }),
183
198
  sidebarsTranslations,
184
- });
185
- });
199
+ }),
200
+ );
186
201
  }
187
202
 
188
- function getVersionTranslationFiles(version: LoadedVersion): TranslationFiles {
203
+ function getVersionTranslationFiles(version: LoadedVersion): TranslationFile[] {
189
204
  const versionTranslations: TranslationFileContent = {
190
205
  'version.label': {
191
- message: version.versionLabel,
206
+ message: version.label,
192
207
  description: `The label for version ${version.versionName}`,
193
208
  },
194
209
  };
195
210
 
196
- const sidebarsTranslations: TranslationFileContent = getSidebarsTranslations(
197
- version,
198
- );
199
-
200
- // const docsTranslations: TranslationFileContent = getDocsTranslations(version);
211
+ const sidebarsTranslations: TranslationFileContent =
212
+ getSidebarsTranslations(version);
201
213
 
202
214
  return [
203
215
  {
204
216
  path: getVersionFileName(version.versionName),
205
- content: mergeTranslations([
206
- versionTranslations,
207
- sidebarsTranslations,
208
- // docsTranslations,
209
- ]),
217
+ content: mergeTranslations([versionTranslations, sidebarsTranslations]),
210
218
  },
211
219
  ];
212
220
  }
213
221
  function translateVersion(
214
222
  version: LoadedVersion,
215
- translationFiles: Record<string, TranslationFile>,
223
+ translationFiles: {[fileName: string]: TranslationFile},
216
224
  ): LoadedVersion {
217
225
  const versionTranslations =
218
- translationFiles[getVersionFileName(version.versionName)].content;
226
+ translationFiles[getVersionFileName(version.versionName)]!.content;
219
227
  return {
220
228
  ...version,
221
- versionLabel: versionTranslations['version.label']?.message,
229
+ label: versionTranslations['version.label']?.message ?? version.label,
222
230
  sidebars: translateSidebars(version, versionTranslations),
223
- // docs: translateDocs(version.docs, versionTranslations),
224
231
  };
225
232
  }
226
233
 
227
234
  function getVersionsTranslationFiles(
228
235
  versions: LoadedVersion[],
229
- ): TranslationFiles {
230
- return flatten(versions.map(getVersionTranslationFiles));
236
+ ): TranslationFile[] {
237
+ return versions.flatMap(getVersionTranslationFiles);
231
238
  }
232
239
  function translateVersions(
233
240
  versions: LoadedVersion[],
234
- translationFiles: Record<string, TranslationFile>,
241
+ translationFiles: {[fileName: string]: TranslationFile},
235
242
  ): LoadedVersion[] {
236
243
  return versions.map((version) => translateVersion(version, translationFiles));
237
244
  }
238
245
 
239
246
  export function getLoadedContentTranslationFiles(
240
247
  loadedContent: LoadedContent,
241
- ): TranslationFiles {
248
+ ): TranslationFile[] {
242
249
  return getVersionsTranslationFiles(loadedContent.loadedVersions);
243
250
  }
244
251
  export function translateLoadedContent(
245
252
  loadedContent: LoadedContent,
246
253
  translationFiles: TranslationFile[],
247
254
  ): LoadedContent {
248
- const translationFilesMap: Record<string, TranslationFile> = keyBy(
255
+ const translationFilesMap: {[fileName: string]: TranslationFile} = _.keyBy(
249
256
  translationFiles,
250
257
  (f) => f.path,
251
258
  );
package/src/types.ts CHANGED
@@ -5,14 +5,16 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // eslint-disable-next-line spaced-comment
9
8
  /// <reference types="@docusaurus/module-type-aliases" />
10
9
 
11
- import type {RemarkAndRehypePluginOptions} from '@docusaurus/mdx-loader';
12
- import {
13
- BrokenMarkdownLink as IBrokenMarkdownLink,
14
- ContentPaths,
15
- } from '@docusaurus/utils/lib/markdownLinks';
10
+ import type {BrokenMarkdownLink, Tag} from '@docusaurus/utils';
11
+ import type {
12
+ VersionMetadata,
13
+ LastUpdateData,
14
+ LoadedVersion,
15
+ CategoryGeneratedIndexMetadata,
16
+ } from '@docusaurus/plugin-content-docs';
17
+ import type {SidebarsUtils} from './sidebars/utils';
16
18
 
17
19
  export type DocFile = {
18
20
  contentPath: string; // /!\ may be localized
@@ -22,243 +24,28 @@ export type DocFile = {
22
24
  lastUpdate: LastUpdateData;
23
25
  };
24
26
 
25
- export type VersionName = string;
26
-
27
- export type VersionMetadata = ContentPaths & {
28
- versionName: VersionName; // 1.0.0
29
- versionLabel: string; // Version 1.0.0
30
- versionPath: string; // /baseUrl/docs/1.0.0
31
- versionEditUrl?: string | undefined;
32
- versionEditUrlLocalized?: string | undefined;
33
- isLast: boolean;
34
- sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
35
- routePriority: number | undefined; // -1 for the latest docs
36
- };
37
-
38
- export type EditUrlFunction = (editUrlParams: {
39
- version: string;
40
- versionDocsDirPath: string;
41
- docPath: string;
42
- permalink: string;
43
- locale: string;
44
- }) => string | undefined;
45
-
46
- export type MetadataOptions = {
47
- routeBasePath: string;
48
- homePageId?: string;
49
- editUrl?: string | EditUrlFunction;
50
- editCurrentVersion: boolean;
51
- editLocalizedFiles: boolean;
52
- showLastUpdateTime?: boolean;
53
- showLastUpdateAuthor?: boolean;
54
- numberPrefixParser: NumberPrefixParser;
55
- };
56
-
57
- export type PathOptions = {
58
- path: string;
59
- sidebarPath?: string | false | undefined;
60
- };
61
-
62
- export type VersionOptions = {
63
- path?: string;
64
- label?: string;
65
- };
66
-
67
- export type VersionsOptions = {
68
- lastVersion?: string;
69
- versions: Record<string, VersionOptions>;
70
- onlyIncludeVersions?: string[];
71
- };
72
-
73
- export type PluginOptions = MetadataOptions &
74
- PathOptions &
75
- VersionsOptions &
76
- RemarkAndRehypePluginOptions & {
77
- id: string;
78
- include: string[];
79
- docLayoutComponent: string;
80
- docItemComponent: string;
81
- admonitions: Record<string, unknown>;
82
- disableVersioning: boolean;
83
- excludeNextVersionDocs?: boolean;
84
- includeCurrentVersion: boolean;
85
- sidebarItemsGenerator: SidebarItemsGeneratorOption;
86
- };
87
-
88
- export type SidebarItemBase = {
89
- customProps?: Record<string, unknown>;
90
- };
91
-
92
- export type SidebarItemDoc = SidebarItemBase & {
93
- type: 'doc' | 'ref';
94
- label?: string;
95
- id: string;
96
- };
97
-
98
- export type SidebarItemLink = SidebarItemBase & {
99
- type: 'link';
100
- href: string;
101
- label: string;
102
- };
103
-
104
- export type SidebarItemCategory = SidebarItemBase & {
105
- type: 'category';
106
- label: string;
107
- items: SidebarItem[];
108
- collapsed: boolean;
109
- };
110
-
111
- export type UnprocessedSidebarItemAutogenerated = {
112
- type: 'autogenerated';
113
- dirName: string;
114
- };
115
-
116
- export type UnprocessedSidebarItemCategory = SidebarItemBase & {
117
- type: 'category';
118
- label: string;
119
- items: UnprocessedSidebarItem[];
120
- collapsed: boolean;
121
- };
122
-
123
- export type UnprocessedSidebarItem =
124
- | SidebarItemDoc
125
- | SidebarItemLink
126
- | UnprocessedSidebarItemCategory
127
- | UnprocessedSidebarItemAutogenerated;
128
-
129
- export type UnprocessedSidebar = UnprocessedSidebarItem[];
130
- export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
131
-
132
- export type SidebarItem =
133
- | SidebarItemDoc
134
- | SidebarItemLink
135
- | SidebarItemCategory;
136
-
137
- export type Sidebar = SidebarItem[];
138
- export type SidebarItemType = SidebarItem['type'];
139
- export type Sidebars = Record<string, Sidebar>;
140
-
141
- // Reduce API surface for options.sidebarItemsGenerator
142
- // The user-provided generator fn should receive only a subset of metadatas
143
- // A change to any of these metadatas can be considered as a breaking change
144
- export type SidebarItemsGeneratorDoc = Pick<
145
- DocMetadataBase,
146
- 'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
147
- >;
148
- export type SidebarItemsGeneratorVersion = Pick<
149
- VersionMetadata,
150
- 'versionName' | 'contentPath'
151
- >;
152
-
153
- export type SidebarItemsGeneratorArgs = {
154
- item: UnprocessedSidebarItemAutogenerated;
155
- version: SidebarItemsGeneratorVersion;
156
- docs: SidebarItemsGeneratorDoc[];
157
- numberPrefixParser: NumberPrefixParser;
158
- };
159
- export type SidebarItemsGenerator = (
160
- generatorArgs: SidebarItemsGeneratorArgs,
161
- ) => Promise<SidebarItem[]>;
162
-
163
- // Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
164
- // see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
165
- export type SidebarItemsGeneratorOptionArgs = {
166
- defaultSidebarItemsGenerator: SidebarItemsGenerator;
167
- } & SidebarItemsGeneratorArgs;
168
- export type SidebarItemsGeneratorOption = (
169
- generatorArgs: SidebarItemsGeneratorOptionArgs,
170
- ) => Promise<SidebarItem[]>;
171
-
172
- export type OrderMetadata = {
173
- previous?: string;
174
- next?: string;
175
- sidebar?: string;
176
- };
177
-
178
- export type LastUpdateData = {
179
- lastUpdatedAt?: number;
180
- formattedLastUpdatedAt?: string;
181
- lastUpdatedBy?: string;
182
- };
183
-
184
- export type FrontMatter = {
185
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
- [key: string]: any;
187
- };
188
-
189
- export type DocMetadataBase = LastUpdateData & {
190
- version: VersionName;
191
- unversionedId: string;
192
- id: string;
193
- isDocsHomePage: boolean;
194
- title: string;
195
- description: string;
196
- source: string;
197
- sourceDirName: string; // relative to the docs folder (can be ".")
198
- slug: string;
199
- permalink: string;
200
- // eslint-disable-next-line camelcase
201
- sidebar_label?: string;
202
- sidebarPosition?: number;
203
- editUrl?: string | null;
204
- frontMatter: FrontMatter;
205
- };
206
-
207
- export type DocNavLink = {
208
- title: string;
209
- permalink: string;
210
- };
211
-
212
- export type DocMetadata = DocMetadataBase & {
213
- sidebar?: string;
214
- previous?: DocNavLink;
215
- next?: DocNavLink;
216
- };
217
-
218
27
  export type SourceToPermalink = {
219
28
  [source: string]: string;
220
29
  };
221
- export type LoadedVersion = VersionMetadata & {
222
- versionPath: string;
223
- mainDocId: string;
224
- docs: DocMetadata[];
225
- sidebars: Sidebars;
226
- permalinkToSidebar: Record<string, string>;
227
- };
228
-
229
- export type LoadedContent = {
230
- loadedVersions: LoadedVersion[];
231
- };
232
30
 
233
- export type GlobalDoc = {
234
- id: string;
235
- path: string;
236
- sidebar: string | undefined;
31
+ export type VersionTag = Tag & {
32
+ /** All doc ids having this tag. */
33
+ docIds: string[];
237
34
  };
238
-
239
- export type GlobalVersion = {
240
- name: VersionName;
241
- label: string;
242
- isLast: boolean;
243
- path: string;
244
- mainDocId: string; // home doc (if docs homepage configured), or first doc
245
- docs: GlobalDoc[];
35
+ export type VersionTags = {
36
+ [permalink: string]: VersionTag;
246
37
  };
247
38
 
248
- export type GlobalPluginData = {
249
- path: string;
250
- versions: GlobalVersion[];
39
+ export type FullVersion = LoadedVersion & {
40
+ sidebarsUtils: SidebarsUtils;
41
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
251
42
  };
252
43
 
253
- export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
44
+ export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
254
45
 
255
46
  export type DocsMarkdownOption = {
256
47
  versionsMetadata: VersionMetadata[];
257
48
  siteDir: string;
258
49
  sourceToPermalink: SourceToPermalink;
259
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
50
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
260
51
  };
261
-
262
- export type NumberPrefixParser = (
263
- filename: string,
264
- ) => {filename: string; numberPrefix?: number};