@docusaurus/plugin-content-docs 2.0.0-beta.138b4c997 → 2.0.0-beta.14

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 (201) hide show
  1. package/lib/categoryGeneratedIndex.d.ts +12 -0
  2. package/lib/categoryGeneratedIndex.js +37 -0
  3. package/lib/cli.d.ts +2 -2
  4. package/lib/cli.js +14 -35
  5. package/lib/client/docsClientUtils.d.ts +0 -3
  6. package/lib/client/docsClientUtils.js +19 -22
  7. package/lib/docFrontMatter.d.ts +1 -1
  8. package/lib/docFrontMatter.js +8 -4
  9. package/lib/docs.d.ts +25 -3
  10. package/lib/docs.js +126 -41
  11. package/lib/globalData.d.ts +1 -1
  12. package/lib/index.d.ts +1 -1
  13. package/lib/index.js +101 -133
  14. package/lib/lastUpdate.js +12 -12
  15. package/lib/markdown/index.d.ts +3 -6
  16. package/lib/markdown/index.js +3 -3
  17. package/lib/markdown/linkify.js +2 -2
  18. package/lib/numberPrefix.d.ts +1 -1
  19. package/lib/options.d.ts +3 -3
  20. package/lib/options.js +48 -11
  21. package/lib/props.d.ts +7 -2
  22. package/lib/props.js +60 -9
  23. package/lib/routes.d.ts +27 -0
  24. package/lib/routes.js +105 -0
  25. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +5 -2
  26. package/lib/sidebars/generator.js +216 -0
  27. package/lib/sidebars/index.d.ts +15 -0
  28. package/lib/sidebars/index.js +73 -0
  29. package/lib/sidebars/normalization.d.ts +14 -0
  30. package/lib/sidebars/normalization.js +77 -0
  31. package/lib/sidebars/processor.d.ts +18 -0
  32. package/lib/sidebars/processor.js +85 -0
  33. package/lib/sidebars/types.d.ts +127 -0
  34. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/sidebars/types.js} +2 -10
  35. package/lib/sidebars/utils.d.ts +35 -0
  36. package/lib/sidebars/utils.js +228 -0
  37. package/lib/sidebars/validation.d.ts +10 -0
  38. package/lib/sidebars/validation.js +138 -0
  39. package/lib/slug.d.ts +4 -3
  40. package/lib/slug.js +27 -15
  41. package/{src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js → lib/tags.d.ts} +2 -8
  42. package/lib/tags.js +20 -0
  43. package/lib/theme/hooks/useDocs.js +24 -21
  44. package/lib/translations.d.ts +2 -2
  45. package/lib/translations.js +71 -29
  46. package/lib/types.d.ts +52 -64
  47. package/lib/versions.d.ts +3 -3
  48. package/lib/versions.js +41 -22
  49. package/package.json +20 -20
  50. package/src/categoryGeneratedIndex.ts +57 -0
  51. package/src/cli.ts +10 -42
  52. package/src/client/docsClientUtils.ts +14 -26
  53. package/{types.d.ts → src/deps.d.ts} +0 -0
  54. package/src/docFrontMatter.ts +10 -5
  55. package/src/docs.ts +164 -36
  56. package/src/globalData.ts +6 -1
  57. package/src/index.ts +127 -177
  58. package/src/lastUpdate.ts +14 -16
  59. package/src/markdown/index.ts +8 -12
  60. package/src/numberPrefix.ts +5 -3
  61. package/src/options.ts +56 -15
  62. package/src/plugin-content-docs.d.ts +172 -43
  63. package/src/props.ts +90 -16
  64. package/src/routes.ts +169 -0
  65. package/src/sidebars/generator.ts +302 -0
  66. package/src/sidebars/index.ts +94 -0
  67. package/src/sidebars/normalization.ts +112 -0
  68. package/src/sidebars/processor.ts +154 -0
  69. package/src/sidebars/types.ts +211 -0
  70. package/src/sidebars/utils.ts +329 -0
  71. package/src/sidebars/validation.ts +168 -0
  72. package/src/slug.ts +32 -17
  73. package/src/tags.ts +19 -0
  74. package/src/theme/hooks/useDocs.ts +5 -1
  75. package/src/translations.ts +103 -47
  76. package/src/types.ts +64 -108
  77. package/src/versions.ts +59 -25
  78. package/lib/.tsbuildinfo +0 -1
  79. package/lib/sidebarItemsGenerator.js +0 -211
  80. package/lib/sidebars.d.ts +0 -43
  81. package/lib/sidebars.js +0 -320
  82. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  83. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  84. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  85. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  86. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  87. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  88. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  89. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  90. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  91. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  92. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  93. package/src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -20
  94. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  95. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  96. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  97. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  98. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  99. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  100. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  101. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  102. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  103. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  104. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  105. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  106. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  107. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  108. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  109. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  110. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  111. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  112. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  113. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  114. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  115. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  116. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  117. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  118. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  119. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  120. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  121. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  122. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  123. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  124. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  125. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  126. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  127. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  128. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  129. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  130. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  131. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  132. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  133. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  134. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js +0 -14
  135. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  136. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  137. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  138. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  139. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  140. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  141. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  142. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  143. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  144. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  145. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  146. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  147. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  148. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  149. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  150. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  151. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  152. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  153. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  154. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  155. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  156. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  157. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  158. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  159. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  160. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  161. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  162. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  163. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  164. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  165. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  166. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  167. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  168. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  169. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  170. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  171. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  172. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
  173. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1916
  174. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
  175. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
  176. package/src/__tests__/cli.test.ts +0 -333
  177. package/src/__tests__/docFrontMatter.test.ts +0 -244
  178. package/src/__tests__/docs.test.ts +0 -878
  179. package/src/__tests__/index.test.ts +0 -1871
  180. package/src/__tests__/lastUpdate.test.ts +0 -69
  181. package/src/__tests__/numberPrefix.test.ts +0 -199
  182. package/src/__tests__/options.test.ts +0 -231
  183. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  184. package/src/__tests__/sidebars.test.ts +0 -639
  185. package/src/__tests__/slug.test.ts +0 -109
  186. package/src/__tests__/translations.test.ts +0 -159
  187. package/src/__tests__/versions.test.ts +0 -741
  188. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  189. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  190. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  191. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  192. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  193. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  194. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  195. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  196. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  197. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  198. package/src/markdown/__tests__/linkify.test.ts +0 -190
  199. package/src/sidebarItemsGenerator.ts +0 -307
  200. package/src/sidebars.ts +0 -522
  201. package/tsconfig.json +0 -9
