@docusaurus/plugin-content-docs 2.0.0-beta.2 → 2.0.0-beta.22

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 +57 -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 +81 -0
  8. package/lib/client/index.js +67 -0
  9. package/lib/constants.d.ts +4 -0
  10. package/lib/constants.js +4 -1
  11. package/lib/docs.d.ts +34 -7
  12. package/lib/docs.js +202 -79
  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} +23 -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 +124 -154
  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 +56 -23
  29. package/lib/props.d.ts +7 -2
  30. package/lib/props.js +84 -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 +59 -0
  41. package/lib/sidebars/postProcessor.d.ts +11 -0
  42. package/lib/sidebars/postProcessor.js +81 -0
  43. package/lib/sidebars/processor.d.ts +10 -0
  44. package/lib/sidebars/processor.js +79 -0
  45. package/lib/sidebars/types.d.ts +183 -0
  46. package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
  47. package/lib/sidebars/utils.d.ts +55 -0
  48. package/lib/sidebars/utils.js +259 -0
  49. package/lib/sidebars/validation.d.ts +11 -0
  50. package/lib/sidebars/validation.js +143 -0
  51. package/lib/slug.d.ts +5 -4
  52. package/lib/slug.js +28 -18
  53. package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
  54. package/lib/tags.js +21 -0
  55. package/lib/translations.d.ts +3 -3
  56. package/lib/translations.js +100 -93
  57. package/lib/types.d.ts +13 -185
  58. package/lib/versions/files.d.ts +50 -0
  59. package/lib/versions/files.js +141 -0
  60. package/lib/versions/index.d.ts +36 -0
  61. package/lib/versions/index.js +154 -0
  62. package/lib/versions/validation.d.ts +17 -0
  63. package/lib/versions/validation.js +71 -0
  64. package/package.json +44 -30
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +88 -114
  67. package/src/client/docsClientUtils.ts +44 -71
  68. package/src/client/index.ts +158 -0
  69. package/src/constants.ts +4 -2
  70. package/src/docs.ts +281 -83
  71. package/src/frontMatter.ts +63 -0
  72. package/src/globalData.ts +57 -7
  73. package/src/index.ts +183 -224
  74. package/src/lastUpdate.ts +27 -38
  75. package/src/markdown/index.ts +10 -16
  76. package/src/markdown/linkify.ts +7 -4
  77. package/src/numberPrefix.ts +19 -26
  78. package/src/options.ts +61 -29
  79. package/src/plugin-content-docs.d.ts +569 -93
  80. package/src/props.ts +121 -21
  81. package/src/routes.ts +159 -0
  82. package/src/server-export.ts +22 -0
  83. package/src/sidebars/README.md +10 -0
  84. package/src/sidebars/generator.ts +292 -0
  85. package/src/sidebars/index.ts +118 -0
  86. package/src/sidebars/normalization.ts +91 -0
  87. package/src/sidebars/postProcessor.ts +112 -0
  88. package/src/sidebars/processor.ts +123 -0
  89. package/src/sidebars/types.ts +280 -0
  90. package/src/sidebars/utils.ts +393 -0
  91. package/src/sidebars/validation.ts +179 -0
  92. package/src/slug.ts +41 -22
  93. package/src/tags.ts +20 -0
  94. package/src/translations.ts +155 -124
  95. package/src/types.ts +17 -250
  96. package/src/versions/files.ts +216 -0
  97. package/src/versions/index.ts +246 -0
  98. package/src/versions/validation.ts +115 -0
  99. package/lib/.tsbuildinfo +0 -1
  100. package/lib/sidebarItemsGenerator.js +0 -211
  101. package/lib/sidebars.d.ts +0 -43
  102. package/lib/sidebars.js +0 -320
  103. package/lib/theme/hooks/useDocs.d.ts +0 -20
  104. package/lib/theme/hooks/useDocs.js +0 -72
  105. package/lib/versions.d.ts +0 -16
  106. package/lib/versions.js +0 -319
  107. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  108. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  109. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  110. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  111. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  112. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  113. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  114. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  115. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  116. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  117. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  118. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  119. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  120. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  121. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  122. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  123. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  124. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  125. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  126. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  127. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  128. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  129. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  130. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  131. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  132. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  133. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  134. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  135. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  136. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  137. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  138. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  139. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  140. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  141. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  142. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  143. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  149. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  150. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  151. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  152. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  153. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  154. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  155. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  156. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  157. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  158. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  159. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
  160. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  161. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  162. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  163. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  164. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  165. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  166. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  167. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  168. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  169. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  170. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  171. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  172. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  173. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  174. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  175. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  176. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  177. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  178. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  179. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  180. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  181. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  182. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  183. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  184. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  185. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  186. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  187. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  188. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  189. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  190. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  191. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  192. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  193. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  194. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  195. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  196. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  197. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
  198. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1916
  199. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
  200. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
  201. package/src/__tests__/cli.test.ts +0 -333
  202. package/src/__tests__/docFrontMatter.test.ts +0 -244
  203. package/src/__tests__/docs.test.ts +0 -878
  204. package/src/__tests__/index.test.ts +0 -1871
  205. package/src/__tests__/lastUpdate.test.ts +0 -69
  206. package/src/__tests__/numberPrefix.test.ts +0 -199
  207. package/src/__tests__/options.test.ts +0 -231
  208. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  209. package/src/__tests__/sidebars.test.ts +0 -639
  210. package/src/__tests__/slug.test.ts +0 -109
  211. package/src/__tests__/translations.test.ts +0 -159
  212. package/src/__tests__/versions.test.ts +0 -741
  213. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  214. package/src/docFrontMatter.ts +0 -41
  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
  230. package/types.d.ts +0 -13
