@docusaurus/plugin-content-docs 2.0.0-beta.2 → 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 (229) 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 +60 -69
  5. package/lib/client/docsClientUtils.d.ts +9 -28
  6. package/lib/client/docsClientUtils.js +33 -34
  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 +32 -3
  12. package/lib/docs.js +164 -63
  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} +13 -4
  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 +122 -148
  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 +54 -13
  29. package/lib/props.d.ts +7 -2
  30. package/lib/props.js +69 -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 +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/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
  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 +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 +84 -94
  57. package/lib/types.d.ts +13 -184
  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 -27
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +84 -109
  67. package/src/client/docsClientUtils.ts +43 -70
  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 +228 -65
  72. package/src/{docFrontMatter.ts → frontMatter.ts} +21 -11
  73. package/src/globalData.ts +57 -7
  74. package/src/index.ts +169 -210
  75. package/src/lastUpdate.ts +26 -37
  76. package/src/markdown/index.ts +10 -16
  77. package/src/markdown/linkify.ts +7 -4
  78. package/src/numberPrefix.ts +19 -26
  79. package/src/options.ts +60 -18
  80. package/src/plugin-content-docs.d.ts +625 -89
  81. package/src/props.ts +102 -20
  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 +41 -22
  94. package/src/tags.ts +20 -0
  95. package/src/translations.ts +124 -117
  96. package/src/types.ts +18 -247
  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 -1
  101. package/lib/sidebarItemsGenerator.js +0 -211
  102. package/lib/sidebars.d.ts +0 -43
  103. package/lib/sidebars.js +0 -320
  104. package/lib/theme/hooks/useDocs.d.ts +0 -20
  105. package/lib/theme/hooks/useDocs.js +0 -72
  106. package/lib/versions.d.ts +0 -16
  107. package/lib/versions.js +0 -319
  108. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  109. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  110. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  111. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  112. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  113. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  114. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  115. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  116. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  117. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  118. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  119. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  120. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  121. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  122. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  123. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  124. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  125. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  126. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  127. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  128. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  129. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  130. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  131. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  132. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  133. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  134. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  135. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  136. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  137. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  138. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  139. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  140. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  141. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  142. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  143. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  149. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  150. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  151. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  152. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  153. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  154. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  155. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  156. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  157. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  158. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  159. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  160. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
  161. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  162. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  163. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  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 -1916
  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 -244
  204. package/src/__tests__/docs.test.ts +0 -878
  205. package/src/__tests__/index.test.ts +0 -1871
  206. package/src/__tests__/lastUpdate.test.ts +0 -69
  207. package/src/__tests__/numberPrefix.test.ts +0 -199
  208. package/src/__tests__/options.test.ts +0 -231
  209. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  210. package/src/__tests__/sidebars.test.ts +0 -639
  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 -741
  214. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  215. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  216. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  217. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  218. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  219. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  220. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  221. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  222. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  223. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  224. package/src/markdown/__tests__/linkify.test.ts +0 -190
  225. package/src/sidebarItemsGenerator.ts +0 -307
  226. package/src/sidebars.ts +0 -522
  227. package/src/theme/hooks/useDocs.ts +0 -99
  228. package/src/versions.ts +0 -572
  229. 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,259 +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
