@docusaurus/plugin-content-docs 2.0.0-beta.15d451942 → 2.0.0-beta.18

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 (214) hide show
  1. package/lib/categoryGeneratedIndex.d.ts +12 -0
  2. package/lib/categoryGeneratedIndex.js +35 -0
  3. package/lib/cli.d.ts +2 -2
  4. package/lib/cli.js +37 -51
  5. package/lib/client/docsClientUtils.d.ts +6 -26
  6. package/lib/client/docsClientUtils.js +28 -34
  7. package/lib/{theme/hooks/useDocs.d.ts → client/index.d.ts} +4 -3
  8. package/lib/{theme/hooks/useDocs.js → client/index.js} +28 -25
  9. package/lib/docs.d.ts +31 -4
  10. package/lib/docs.js +160 -54
  11. package/{src/__tests__/__fixtures__/simple-site/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
  12. package/lib/{docFrontMatter.js → frontMatter.js} +13 -6
  13. package/lib/globalData.d.ts +2 -2
  14. package/lib/globalData.js +32 -3
  15. package/lib/index.d.ts +4 -3
  16. package/lib/index.js +123 -136
  17. package/lib/lastUpdate.d.ts +4 -6
  18. package/lib/lastUpdate.js +22 -26
  19. package/lib/markdown/index.d.ts +3 -6
  20. package/lib/markdown/index.js +3 -3
  21. package/lib/markdown/linkify.d.ts +1 -1
  22. package/lib/markdown/linkify.js +7 -3
  23. package/lib/numberPrefix.d.ts +1 -1
  24. package/lib/numberPrefix.js +16 -21
  25. package/lib/options.d.ts +3 -5
  26. package/lib/options.js +55 -19
  27. package/lib/props.d.ts +7 -2
  28. package/lib/props.js +70 -14
  29. package/lib/routes.d.ts +28 -0
  30. package/lib/routes.js +110 -0
  31. package/lib/server-export.d.ts +8 -0
  32. package/lib/server-export.js +23 -0
  33. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -6
  34. package/lib/sidebars/generator.js +209 -0
  35. package/lib/sidebars/index.d.ts +13 -0
  36. package/lib/sidebars/index.js +94 -0
  37. package/lib/sidebars/normalization.d.ts +13 -0
  38. package/lib/sidebars/normalization.js +55 -0
  39. package/lib/sidebars/postProcessor.d.ts +8 -0
  40. package/lib/sidebars/postProcessor.js +65 -0
  41. package/lib/sidebars/processor.d.ts +10 -0
  42. package/lib/sidebars/processor.js +79 -0
  43. package/lib/sidebars/types.d.ts +174 -0
  44. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/sidebars/types.js} +2 -10
  45. package/lib/sidebars/utils.d.ts +54 -0
  46. package/lib/sidebars/utils.js +255 -0
  47. package/lib/sidebars/validation.d.ts +11 -0
  48. package/lib/sidebars/validation.js +138 -0
  49. package/lib/slug.d.ts +6 -4
  50. package/lib/slug.js +29 -19
  51. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/tags.d.ts} +2 -8
  52. package/lib/tags.js +21 -0
  53. package/lib/translations.d.ts +2 -2
  54. package/lib/translations.js +89 -49
  55. package/lib/types.d.ts +60 -130
  56. package/lib/versions.d.ts +29 -4
  57. package/lib/versions.js +134 -97
  58. package/package.json +30 -26
  59. package/src/categoryGeneratedIndex.ts +55 -0
  60. package/src/cli.ts +47 -63
  61. package/src/client/docsClientUtils.ts +38 -73
  62. package/src/{theme/hooks/useDocs.ts → client/index.ts} +16 -11
  63. package/{types.d.ts → src/deps.d.ts} +1 -1
  64. package/src/docs.ts +212 -46
  65. package/src/{docFrontMatter.ts → frontMatter.ts} +21 -26
  66. package/src/globalData.ts +53 -3
  67. package/src/index.ts +168 -178
  68. package/src/lastUpdate.ts +26 -33
  69. package/src/markdown/index.ts +10 -16
  70. package/src/markdown/linkify.ts +6 -2
  71. package/src/numberPrefix.ts +19 -26
  72. package/src/options.ts +60 -32
  73. package/src/plugin-content-docs.d.ts +263 -40
  74. package/src/props.ts +105 -21
  75. package/src/routes.ts +185 -0
  76. package/src/server-export.ts +24 -0
  77. package/src/sidebars/README.md +9 -0
  78. package/src/sidebars/generator.ts +292 -0
  79. package/src/sidebars/index.ts +120 -0
  80. package/src/sidebars/normalization.ts +85 -0
  81. package/src/sidebars/postProcessor.ts +89 -0
  82. package/src/sidebars/processor.ts +120 -0
  83. package/src/sidebars/types.ts +274 -0
  84. package/src/sidebars/utils.ts +388 -0
  85. package/src/sidebars/validation.ts +174 -0
  86. package/src/slug.ts +40 -23
  87. package/src/tags.ts +19 -0
  88. package/src/translations.ts +124 -66
  89. package/src/types.ts +67 -187
  90. package/src/versions.ts +205 -110
  91. package/lib/.tsbuildinfo +0 -4717
  92. package/lib/docFrontMatter.d.ts +0 -21
  93. package/lib/sidebarItemsGenerator.js +0 -211
  94. package/lib/sidebars.d.ts +0 -42
  95. package/lib/sidebars.js +0 -309
  96. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  97. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  98. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  99. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  100. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  101. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  102. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  103. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  104. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  105. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  106. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  107. package/src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -20
  108. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  109. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  110. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  111. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  112. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  113. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  114. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  115. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -67
  116. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  117. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -52
  118. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  119. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  120. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  121. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  122. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  123. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  124. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  125. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  126. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  127. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  128. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  129. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  130. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  131. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  132. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  133. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  134. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  135. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  136. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  137. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  138. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  139. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  140. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  141. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  142. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  143. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  148. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  149. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  150. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  151. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  152. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  153. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  154. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  155. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  156. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  157. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  158. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  159. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  160. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  161. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  162. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  163. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  164. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  165. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  166. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  167. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  168. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  169. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  170. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  171. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  172. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  173. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  174. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  175. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  176. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  177. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  178. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  179. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  180. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  181. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  182. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  183. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  184. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  185. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
  186. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1907
  187. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
  188. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
  189. package/src/__tests__/cli.test.ts +0 -333
  190. package/src/__tests__/docFrontMatter.test.ts +0 -204
  191. package/src/__tests__/docs.test.ts +0 -875
  192. package/src/__tests__/index.test.ts +0 -1831
  193. package/src/__tests__/lastUpdate.test.ts +0 -68
  194. package/src/__tests__/numberPrefix.test.ts +0 -199
  195. package/src/__tests__/options.test.ts +0 -232
  196. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  197. package/src/__tests__/sidebars.test.ts +0 -638
  198. package/src/__tests__/slug.test.ts +0 -109
  199. package/src/__tests__/translations.test.ts +0 -159
  200. package/src/__tests__/versions.test.ts +0 -718
  201. package/src/client/__tests__/docsClientUtils.test.ts +0 -372
  202. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  203. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  204. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  205. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  206. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  207. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  208. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  209. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  210. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  211. package/src/markdown/__tests__/linkify.test.ts +0 -190
  212. package/src/sidebarItemsGenerator.ts +0 -307
  213. package/src/sidebars.ts +0 -489
  214. package/tsconfig.json +0 -9
