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

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 +39 -0
  3. package/lib/cli.d.ts +2 -2
  4. package/lib/cli.js +40 -52
  5. package/lib/client/docsClientUtils.d.ts +3 -25
  6. package/lib/client/docsClientUtils.js +27 -33
  7. package/lib/{theme/hooks/useDocs.d.ts → client/index.d.ts} +1 -2
  8. package/lib/client/index.js +75 -0
  9. package/lib/docFrontMatter.d.ts +1 -14
  10. package/lib/docFrontMatter.js +13 -6
  11. package/lib/docs.d.ts +40 -4
  12. package/lib/docs.js +170 -54
  13. package/lib/globalData.d.ts +5 -1
  14. package/lib/globalData.js +35 -2
  15. package/lib/index.d.ts +4 -3
  16. package/lib/index.js +124 -136
  17. package/lib/lastUpdate.js +16 -29
  18. package/lib/markdown/index.d.ts +3 -6
  19. package/lib/markdown/index.js +3 -3
  20. package/lib/markdown/linkify.d.ts +1 -1
  21. package/lib/markdown/linkify.js +3 -3
  22. package/lib/numberPrefix.d.ts +1 -1
  23. package/lib/numberPrefix.js +7 -6
  24. package/lib/options.d.ts +3 -3
  25. package/lib/options.js +52 -17
  26. package/lib/props.d.ts +7 -2
  27. package/lib/props.js +71 -14
  28. package/lib/routes.d.ts +28 -0
  29. package/lib/routes.js +110 -0
  30. package/lib/server-export.d.ts +8 -0
  31. package/lib/server-export.js +23 -0
  32. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -6
  33. package/lib/sidebars/generator.js +190 -0
  34. package/lib/sidebars/index.d.ts +13 -0
  35. package/lib/sidebars/index.js +88 -0
  36. package/lib/sidebars/normalization.d.ts +13 -0
  37. package/lib/sidebars/normalization.js +55 -0
  38. package/lib/sidebars/postProcessor.d.ts +8 -0
  39. package/lib/sidebars/postProcessor.js +72 -0
  40. package/lib/sidebars/processor.d.ts +8 -0
  41. package/lib/sidebars/processor.js +79 -0
  42. package/lib/sidebars/types.d.ts +166 -0
  43. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/sidebars/types.js} +2 -10
  44. package/lib/sidebars/utils.d.ts +43 -0
  45. package/lib/sidebars/utils.js +265 -0
  46. package/lib/sidebars/validation.d.ts +9 -0
  47. package/lib/sidebars/validation.js +137 -0
  48. package/lib/slug.d.ts +6 -4
  49. package/lib/slug.js +29 -18
  50. package/{src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js → lib/tags.d.ts} +2 -8
  51. package/lib/tags.js +21 -0
  52. package/lib/translations.d.ts +2 -2
  53. package/lib/translations.js +87 -44
  54. package/lib/types.d.ts +55 -128
  55. package/lib/versions.d.ts +29 -4
  56. package/lib/versions.js +131 -89
  57. package/package.json +30 -26
  58. package/src/categoryGeneratedIndex.ts +59 -0
  59. package/src/cli.ts +48 -62
  60. package/src/client/docsClientUtils.ts +36 -71
  61. package/src/{theme/hooks/useDocs.ts → client/index.ts} +15 -10
  62. package/{types.d.ts → src/deps.d.ts} +0 -0
  63. package/src/docFrontMatter.ts +17 -22
  64. package/src/docs.ts +229 -45
  65. package/src/globalData.ts +53 -2
  66. package/src/index.ts +168 -177
  67. package/src/lastUpdate.ts +14 -33
  68. package/src/markdown/index.ts +9 -13
  69. package/src/markdown/linkify.ts +2 -2
  70. package/src/numberPrefix.ts +11 -8
  71. package/src/options.ts +59 -29
  72. package/src/plugin-content-docs.d.ts +256 -40
  73. package/src/props.ts +105 -21
  74. package/src/routes.ts +185 -0
  75. package/src/server-export.ts +24 -0
  76. package/src/sidebars/README.md +9 -0
  77. package/src/sidebars/generator.ts +263 -0
  78. package/src/sidebars/index.ts +113 -0
  79. package/src/sidebars/normalization.ts +85 -0
  80. package/src/sidebars/postProcessor.ts +94 -0
  81. package/src/sidebars/processor.ts +126 -0
  82. package/src/sidebars/types.ts +273 -0
  83. package/src/sidebars/utils.ts +392 -0
  84. package/src/sidebars/validation.ts +173 -0
  85. package/src/slug.ts +40 -22
  86. package/src/tags.ts +19 -0
  87. package/src/translations.ts +121 -62
  88. package/src/types.ts +62 -183
  89. package/src/versions.ts +202 -107
  90. package/lib/.tsbuildinfo +0 -4717
  91. package/lib/sidebarItemsGenerator.js +0 -211
  92. package/lib/sidebars.d.ts +0 -42
  93. package/lib/sidebars.js +0 -309
  94. package/lib/theme/hooks/useDocs.js +0 -72
  95. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  96. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  97. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  98. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  99. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  100. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  101. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  102. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  103. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  104. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  105. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  106. package/src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -20
  107. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  108. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  109. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  110. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  111. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  112. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  113. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  114. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -67
  115. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  116. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -52
  117. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  118. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  119. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  120. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  121. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  122. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  123. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  124. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  125. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  126. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  127. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  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/docusaurus.config.js +0 -14
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  149. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  150. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  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/index.js CHANGED
@@ -8,38 +8,34 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.validateOptions = void 0;
10
10
  const tslib_1 = require("tslib");
