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

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 +58 -72
  5. package/lib/client/docsClientUtils.d.ts +9 -28
  6. package/lib/client/docsClientUtils.js +34 -43
  7. package/lib/client/index.d.ts +22 -0
  8. package/lib/client/index.js +59 -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} +12 -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 +123 -149
  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 +70 -14
  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 +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 +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 +142 -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 +83 -93
  57. package/lib/types.d.ts +13 -184
  58. package/lib/versions/files.d.ts +51 -0
  59. package/lib/versions/files.js +143 -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 +34 -29
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +85 -114
  67. package/src/client/docsClientUtils.ts +44 -71
  68. package/src/client/index.ts +106 -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} +20 -10
  73. package/src/globalData.ts +57 -7
  74. package/src/index.ts +179 -216
  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 +59 -18
  80. package/src/plugin-content-docs.d.ts +642 -89
  81. package/src/props.ts +103 -21
  82. package/src/routes.ts +159 -0
  83. package/src/server-export.ts +22 -0
  84. package/src/sidebars/README.md +10 -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 +112 -0
  89. package/src/sidebars/processor.ts +123 -0
  90. package/src/sidebars/types.ts +275 -0
  91. package/src/sidebars/utils.ts +390 -0
  92. package/src/sidebars/validation.ts +178 -0
  93. package/src/slug.ts +41 -22
  94. package/src/tags.ts +20 -0
  95. package/src/translations.ts +129 -123
  96. package/src/types.ts +18 -249
  97. package/src/versions/files.ts +220 -0
  98. package/src/versions/index.ts +247 -0
  99. package/src/versions/validation.ts +115 -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 -75
  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 -103
  228. package/src/versions.ts +0 -572
  229. package/tsconfig.json +0 -9
@@ -5,36 +5,37 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {
9
- LoadedVersion,
10
- Sidebar,
11
- LoadedContent,
12
- Sidebars,
13
- SidebarItem,
14
- } from './types';
15
-
16
- import {chain, mapValues, flatten, keyBy} from 'lodash';
8
+ import _ from 'lodash';
9
+ import {mergeTranslations} from '@docusaurus/utils';
10
+ import {CURRENT_VERSION_NAME} from './constants';
17
11
  import {
18
12
  collectSidebarCategories,
19
13
  transformSidebarItems,
20
14
  collectSidebarLinks,
21
- } from './sidebars';
22
- import {
15
+ } from './sidebars/utils';
16
+ import type {
17
+ LoadedVersion,
18
+ LoadedContent,
19
+ } from '@docusaurus/plugin-content-docs';
20
+ import type {
21
+ Sidebar,
22
+ SidebarItemCategory,
23
+ SidebarItemCategoryLink,
24
+ Sidebars,
25
+ } from './sidebars/types';
26
+ import type {
23
27
  TranslationFileContent,
24
28
  TranslationFile,
25
- TranslationFiles,
29
+ TranslationMessage,
26
30
  } from '@docusaurus/types';
27
- import {mergeTranslations} from '@docusaurus/utils';
28
- import {CURRENT_VERSION_NAME} from './constants';
29
31
 
30
32
  function getVersionFileName(versionName: string): string {
31
33
  if (versionName === CURRENT_VERSION_NAME) {
32
34
  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
35
  }
36
+ // I don't like this "version-" prefix,
37
+ // but it's for consistency with site/versioned_docs
38
+ return `version-${versionName}`;
38
39
  }
39
40
 
40
41
  // TODO legacy, the sidebar name is like "version-2.0.0-alpha.66/docs"