package/lib/versions.js CHANGED
@@ -6,22 +6,19 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.getDocsDirPaths = exports.readVersionsMetadata = exports.getVersionsFilePath = exports.getVersionedSidebarsDirPath = exports.getVersionedDocsDirPath = void 0;
9
+ exports.getDocsDirPaths = exports.readVersionsMetadata = exports.filterVersions = exports.getVersionBadge = exports.getVersionBanner = exports.getDefaultVersionBanner = exports.readVersionNames = exports.readVersionsFile = exports.getVersionsFilePath = exports.getVersionedSidebarsDirPath = exports.getVersionedDocsDirPath = void 0;
10
10
  const tslib_1 = require("tslib");
11
11
  const path_1 = tslib_1.__importDefault(require("path"));
12
12
  const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
13
13
  const constants_1 = require("./constants");
14
- const constants_2 = require("@docusaurus/core/lib/constants");
15
14
  const utils_1 = require("@docusaurus/utils");
16
- const lodash_1 = require("lodash");
15
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
16
+ const sidebars_1 = require("./sidebars");
17
17
  // retro-compatibility: no prefix for the default plugin id
18
18
  function addPluginIdPrefix(fileOrDir, pluginId) {
19
- if (pluginId === constants_2.DEFAULT_PLUGIN_ID) {
20
- return fileOrDir;
21
- }
22
- else {
23
- return `${pluginId}_${fileOrDir}`;
24
- }
19
+ return pluginId === utils_1.DEFAULT_PLUGIN_ID
20
+ ? fileOrDir
21
+ : `${pluginId}_${fileOrDir}`;
25
22
  }