package/lib/slug.js CHANGED
@@ -8,33 +8,43 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const utils_1 = require("@docusaurus/utils");
10
10
  const numberPrefix_1 = require("./numberPrefix");
11
- function getSlug({ baseID, frontmatterSlug, dirName, stripDirNumberPrefixes = true, numberPrefixParser = numberPrefix_1.DefaultNumberPrefixParser, }) {
12
- const baseSlug = frontmatterSlug || baseID;
13
- let slug;
14
- if (baseSlug.startsWith('/')) {
15
- slug = baseSlug;
16
- }
17
- else {
11
+ const docs_1 = require("./docs");
12
+ function getSlug({ baseID, frontMatterSlug, source, sourceDirName, stripDirNumberPrefixes = true, numberPrefixParser = numberPrefix_1.DefaultNumberPrefixParser, }) {
13
+ function getDirNameSlug() {
18
14
  const dirNameStripped = stripDirNumberPrefixes
19
- ? numberPrefix_1.stripPathNumberPrefixes(dirName, numberPrefixParser)
20
- : dirName;
21
- const resolveDirname = dirName === '.'
15
+ ? (0, numberPrefix_1.stripPathNumberPrefixes)(sourceDirName, numberPrefixParser)
16
+ : sourceDirName;
17
+ const resolveDirname = sourceDirName === '.'
22
18
  ? '/'
23
- : utils_1.addLeadingSlash(utils_1.addTrailingSlash(dirNameStripped));
24
- slug = utils_1.resolvePathname(baseSlug, resolveDirname);
19
+ : (0, utils_1.addLeadingSlash)((0, utils_1.addTrailingSlash)(dirNameStripped));
20
+ return resolveDirname;
21
+ }
22
+ function computeSlug() {
23
+ if (frontMatterSlug?.startsWith('/')) {
24
+ return frontMatterSlug;
25
+ }
26
+ const dirNameSlug = getDirNameSlug();
27
+ if (!frontMatterSlug &&
28
+ (0, docs_1.isCategoryIndex)((0, docs_1.toCategoryIndexMatcherParam)({ source, sourceDirName }))) {
29
+ return dirNameSlug;
30
+ }
31
+ const baseSlug = frontMatterSlug ?? baseID;
32
+ return (0, utils_1.resolvePathname)(baseSlug, getDirNameSlug());
25
33
  }
26
- if (!utils_1.isValidPathname(slug)) {
27
- throw new Error(`We couldn't compute a valid slug for document with id "${baseID}" in "${dirName}" directory.
34
+ function ensureValidSlug(slug) {
35
+ if (!(0, utils_1.isValidPathname)(slug)) {
36
+ throw new Error(`We couldn't compute a valid slug for document with ID "${baseID}" in "${sourceDirName}" directory.
28
37
  The slug we computed looks invalid: ${slug}.
29
- Maybe your slug frontmatter is incorrect or you use weird chars in the file path?
30
- By using the slug frontmatter, you should be able to fix this error, by using the slug of your choice:
38
+ Maybe your slug front matter is incorrect or there are special characters in the file path?
39
+ By using front matter to set a custom slug, you should be able to fix this error:
31
40
 
32
- Example =>
33
41
  ---
34
42
  slug: /my/customDocPath
35
43
  ---
36
44
  `);
45
+ }
46
+ return slug;
37
47
  }
38
- return slug;
48
+ return ensureValidSlug(computeSlug());
39
49
  }
40
50
  exports.default = getSlug;
@@ -4,17 +4,6 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
-
8
- module.exports = {
9
- docs: [
10
- {
11
- type: 'category',
12
- label: 'Getting Started',
13
- items: ['greeting'],
14
- },
15
- {
16
- type: 'doc',
17
- id: 'api',
18
- },
19
- ],
20
- };
7
+ import type { VersionTags } from './types';
8
+ import type { DocMetadata } from '@docusaurus/plugin-content-docs';
9
+ export declare function getVersionTags(docs: DocMetadata[]): VersionTags;
package/lib/tags.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Facebook, Inc. and its affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getVersionTags = void 0;
10
+ const tslib_1 = require("tslib");
11
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
12
+ const utils_1 = require("@docusaurus/utils");
13
+ function getVersionTags(docs) {
14
+ const groups = (0, utils_1.groupTaggedItems)(docs, (doc) => doc.tags);
15
+ return lodash_1.default.mapValues(groups, (group) => ({
16
+ label: group.tag.label,
17
+ docIds: group.items.map((item) => item.id),
18
+ permalink: group.tag.permalink,
19
+ }));
20
+ }
21
+ exports.getVersionTags = getVersionTags;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import { LoadedContent } from './types';
8
- import { TranslationFile, TranslationFiles } from '@docusaurus/types';
9
- export declare function getLoadedContentTranslationFiles(loadedContent: LoadedContent): TranslationFiles;
7
+ import type { LoadedContent } from '@docusaurus/plugin-content-docs';
8
+ import type { TranslationFile } from '@docusaurus/types';
9
+ export declare function getLoadedContentTranslationFiles(loadedContent: LoadedContent): TranslationFile[];
10
10
  export declare function translateLoadedContent(loadedContent: LoadedContent, translationFiles: TranslationFile[]): LoadedContent;
@@ -7,19 +7,18 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.translateLoadedContent = exports.getLoadedContentTranslationFiles = void 0;
10
- const lodash_1 = require("lodash");
11
- const sidebars_1 = require("./sidebars");
10
+ const tslib_1 = require("tslib");
11
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
12
12
  const utils_1 = require("@docusaurus/utils");
13
13
  const constants_1 = require("./constants");
14
+ const utils_2 = require("./sidebars/utils");
14
15
  function getVersionFileName(versionName) {
15
16
  if (versionName === constants_1.CURRENT_VERSION_NAME) {
16
17
  return versionName;
17
18
  }
18
- else {
19
- // I don't like this "version-" prefix,
20
- // but it's for consistency with site/versioned_docs
21
- return `version-${versionName}`;
22
- }
19
+ // I don't like this "version-" prefix,
20
+ // but it's for consistency with site/versioned_docs
21
+ return `version-${versionName}`;
23
22
  }
24
23
  // TODO legacy, the sidebar name is like "version-2.0.0-alpha.66/docs"
25
24
  // input: "version-2.0.0-alpha.66/docs"
@@ -31,87 +30,104 @@ function getNormalizedSidebarName({ versionName, sidebarName, }) {
31
30
  const [, ...rest] = sidebarName.split('/');
32
31
  return rest.join('/');
33
32
  }
34
- /*
35
- // Do we need to translate doc metadatas?
36
- // It seems translating frontmatter labels is good enough
37
- function getDocTranslations(doc: DocMetadata): TranslationFileContent {
38
- return {
39
- [`${doc.unversionedId}.title`]: {
40
- message: doc.title,
41
- description: `The title for doc with id=${doc.unversionedId}`,
42
- },
43
- ...(doc.sidebar_label
44
- ? {
45
- [`${doc.unversionedId}.sidebar_label`]: {
46
- message: doc.sidebar_label,
47
- description: `The sidebar label for doc with id=${doc.unversionedId}`,
48
- },
49
- }
50
- : undefined),
51
- };
52
- }
53
- function translateDoc(
54
- doc: DocMetadata,
55
- docsTranslations: TranslationFileContent,
56
- ): DocMetadata {
57
- return {
58
- ...doc,
59
- title: docsTranslations[`${doc.unversionedId}.title`]?.message ?? doc.title,
60
- sidebar_label:
61
- docsTranslations[`${doc.unversionedId}.sidebar_label`]?.message ??
62
- doc.sidebar_label,
63
- };
64
- }
65
-
66
- function getDocsTranslations(version: LoadedVersion): TranslationFileContent {
67
- return mergeTranslations(version.docs.map(getDocTranslations));
68
- }
69
- function translateDocs(
70
- docs: DocMetadata[],
71
- docsTranslations: TranslationFileContent,
72
- ): DocMetadata[] {
73
- return docs.map((doc) => translateDoc(doc, docsTranslations));
74
- }
75
- */
76
33
  function getSidebarTranslationFileContent(sidebar, sidebarName) {
77
- const categories = sidebars_1.collectSidebarCategories(sidebar);
78
- const categoryContent = lodash_1.chain(categories)
79
- .keyBy((category) => `sidebar.${sidebarName}.category.${category.label}`)
80
- .mapValues((category) => ({
81
- message: category.label,
82
- description: `The label for category ${category.label} in sidebar ${sidebarName}`,
83
- }))
84
- .value();
85
- const links = sidebars_1.collectSidebarLinks(sidebar);
86
- const linksContent = lodash_1.chain(links)
87
- .keyBy((link) => `sidebar.${sidebarName}.link.${link.label}`)
88
- .mapValues((link) => ({
89
- message: link.label,
90
- description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
91
- }))
92
- .value();
93
- return utils_1.mergeTranslations([categoryContent, linksContent]);
34
+ const categories = (0, utils_2.collectSidebarCategories)(sidebar);
35
+ const categoryContent = Object.fromEntries(categories.flatMap((category) => {
36
+ const entries = [];
37
+ entries.push([
38
+ `sidebar.${sidebarName}.category.${category.label}`,
39
+ {
40
+ message: category.label,
41
+ description: `The label for category ${category.label} in sidebar ${sidebarName}`,
42
+ },
43
+ ]);
44
+ if (category.link?.type === 'generated-index') {
45
+ if (category.link.title) {
46
+ entries.push([
47
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`,
48
+ {
49
+ message: category.link.title,
50
+ description: `The generated-index page title for category ${category.label} in sidebar ${sidebarName}`,
51
+ },
52
+ ]);
53
+ }
54
+ if (category.link.description) {
55
+ entries.push([
56
+ `sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`,
57
+ {
58
+ message: category.link.description,
59
+ description: `The generated-index page description for category ${category.label} in sidebar ${sidebarName}`,
60
+ },
61
+ ]);
62
+ }
63
+ }
64
+ return entries;
65
+ }));
66
+ const links = (0, utils_2.collectSidebarLinks)(sidebar);
67
+ const linksContent = Object.fromEntries(links.map((link) => [
68
+ `sidebar.${sidebarName}.link.${link.label}`,
69
+ {
70
+ message: link.label,
71
+ description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
72
+ },
73
+ ]));
74
+ const docs = (0, utils_2.collectSidebarDocItems)(sidebar)
75
+ .concat((0, utils_2.collectSidebarRefs)(sidebar))
76
+ .filter((item) => item.translatable);
77
+ const docLinksContent = Object.fromEntries(docs.map((doc) => [
78
+ `sidebar.${sidebarName}.doc.${doc.label}`,
79
+ {
80
+ message: doc.label,
81
+ description: `The label for the doc item ${doc.label} in sidebar ${sidebarName}, linking to the doc ${doc.id}`,
82
+ },
83
+ ]));
84
+ return (0, utils_1.mergeTranslations)([categoryContent, linksContent, docLinksContent]);
94
85
  }