@@ -54,70 +55,61 @@ function getNormalizedSidebarName({
54
55
  return rest.join('/');
55
56
  }
56
57
 
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
58
  function getSidebarTranslationFileContent(
101
59
  sidebar: Sidebar,
102
60
  sidebarName: string,
103
61
  ): TranslationFileContent {
62
+ type TranslationMessageEntry = [string, TranslationMessage];
63
+
104
64
  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();
65
+
66
+ const categoryContent: TranslationFileContent = Object.fromEntries(
67
+ categories.flatMap((category) => {
68
+ const entries: TranslationMessageEntry[] = [];
69
+
70
+ entries.push([
71
+ `sidebar.${sidebarName}.category.${category.label}`,
72
+ {
73
+ message: category.label,
74
+ description: `The label for category ${category.label} in sidebar ${sidebarName}`,
75
+ },
76
+ ]);
77
+
78
+ if (category.link?.type === 'generated-index') {
79
+ if (category.link.title) {
80
+ entries.push([
81
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`,
82
+ {
83
+ message: category.link.title,
84
+ description: `The generated-index page title for category ${category.label} in sidebar ${sidebarName}`,
85
+ },
86
+ ]);
87
+ }
88
+ if (category.link.description) {
89
+ entries.push([
90
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`,
91
+ {
92
+ message: category.link.description,
93
+ description: `The generated-index page description for category ${category.label} in sidebar ${sidebarName}`,
94
+ },
95
+ ]);
96
+ }
97
+ }
98
+
99
+ return entries;
100
+ }),
101
+ );
112
102
 
113
103
  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();
104
+ const linksContent: TranslationFileContent = Object.fromEntries(
105
+ links.map((link) => [
106
+ `sidebar.${sidebarName}.link.${link.label}`,
107
+ {
108
+ message: link.label,
109
+ description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
110
+ },
111
+ ]),
112
+ );
121
113
 
122
114
  return mergeTranslations([categoryContent, linksContent]);
123
115
  }
@@ -131,29 +123,51 @@ function translateSidebar({
131
123
  sidebarName: string;
132
124
  sidebarsTranslations: TranslationFileContent;
133
125
  }): 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
- );
126
+ function transformSidebarCategoryLink(
127
+ category: SidebarItemCategory,
128
+ ): SidebarItemCategoryLink | undefined {
129
+ if (!category.link) {
130
+ return undefined;
131
+ }
132
+ if (category.link.type === 'generated-index') {
133
+ const title =
134
+ sidebarsTranslations[
135
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`
136
+ ]?.message ?? category.link.title;
137
+ const description =
138
+ sidebarsTranslations[
139
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`
140
+ ]?.message ?? category.link.description;
141
+ return {
142
+ ...category.link,
143
+ title,
144
+ description,
145
+ };
146
+ }
147
+ return category.link;
148
+ }
149
+
150
+ return transformSidebarItems(sidebar, (item) => {
151
+ if (item.type === 'category') {
152
+ const link = transformSidebarCategoryLink(item);
153
+ return {
154
+ ...item,
155
+ label:
156
+ sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]
157
+ ?.message ?? item.label,
158
+ ...(link && {link}),
159
+ };
160
+ }
161
+ if (item.type === 'link') {
162
+ return {
163
+ ...item,
164
+ label:
165
+ sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
166
+ ?.message ?? item.label,
167
+ };
168
+ }
169
+ return item;
170
+ });
157
171
  }
158
172
 