26
23
  function getVersionedDocsDirPath(siteDir, pluginId) {
27
24
  return path_1.default.join(siteDir, addPluginIdPrefix(constants_1.VERSIONED_DOCS_DIR, pluginId));
@@ -37,52 +34,50 @@ function getVersionsFilePath(siteDir, pluginId) {
37
34
  exports.getVersionsFilePath = getVersionsFilePath;
38
35
  function ensureValidVersionString(version) {
39
36
  if (typeof version !== 'string') {
40
- throw new Error(`versions should be strings. Found type=[${typeof version}] for version=[${version}]`);
37
+ throw new Error(`Versions should be strings. Found type "${typeof version}" for version "${version}".`);
41
38
  }
42
39
  // Should we forbid versions with special chars like / ?
43
40
  if (version.trim().length === 0) {
44
- throw new Error(`Invalid version=[${version}]`);
41
+ throw new Error(`Invalid version "${version}".`);
45
42
  }
46
43
  }
47
44
  function ensureValidVersionArray(versionArray) {
48
- if (!(versionArray instanceof Array)) {
49
- throw new Error(`The versions file should contain an array of versions! Found content=${JSON.stringify(versionArray)}`);
45
+ if (!Array.isArray(versionArray)) {
46
+ throw new Error(`The versions file should contain an array of version names! Found content: ${JSON.stringify(versionArray)}`);
50
47
  }
51
48
  versionArray.forEach(ensureValidVersionString);
52
49
  }
53
- // TODO not easy to make async due to many deps
54
- function readVersionsFile(siteDir, pluginId) {
50
+ async function readVersionsFile(siteDir, pluginId) {
55
51
  const versionsFilePath = getVersionsFilePath(siteDir, pluginId);
56
- if (fs_extra_1.default.existsSync(versionsFilePath)) {
57
- const content = JSON.parse(fs_extra_1.default.readFileSync(versionsFilePath, 'utf8'));
52
+ if (await fs_extra_1.default.pathExists(versionsFilePath)) {
53
+ const content = JSON.parse(await fs_extra_1.default.readFile(versionsFilePath, 'utf8'));
58
54
  ensureValidVersionArray(content);
59
55
  return content;
60
56
  }
61
- else {
62
- return null;
63
- }
57
+ return null;
64
58
  }
65
- // TODO not easy to make async due to many deps
66
- function readVersionNames(siteDir, options) {
67
- const versionFileContent = readVersionsFile(siteDir, options.id);
59
+ exports.readVersionsFile = readVersionsFile;
60
+ async function readVersionNames(siteDir, options) {
61
+ const versionFileContent = await readVersionsFile(siteDir, options.id);
68
62
  if (!versionFileContent && options.disableVersioning) {
69
- throw new Error(`Docs: using disableVersioning=${options.disableVersioning} option on a non-versioned site does not make sense`);
63
+ throw new Error(`Docs: using "disableVersioning: ${options.disableVersioning}" option on a non-versioned site does not make sense.`);
70
64
  }
71
- const versions = options.disableVersioning ? [] : versionFileContent !== null && versionFileContent !== void 0 ? versionFileContent : [];
72
- // We add the current version at the beginning, unless
73
- // - user don't want to
74
- // - it's been explicitly added to versions.json
65
+ const versions = options.disableVersioning ? [] : versionFileContent ?? [];
66
+ // We add the current version at the beginning, unless:
67
+ // - user don't want to; or
68
+ // - it's already been explicitly added to versions.json
75
69
  if (options.includeCurrentVersion &&
76
70
  !versions.includes(constants_1.CURRENT_VERSION_NAME)) {
77
71
  versions.unshift(constants_1.CURRENT_VERSION_NAME);
78
72
  }
79
73
  if (versions.length === 0) {
80
- throw new Error(`It is not possible to use docs without any version. Please check the configuration of these options: includeCurrentVersion=${options.includeCurrentVersion} disableVersioning=${options.disableVersioning}`);
74
+ throw new Error(`It is not possible to use docs without any version. Please check the configuration of these options: "includeCurrentVersion: ${options.includeCurrentVersion}", "disableVersioning: ${options.disableVersioning}".`);
81
75
  }
82
76
  return versions;
83
77
  }
78
+ exports.readVersionNames = readVersionNames;
84
79
  function getDocsDirPathLocalized({ siteDir, locale, pluginId, versionName, }) {
85
- return utils_1.getPluginI18nPath({
80
+ return (0, utils_1.getPluginI18nPath)({
86
81
  siteDir,
87
82
  locale,
88
83
  pluginName: 'docusaurus-plugin-content-docs',
@@ -96,29 +91,23 @@ function getDocsDirPathLocalized({ siteDir, locale, pluginId, versionName, }) {
96
91
  }
97
92
  function getVersionMetadataPaths({ versionName, context, options, }) {
98
93
  const isCurrentVersion = versionName === constants_1.CURRENT_VERSION_NAME;
99
- const contentPath = isCurrentVersion
100
- ? path_1.default.resolve(context.siteDir, options.path)
101
- : path_1.default.join(getVersionedDocsDirPath(context.siteDir, options.id), `version-${versionName}`);
102
94
  const contentPathLocalized = getDocsDirPathLocalized({
103
95
  siteDir: context.siteDir,
104
96
  locale: context.i18n.currentLocale,
105
97
  pluginId: options.id,
106
98
  versionName,
107
99
  });
108
- function getSidebarFilePath() {
109
- if (isCurrentVersion) {
110
- return options.sidebarPath
111
- ? path_1.default.resolve(context.siteDir, options.sidebarPath)
112
- : options.sidebarPath;
113
- }
114
- else {
115
- return path_1.default.join(getVersionedSidebarsDirPath(context.siteDir, options.id), `version-${versionName}-sidebars.json`);
116
- }
100
+ if (isCurrentVersion) {
101
+ return {
102
+ contentPath: path_1.default.resolve(context.siteDir, options.path),
103
+ contentPathLocalized,
104
+ sidebarFilePath: (0, sidebars_1.resolveSidebarPathOption)(context.siteDir, options.sidebarPath),
105
+ };
117
106
  }
118
107
  return {
119
- contentPath,
108
+ contentPath: path_1.default.join(getVersionedDocsDirPath(context.siteDir, options.id), `version-${versionName}`),
120
109
  contentPathLocalized,
121
- sidebarFilePath: getSidebarFilePath(),
110
+ sidebarFilePath: path_1.default.join(getVersionedSidebarsDirPath(context.siteDir, options.id), `version-${versionName}-sidebars.json`),
122
111
  };
123
112
  }
124
113
  function getVersionEditUrls({ contentPath, contentPathLocalized, context: { siteDir, i18n }, options: { id, path: currentVersionPath, editUrl, editCurrentVersion }, }) {
@@ -139,10 +128,10 @@ function getVersionEditUrls({ contentPath, contentPathLocalized, context: { site
139
128
  pluginId: id,
140
129
  })
141
130
  : contentPathLocalized;
142
- const versionPathSegment = utils_1.posixPath(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPath)));
143
- const versionPathSegmentLocalized = utils_1.posixPath(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPathLocalized)));
144
- const versionEditUrl = utils_1.normalizeUrl([editUrl, versionPathSegment]);
145
- const versionEditUrlLocalized = utils_1.normalizeUrl([
131
+ const versionPathSegment = (0, utils_1.posixPath)(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPath)));
132
+ const versionPathSegmentLocalized = (0, utils_1.posixPath)(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPathLocalized)));
133
+ const versionEditUrl = (0, utils_1.normalizeUrl)([editUrl, versionPathSegment]);
134
+ const versionEditUrlLocalized = (0, utils_1.normalizeUrl)([
146
135
  editUrl,
147
136
  versionPathSegmentLocalized,
148
137
  ]);
@@ -151,24 +140,61 @@ function getVersionEditUrls({ contentPath, contentPathLocalized, context: { site
151
140
  versionEditUrlLocalized,
152
141
  };
153
142
  }
154
- function createVersionMetadata({ versionName, isLast, context, options, }) {
155
- var _a, _b, _c;
156
- const { sidebarFilePath, contentPath, contentPathLocalized, } = getVersionMetadataPaths({
143
+ function getDefaultVersionBanner({ versionName, versionNames, lastVersionName, }) {
144
+ // Current version: good, no banner
145
+ if (versionName === lastVersionName) {
146
+ return null;
147
+ }
148
+ // Upcoming versions: unreleased banner
149
+ if (versionNames.indexOf(versionName) < versionNames.indexOf(lastVersionName)) {
150
+ return 'unreleased';
151
+ }
152
+ // Older versions: display unmaintained banner
153
+ return 'unmaintained';
154
+ }
155
+ exports.getDefaultVersionBanner = getDefaultVersionBanner;
156
+ function getVersionBanner({ versionName, versionNames, lastVersionName, options, }) {
157
+ const versionBannerOption = options.versions[versionName]?.banner;
158
+ if (versionBannerOption) {
159
+ return versionBannerOption === 'none' ? null : versionBannerOption;
160
+ }
161
+ return getDefaultVersionBanner({
157
162
  versionName,
158
- context,
159
- options,
163
+ versionNames,
164
+ lastVersionName,
160
165
  });
166
+ }
167
+ exports.getVersionBanner = getVersionBanner;
168
+ function getVersionBadge({ versionName, versionNames, options, }) {
169
+ const versionBadgeOption = options.versions[versionName]?.badge;
170
+ // If site is not versioned or only one version is included
171
+ // we don't show the version badge by default
172
+ // See https://github.com/facebook/docusaurus/issues/3362
173
+ const versionBadgeDefault = versionNames.length !== 1;
174
+ return versionBadgeOption ?? versionBadgeDefault;
175
+ }
176
+ exports.getVersionBadge = getVersionBadge;
177
+ function getVersionClassName({ versionName, options, }) {
178
+ const versionClassNameOption = options.versions[versionName]?.className;
179
+ const versionClassNameDefault = `docs-version-${versionName}`;
180
+ return versionClassNameOption ?? versionClassNameDefault;
181
+ }
182
+ function createVersionMetadata({ versionName, versionNames, lastVersionName, context, options, }) {
183
+ const { sidebarFilePath, contentPath, contentPathLocalized } = getVersionMetadataPaths({ versionName, context, options });
184
+ const isLast = versionName === lastVersionName;
161
185
  // retro-compatible values
162
186
  const defaultVersionLabel = versionName === constants_1.CURRENT_VERSION_NAME ? 'Next' : versionName;
163
- const defaultVersionPathPart = isLast
164
- ? ''
165
- : versionName === constants_1.CURRENT_VERSION_NAME
166
- ? 'next'
167
- : versionName;
168
- const versionOptions = (_a = options.versions[versionName]) !== null && _a !== void 0 ? _a : {};
169
- const versionLabel = (_b = versionOptions.label) !== null && _b !== void 0 ? _b : defaultVersionLabel;
170
- const versionPathPart = (_c = versionOptions.path) !== null && _c !== void 0 ? _c : defaultVersionPathPart;
171
- const versionPath = utils_1.normalizeUrl([
187
+ function getDefaultVersionPathPart() {
188
+ if (isLast) {
189
+ return '';
190
+ }
191
+ return versionName === constants_1.CURRENT_VERSION_NAME ? 'next' : versionName;
192
+ }
193
+ const defaultVersionPathPart = getDefaultVersionPathPart();
194
+ const versionOptions = options.versions[versionName] ?? {};
195
+ const versionLabel = versionOptions.label ?? defaultVersionLabel;
196
+ const versionPathPart = versionOptions.path ?? defaultVersionPathPart;
197
+ const versionPath = (0, utils_1.normalizeUrl)([
172
198
  context.baseUrl,
173
199
  options.routeBasePath,
174
200
  versionPathPart,
@@ -181,12 +207,24 @@ function createVersionMetadata({ versionName, isLast, context, options, }) {
181
207
  });
182
208
  // Because /docs/:route` should always be after `/docs/versionName/:route`.
183
209
  const routePriority = versionPathPart === '' ? -1 : undefined;
210
+ // the path that will be used to refer the docs tags
211
+ // example below will be using /docs/tags
212
+ const tagsPath = (0, utils_1.normalizeUrl)([versionPath, options.tagsBasePath]);
184
213
  return {
185
214
  versionName,
186
215
  versionLabel,
187
216
  versionPath,
188
- versionEditUrl: versionEditUrls === null || versionEditUrls === void 0 ? void 0 : versionEditUrls.versionEditUrl,
189
- versionEditUrlLocalized: versionEditUrls === null || versionEditUrls === void 0 ? void 0 : versionEditUrls.versionEditUrlLocalized,
217
+ tagsPath,
218
+ versionEditUrl: versionEditUrls?.versionEditUrl,
219
+ versionEditUrlLocalized: versionEditUrls?.versionEditUrlLocalized,
220
+ versionBanner: getVersionBanner({
221
+ versionName,
222
+ versionNames,
223
+ lastVersionName,
224
+ options,
225
+ }),
226
+ versionBadge: getVersionBadge({ versionName, versionNames, options }),
227
+ versionClassName: getVersionClassName({ versionName, options }),
190
228
  isLast,
191
229
  routePriority,
192
230
  sidebarFilePath,
@@ -194,25 +232,26 @@ function createVersionMetadata({ versionName, isLast, context, options, }) {
194
232
  contentPathLocalized,
195
233
  };
196
234
  }
197
- function checkVersionMetadataPaths({ versionMetadata, context, }) {
235
+ async function checkVersionMetadataPaths({ versionMetadata, context, }) {
198
236
  const { versionName, contentPath, sidebarFilePath } = versionMetadata;
199
237
  const { siteDir } = context;
200
238
  const isCurrentVersion = versionName === constants_1.CURRENT_VERSION_NAME;
201
- if (!fs_extra_1.default.existsSync(contentPath)) {
202
- throw new Error(`The docs folder does not exist for version [${versionName}]. A docs folder is expected to be found at ${path_1.default.relative(siteDir, contentPath)}`);
239
+ if (!(await fs_extra_1.default.pathExists(contentPath))) {
240
+ throw new Error(`The docs folder does not exist for version "${versionName}". A docs folder is expected to be found at ${path_1.default.relative(siteDir, contentPath)}.`);
203
241
  }
204
- // If the current version defines a path to a sidebar file that does not exist, we throw!
205
- // Note: for versioned sidebars, the file may not exist (as we prefer to not create it rather than to create an empty file)
242
+ // If the current version defines a path to a sidebar file that does not
243
+ // exist, we throw! Note: for versioned sidebars, the file may not exist (as
244
+ // we prefer to not create it rather than to create an empty file)
206
245
  // See https://github.com/facebook/docusaurus/issues/3366
207
246
  // See https://github.com/facebook/docusaurus/pull/4775
208
247
  if (isCurrentVersion &&
209
248
  typeof sidebarFilePath === 'string' &&
210
- !fs_extra_1.default.existsSync(sidebarFilePath)) {
211
- throw new Error(`The path to the sidebar file does not exist at [${path_1.default.relative(siteDir, sidebarFilePath)}].
212
- Please set the docs [sidebarPath] field in your config file to:
249
+ !(await fs_extra_1.default.pathExists(sidebarFilePath))) {
250
+ throw new Error(`The path to the sidebar file does not exist at "${path_1.default.relative(siteDir, sidebarFilePath)}".
251
+ Please set the docs "sidebarPath" field in your config file to:
213
252
  - a sidebars path that exists
214
253
  - false: to disable the sidebar
215
- - undefined: for Docusaurus generates it automatically`);
254
+ - undefined: for Docusaurus to generate it automatically`);
216
255
  }
217
256
  }
218
257
  // TODO for retrocompatibility with existing behavior
@@ -222,59 +261,57 @@ function getDefaultLastVersionName(versionNames) {
222
261
  if (versionNames.length === 1) {
223
262
  return versionNames[0];
224
263
  }
225
- else {
226
- return versionNames.filter((versionName) => versionName !== constants_1.CURRENT_VERSION_NAME)[0];
227
- }
264
+ return versionNames.filter((versionName) => versionName !== constants_1.CURRENT_VERSION_NAME)[0];
228
265
  }
229
266
  function checkVersionsOptions(availableVersionNames, options) {
230
267
  const availableVersionNamesMsg = `Available version names are: ${availableVersionNames.join(', ')}`;
231
268
  if (options.lastVersion &&
232
269
  !availableVersionNames.includes(options.lastVersion)) {
233
- throw new Error(`Docs option lastVersion=${options.lastVersion} is invalid. ${availableVersionNamesMsg}`);
270
+ throw new Error(`Docs option lastVersion: ${options.lastVersion} is invalid. ${availableVersionNamesMsg}`);
234
271
  }
235
- const unknownVersionConfigNames = lodash_1.difference(Object.keys(options.versions), availableVersionNames);
272
+ const unknownVersionConfigNames = lodash_1.default.difference(Object.keys(options.versions), availableVersionNames);
236
273
  if (unknownVersionConfigNames.length > 0) {
237
- throw new Error(`Bad docs options.versions: unknown versions found: ${unknownVersionConfigNames.join(',')}. ${availableVersionNamesMsg}`);
274
+ throw new Error(`Invalid docs option "versions": unknown versions (${unknownVersionConfigNames.join(',')}) found. ${availableVersionNamesMsg}`);
238
275
  }
239
276
  if (options.onlyIncludeVersions) {
240
277
  if (options.onlyIncludeVersions.length === 0) {
241
- throw new Error(`Bad docs options.onlyIncludeVersions: an empty array is not allowed, at least one version is needed`);
278
+ throw new Error(`Invalid docs option "onlyIncludeVersions": an empty array is not allowed, at least one version is needed.`);
242
279
  }
243
- const unknownOnlyIncludeVersionNames = lodash_1.difference(options.onlyIncludeVersions, availableVersionNames);
280
+ const unknownOnlyIncludeVersionNames = lodash_1.default.difference(options.onlyIncludeVersions, availableVersionNames);
244
281
  if (unknownOnlyIncludeVersionNames.length > 0) {
245
- throw new Error(`Bad docs options.onlyIncludeVersions: unknown versions found: ${unknownOnlyIncludeVersionNames.join(',')}. ${availableVersionNamesMsg}`);
282
+ throw new Error(`Invalid docs option "onlyIncludeVersions": unknown versions (${unknownOnlyIncludeVersionNames.join(',')}) found. ${availableVersionNamesMsg}`);
246
283
  }
247
284
  if (options.lastVersion &&
248
285
  !options.onlyIncludeVersions.includes(options.lastVersion)) {
249
- throw new Error(`Bad docs options.lastVersion: if you use both the onlyIncludeVersions and lastVersion options, then lastVersion must be present in the provided onlyIncludeVersions array`);
286
+ throw new Error(`Invalid docs option "lastVersion": if you use both the "onlyIncludeVersions" and "lastVersion" options, then "lastVersion" must be present in the provided "onlyIncludeVersions" array.`);
250
287
  }
251
288
  }
252
289
  }
253
- // Filter versions according to provided options
254
- // Note: we preserve the order in which versions are provided
255
- // the order of the onlyIncludeVersions array does not matter
290
+ /**
291
+ * Filter versions according to provided options.
292
+ * Note: we preserve the order in which versions are provided;
293
+ * the order of the onlyIncludeVersions array does not matter
294
+ */
256
295
  function filterVersions(versionNamesUnfiltered, options) {
257
296
  if (options.onlyIncludeVersions) {
258
- return versionNamesUnfiltered.filter((name) => (options.onlyIncludeVersions || []).includes(name));
259
- }
260
- else {
261
- return versionNamesUnfiltered;
297
+ return versionNamesUnfiltered.filter((name) => options.onlyIncludeVersions.includes(name));
262
298
  }
299
+ return versionNamesUnfiltered;
263
300
  }
264
- // TODO make this async (requires plugin init to be async)
265
- function readVersionsMetadata({ context, options, }) {
266
- var _a;
267
- const versionNamesUnfiltered = readVersionNames(context.siteDir, options);
301
+ exports.filterVersions = filterVersions;
302
+ async function readVersionsMetadata({ context, options, }) {
303
+ const versionNamesUnfiltered = await readVersionNames(context.siteDir, options);
268
304
  checkVersionsOptions(versionNamesUnfiltered, options);
269
305
  const versionNames = filterVersions(versionNamesUnfiltered, options);
270
- const lastVersionName = (_a = options.lastVersion) !== null && _a !== void 0 ? _a : getDefaultLastVersionName(versionNames);
306
+ const lastVersionName = options.lastVersion ?? getDefaultLastVersionName(versionNames);
271
307
  const versionsMetadata = versionNames.map((versionName) => createVersionMetadata({
272
308
  versionName,
273
- isLast: versionName === lastVersionName,
309
+ versionNames,
310
+ lastVersionName,
274
311
  context,
275
312
  options,
276
313
  }));
277
- versionsMetadata.forEach((versionMetadata) => checkVersionMetadataPaths({ versionMetadata, context }));
314
+ await Promise.all(versionsMetadata.map((versionMetadata) => checkVersionMetadataPaths({ versionMetadata, context })));
278
315
  return versionsMetadata;
279
316
  }
280
317
  exports.readVersionsMetadata = readVersionsMetadata;
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@docusaurus/plugin-content-docs",
3
- "version": "2.0.0-beta.15d451942",
3
+ "version": "2.0.0-beta.18",
4
4
  "description": "Docs plugin for Docusaurus.",
5
5
  "main": "lib/index.js",
6
+ "exports": {
7
+ "./client": "./lib/client/index.js",
8
+ "./server": "./lib/server-export.js",
9
+ ".": "./lib/index.js"
10
+ },
6
11
  "types": "src/plugin-content-docs.d.ts",
7
12
  "scripts": {
8
13
  "build": "tsc",
@@ -17,40 +22,39 @@
17
22
  "directory": "packages/docusaurus-plugin-content-docs"
18
23
  },
19
24
  "license": "MIT",
20
- "devDependencies": {
21
- "@docusaurus/module-type-aliases": "2.0.0-beta.15d451942",
22
- "@types/js-yaml": "^4.0.0",
23
- "@types/picomatch": "^2.2.1",
24
- "commander": "^5.1.0",
25
- "picomatch": "^2.1.1"
26
- },
27
25
  "dependencies": {
28
- "@docusaurus/core": "2.0.0-beta.15d451942",
29
- "@docusaurus/mdx-loader": "2.0.0-beta.15d451942",
30
- "@docusaurus/types": "2.0.0-beta.15d451942",
31
- "@docusaurus/utils": "2.0.0-beta.15d451942",
32
- "@docusaurus/utils-validation": "2.0.0-beta.15d451942",
33
- "chalk": "^4.1.1",
26
+ "@docusaurus/core": "2.0.0-beta.18",
27
+ "@docusaurus/logger": "2.0.0-beta.18",
28
+ "@docusaurus/mdx-loader": "2.0.0-beta.18",
29
+ "@docusaurus/utils": "2.0.0-beta.18",
30
+ "@docusaurus/utils-validation": "2.0.0-beta.18",
34
31
  "combine-promises": "^1.1.0",
35
- "execa": "^5.0.0",
36
- "fs-extra": "^10.0.0",
37
- "globby": "^11.0.2",
38
- "import-fresh": "^3.2.2",
39
- "js-yaml": "^4.0.0",
40
- "loader-utils": "^1.2.3",
41
- "lodash": "^4.17.20",
32
+ "fs-extra": "^10.0.1",
33
+ "import-fresh": "^3.3.0",
34
+ "js-yaml": "^4.1.0",
35
+ "lodash": "^4.17.21",
42
36
  "remark-admonitions": "^1.2.1",
43
- "shelljs": "^0.8.4",
44
- "tslib": "^2.2.0",
37
+ "tslib": "^2.3.1",
45
38
  "utility-types": "^3.10.0",
46
- "webpack": "^5.37.0"
39
+ "webpack": "^5.70.0"
40
+ },
41
+ "devDependencies": {
42
+ "@docusaurus/module-type-aliases": "2.0.0-beta.18",
43
+ "@docusaurus/types": "2.0.0-beta.18",
44
+ "@types/js-yaml": "^4.0.5",
45
+ "@types/picomatch": "^2.3.0",
46
+ "commander": "^5.1.0",
47
+ "escape-string-regexp": "^4.0.0",
48
+ "picomatch": "^2.3.1",
49
+ "shelljs": "^0.8.5",
50
+ "utility-types": "^3.10.0"
47
51
  },
48
52
  "peerDependencies": {
49
53
  "react": "^16.8.4 || ^17.0.0",
50
54
  "react-dom": "^16.8.4 || ^17.0.0"
51
55
  },
52
56
  "engines": {
53
- "node": ">=12.13.0"
57
+ "node": ">=14"
54
58
  },
55
- "gitHead": "dfceae8bd3e8b42ba8fc14f1449d861046c26143"
59
+ "gitHead": "1a945d06993d53376e61bed2c942799fe07dc336"
56
60
  }
@@ -0,0 +1,55 @@
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
+
8
+ import type {CategoryGeneratedIndexMetadata, DocMetadataBase} from './types';
9
+ import type {SidebarItemCategoryWithGeneratedIndex} from './sidebars/types';
10
+ import {type SidebarsUtils, toNavigationLink} from './sidebars/utils';
11
+ import {createDocsByIdIndex} from './docs';
12
+
13
+ function getCategoryGeneratedIndexMetadata({
14
+ category,
15
+ sidebarsUtils,
16
+ docsById,
17
+ }: {
18
+ category: SidebarItemCategoryWithGeneratedIndex;
19
+ sidebarsUtils: SidebarsUtils;
20
+ docsById: {[docId: string]: DocMetadataBase};
21
+ }): CategoryGeneratedIndexMetadata {
22
+ const {sidebarName, previous, next} =
23
+ sidebarsUtils.getCategoryGeneratedIndexNavigation(category.link.permalink);
24
+ return {
25
+ title: category.link.title ?? category.label,
26
+ description: category.link.description,
27
+ image: category.link.image,
28
+ keywords: category.link.keywords,
29
+ slug: category.link.slug,
30
+ permalink: category.link.permalink,
31
+ sidebar: sidebarName!,
32
+ previous: toNavigationLink(previous, docsById),
33
+ next: toNavigationLink(next, docsById),
34
+ };
35
+ }
36
+
37
+ export function getCategoryGeneratedIndexMetadataList({
38
+ docs,
39
+ sidebarsUtils,
40
+ }: {
41
+ sidebarsUtils: SidebarsUtils;
42
+ docs: DocMetadataBase[];
43
+ }): CategoryGeneratedIndexMetadata[] {
44
+ const docsById = createDocsByIdIndex(docs);
45
+
46
+ const categoryGeneratedIndexItems =
47
+ sidebarsUtils.getCategoryGeneratedIndexList();
48
+ return categoryGeneratedIndexItems.map((category) =>
49
+ getCategoryGeneratedIndexMetadata({
50
+ category,
51
+ sidebarsUtils,
52
+ docsById,
53
+ }),
54
+ );
55
+ }