95
86
  function translateSidebar({ sidebar, sidebarName, sidebarsTranslations, }) {
96
- return sidebars_1.transformSidebarItems(sidebar, (item) => {
97
- var _a, _b, _c, _d;
87
+ function transformSidebarCategoryLink(category) {
88
+ if (!category.link) {
89
+ return undefined;
90
+ }
91
+ if (category.link.type === 'generated-index') {
92
+ const title = sidebarsTranslations[`sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`]?.message ?? category.link.title;
93
+ const description = sidebarsTranslations[`sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`]?.message ?? category.link.description;
94
+ return {
95
+ ...category.link,
96
+ title,
97
+ description,
98
+ };
99
+ }
100
+ return category.link;
101
+ }
102
+ return (0, utils_2.transformSidebarItems)(sidebar, (item) => {
98
103
  if (item.type === 'category') {
104
+ const link = transformSidebarCategoryLink(item);
99
105
  return {
100
106
  ...item,
101
- label: (_b = (_a = sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : item.label,
107
+ label: sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]
108
+ ?.message ?? item.label,
109
+ ...(link && { link }),
102
110
  };
103
111
  }
104
112
  if (item.type === 'link') {
105
113
  return {
106
114
  ...item,
107
- label: (_d = (_c = sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : item.label,
115
+ label: sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
116
+ ?.message ?? item.label,
117
+ };
118
+ }
119
+ if ((item.type === 'doc' || item.type === 'ref') && item.translatable) {
120
+ return {
121
+ ...item,
122
+ label: sidebarsTranslations[`sidebar.${sidebarName}.doc.${item.label}`]
123
+ ?.message ?? item.label,
108
124
  };
109
125
  }
110
126
  return item;
111
127
  });
112
128
  }
113
129
  function getSidebarsTranslations(version) {
114
- return utils_1.mergeTranslations(Object.entries(version.sidebars).map(([sidebarName, sidebar]) => {
130
+ return (0, utils_1.mergeTranslations)(Object.entries(version.sidebars).map(([sidebarName, sidebar]) => {
115
131
  const normalizedSidebarName = getNormalizedSidebarName({
116
132
  sidebarName,
117
133
  versionName: version.versionName,
@@ -120,49 +136,40 @@ function getSidebarsTranslations(version) {
120
136
  }));
121
137
  }
122
138
  function translateSidebars(version, sidebarsTranslations) {
123
- return lodash_1.mapValues(version.sidebars, (sidebar, sidebarName) => {
124
- return translateSidebar({
125
- sidebar,
126
- sidebarName: getNormalizedSidebarName({
127
- sidebarName,
128
- versionName: version.versionName,
129
- }),
130
- sidebarsTranslations,
131
- });
132
- });
139
+ return lodash_1.default.mapValues(version.sidebars, (sidebar, sidebarName) => translateSidebar({
140
+ sidebar,
141
+ sidebarName: getNormalizedSidebarName({
142
+ sidebarName,
143
+ versionName: version.versionName,
144
+ }),
145
+ sidebarsTranslations,
146
+ }));
133
147
  }
134
148
  function getVersionTranslationFiles(version) {
135
149
  const versionTranslations = {
136
150
  'version.label': {
137
- message: version.versionLabel,
151
+ message: version.label,
138
152
  description: `The label for version ${version.versionName}`,
139
153
  },
140
154
  };
141
155
  const sidebarsTranslations = getSidebarsTranslations(version);
142
- // const docsTranslations: TranslationFileContent = getDocsTranslations(version);
143
156
  return [
144
157
  {
145
158
  path: getVersionFileName(version.versionName),
146
- content: utils_1.mergeTranslations([
147
- versionTranslations,
148
- sidebarsTranslations,
149
- // docsTranslations,
150
- ]),
159
+ content: (0, utils_1.mergeTranslations)([versionTranslations, sidebarsTranslations]),
151
160
  },
152
161
  ];
153
162
  }
154
163
  function translateVersion(version, translationFiles) {
155
- var _a;
156
164
  const versionTranslations = translationFiles[getVersionFileName(version.versionName)].content;
157
165
  return {
158
166
  ...version,
159
- versionLabel: (_a = versionTranslations['version.label']) === null || _a === void 0 ? void 0 : _a.message,
167
+ label: versionTranslations['version.label']?.message ?? version.label,
160
168
  sidebars: translateSidebars(version, versionTranslations),
161
- // docs: translateDocs(version.docs, versionTranslations),
162
169
  };
163
170
  }
164
171
  function getVersionsTranslationFiles(versions) {
165
- return lodash_1.flatten(versions.map(getVersionTranslationFiles));
172
+ return versions.flatMap(getVersionTranslationFiles);
166
173
  }
167
174
  function translateVersions(versions, translationFiles) {
168
175
  return versions.map((version) => translateVersion(version, translationFiles));
@@ -172,7 +179,7 @@ function getLoadedContentTranslationFiles(loadedContent) {
172
179
  }
173
180
  exports.getLoadedContentTranslationFiles = getLoadedContentTranslationFiles;
174
181
  function translateLoadedContent(loadedContent, translationFiles) {
175
- const translationFilesMap = lodash_1.keyBy(translationFiles, (f) => f.path);
182
+ const translationFilesMap = lodash_1.default.keyBy(translationFiles, (f) => f.path);
176
183
  return {
177
184
  loadedVersions: translateVersions(loadedContent.loadedVersions, translationFilesMap),
178
185
  };
package/lib/types.d.ts CHANGED
@@ -4,205 +4,33 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import type { RemarkAndRehypePluginOptions } from '@docusaurus/mdx-loader';
8
- import { BrokenMarkdownLink as IBrokenMarkdownLink, ContentPaths } from '@docusaurus/utils/lib/markdownLinks';
7
+ import type { BrokenMarkdownLink, Tag } from '@docusaurus/utils';
8
+ import type { VersionMetadata, LoadedVersion, CategoryGeneratedIndexMetadata } from '@docusaurus/plugin-content-docs';
9
+ import type { SidebarsUtils } from './sidebars/utils';
9
10
  export declare type DocFile = {
10
11
  contentPath: string;
11
12
  filePath: string;
12
13
  source: string;
13
14
  content: string;
14
- lastUpdate: LastUpdateData;
15
- };
16
- export declare type VersionName = string;
17
- export declare type VersionMetadata = ContentPaths & {
18
- versionName: VersionName;
19
- versionLabel: string;
20
- versionPath: string;
21
- versionEditUrl?: string | undefined;
22
- versionEditUrlLocalized?: string | undefined;
23
- versionBanner: VersionBanner;
24
- isLast: boolean;
25
- sidebarFilePath: string | false | undefined;
26
- routePriority: number | undefined;
27
- };
28
- export declare type EditUrlFunction = (editUrlParams: {
29
- version: string;
30
- versionDocsDirPath: string;
31
- docPath: string;
32
- permalink: string;
33
- locale: string;
34
- }) => string | undefined;
35
- export declare type MetadataOptions = {
36
- routeBasePath: string;
37
- homePageId?: string;
38
- editUrl?: string | EditUrlFunction;
39
- editCurrentVersion: boolean;
40
- editLocalizedFiles: boolean;
41
- showLastUpdateTime?: boolean;
42
- showLastUpdateAuthor?: boolean;
43
- numberPrefixParser: NumberPrefixParser;
44
- };
45
- export declare type PathOptions = {
46
- path: string;
47
- sidebarPath?: string | false | undefined;
48
- };
49
- export declare type VersionBanner = 'none' | 'unreleased' | 'unmaintained';
50
- export declare type VersionOptions = {
51
- path?: string;
52
- label?: string;
53
- banner?: VersionBanner;
54
- };
55
- export declare type VersionsOptions = {
56
- lastVersion?: string;
57
- versions: Record<string, VersionOptions>;
58
- onlyIncludeVersions?: string[];
59
- };
60
- export declare type PluginOptions = MetadataOptions & PathOptions & VersionsOptions & RemarkAndRehypePluginOptions & {
61
- id: string;
62
- include: string[];
63
- docLayoutComponent: string;
64
- docItemComponent: string;
65
- admonitions: Record<string, unknown>;
66
- disableVersioning: boolean;
67
- includeCurrentVersion: boolean;
68
- sidebarItemsGenerator: SidebarItemsGeneratorOption;
69
- };
70
- export declare type SidebarItemBase = {
71
- customProps?: Record<string, unknown>;
72
- };
73
- export declare type SidebarItemDoc = SidebarItemBase & {
74
- type: 'doc' | 'ref';
75
- label?: string;
76
- id: string;
77
- };
78
- export declare type SidebarItemLink = SidebarItemBase & {
79
- type: 'link';
80
- href: string;
81
- label: string;
82
- };
83
- export declare type SidebarItemCategory = SidebarItemBase & {
84
- type: 'category';
85
- label: string;
86
- items: SidebarItem[];
87
- collapsed: boolean;
88
- };
89
- export declare type UnprocessedSidebarItemAutogenerated = {
90
- type: 'autogenerated';
91
- dirName: string;
92
- };
93
- export declare type UnprocessedSidebarItemCategory = SidebarItemBase & {
94
- type: 'category';
95
- label: string;
96
- items: UnprocessedSidebarItem[];
97
- collapsed: boolean;
98
- };
99
- export declare type UnprocessedSidebarItem = SidebarItemDoc | SidebarItemLink | UnprocessedSidebarItemCategory | UnprocessedSidebarItemAutogenerated;
100
- export declare type UnprocessedSidebar = UnprocessedSidebarItem[];
101
- export declare type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
102
- export declare type SidebarItem = SidebarItemDoc | SidebarItemLink | SidebarItemCategory;
103
- export declare type Sidebar = SidebarItem[];
104
- export declare type SidebarItemType = SidebarItem['type'];
105
- export declare type Sidebars = Record<string, Sidebar>;
106
- export declare type SidebarItemsGeneratorDoc = Pick<DocMetadataBase, 'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'>;
107
- export declare type SidebarItemsGeneratorVersion = Pick<VersionMetadata, 'versionName' | 'contentPath'>;
108
- export declare type SidebarItemsGeneratorArgs = {
109
- item: UnprocessedSidebarItemAutogenerated;
110
- version: SidebarItemsGeneratorVersion;
111
- docs: SidebarItemsGeneratorDoc[];
112
- numberPrefixParser: NumberPrefixParser;
113
- };
114
- export declare type SidebarItemsGenerator = (generatorArgs: SidebarItemsGeneratorArgs) => Promise<SidebarItem[]>;
115
- export declare type SidebarItemsGeneratorOptionArgs = {
116
- defaultSidebarItemsGenerator: SidebarItemsGenerator;
117
- } & SidebarItemsGeneratorArgs;
118
- export declare type SidebarItemsGeneratorOption = (generatorArgs: SidebarItemsGeneratorOptionArgs) => Promise<SidebarItem[]>;
119
- export declare type OrderMetadata = {
120
- previous?: string;
121
- next?: string;
122
- sidebar?: string;
123
- };
124
- export declare type LastUpdateData = {
125
- lastUpdatedAt?: number;
126
- formattedLastUpdatedAt?: string;
127
- lastUpdatedBy?: string;
128
- };
129
- export declare type DocFrontMatter = {
130
- id?: string;
131
- title?: string;
132
- hide_title?: boolean;
133
- hide_table_of_contents?: boolean;
134
- keywords?: string[];
135
- image?: string;
136
- description?: string;
137
- slug?: string;
138
- sidebar_label?: string;
139
- sidebar_position?: number;
140
- pagination_label?: string;
141
- custom_edit_url?: string | null;
142
- parse_number_prefixes?: boolean;
143
- };
144
- export declare type DocMetadataBase = LastUpdateData & {
145
- version: VersionName;
146
- unversionedId: string;
147
- id: string;
148
- isDocsHomePage: boolean;
149
- title: string;
150
- description: string;
151
- source: string;
152
- sourceDirName: string;
153
- slug: string;
154
- permalink: string;
155
- sidebarPosition?: number;
156
- editUrl?: string | null;
157
- frontMatter: DocFrontMatter & Record<string, unknown>;
158
- };
159
- export declare type DocNavLink = {
160
- title: string;
161
- permalink: string;
162
- };
163
- export declare type DocMetadata = DocMetadataBase & {
164
- sidebar?: string;
165
- previous?: DocNavLink;
166
- next?: DocNavLink;
167
15
  };
168
16
  export declare type SourceToPermalink = {
169
17
  [source: string]: string;
170
18
  };
171
- export declare type LoadedVersion = VersionMetadata & {
172
- versionPath: string;
173
- mainDocId: string;
174
- docs: DocMetadata[];
175
- sidebars: Sidebars;
176
- permalinkToSidebar: Record<string, string>;
177
- };
178
- export declare type LoadedContent = {
179
- loadedVersions: LoadedVersion[];
19
+ export declare type VersionTag = Tag & {
20
+ /** All doc ids having this tag. */
21
+ docIds: string[];
180
22
  };
181
- export declare type GlobalDoc = {
182
- id: string;
183
- path: string;
184
- sidebar: string | undefined;
23
+ export declare type VersionTags = {
24
+ [permalink: string]: VersionTag;
185
25
  };
186
- export declare type GlobalVersion = {
187
- name: VersionName;
188
- label: string;
189
- isLast: boolean;
190
- path: string;
191
- mainDocId: string;
192
- docs: GlobalDoc[];
26
+ export declare type FullVersion = LoadedVersion & {
27
+ sidebarsUtils: SidebarsUtils;
28
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
193
29
  };
194
- export declare type GlobalPluginData = {
195
- path: string;
196
- versions: GlobalVersion[];
197
- };
198
- export declare type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
30
+ export declare type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
199
31
  export declare type DocsMarkdownOption = {
200
32
  versionsMetadata: VersionMetadata[];
201
33
  siteDir: string;
202
34
  sourceToPermalink: SourceToPermalink;
203
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
204
- };
205
- export declare type NumberPrefixParser = (filename: string) => {
206
- filename: string;
207
- numberPrefix?: number;
35
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
208
36
  };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import type { PluginOptions, VersionMetadata } from '@docusaurus/plugin-content-docs';
8
+ import type { VersionContext } from './index';
9
+ /** `[siteDir]/community_versioned_docs/version-1.0.0` */
10
+ export declare function getVersionDocsDirPath(siteDir: string, pluginId: string, versionName: string): string;
11
+ /** `[siteDir]/community_versioned_sidebars/version-1.0.0-sidebars.json` */
12
+ export declare function getVersionSidebarsPath(siteDir: string, pluginId: string, versionName: string): string;
13
+ export declare function getDocsDirPathLocalized({ localizationDir, pluginId, versionName, }: {
14
+ localizationDir: string;
15
+ pluginId: string;
16
+ versionName: string;
17
+ }): string;
18
+ /** `community` => `[siteDir]/community_versions.json` */
19
+ export declare function getVersionsFilePath(siteDir: string, pluginId: string): string;
20
+ /**
21
+ * Reads the plugin's respective `versions.json` file, and returns its content.
22
+ *
23
+ * @throws Throws if validation fails, i.e. `versions.json` doesn't contain an
24
+ * array of valid version names.
25
+ */
26
+ export declare function readVersionsFile(siteDir: string, pluginId: string): Promise<string[] | null>;
27
+ /**
28
+ * Reads the `versions.json` file, and returns an ordered list of version names.
29
+ *
30
+ * - If `disableVersioning` is turned on, it will return `["current"]` (requires
31
+ * `includeCurrentVersion` to be true);
32
+ * - If `includeCurrentVersion` is turned on, "current" will be inserted at the
33
+ * beginning, if not already there.
34
+ *
35
+ * You need to use {@link filterVersions} after this.
36
+ *
37
+ * @throws Throws an error if `disableVersioning: true` but `versions.json`
38
+ * doesn't exist (i.e. site is not versioned)
39
+ * @throws Throws an error if versions list is empty (empty `versions.json` or
40
+ * `disableVersioning` is true, and not including current version)
41
+ */
42
+ export declare function readVersionNames(siteDir: string, options: PluginOptions): Promise<string[]>;
43
+ /**
44
+ * Gets the path-related version metadata.
45
+ *
46
+ * @throws Throws if the resolved docs folder or sidebars file doesn't exist.
47
+ * Does not throw if a versioned sidebar is missing (since we don't create empty
48
+ * files).
49
+ */
50
+ export declare function getVersionMetadataPaths({ versionName, context, options, }: VersionContext): Promise<Pick<VersionMetadata, 'contentPath' | 'contentPathLocalized' | 'sidebarFilePath'>>;