- versionBanner: VersionBanner;
34
- isLast: boolean;
35
- sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
36
- routePriority: number | undefined; // -1 for the latest docs
37
- };
38
-
39
- export type EditUrlFunction = (editUrlParams: {
40
- version: string;
41
- versionDocsDirPath: string;
42
- docPath: string;
43
- permalink: string;
44
- locale: string;
45
- }) => string | undefined;
46
-
47
- export type MetadataOptions = {
48
- routeBasePath: string;
49
- homePageId?: string;
50
- editUrl?: string | EditUrlFunction;
51
- editCurrentVersion: boolean;
52
- editLocalizedFiles: boolean;
53
- showLastUpdateTime?: boolean;
54
- showLastUpdateAuthor?: boolean;
55
- numberPrefixParser: NumberPrefixParser;
56
- };
57
-
58
- export type PathOptions = {
59
- path: string;
60
- sidebarPath?: string | false | undefined;
61
- };
62
-
63
- // TODO support custom version banner? {type: "error", content: "html content"}
64
- export type VersionBanner = 'none' | 'unreleased' | 'unmaintained';
65
-
66
- export type VersionOptions = {
67
- path?: string;
68
- label?: string;
69
- banner?: VersionBanner;
70
- };
71
-
72
- export type VersionsOptions = {
73
- lastVersion?: string;
74
- versions: Record<string, VersionOptions>;
75
- onlyIncludeVersions?: string[];
76
- };
77
-
78
- export type PluginOptions = MetadataOptions &
79
- PathOptions &
80
- VersionsOptions &
81
- RemarkAndRehypePluginOptions & {
82
- id: string;
83
- include: string[];
84
- docLayoutComponent: string;
85
- docItemComponent: string;
86
- admonitions: Record<string, unknown>;
87
- disableVersioning: boolean;
88
- includeCurrentVersion: boolean;
89
- sidebarItemsGenerator: SidebarItemsGeneratorOption;
90
- };
91
-
92
- export type SidebarItemBase = {
93
- customProps?: Record<string, unknown>;
94
- };
95
-
96
- export type SidebarItemDoc = SidebarItemBase & {
97
- type: 'doc' | 'ref';
98
- label?: string;
99
- id: string;
100
- };
101
-
102
- export type SidebarItemLink = SidebarItemBase & {
103
- type: 'link';
104
- href: string;
105
- label: string;
106
- };
107
-
108
- export type SidebarItemCategory = SidebarItemBase & {
109
- type: 'category';
110
- label: string;
111
- items: SidebarItem[];
112
- collapsed: boolean;
113
- };
114
-
115
- export type UnprocessedSidebarItemAutogenerated = {
116
- type: 'autogenerated';
117
- dirName: string;
118
- };
119
-
120
- export type UnprocessedSidebarItemCategory = SidebarItemBase & {
121
- type: 'category';
122
- label: string;
123
- items: UnprocessedSidebarItem[];
124
- collapsed: boolean;
125
- };
126
-
127
- export type UnprocessedSidebarItem =
128
- | SidebarItemDoc
129
- | SidebarItemLink
130
- | UnprocessedSidebarItemCategory
131
- | UnprocessedSidebarItemAutogenerated;
132
-
133
- export type UnprocessedSidebar = UnprocessedSidebarItem[];
134
- export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
135
-
136
- export type SidebarItem =
137
- | SidebarItemDoc
138
- | SidebarItemLink
139
- | SidebarItemCategory;
140
-
141
- export type Sidebar = SidebarItem[];
142
- export type SidebarItemType = SidebarItem['type'];
143
- export type Sidebars = Record<string, Sidebar>;
144
-
145
- // Reduce API surface for options.sidebarItemsGenerator
146
- // The user-provided generator fn should receive only a subset of metadatas
147
- // A change to any of these metadatas can be considered as a breaking change
148
- export type SidebarItemsGeneratorDoc = Pick<
149
- DocMetadataBase,
150
- 'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
151
- >;
152
- export type SidebarItemsGeneratorVersion = Pick<
153
- VersionMetadata,
154
- 'versionName' | 'contentPath'
155
- >;
156
-
157
- export type SidebarItemsGeneratorArgs = {
158
- item: UnprocessedSidebarItemAutogenerated;
159
- version: SidebarItemsGeneratorVersion;
160
- docs: SidebarItemsGeneratorDoc[];
161
- numberPrefixParser: NumberPrefixParser;
162
- };
163
- export type SidebarItemsGenerator = (
164
- generatorArgs: SidebarItemsGeneratorArgs,
165
- ) => Promise<SidebarItem[]>;
166
-
167
- // Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
168
- // see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
169
- export type SidebarItemsGeneratorOptionArgs = {
170
- defaultSidebarItemsGenerator: SidebarItemsGenerator;
171
- } & SidebarItemsGeneratorArgs;
172
- export type SidebarItemsGeneratorOption = (
173
- generatorArgs: SidebarItemsGeneratorOptionArgs,
174
- ) => Promise<SidebarItem[]>;
175
-
176
- export type OrderMetadata = {
177
- previous?: string;
178
- next?: string;
179
- sidebar?: string;
180
- };
181
-
182
- export type LastUpdateData = {
183
- lastUpdatedAt?: number;
184
- formattedLastUpdatedAt?: string;
185
- lastUpdatedBy?: string;
186
- };
187
-
188
- export type DocFrontMatter = {
189
- // Front matter uses snake case
190
- /* eslint-disable camelcase */
191
- id?: string;
192
- title?: string;
193
- hide_title?: boolean;
194
- hide_table_of_contents?: boolean;
195
- keywords?: string[];
196
- image?: string;
197
- description?: string;
198
- slug?: string;
199
- sidebar_label?: string;
200
- sidebar_position?: number;
201
- pagination_label?: string;
202
- custom_edit_url?: string | null;
203
- parse_number_prefixes?: boolean;
204
- /* eslint-enable camelcase */
205
- };
206
-
207
- export type DocMetadataBase = LastUpdateData & {
208
- version: VersionName;
209
- unversionedId: string;
210
- id: string;
211
- isDocsHomePage: boolean;
212
- title: string;
213
- description: string;
214
- source: string;
215
- sourceDirName: string; // relative to the docs folder (can be ".")
216
- slug: string;
217
- permalink: string;
218
- sidebarPosition?: number;
219
- editUrl?: string | null;
220
- frontMatter: DocFrontMatter & Record<string, unknown>;
221
- };
222
-
223
- export type DocNavLink = {
224
- title: string;
225
- permalink: string;
226
- };
227
-
228
- export type DocMetadata = DocMetadataBase & {
229
- sidebar?: string;
230
- previous?: DocNavLink;
231
- next?: DocNavLink;
232
- };
233
-
234
27
  export type SourceToPermalink = {
235
28
  [source: string]: string;
236
29
  };