159
173
  function getSidebarsTranslations(
@@ -173,79 +187,71 @@ function translateSidebars(
173
187
  version: LoadedVersion,
174
188
  sidebarsTranslations: TranslationFileContent,
175
189
  ): Sidebars {
176
- return mapValues(version.sidebars, (sidebar, sidebarName) => {
177
- return translateSidebar({
190
+ return _.mapValues(version.sidebars, (sidebar, sidebarName) =>
191
+ translateSidebar({
178
192
  sidebar,
179
193
  sidebarName: getNormalizedSidebarName({
180
194
  sidebarName,
181
195
  versionName: version.versionName,
182
196
  }),
183
197
  sidebarsTranslations,
184
- });
185
- });
198
+ }),
199
+ );
186
200
  }
187
201
 
188
- function getVersionTranslationFiles(version: LoadedVersion): TranslationFiles {
202
+ function getVersionTranslationFiles(version: LoadedVersion): TranslationFile[] {
189
203
  const versionTranslations: TranslationFileContent = {
190
204
  'version.label': {
191
- message: version.versionLabel,
205
+ message: version.label,
192
206
  description: `The label for version ${version.versionName}`,
193
207
  },
194
208
  };
195
209
 
196
- const sidebarsTranslations: TranslationFileContent = getSidebarsTranslations(
197
- version,
198
- );
199
-
200
- // const docsTranslations: TranslationFileContent = getDocsTranslations(version);
210
+ const sidebarsTranslations: TranslationFileContent =
211
+ getSidebarsTranslations(version);
201
212
 
202
213
  return [
203
214
  {
204
215
  path: getVersionFileName(version.versionName),
205
- content: mergeTranslations([
206
- versionTranslations,
207
- sidebarsTranslations,
208
- // docsTranslations,
209
- ]),
216
+ content: mergeTranslations([versionTranslations, sidebarsTranslations]),
210
217
  },
211
218
  ];
212
219
  }
213
220
  function translateVersion(
214
221
  version: LoadedVersion,
215
- translationFiles: Record<string, TranslationFile>,
222
+ translationFiles: {[fileName: string]: TranslationFile},
216
223
  ): LoadedVersion {
217
224
  const versionTranslations =
218
- translationFiles[getVersionFileName(version.versionName)].content;
225
+ translationFiles[getVersionFileName(version.versionName)]!.content;
219
226
  return {
220
227
  ...version,
221
- versionLabel: versionTranslations['version.label']?.message,
228
+ label: versionTranslations['version.label']?.message ?? version.label,
222
229
  sidebars: translateSidebars(version, versionTranslations),
223
- // docs: translateDocs(version.docs, versionTranslations),
224
230
  };
225
231
  }
226
232
 
227
233
  function getVersionsTranslationFiles(
228
234
  versions: LoadedVersion[],
229
- ): TranslationFiles {
230
- return flatten(versions.map(getVersionTranslationFiles));
235
+ ): TranslationFile[] {
236
+ return versions.flatMap(getVersionTranslationFiles);
231
237
  }
232
238
  function translateVersions(
233
239
  versions: LoadedVersion[],
234
- translationFiles: Record<string, TranslationFile>,
240
+ translationFiles: {[fileName: string]: TranslationFile},
235
241
  ): LoadedVersion[] {
236
242
  return versions.map((version) => translateVersion(version, translationFiles));
237
243
  }
238
244
 
239
245
  export function getLoadedContentTranslationFiles(
240
246
  loadedContent: LoadedContent,
241
- ): TranslationFiles {
247
+ ): TranslationFile[] {
242
248
  return getVersionsTranslationFiles(loadedContent.loadedVersions);
243
249
  }
244
250
  export function translateLoadedContent(
245
251
  loadedContent: LoadedContent,
246
252
  translationFiles: TranslationFile[],
247
253
  ): LoadedContent {
248
- const translationFilesMap: Record<string, TranslationFile> = keyBy(
254
+ const translationFilesMap: {[fileName: string]: TranslationFile} = _.keyBy(
249
255
  translationFiles,
250
256
  (f) => f.path,
251
257
  );
package/src/types.ts CHANGED
@@ -5,14 +5,14 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // eslint-disable-next-line spaced-comment
9
- /// <reference types="@docusaurus/module-type-aliases" />
10
-
11
- import type {RemarkAndRehypePluginOptions} from '@docusaurus/mdx-loader';
12
- import {
13
- BrokenMarkdownLink as IBrokenMarkdownLink,
14
- ContentPaths,
15
- } from '@docusaurus/utils/lib/markdownLinks';
8
+ import type {BrokenMarkdownLink, Tag} from '@docusaurus/utils';
9
+ import type {
10
+ VersionMetadata,
11
+ LastUpdateData,
12
+ LoadedVersion,
13
+ CategoryGeneratedIndexMetadata,
14
+ } from '@docusaurus/plugin-content-docs';
15
+ import type {SidebarsUtils} from './sidebars/utils';
16
16
 
17
17
  export type DocFile = {
18
18
  contentPath: string; // /!\ may be localized
@@ -22,259 +22,28 @@ export type DocFile = {
22
22
  lastUpdate: LastUpdateData;
23
23
  };
24
24
 
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
25
  export type SourceToPermalink = {
235
26
  [source: string]: string;
236
27
  };
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
28
 
249
- export type GlobalDoc = {
250
- id: string;
251
- path: string;
252
- sidebar: string | undefined;
29
+ export type VersionTag = Tag & {
30
+ /** All doc ids having this tag. */
31
+ docIds: string[];
253
32
  };
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[];
33
+ export type VersionTags = {
34
+ [permalink: string]: VersionTag;
262
35
  };
263
36
 
264
- export type GlobalPluginData = {
265
- path: string;
266
- versions: GlobalVersion[];
37
+ export type FullVersion = LoadedVersion & {
38
+ sidebarsUtils: SidebarsUtils;
39
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
267
40
  };
268
41
 
269
- export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
42
+ export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
270
43
 
271
44
  export type DocsMarkdownOption = {
272
45
  versionsMetadata: VersionMetadata[];
273
46
  siteDir: string;
274
47
  sourceToPermalink: SourceToPermalink;
275
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
48
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
276
49
  };
277
-
278
- export type NumberPrefixParser = (
279
- filename: string,
280
- ) => {filename: string; numberPrefix?: number};