package/lib/versions.js CHANGED
@@ -8,16 +8,15 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.getDocsDirPaths = exports.readVersionsMetadata = exports.getVersionsFilePath = exports.getVersionedSidebarsDirPath = exports.getVersionedDocsDirPath = void 0;
10
10
  const tslib_1 = require("tslib");
11
- const path_1 = tslib_1.__importDefault(require("path"));
12
- const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
11
+ const path_1 = (0, tslib_1.__importDefault)(require("path"));
12
+ const fs_extra_1 = (0, 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
15
  const lodash_1 = require("lodash");
17
16
  const sidebars_1 = require("./sidebars");
18
17
  // retro-compatibility: no prefix for the default plugin id
19
18
  function addPluginIdPrefix(fileOrDir, pluginId) {
20
- if (pluginId === constants_2.DEFAULT_PLUGIN_ID) {
19
+ if (pluginId === utils_1.DEFAULT_PLUGIN_ID) {
21
20
  return fileOrDir;
22
21
  }
23
22
  else {
@@ -83,7 +82,7 @@ function readVersionNames(siteDir, options) {
83
82
  return versions;
84
83
  }
85
84
  function getDocsDirPathLocalized({ siteDir, locale, pluginId, versionName, }) {
86
- return utils_1.getPluginI18nPath({
85
+ return (0, utils_1.getPluginI18nPath)({
87
86
  siteDir,
88
87
  locale,
89
88
  pluginName: 'docusaurus-plugin-content-docs',
@@ -108,7 +107,7 @@ function getVersionMetadataPaths({ versionName, context, options, }) {
108
107
  });
109
108
  function getSidebarFilePath() {
110
109
  if (isCurrentVersion) {
111
- return sidebars_1.resolveSidebarPathOption(context.siteDir, options.sidebarPath);
110
+ return (0, sidebars_1.resolveSidebarPathOption)(context.siteDir, options.sidebarPath);
112
111
  }
113
112
  else {
114
113
  return path_1.default.join(getVersionedSidebarsDirPath(context.siteDir, options.id), `version-${versionName}-sidebars.json`);
@@ -138,10 +137,10 @@ function getVersionEditUrls({ contentPath, contentPathLocalized, context: { site
138
137
  pluginId: id,
139
138
  })
140
139
  : contentPathLocalized;
141
- const versionPathSegment = utils_1.posixPath(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPath)));
142
- const versionPathSegmentLocalized = utils_1.posixPath(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPathLocalized)));
143
- const versionEditUrl = utils_1.normalizeUrl([editUrl, versionPathSegment]);
144
- const versionEditUrlLocalized = utils_1.normalizeUrl([
140
+ const versionPathSegment = (0, utils_1.posixPath)(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPath)));
141
+ const versionPathSegmentLocalized = (0, utils_1.posixPath)(path_1.default.relative(siteDir, path_1.default.resolve(siteDir, editDirPathLocalized)));
142
+ const versionEditUrl = (0, utils_1.normalizeUrl)([editUrl, versionPathSegment]);
143
+ const versionEditUrlLocalized = (0, utils_1.normalizeUrl)([
145
144
  editUrl,
146
145
  versionPathSegmentLocalized,
147
146
  ]);
@@ -153,7 +152,7 @@ function getVersionEditUrls({ contentPath, contentPathLocalized, context: { site
153
152
  function getDefaultVersionBanner({ versionName, versionNames, lastVersionName, }) {
154
153
  // Current version: good, no banner
155
154
  if (versionName === lastVersionName) {
156
- return 'none';
155
+ return null;
157
156
  }
158
157
  // Upcoming versions: unreleased banner
159
158
  else if (versionNames.indexOf(versionName) < versionNames.indexOf(lastVersionName)) {
@@ -166,20 +165,34 @@ function getDefaultVersionBanner({ versionName, versionNames, lastVersionName, }
166
165
  }
167
166
  function getVersionBanner({ versionName, versionNames, lastVersionName, options, }) {
168
167
  var _a;
169
- const versionOptionBanner = (_a = options.versions[versionName]) === null || _a === void 0 ? void 0 : _a.banner;
170
- return (versionOptionBanner !== null && versionOptionBanner !== void 0 ? versionOptionBanner : getDefaultVersionBanner({
168
+ const versionBannerOption = (_a = options.versions[versionName]) === null || _a === void 0 ? void 0 : _a.banner;
169
+ if (versionBannerOption) {
170
+ return versionBannerOption === 'none' ? null : versionBannerOption;
171
+ }
172
+ return getDefaultVersionBanner({
171
173
  versionName,
172
174
  versionNames,
173
175
  lastVersionName,
174
- }));
176
+ });
177
+ }
178
+ function getVersionBadge({ versionName, versionNames, options, }) {
179
+ var _a;
180
+ const versionBadgeOption = (_a = options.versions[versionName]) === null || _a === void 0 ? void 0 : _a.badge;
181
+ // If site is not versioned or only one version is included
182
+ // we don't show the version badge by default
183
+ // See https://github.com/facebook/docusaurus/issues/3362
184
+ const versionBadgeDefault = versionNames.length !== 1;
185
+ return versionBadgeOption !== null && versionBadgeOption !== void 0 ? versionBadgeOption : versionBadgeDefault;
186
+ }
187
+ function getVersionClassName({ versionName, options, }) {
188
+ var _a;
189
+ const versionClassNameOption = (_a = options.versions[versionName]) === null || _a === void 0 ? void 0 : _a.className;
190
+ const versionClassNameDefault = `docs-version-${versionName}`;
191
+ return versionClassNameOption !== null && versionClassNameOption !== void 0 ? versionClassNameOption : versionClassNameDefault;
175
192
  }
176
193
  function createVersionMetadata({ versionName, versionNames, lastVersionName, context, options, }) {
177
194
  var _a, _b, _c;
178
- const { sidebarFilePath, contentPath, contentPathLocalized, } = getVersionMetadataPaths({
179
- versionName,
180
- context,
181
- options,
182
- });
195
+ const { sidebarFilePath, contentPath, contentPathLocalized } = getVersionMetadataPaths({ versionName, context, options });
183
196
  const isLast = versionName === lastVersionName;
184
197
  // retro-compatible values
185
198
  const defaultVersionLabel = versionName === constants_1.CURRENT_VERSION_NAME ? 'Next' : versionName;
@@ -193,7 +206,7 @@ function createVersionMetadata({ versionName, versionNames, lastVersionName, con
193
206
  const versionOptions = (_a = options.versions[versionName]) !== null && _a !== void 0 ? _a : {};
194
207
  const versionLabel = (_b = versionOptions.label) !== null && _b !== void 0 ? _b : defaultVersionLabel;
195
208
  const versionPathPart = (_c = versionOptions.path) !== null && _c !== void 0 ? _c : defaultVersionPathPart;
196
- const versionPath = utils_1.normalizeUrl([
209
+ const versionPath = (0, utils_1.normalizeUrl)([
197
210
  context.baseUrl,
198
211
  options.routeBasePath,
199
212
  versionPathPart,
@@ -206,10 +219,14 @@ function createVersionMetadata({ versionName, versionNames, lastVersionName, con
206
219
  });
207
220
  // Because /docs/:route` should always be after `/docs/versionName/:route`.
208
221
  const routePriority = versionPathPart === '' ? -1 : undefined;
222
+ // the path that will be used to refer the docs tags
223
+ // example below will be using /docs/tags
224
+ const tagsPath = (0, utils_1.normalizeUrl)([versionPath, options.tagsBasePath]);
209
225
  return {
210
226
  versionName,
211
227
  versionLabel,
212
228
  versionPath,
229
+ tagsPath,
213
230
  versionEditUrl: versionEditUrls === null || versionEditUrls === void 0 ? void 0 : versionEditUrls.versionEditUrl,
214
231
  versionEditUrlLocalized: versionEditUrls === null || versionEditUrls === void 0 ? void 0 : versionEditUrls.versionEditUrlLocalized,
215
232
  versionBanner: getVersionBanner({
@@ -218,6 +235,8 @@ function createVersionMetadata({ versionName, versionNames, lastVersionName, con
218
235
  lastVersionName,
219
236
  options,
220
237
  }),
238
+ versionBadge: getVersionBadge({ versionName, versionNames, options }),
239
+ versionClassName: getVersionClassName({ versionName, options }),
221
240
  isLast,
222
241
  routePriority,
223
242
  sidebarFilePath,
@@ -263,7 +282,7 @@ function checkVersionsOptions(availableVersionNames, options) {
263
282
  !availableVersionNames.includes(options.lastVersion)) {
264
283
  throw new Error(`Docs option lastVersion=${options.lastVersion} is invalid. ${availableVersionNamesMsg}`);
265
284
  }
266
- const unknownVersionConfigNames = lodash_1.difference(Object.keys(options.versions), availableVersionNames);
285
+ const unknownVersionConfigNames = (0, lodash_1.difference)(Object.keys(options.versions), availableVersionNames);
267
286
  if (unknownVersionConfigNames.length > 0) {
268
287
  throw new Error(`Invalid docs option "versions": unknown versions (${unknownVersionConfigNames.join(',')}) found. ${availableVersionNamesMsg}`);
269
288
  }
@@ -271,7 +290,7 @@ function checkVersionsOptions(availableVersionNames, options) {
271
290
  if (options.onlyIncludeVersions.length === 0) {
272
291
  throw new Error(`Invalid docs option "onlyIncludeVersions": an empty array is not allowed, at least one version is needed.`);
273
292
  }
274
- const unknownOnlyIncludeVersionNames = lodash_1.difference(options.onlyIncludeVersions, availableVersionNames);
293
+ const unknownOnlyIncludeVersionNames = (0, lodash_1.difference)(options.onlyIncludeVersions, availableVersionNames);
275
294
  if (unknownOnlyIncludeVersionNames.length > 0) {
276
295
  throw new Error(`Invalid docs option "onlyIncludeVersions": unknown versions (${unknownOnlyIncludeVersionNames.join(',')}) found. ${availableVersionNamesMsg}`);
277
296
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/plugin-content-docs",
3
- "version": "2.0.0-beta.138b4c997",
3
+ "version": "2.0.0-beta.14",
4
4
  "description": "Docs plugin for Docusaurus.",
5
5
  "main": "lib/index.js",
6
6
  "types": "src/plugin-content-docs.d.ts",
@@ -17,41 +17,41 @@
17
17
  "directory": "packages/docusaurus-plugin-content-docs"
18
18
  },
19
19
  "license": "MIT",
20
- "devDependencies": {
21
- "@docusaurus/module-type-aliases": "2.0.0-beta.138b4c997",
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
20
  "dependencies": {
28
- "@docusaurus/core": "2.0.0-beta.138b4c997",
29
- "@docusaurus/mdx-loader": "2.0.0-beta.138b4c997",
30
- "@docusaurus/types": "2.0.0-beta.138b4c997",
31
- "@docusaurus/utils": "2.0.0-beta.138b4c997",
32
- "@docusaurus/utils-validation": "2.0.0-beta.138b4c997",
33
- "chalk": "^4.1.1",
21
+ "@docusaurus/core": "2.0.0-beta.14",
22
+ "@docusaurus/logger": "2.0.0-beta.14",
23
+ "@docusaurus/mdx-loader": "2.0.0-beta.14",
24
+ "@docusaurus/utils": "2.0.0-beta.14",
25
+ "@docusaurus/utils-validation": "2.0.0-beta.14",
34
26
  "combine-promises": "^1.1.0",
35
27
  "escape-string-regexp": "^4.0.0",
36
- "execa": "^5.0.0",
37
28
  "fs-extra": "^10.0.0",
38
29
  "globby": "^11.0.2",
39
30
  "import-fresh": "^3.2.2",
40
31
  "js-yaml": "^4.0.0",
41
- "loader-utils": "^1.2.3",
32
+ "loader-utils": "^2.0.0",
42
33
  "lodash": "^4.17.20",
43
34
  "remark-admonitions": "^1.2.1",
44
35
  "shelljs": "^0.8.4",
45
- "tslib": "^2.2.0",
36
+ "tslib": "^2.3.1",
46
37
  "utility-types": "^3.10.0",
47
- "webpack": "^5.40.0"
38
+ "webpack": "^5.61.0"
39
+ },
40
+ "devDependencies": {
41
+ "@docusaurus/module-type-aliases": "2.0.0-beta.14",
42
+ "@docusaurus/types": "2.0.0-beta.14",
43
+ "@types/js-yaml": "^4.0.0",
44
+ "@types/picomatch": "^2.2.1",
45
+ "commander": "^5.1.0",
46
+ "picomatch": "^2.1.1",
47
+ "utility-types": "^3.10.0"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": "^16.8.4 || ^17.0.0",
51
51
  "react-dom": "^16.8.4 || ^17.0.0"
52
52
  },
53
53
  "engines": {
54
- "node": ">=12.13.0"
54
+ "node": ">=14"
55
55
  },
56
- "gitHead": "8cc620648710971acc459aabd2c6f505ef757701"
56
+ "gitHead": "c4824a8937d8f1aa0806667749cbc74058e2b294"
57
57
  }
@@ -0,0 +1,57 @@
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 {CategoryGeneratedIndexMetadata, DocMetadataBase} from './types';
9
+ import {SidebarItemCategoryWithGeneratedIndex} from './sidebars/types';
10
+ import {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: Record<string, DocMetadataBase>;
21
+ }): CategoryGeneratedIndexMetadata {
22
+ const {sidebarName, previous, next} =
23
+ sidebarsUtils.getCategoryGeneratedIndexNavigation(category.link.permalink);
24
+ if (!sidebarName) {
25
+ throw new Error('unexpected');
26
+ }
27
+
28
+ return {
29
+ title: category.link.title ?? category.label,
30
+ description: category.link.description,
31
+ slug: category.link.slug,
32
+ permalink: category.link.permalink,
33
+ sidebar: sidebarName,
34
+ previous: toNavigationLink(previous, docsById),
35
+ next: toNavigationLink(next, docsById),
36
+ };
37
+ }
38
+
39
+ export function getCategoryGeneratedIndexMetadataList({
40
+ docs,
41
+ sidebarsUtils,
42
+ }: {
43
+ sidebarsUtils: SidebarsUtils;
44
+ docs: DocMetadataBase[];
45
+ }): CategoryGeneratedIndexMetadata[] {
46
+ const docsById = createDocsByIdIndex(docs);
47
+
48
+ const categoryGeneratedIndexItems =
49
+ sidebarsUtils.getCategoryGeneratedIndexList();
50
+ return categoryGeneratedIndexItems.map((category) =>
51
+ getCategoryGeneratedIndexMetadata({
52
+ category,
53
+ sidebarsUtils,
54
+ docsById,
55
+ }),
56
+ );
57
+ }
package/src/cli.ts CHANGED
@@ -12,13 +12,10 @@ import {
12
12
  } from './versions';
13
13
  import fs from 'fs-extra';
14
14
  import path from 'path';
15
- import {
16
- PathOptions,
17
- UnprocessedSidebarItem,
18
- UnprocessedSidebars,
19
- } from './types';
20
- import {loadSidebars, resolveSidebarPathOption} from './sidebars';
21
- import {DEFAULT_PLUGIN_ID} from '@docusaurus/core/lib/constants';
15
+ import type {PathOptions, SidebarOptions} from './types';
16
+ import {loadSidebarsFile, resolveSidebarPathOption} from './sidebars';
17
+ import {DEFAULT_PLUGIN_ID} from '@docusaurus/utils';
18
+ import logger from '@docusaurus/logger';
22
19
 
23
20
  function createVersionedSidebarFile({
24
21
  siteDir,
@@ -32,41 +29,13 @@ function createVersionedSidebarFile({
32
29
  version: string;
33
30
  }) {
34
31
  // Load current sidebar and create a new versioned sidebars file (if needed).
35
- const loadedSidebars = loadSidebars(sidebarPath);
32
+ // Note: we don't need the sidebars file to be normalized: it's ok to let plugin option changes to impact older, versioned sidebars
33
+ const sidebars = loadSidebarsFile(sidebarPath);
36
34
 
37
35
  // Do not create a useless versioned sidebars file if sidebars file is empty or sidebars are disabled/false)
38
- const shouldCreateVersionedSidebarFile =
39
- Object.keys(loadedSidebars).length > 0;
36
+ const shouldCreateVersionedSidebarFile = Object.keys(sidebars).length > 0;
40
37
 
41
38
  if (shouldCreateVersionedSidebarFile) {
42
- // TODO @slorber: this "version prefix" in versioned sidebars looks like a bad idea to me
43
- // TODO try to get rid of it
44
- // Transform id in original sidebar to versioned id.
45
- const normalizeItem = (
46
- item: UnprocessedSidebarItem,
47
- ): UnprocessedSidebarItem => {
48
- switch (item.type) {
49
- case 'category':
50
- return {...item, items: item.items.map(normalizeItem)};
51
- case 'ref':
52
- case 'doc':
53
- return {
54
- type: item.type,
55
- id: `version-${version}/${item.id}`,
56
- };
57
- default:
58
- return item;
59
- }
60
- };
61
-
62
- const versionedSidebar: UnprocessedSidebars = Object.entries(
63
- loadedSidebars,
64
- ).reduce((acc: UnprocessedSidebars, [sidebarId, sidebarItems]) => {
65
- const newVersionedSidebarId = `version-${version}/${sidebarId}`;
66
- acc[newVersionedSidebarId] = sidebarItems.map(normalizeItem);
67
- return acc;
68
- }, {});
69
-
70
39
  const versionedSidebarsDir = getVersionedSidebarsDirPath(siteDir, pluginId);
71
40
  const newSidebarFile = path.join(
72
41
  versionedSidebarsDir,
@@ -75,19 +44,18 @@ function createVersionedSidebarFile({
75
44
  fs.ensureDirSync(path.dirname(newSidebarFile));
76
45
  fs.writeFileSync(
77
46
  newSidebarFile,
78
- `${JSON.stringify(versionedSidebar, null, 2)}\n`,
47
+ `${JSON.stringify(sidebars, null, 2)}\n`,
79
48
  'utf8',
80
49
  );
81
50
  }
82
51
  }
83
52
 
84
53
  // Tests depend on non-default export for mocking.
85
- // eslint-disable-next-line import/prefer-default-export
86
54
  export function cliDocsVersionCommand(
87
55
  version: string | null | undefined,
88
56
  siteDir: string,
89
57
  pluginId: string,
90
- options: PathOptions,
58
+ options: PathOptions & SidebarOptions,
91
59
  ): void {
92
60
  // It wouldn't be very user-friendly to show a [default] log prefix,
93
61
  // so we use [docs] instead of [default]
@@ -166,5 +134,5 @@ export function cliDocsVersionCommand(
166
134
  fs.ensureDirSync(path.dirname(versionsJSONFile));
167
135
  fs.writeFileSync(versionsJSONFile, `${JSON.stringify(versions, null, 2)}\n`);
168
136
 
169
- console.log(`${pluginIdLogPrefix}: version ${version} created!`);
137
+ logger.success`name=${pluginIdLogPrefix}: version name=${version} created!`;
170
138
  }
@@ -20,35 +20,23 @@ export type ActivePlugin = {
20
20
  pluginData: GlobalPluginData;
21
21
  };
22
22
 
23
- export type GetActivePluginOptions = {failfast?: boolean};
23
+ export type GetActivePluginOptions = {failfast?: boolean}; // use fail-fast option if you know for sure one plugin instance is active
24
24
 
25
25
  // get the data of the plugin that is currently "active"
26
26
  // ie the docs of that plugin are currently browsed
27
27
  // it is useful to support multiple docs plugin instances
28
- export function getActivePlugin(
29
- allPluginDatas: Record<string, GlobalPluginData>,
30
- pathname: string,
31
- options: {failfast: true}, // use fail-fast option if you know for sure one plugin instance is active
32
- ): ActivePlugin;
33
- export function getActivePlugin(
34
- allPluginDatas: Record<string, GlobalPluginData>,
35
- pathname: string,
36
- options?: GetActivePluginOptions,
37
- ): ActivePlugin | undefined;
38
-
39
28
  export function getActivePlugin(
40
29
  allPluginDatas: Record<string, GlobalPluginData>,
41
30
  pathname: string,
42
31
  options: GetActivePluginOptions = {},
43
32
  ): ActivePlugin | undefined {
44
33
  const activeEntry = Object.entries(allPluginDatas).find(
45
- ([_id, pluginData]) => {
46
- return !!matchPath(pathname, {
34
+ ([_id, pluginData]) =>
35
+ !!matchPath(pathname, {
47
36
  path: pluginData.path,
48
37
  exact: false,
49
38
  strict: false,
50
- });
51
- },
39
+ }),
52
40
  );
53
41
 
54
42
  const activePlugin: ActivePlugin | undefined = activeEntry
@@ -74,9 +62,8 @@ export type ActiveDocContext = {
74
62
  alternateDocVersions: Record<string, Doc>;
75
63
  };
76
64
 
77
- export const getLatestVersion = (data: GlobalPluginData): Version => {
78
- return data.versions.find((version) => version.isLast)!;
79
- };
65
+ export const getLatestVersion = (data: GlobalPluginData): Version =>
66
+ data.versions.find((version) => version.isLast)!;
80
67
 
81
68
  // Note: return undefined on doc-unrelated pages,
82
69
  // because there's no version currently considered as active
@@ -91,13 +78,14 @@ export const getActiveVersion = (
91
78
  ...data.versions.filter((version) => version !== lastVersion),
92
79
  lastVersion,
93
80
  ];
94
- return orderedVersionsMetadata.find((version) => {
95
- return !!matchPath(pathname, {
96
- path: version.path,
97
- exact: false,
98
- strict: false,
99
- });
100
- });
81
+ return orderedVersionsMetadata.find(
82
+ (version) =>
83
+ !!matchPath(pathname, {
84
+ path: version.path,
85
+ exact: false,
86
+ strict: false,
87
+ }),
88
+ );
101
89
  };
102
90
 
103
91
  export const getActiveDocContext = (
File without changes
@@ -5,17 +5,17 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- /* eslint-disable camelcase */
9
-
10
8
  import {
11
9
  JoiFrontMatter as Joi, // Custom instance for frontmatter
12
10
  URISchema,
11
+ FrontMatterTagsSchema,
12
+ FrontMatterTOCHeadingLevels,
13
13
  validateFrontMatter,
14
14
  } from '@docusaurus/utils-validation';
15
- import {DocFrontMatter} from './types';
15
+ import type {DocFrontMatter} from './types';
16
16
 
17
17
  // NOTE: we don't add any default value on purpose here
18
- // We don't want default values to magically appear in doc metadatas and props
18
+ // We don't want default values to magically appear in doc metadata and props
19
19
  // While the user did not provide those values explicitly
20
20
  // We use default values in code instead
21
21
  const DocFrontMatterSchema = Joi.object<DocFrontMatter>({
@@ -28,10 +28,15 @@ const DocFrontMatterSchema = Joi.object<DocFrontMatter>({
28
28
  description: Joi.string().allow(''), // see https://github.com/facebook/docusaurus/issues/4591#issuecomment-822372398
29
29
  slug: Joi.string(),
30
30
  sidebar_label: Joi.string(),
31
- sidebar_position: Joi.number().min(0),
31
+ sidebar_position: Joi.number(),
32
+ sidebar_class_name: Joi.string(),
33
+ tags: FrontMatterTagsSchema,
32
34
  pagination_label: Joi.string(),
33
35
  custom_edit_url: URISchema.allow('', null),
34
36
  parse_number_prefixes: Joi.boolean(),
37
+ pagination_next: Joi.string().allow(null),
38
+ pagination_prev: Joi.string().allow(null),
39
+ ...FrontMatterTOCHeadingLevels,
35
40
  }).unknown();
36
41
 
37
42
  export function validateDocFrontMatter(