237
- export type LoadedVersion = VersionMetadata & {
238
- versionPath: string;
239
- mainDocId: string;
240
- docs: DocMetadata[];
241
- sidebars: Sidebars;
242
- permalinkToSidebar: Record<string, string>;
243
- };
244
-
245
- export type LoadedContent = {
246
- loadedVersions: LoadedVersion[];
247
- };
248
30
 
249
- export type GlobalDoc = {
250
- id: string;
251
- path: string;
252
- sidebar: string | undefined;
31
+ export type VersionTag = Tag & {
32
+ /** All doc ids having this tag. */
33
+ docIds: string[];
253
34
  };
254
-
255
- export type GlobalVersion = {
256
- name: VersionName;
257
- label: string;
258
- isLast: boolean;
259
- path: string;
260
- mainDocId: string; // home doc (if docs homepage configured), or first doc
261
- docs: GlobalDoc[];
35
+ export type VersionTags = {
36
+ [permalink: string]: VersionTag;
262
37
  };
263
38
 
264
- export type GlobalPluginData = {
265
- path: string;
266
- versions: GlobalVersion[];
39
+ export type FullVersion = LoadedVersion & {
40
+ sidebarsUtils: SidebarsUtils;
41
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
267
42
  };
268
43
 
269
- export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
44
+ export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
270
45
 
271
46
  export type DocsMarkdownOption = {
272
47
  versionsMetadata: VersionMetadata[];
273
48
  siteDir: string;
274
49
  sourceToPermalink: SourceToPermalink;
275
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
50
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
276
51
  };
277
-
278
- export type NumberPrefixParser = (
279
- filename: string,
280
- ) => {filename: string; numberPrefix?: number};