11
- const path_1 = tslib_1.__importDefault(require("path"));
12
- const constants_1 = require("@docusaurus/core/lib/constants");
11
+ const path_1 = (0, tslib_1.__importDefault)(require("path"));
13
12
  const utils_1 = require("@docusaurus/utils");
14
13
  const sidebars_1 = require("./sidebars");
14
+ const generator_1 = require("./sidebars/generator");
15
15
  const docs_1 = require("./docs");
16
16
  const versions_1 = require("./versions");
17
17
  const cli_1 = require("./cli");
18
- const constants_2 = require("./constants");
19
- const lodash_1 = require("lodash");
18
+ const constants_1 = require("./constants");
20
19
  const globalData_1 = require("./globalData");
21
20
  const props_1 = require("./props");
22
21
  const translations_1 = require("./translations");
23
- const sidebarItemsGenerator_1 = require("./sidebarItemsGenerator");
24
- function pluginContentDocs(context, options) {
22
+ const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
23
+ const tags_1 = require("./tags");
24
+ const routes_1 = require("./routes");
25
+ const utils_2 = require("./sidebars/utils");
26
+ const categoryGeneratedIndex_1 = require("./categoryGeneratedIndex");
27
+ async function pluginContentDocs(context, options) {
25
28
  var _a;
26
29
  const { siteDir, generatedFilesDir, baseUrl, siteConfig } = context;
27
- const versionsMetadata = versions_1.readVersionsMetadata({ context, options });
28
- const sourceToPermalink = {};
29
- const pluginId = (_a = options.id) !== null && _a !== void 0 ? _a : constants_1.DEFAULT_PLUGIN_ID;
30
+ const versionsMetadata = await (0, versions_1.readVersionsMetadata)({ context, options });
31
+ const pluginId = (_a = options.id) !== null && _a !== void 0 ? _a : utils_1.DEFAULT_PLUGIN_ID;
30
32
  const pluginDataDirRoot = path_1.default.join(generatedFilesDir, 'docusaurus-plugin-content-docs');
31
33
  const dataDir = path_1.default.join(pluginDataDirRoot, pluginId);
32
- const aliasedSource = (source) => `~docs/${utils_1.posixPath(path_1.default.relative(pluginDataDirRoot, source))}`;
34
+ const aliasedSource = (source) => `~docs/${(0, utils_1.posixPath)(path_1.default.relative(pluginDataDirRoot, source))}`;
33
35
  return {
34
36
  name: 'docusaurus-plugin-content-docs',
35
- getThemePath() {
36
- return path_1.default.resolve(__dirname, './theme');
37
- },
38
- getTypeScriptThemePath() {
39
- return path_1.default.resolve(__dirname, '..', 'src', 'theme');
40
- },
41
37
  extendCli(cli) {
42
- const isDefaultPluginId = pluginId === constants_1.DEFAULT_PLUGIN_ID;
38
+ const isDefaultPluginId = pluginId === utils_1.DEFAULT_PLUGIN_ID;
43
39
  // Need to create one distinct command per plugin instance
44
40
  // otherwise 2 instances would try to execute the command!
45
41
  const command = isDefaultPluginId
@@ -53,43 +49,38 @@ function pluginContentDocs(context, options) {
53
49
  .arguments('<version>')
54
50
  .description(commandDescription)
55
51
  .action((version) => {
56
- cli_1.cliDocsVersionCommand(version, siteDir, pluginId, {
52
+ (0, cli_1.cliDocsVersionCommand)(version, siteDir, pluginId, {
57
53
  path: options.path,
58
54
  sidebarPath: options.sidebarPath,
55
+ sidebarCollapsed: options.sidebarCollapsed,
56
+ sidebarCollapsible: options.sidebarCollapsible,
59
57
  });
60
58
  });
61
59
  },
62
60
  async getTranslationFiles({ content }) {
63
- return translations_1.getLoadedContentTranslationFiles(content);
64
- },
65
- getClientModules() {
66
- const modules = [];
67
- if (options.admonitions) {
68
- modules.push(require.resolve('remark-admonitions/styles/infima.css'));
69
- }
70
- return modules;
61
+ return (0, translations_1.getLoadedContentTranslationFiles)(content);
71
62
  },
72
63
  getPathsToWatch() {
73
64
  function getVersionPathsToWatch(version) {
74
65
  const result = [
75
- ...lodash_1.flatten(options.include.map((pattern) => versions_1.getDocsDirPaths(version).map((docsDirPath) => `${docsDirPath}/${pattern}`))),
76
- `${version.contentPath}/**/${sidebarItemsGenerator_1.CategoryMetadataFilenamePattern}`,
66
+ ...options.include.flatMap((pattern) => (0, versions_1.getDocsDirPaths)(version).map((docsDirPath) => `${docsDirPath}/${pattern}`)),
67
+ `${version.contentPath}/**/${generator_1.CategoryMetadataFilenamePattern}`,
77
68
  ];
78
69
  if (typeof version.sidebarFilePath === 'string') {
79
70
  result.unshift(version.sidebarFilePath);
80
71
  }
81
72
  return result;
82
73
  }
83
- return lodash_1.flatten(versionsMetadata.map(getVersionPathsToWatch));
74
+ return versionsMetadata.flatMap(getVersionPathsToWatch);
84
75
  },
85
76
  async loadContent() {
86
77
  async function loadVersionDocsBase(versionMetadata) {
87
- const docFiles = await docs_1.readVersionDocs(versionMetadata, options);
78
+ const docFiles = await (0, docs_1.readVersionDocs)(versionMetadata, options);
88
79
  if (docFiles.length === 0) {
89
- throw new Error(`Docs version ${versionMetadata.versionName} has no docs! At least one doc should exist at path=[${path_1.default.relative(siteDir, versionMetadata.contentPath)}]`);
80
+ throw new Error(`Docs version "${versionMetadata.versionName}" has no docs! At least one doc should exist at "${path_1.default.relative(siteDir, versionMetadata.contentPath)}".`);
90
81
  }
91
82
  async function processVersionDoc(docFile) {
92
- return docs_1.processDocMetadata({
83
+ return (0, docs_1.processDocMetadata)({
93
84
  docFile,
94
85
  versionMetadata,
95
86
  context,
@@ -98,146 +89,136 @@ function pluginContentDocs(context, options) {
98
89
  }
99
90
  return Promise.all(docFiles.map(processVersionDoc));
100
91
  }
101
- async function loadVersion(versionMetadata) {
102
- const unprocessedSidebars = sidebars_1.loadSidebars(versionMetadata.sidebarFilePath);
103
- const docsBase = await loadVersionDocsBase(versionMetadata);
104
- const docsBaseById = lodash_1.keyBy(docsBase, (doc) => doc.id);
105
- const sidebars = await sidebars_1.processSidebars({
92
+ async function doLoadVersion(versionMetadata) {
93
+ const docs = await loadVersionDocsBase(versionMetadata);
94
+ const sidebars = await (0, sidebars_1.loadSidebars)(versionMetadata.sidebarFilePath, {
106
95
  sidebarItemsGenerator: options.sidebarItemsGenerator,
107
96
  numberPrefixParser: options.numberPrefixParser,
108
- unprocessedSidebars,
109
- docs: docsBase,
97
+ docs,
110
98
  version: versionMetadata,
99
+ sidebarOptions: {
100
+ sidebarCollapsed: options.sidebarCollapsed,
101
+ sidebarCollapsible: options.sidebarCollapsible,
102
+ },
103
+ categoryLabelSlugger: (0, utils_1.createSlugger)(),
111
104
  });
112
- const sidebarsUtils = sidebars_1.createSidebarsUtils(sidebars);
113
- const validDocIds = Object.keys(docsBaseById);
114
- sidebarsUtils.checkSidebarsDocIds(validDocIds);
115
- // Add sidebar/next/previous to the docs
116
- function addNavData(doc) {
117
- const { sidebarName, previousId, nextId, } = sidebarsUtils.getDocNavigation(doc.id);
118
- const toDocNavLink = (navDocId) => ({
119
- title: docsBaseById[navDocId].title,
120
- permalink: docsBaseById[navDocId].permalink,
121
- });
122
- return {
123
- ...doc,
124
- sidebar: sidebarName,
125
- previous: previousId ? toDocNavLink(previousId) : undefined,
126
- next: nextId ? toDocNavLink(nextId) : undefined,
127
- };
128
- }
129
- const docs = docsBase.map(addNavData);
130
- // sort to ensure consistent output for tests
131
- docs.sort((a, b) => a.id.localeCompare(b.id));
132
- // TODO annoying side effect!
133
- Object.values(docs).forEach((loadedDoc) => {
134
- const { source, permalink } = loadedDoc;
135
- sourceToPermalink[source] = permalink;
136
- });
137
- // TODO really useful? replace with global state logic?
138
- const permalinkToSidebar = {};
139
- Object.values(docs).forEach((doc) => {
140
- if (doc.sidebar) {
141
- permalinkToSidebar[doc.permalink] = doc.sidebar;
142
- }
143
- });
144
- // The "main doc" is the "version entry point"
145
- // We browse this doc by clicking on a version:
146
- // - the "home" doc (at '/docs/')
147
- // - the first doc of the first sidebar
148
- // - a random doc (if no docs are in any sidebar... edge case)
149
- function getMainDoc() {
150
- const versionHomeDoc = docs.find((doc) => doc.unversionedId === options.homePageId || doc.slug === '/');
151
- const firstDocIdOfFirstSidebar = sidebarsUtils.getFirstDocIdOfFirstSidebar();
152
- if (versionHomeDoc) {
153
- return versionHomeDoc;
154
- }
155
- else if (firstDocIdOfFirstSidebar) {
156
- return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar);
157
- }
158
- else {
159
- return docs[0];
160
- }
161
- }
105
+ const sidebarsUtils = (0, utils_2.createSidebarsUtils)(sidebars);
162
106
  return {
163
107
  ...versionMetadata,
164
- mainDocId: getMainDoc().unversionedId,
108
+ docs: (0, docs_1.addDocNavigation)(docs, sidebarsUtils, versionMetadata.sidebarFilePath),
165
109
  sidebars,
166
- permalinkToSidebar,
167
- docs: docs.map(addNavData),
110
+ mainDocId: (0, docs_1.getMainDocId)({ docs, sidebarsUtils }),
111
+ categoryGeneratedIndices: (0, categoryGeneratedIndex_1.getCategoryGeneratedIndexMetadataList)({
112
+ docs,
113
+ sidebarsUtils,
114
+ }),
168
115
  };
169
116
  }
117
+ async function loadVersion(versionMetadata) {
118
+ try {
119
+ return await doLoadVersion(versionMetadata);
120
+ }
121
+ catch (err) {
122
+ logger_1.default.error `Loading of version failed for version name=${versionMetadata.versionName}`;
123
+ throw err;
124
+ }
125
+ }
170
126
  return {
171
127
  loadedVersions: await Promise.all(versionsMetadata.map(loadVersion)),
172
128
  };
173
129
  },
174
130
  translateContent({ content, translationFiles }) {
175
- return translations_1.translateLoadedContent(content, translationFiles);
131
+ return (0, translations_1.translateLoadedContent)(content, translationFiles);
176
132
  },
177
133
  async contentLoaded({ content, actions }) {
178
134
  const { loadedVersions } = content;
179
- const { docLayoutComponent, docItemComponent } = options;
135
+ const { docLayoutComponent, docItemComponent, docCategoryGeneratedIndexComponent, breadcrumbs, } = options;
180
136
  const { addRoute, createData, setGlobalData } = actions;
181
- const createDocRoutes = async (docs) => {
182
- const routes = await Promise.all(docs.map(async (metadataItem) => {
183
- await createData(
184
- // Note that this created data path must be in sync with
185
- // metadataPath provided to mdx-loader.
186
- `${utils_1.docuHash(metadataItem.source)}.json`, JSON.stringify(metadataItem, null, 2));
187
- return {
188
- path: metadataItem.permalink,
189
- component: docItemComponent,
137
+ async function createVersionTagsRoutes(version) {
138
+ const versionTags = (0, tags_1.getVersionTags)(version.docs);
139
+ // TODO tags should be a sub route of the version route
140
+ async function createTagsListPage() {
141
+ const tagsProp = Object.values(versionTags).map((tagValue) => ({
142
+ name: tagValue.name,
143
+ permalink: tagValue.permalink,
144
+ count: tagValue.docIds.length,
145
+ }));
146
+ // Only create /tags page if there are tags.
147
+ if (Object.keys(tagsProp).length > 0) {
148
+ const tagsPropPath = await createData(`${(0, utils_1.docuHash)(`tags-list-${version.versionName}-prop`)}.json`, JSON.stringify(tagsProp, null, 2));
149
+ addRoute({
150
+ path: version.tagsPath,
151
+ exact: true,
152
+ component: options.docTagsListComponent,
153
+ modules: {
154
+ tags: aliasedSource(tagsPropPath),
155
+ },
156
+ });
157
+ }
158
+ }
159
+ // TODO tags should be a sub route of the version route
160
+ async function createTagDocListPage(tag) {
161
+ const tagProps = (0, props_1.toTagDocListProp)({
162
+ allTagsPath: version.tagsPath,
163
+ tag,
164
+ docs: version.docs,
165
+ });
166
+ const tagPropPath = await createData(`${(0, utils_1.docuHash)(`tag-${tag.permalink}`)}.json`, JSON.stringify(tagProps, null, 2));
167
+ addRoute({
168
+ path: tag.permalink,
169
+ component: options.docTagDocListComponent,
190
170
  exact: true,
191
171
  modules: {
192
- content: metadataItem.source,
172
+ tag: aliasedSource(tagPropPath),
193
173
  },
194
- };
195
- }));
196
- return routes.sort((a, b) => a.path.localeCompare(b.path));
197
- };
198
- async function handleVersion(loadedVersion) {
199
- const versionMetadataPropPath = await createData(`${utils_1.docuHash(`version-${loadedVersion.versionName}-metadata-prop`)}.json`, JSON.stringify(props_1.toVersionMetadataProp(pluginId, loadedVersion), null, 2));
200
- addRoute({
201
- path: loadedVersion.versionPath,
202
- // allow matching /docs/* as well
203
- exact: false,
204
- // main docs component (DocPage)
205
- component: docLayoutComponent,
206
- // sub-routes for each doc
207
- routes: await createDocRoutes(loadedVersion.docs),
208
- modules: {
209
- versionMetadata: aliasedSource(versionMetadataPropPath),
210
- },
211
- priority: loadedVersion.routePriority,
212
- });
174
+ });
175
+ }
176
+ await createTagsListPage();
177
+ await Promise.all(Object.values(versionTags).map(createTagDocListPage));
213
178
  }
214
- await Promise.all(loadedVersions.map(handleVersion));
179
+ await Promise.all(loadedVersions.map((loadedVersion) => (0, routes_1.createVersionRoutes)({
180
+ loadedVersion,
181
+ docItemComponent,
182
+ docLayoutComponent,
183
+ docCategoryGeneratedIndexComponent,
184
+ pluginId,
185
+ aliasedSource,
186
+ actions,
187
+ })));
188
+ // TODO tags should be a sub route of the version route
189
+ await Promise.all(loadedVersions.map(createVersionTagsRoutes));
215
190
  setGlobalData({
216
- path: utils_1.normalizeUrl([baseUrl, options.routeBasePath]),
191
+ path: (0, utils_1.normalizeUrl)([baseUrl, options.routeBasePath]),
217
192
  versions: loadedVersions.map(globalData_1.toGlobalDataVersion),
193
+ breadcrumbs,
218
194
  });
219
195
  },
220
- configureWebpack(_config, isServer, utils) {
196
+ configureWebpack(_config, isServer, utils, content) {
221
197
  const { getJSLoader } = utils;
222
198
  const { rehypePlugins, remarkPlugins, beforeDefaultRehypePlugins, beforeDefaultRemarkPlugins, } = options;
199
+ function getSourceToPermalink() {
200
+ const allDocs = content.loadedVersions.flatMap((v) => v.docs);
201
+ return Object.fromEntries(allDocs.map(({ source, permalink }) => [source, permalink]));
202
+ }
223
203
  const docsMarkdownOptions = {
224
204
  siteDir,
225
- sourceToPermalink,
205
+ sourceToPermalink: getSourceToPermalink(),
226
206
  versionsMetadata,
227
207
  onBrokenMarkdownLink: (brokenMarkdownLink) => {
228
208
  if (siteConfig.onBrokenMarkdownLinks === 'ignore') {
229
209
  return;
230
210
  }
231
- utils_1.reportMessage(`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`, siteConfig.onBrokenMarkdownLinks);
211
+ (0, utils_1.reportMessage)(`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`, siteConfig.onBrokenMarkdownLinks);
232
212
  },
233
213
  };
234
214
  function createMDXLoaderRule() {
215
+ const contentDirs = versionsMetadata.flatMap(versions_1.getDocsDirPaths);
235
216
  return {
236
- test: /(\.mdx?)$/,
237
- include: lodash_1.flatten(versionsMetadata.map(versions_1.getDocsDirPaths))
217
+ test: /\.mdx?$/i,
218
+ include: contentDirs
238
219
  // Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
239
220
  .map(utils_1.addTrailingPathSeparator),
240
- use: lodash_1.compact([
221
+ use: [
241
222
  getJSLoader({ isServer }),
242
223
  {
243
224
  loader: require.resolve('@docusaurus/mdx-loader'),
@@ -246,27 +227,34 @@ function pluginContentDocs(context, options) {
246
227
  rehypePlugins,
247
228
  beforeDefaultRehypePlugins,
248
229
  beforeDefaultRemarkPlugins,
249
- staticDir: path_1.default.join(siteDir, constants_1.STATIC_DIR_NAME),
230
+ staticDirs: siteConfig.staticDirectories.map((dir) => path_1.default.resolve(siteDir, dir)),
231
+ siteDir,
232
+ isMDXPartial: (0, utils_1.createAbsoluteFilePathMatcher)(options.exclude, contentDirs),
250
233
  metadataPath: (mdxPath) => {
251
234
  // Note that metadataPath must be the same/in-sync as
252
235
  // the path from createData for each MDX.
253
- const aliasedPath = utils_1.aliasedSitePath(mdxPath, siteDir);
254
- return path_1.default.join(dataDir, `${utils_1.docuHash(aliasedPath)}.json`);
236
+ const aliasedPath = (0, utils_1.aliasedSitePath)(mdxPath, siteDir);
237
+ return path_1.default.join(dataDir, `${(0, utils_1.docuHash)(aliasedPath)}.json`);
255
238
  },
239
+ // Assets allow to convert some relative images paths to
240
+ // require(...) calls
241
+ createAssets: ({ frontMatter, }) => ({
242
+ image: frontMatter.image,
243
+ }),
256
244
  },
257
245
  },
258
246
  {
259
247
  loader: path_1.default.resolve(__dirname, './markdown/index.js'),
260
248
  options: docsMarkdownOptions,
261
249
  },
262
- ]),
250
+ ].filter(Boolean),
263
251
  };
264
252
  }
265
253
  return {
266
254
  ignoreWarnings: [
267
255
  // Suppress warnings about non-existing of versions file.
268
256
  (e) => e.message.includes("Can't resolve") &&
269
- e.message.includes(constants_2.VERSIONS_JSON_FILE),
257
+ e.message.includes(constants_1.VERSIONS_JSON_FILE),
270
258
  ],
271
259
  resolve: {
272
260
  alias: {
package/lib/lastUpdate.js CHANGED
@@ -8,44 +8,31 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.getFileLastUpdate = void 0;
10
10
  const tslib_1 = require("tslib");
11
- const shelljs_1 = tslib_1.__importDefault(require("shelljs"));
12
- const execa_1 = tslib_1.__importDefault(require("execa"));
13
- const GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX = /^(\d+), (.+)$/;
11
+ const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
12
+ const utils_1 = require("@docusaurus/utils");
14
13
  let showedGitRequirementError = false;
15
14
  async function getFileLastUpdate(filePath) {
16
15
  if (!filePath) {
17
16
  return null;
18
17
  }
19
- function getTimestampAndAuthor(str) {
20
- if (!str) {
21
- return null;
22
- }
23
- const temp = str.match(GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX);
24
- return !temp || temp.length < 3
25
- ? null
26
- : { timestamp: +temp[1], author: temp[2] };
27
- }
28
18
  // Wrap in try/catch in case the shell commands fail
29
19
  // (e.g. project doesn't use Git, etc).
30
20
  try {
31
- if (!shelljs_1.default.which('git')) {
32
- if (!showedGitRequirementError) {
33
- showedGitRequirementError = true;
34
- console.warn('Sorry, the docs plugin last update options require Git.');
35
- }
36
- return null;
37
- }
38
- const { stdout } = await execa_1.default('git', [
39
- 'log',
40
- '-1',
41
- '--format=%ct, %an',
42
- filePath,
43
- ]);
44
- return getTimestampAndAuthor(stdout);
21
+ const result = (0, utils_1.getFileCommitDate)(filePath, {
22
+ age: 'newest',
23
+ includeAuthor: true,
24
+ });
25
+ return { timestamp: result.timestamp, author: result.author };
45
26
  }
46
- catch (error) {
47
- console.error(error);
27
+ catch (err) {
28
+ if (err instanceof utils_1.GitNotFoundError && !showedGitRequirementError) {
29
+ logger_1.default.warn('Sorry, the docs plugin last update options require Git.');
30
+ showedGitRequirementError = true;
31
+ }
32
+ else {
33
+ logger_1.default.error(err);
34
+ }
35
+ return null;
48
36
  }
49
- return null;
50
37
  }
51
38
  exports.getFileLastUpdate = getFileLastUpdate;
@@ -4,9 +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
- /// <reference types="node" />
8
- interface Loader extends Function {
9
- (this: any, source: string): string | Buffer | void | undefined;
10
- }
11
- declare const markdownLoader: Loader;
12
- export default markdownLoader;
7
+ import type { DocsMarkdownOption } from '../types';
8
+ import type { LoaderContext } from 'webpack';
9
+ export default function markdownLoader(this: LoaderContext<DocsMarkdownOption>, source: string): void;
@@ -7,10 +7,10 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const linkify_1 = require("./linkify");
10
- const markdownLoader = function (source) {
10
+ function markdownLoader(source) {
11
11
  const fileString = source;
12
12
  const callback = this.async();
13
13
  const options = this.getOptions();
14
- return (callback && callback(null, linkify_1.linkify(fileString, this.resourcePath, options)));
15
- };
14
+ return (callback && callback(null, (0, linkify_1.linkify)(fileString, this.resourcePath, options)));
15
+ }
16
16
  exports.default = markdownLoader;
@@ -4,5 +4,5 @@
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 { DocsMarkdownOption } from '../types';
7
+ import type { DocsMarkdownOption } from '../types';
8
8
  export declare function linkify(fileString: string, filePath: string, options: DocsMarkdownOption): string;
@@ -10,15 +10,15 @@ exports.linkify = void 0;
10
10
  const versions_1 = require("../versions");
11
11
  const utils_1 = require("@docusaurus/utils");
12
12
  function getVersion(filePath, options) {
13
- const versionFound = options.versionsMetadata.find((version) => versions_1.getDocsDirPaths(version).some((docsDirPath) => filePath.startsWith(docsDirPath)));
13
+ const versionFound = options.versionsMetadata.find((version) => (0, versions_1.getDocsDirPaths)(version).some((docsDirPath) => filePath.startsWith(docsDirPath)));
14
14
  if (!versionFound) {
15
- throw new Error(`Unexpected, markdown file does not belong to any docs version! file=${filePath}`);
15
+ throw new Error(`Unexpected error: Markdown file at "${filePath}" does not belong to any docs version!`);
16
16
  }
17
17
  return versionFound;
18
18
  }
19
19
  function linkify(fileString, filePath, options) {
20
20
  const { siteDir, sourceToPermalink, onBrokenMarkdownLink } = options;
21
- const { newContent, brokenMarkdownLinks } = utils_1.replaceMarkdownLinks({
21
+ const { newContent, brokenMarkdownLinks } = (0, utils_1.replaceMarkdownLinks)({
22
22
  siteDir,
23
23
  fileString,
24
24
  filePath,
@@ -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 { NumberPrefixParser } from './types';
7
+ import type { NumberPrefixParser } from '@docusaurus/plugin-content-docs';
8
8
  export declare const DefaultNumberPrefixParser: NumberPrefixParser;
9
9
  export declare const DisabledNumberPrefixParser: NumberPrefixParser;
10
10
  export declare function stripNumberPrefix(str: string, parser: NumberPrefixParser): string;
@@ -8,14 +8,15 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.stripPathNumberPrefixes = exports.stripNumberPrefix = exports.DisabledNumberPrefixParser = exports.DefaultNumberPrefixParser = void 0;
10
10
  // Best-effort to avoid parsing some patterns as number prefix
11
- const IgnoredPrefixPatterns = (function () {
11
+ const IgnoredPrefixPatterns = (() => {
12
12
  // ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
13
- const DateLikePrefixRegex = /^((\d{2}|\d{4})[-_.]\d{2}([-_.](\d{2}|\d{4}))?)(.*)$/;
13
+ const DateLikePrefixRegex = /^(?:\d{2}|\d{4})[-_.]\d{2}(?:[-_.](?:\d{2}|\d{4}))?.*$/;
14
14
  // ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
15
- // note: we could try to parse float numbers in filenames but that is probably not worth it
16
- // as a version such as "8.0" can be interpreted as both a version and a float
17
- // User can configure his own NumberPrefixParser if he wants 8.0 to be interpreted as a float
18
- const VersionLikePrefixRegex = /^(\d+[-_.]\d+)(.*)$/;
15
+ // note: we could try to parse float numbers in filenames but that is
16
+ // probably not worth it as a version such as "8.0" can be interpreted as both
17
+ // a version and a float. User can configure her own NumberPrefixParser if
18
+ // she wants 8.0 to be interpreted as a float
19
+ const VersionLikePrefixRegex = /^\d+[-_.]\d+.*$/;
19
20
  return new RegExp(`${DateLikePrefixRegex.source}|${VersionLikePrefixRegex.source}`);
20
21
  })();
21
22
  const NumberPrefixRegex = /^(?<numberPrefix>\d+)(?<separator>\s*[-_.]+\s*)(?<suffix>.*)$/;
package/lib/options.d.ts CHANGED
@@ -4,9 +4,9 @@
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 { PluginOptions } from './types';
7
+ import type { PluginOptions } from '@docusaurus/plugin-content-docs';
8
8
  import { Joi } from '@docusaurus/utils-validation';
9
- import { OptionValidationContext, ValidationResult } from '@docusaurus/types';
9
+ import type { OptionValidationContext, ValidationResult } from '@docusaurus/types';
10
10
  export declare const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'>;
11
11
  export declare const OptionsSchema: Joi.ObjectSchema<any>;
12
- export declare function validateOptions({ validate, options, }: OptionValidationContext<PluginOptions>): ValidationResult<PluginOptions>;
12
+ export declare function validateOptions({ validate, options: userOptions, }: OptionValidationContext<PluginOptions>): ValidationResult<PluginOptions>;