@docusaurus/plugin-content-docs 2.0.0-beta.fc64c12e4 → 2.0.0

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 (236) hide show
  1. package/lib/categoryGeneratedIndex.d.ts +12 -0
  2. package/lib/categoryGeneratedIndex.js +37 -0
  3. package/lib/cli.d.ts +3 -2
  4. package/lib/cli.js +57 -73
  5. package/lib/client/docsClientUtils.d.ts +9 -28
  6. package/lib/client/docsClientUtils.js +34 -43
  7. package/lib/client/index.d.ts +81 -0
  8. package/lib/client/index.js +67 -0
  9. package/lib/constants.d.ts +4 -0
  10. package/lib/constants.js +4 -1
  11. package/lib/docs.d.ts +33 -6
  12. package/lib/docs.js +201 -78
  13. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
  14. package/lib/{docFrontMatter.js → frontMatter.js} +22 -3
  15. package/lib/globalData.d.ts +3 -3
  16. package/lib/globalData.js +35 -6
  17. package/lib/index.d.ts +3 -3
  18. package/lib/index.js +120 -153
  19. package/lib/lastUpdate.d.ts +4 -6
  20. package/lib/lastUpdate.js +22 -26
  21. package/lib/markdown/index.d.ts +3 -6
  22. package/lib/markdown/index.js +3 -3
  23. package/lib/markdown/linkify.d.ts +1 -1
  24. package/lib/markdown/linkify.js +6 -3
  25. package/lib/numberPrefix.d.ts +1 -1
  26. package/lib/numberPrefix.js +16 -21
  27. package/lib/options.d.ts +3 -5
  28. package/lib/options.js +34 -26
  29. package/lib/props.d.ts +7 -2
  30. package/lib/props.js +84 -13
  31. package/lib/routes.d.ts +29 -0
  32. package/lib/routes.js +96 -0
  33. package/lib/server-export.d.ts +9 -0
  34. package/lib/server-export.js +25 -0
  35. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -7
  36. package/lib/sidebars/generator.js +209 -0
  37. package/lib/sidebars/index.d.ts +13 -0
  38. package/lib/sidebars/index.js +92 -0
  39. package/lib/sidebars/normalization.d.ts +13 -0
  40. package/lib/sidebars/normalization.js +59 -0
  41. package/lib/sidebars/postProcessor.d.ts +11 -0
  42. package/lib/sidebars/postProcessor.js +81 -0
  43. package/lib/sidebars/processor.d.ts +10 -0
  44. package/lib/sidebars/processor.js +79 -0
  45. package/lib/sidebars/types.d.ts +183 -0
  46. package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
  47. package/lib/sidebars/utils.d.ts +55 -0
  48. package/lib/sidebars/utils.js +259 -0
  49. package/lib/sidebars/validation.d.ts +11 -0
  50. package/lib/sidebars/validation.js +143 -0
  51. package/lib/slug.d.ts +5 -4
  52. package/lib/slug.js +28 -18
  53. package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
  54. package/lib/tags.js +21 -0
  55. package/lib/translations.d.ts +3 -3
  56. package/lib/translations.js +100 -93
  57. package/lib/types.d.ts +13 -192
  58. package/lib/versions/files.d.ts +50 -0
  59. package/lib/versions/files.js +141 -0
  60. package/lib/versions/index.d.ts +36 -0
  61. package/lib/versions/index.js +154 -0
  62. package/lib/versions/validation.d.ts +17 -0
  63. package/lib/versions/validation.js +71 -0
  64. package/package.json +44 -30
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +88 -118
  67. package/src/client/docsClientUtils.ts +44 -71
  68. package/src/client/index.ts +158 -0
  69. package/src/constants.ts +4 -2
  70. package/src/docs.ts +277 -80
  71. package/src/frontMatter.ts +63 -0
  72. package/src/globalData.ts +57 -7
  73. package/src/index.ts +174 -221
  74. package/src/lastUpdate.ts +27 -38
  75. package/src/markdown/index.ts +10 -16
  76. package/src/markdown/linkify.ts +7 -4
  77. package/src/numberPrefix.ts +19 -26
  78. package/src/options.ts +38 -38
  79. package/src/plugin-content-docs.d.ts +570 -91
  80. package/src/props.ts +121 -20
  81. package/src/routes.ts +159 -0
  82. package/src/server-export.ts +26 -0
  83. package/src/sidebars/README.md +10 -0
  84. package/src/sidebars/generator.ts +292 -0
  85. package/src/sidebars/index.ts +118 -0
  86. package/src/sidebars/normalization.ts +91 -0
  87. package/src/sidebars/postProcessor.ts +112 -0
  88. package/src/sidebars/processor.ts +123 -0
  89. package/src/sidebars/types.ts +280 -0
  90. package/src/sidebars/utils.ts +393 -0
  91. package/src/sidebars/validation.ts +179 -0
  92. package/src/slug.ts +41 -22
  93. package/src/tags.ts +20 -0
  94. package/src/translations.ts +155 -124
  95. package/src/types.ts +17 -259
  96. package/src/versions/files.ts +216 -0
  97. package/src/versions/index.ts +246 -0
  98. package/src/versions/validation.ts +115 -0
  99. package/lib/.tsbuildinfo +0 -1
  100. package/lib/sidebarItemsGenerator.js +0 -215
  101. package/lib/sidebars.d.ts +0 -45
  102. package/lib/sidebars.js +0 -354
  103. package/lib/theme/hooks/useDocs.d.ts +0 -20
  104. package/lib/theme/hooks/useDocs.js +0 -75
  105. package/lib/versions.d.ts +0 -16
  106. package/lib/versions.js +0 -319
  107. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  108. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  109. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  110. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  111. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  112. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  113. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  114. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  115. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  116. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  117. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  118. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  119. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  120. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  121. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  122. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  123. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  124. package/src/__tests__/__fixtures__/simple-site/docs/_partials/somePartial.md +0 -3
  125. package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +0 -3
  126. package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +0 -3
  127. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  128. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  129. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  130. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  131. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  132. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  133. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  134. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  135. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  136. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  137. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  138. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  139. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  140. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  141. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  142. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  143. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  149. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  150. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  151. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  152. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  153. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  154. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  155. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  156. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  157. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  158. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  159. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  160. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  161. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  162. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
  163. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  164. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  165. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  166. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  167. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  168. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  169. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  170. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  171. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  172. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  173. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  174. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  175. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  176. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  177. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  178. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  179. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  180. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  181. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  182. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  183. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  184. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  185. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  186. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/somePartial.md +0 -3
  187. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +0 -3
  188. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +0 -3
  189. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  190. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  191. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  192. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  193. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  194. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  195. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  196. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  197. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  198. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  199. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  200. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  201. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  202. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  203. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -95
  204. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1926
  205. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -233
  206. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -484
  207. package/src/__tests__/cli.test.ts +0 -337
  208. package/src/__tests__/docFrontMatter.test.ts +0 -244
  209. package/src/__tests__/docs.test.ts +0 -878
  210. package/src/__tests__/index.test.ts +0 -1885
  211. package/src/__tests__/lastUpdate.test.ts +0 -69
  212. package/src/__tests__/numberPrefix.test.ts +0 -199
  213. package/src/__tests__/options.test.ts +0 -272
  214. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -358
  215. package/src/__tests__/sidebars.test.ts +0 -746
  216. package/src/__tests__/slug.test.ts +0 -109
  217. package/src/__tests__/translations.test.ts +0 -158
  218. package/src/__tests__/versions.test.ts +0 -741
  219. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  220. package/src/docFrontMatter.ts +0 -41
  221. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  222. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  223. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  224. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  225. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  226. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  227. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  228. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  229. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  230. package/src/markdown/__tests__/linkify.test.ts +0 -190
  231. package/src/sidebarItemsGenerator.ts +0 -315
  232. package/src/sidebars.ts +0 -589
  233. package/src/theme/hooks/useDocs.ts +0 -103
  234. package/src/versions.ts +0 -572
  235. package/tsconfig.json +0 -9
  236. package/types.d.ts +0 -13
package/src/versions.ts DELETED
@@ -1,572 +0,0 @@
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 path from 'path';
9
- import fs from 'fs-extra';
10
- import {
11
- PluginOptions,
12
- VersionBanner,
13
- VersionMetadata,
14
- VersionOptions,
15
- VersionsOptions,
16
- } from './types';
17
- import {
18
- VERSIONS_JSON_FILE,
19
- VERSIONED_DOCS_DIR,
20
- VERSIONED_SIDEBARS_DIR,
21
- CURRENT_VERSION_NAME,
22
- } from './constants';
23
-
24
- import {DEFAULT_PLUGIN_ID} from '@docusaurus/core/lib/constants';
25
- import {LoadContext} from '@docusaurus/types';
26
- import {getPluginI18nPath, normalizeUrl, posixPath} from '@docusaurus/utils';
27
- import {difference} from 'lodash';
28
- import {resolveSidebarPathOption} from './sidebars';
29
-
30
- // retro-compatibility: no prefix for the default plugin id
31
- function addPluginIdPrefix(fileOrDir: string, pluginId: string): string {
32
- if (pluginId === DEFAULT_PLUGIN_ID) {
33
- return fileOrDir;
34
- } else {
35
- return `${pluginId}_${fileOrDir}`;
36
- }
37
- }
38
-
39
- export function getVersionedDocsDirPath(
40
- siteDir: string,
41
- pluginId: string,
42
- ): string {
43
- return path.join(siteDir, addPluginIdPrefix(VERSIONED_DOCS_DIR, pluginId));
44
- }
45
-
46
- export function getVersionedSidebarsDirPath(
47
- siteDir: string,
48
- pluginId: string,
49
- ): string {
50
- return path.join(
51
- siteDir,
52
- addPluginIdPrefix(VERSIONED_SIDEBARS_DIR, pluginId),
53
- );
54
- }
55
-
56
- export function getVersionsFilePath(siteDir: string, pluginId: string): string {
57
- return path.join(siteDir, addPluginIdPrefix(VERSIONS_JSON_FILE, pluginId));
58
- }
59
-
60
- function ensureValidVersionString(version: unknown): asserts version is string {
61
- if (typeof version !== 'string') {
62
- throw new Error(
63
- `Versions should be strings. Found type "${typeof version}" for version "${version}".`,
64
- );
65
- }
66
- // Should we forbid versions with special chars like / ?
67
- if (version.trim().length === 0) {
68
- throw new Error(`Invalid version "${version}".`);
69
- }
70
- }
71
-
72
- function ensureValidVersionArray(
73
- versionArray: unknown,
74
- ): asserts versionArray is string[] {
75
- if (!(versionArray instanceof Array)) {
76
- throw new Error(
77
- `The versions file should contain an array of versions! Found content: ${JSON.stringify(
78
- versionArray,
79
- )}`,
80
- );
81
- }
82
-
83
- versionArray.forEach(ensureValidVersionString);
84
- }
85
-
86
- // TODO not easy to make async due to many deps
87
- function readVersionsFile(siteDir: string, pluginId: string): string[] | null {
88
- const versionsFilePath = getVersionsFilePath(siteDir, pluginId);
89
- if (fs.existsSync(versionsFilePath)) {
90
- const content = JSON.parse(fs.readFileSync(versionsFilePath, 'utf8'));
91
- ensureValidVersionArray(content);
92
- return content;
93
- } else {
94
- return null;
95
- }
96
- }
97
-
98
- // TODO not easy to make async due to many deps
99
- function readVersionNames(
100
- siteDir: string,
101
- options: Pick<
102
- PluginOptions,
103
- 'id' | 'disableVersioning' | 'includeCurrentVersion'
104
- >,
105
- ): string[] {
106
- const versionFileContent = readVersionsFile(siteDir, options.id);
107
-
108
- if (!versionFileContent && options.disableVersioning) {
109
- throw new Error(
110
- `Docs: using "disableVersioning=${options.disableVersioning}" option on a non-versioned site does not make sense.`,
111
- );
112
- }
113
-
114
- const versions = options.disableVersioning ? [] : versionFileContent ?? [];
115
-
116
- // We add the current version at the beginning, unless
117
- // - user don't want to
118
- // - it's been explicitly added to versions.json
119
- if (
120
- options.includeCurrentVersion &&
121
- !versions.includes(CURRENT_VERSION_NAME)
122
- ) {
123
- versions.unshift(CURRENT_VERSION_NAME);
124
- }
125
-
126
- if (versions.length === 0) {
127
- throw new Error(
128
- `It is not possible to use docs without any version. Please check the configuration of these options: "includeCurrentVersion=${options.includeCurrentVersion}", "disableVersioning=${options.disableVersioning}".`,
129
- );
130
- }
131
-
132
- return versions;
133
- }
134
-
135
- function getDocsDirPathLocalized({
136
- siteDir,
137
- locale,
138
- pluginId,
139
- versionName,
140
- }: {
141
- siteDir: string;
142
- locale: string;
143
- pluginId: string;
144
- versionName: string;
145
- }) {
146
- return getPluginI18nPath({
147
- siteDir,
148
- locale,
149
- pluginName: 'docusaurus-plugin-content-docs',
150
- pluginId,
151
- subPaths: [
152
- versionName === CURRENT_VERSION_NAME
153
- ? CURRENT_VERSION_NAME
154
- : `version-${versionName}`,
155
- ],
156
- });
157
- }
158
-
159
- function getVersionMetadataPaths({
160
- versionName,
161
- context,
162
- options,
163
- }: {
164
- versionName: string;
165
- context: Pick<LoadContext, 'siteDir' | 'i18n'>;
166
- options: Pick<PluginOptions, 'id' | 'path' | 'sidebarPath'>;
167
- }): Pick<
168
- VersionMetadata,
169
- 'contentPath' | 'contentPathLocalized' | 'sidebarFilePath'
170
- > {
171
- const isCurrentVersion = versionName === CURRENT_VERSION_NAME;
172
-
173
- const contentPath = isCurrentVersion
174
- ? path.resolve(context.siteDir, options.path)
175
- : path.join(
176
- getVersionedDocsDirPath(context.siteDir, options.id),
177
- `version-${versionName}`,
178
- );
179
-
180
- const contentPathLocalized = getDocsDirPathLocalized({
181
- siteDir: context.siteDir,
182
- locale: context.i18n.currentLocale,
183
- pluginId: options.id,
184
- versionName,
185
- });
186
-
187
- function getSidebarFilePath() {
188
- if (isCurrentVersion) {
189
- return resolveSidebarPathOption(context.siteDir, options.sidebarPath);
190
- } else {
191
- return path.join(
192
- getVersionedSidebarsDirPath(context.siteDir, options.id),
193
- `version-${versionName}-sidebars.json`,
194
- );
195
- }
196
- }
197
-
198
- return {
199
- contentPath,
200
- contentPathLocalized,
201
- sidebarFilePath: getSidebarFilePath(),
202
- };
203
- }
204
-
205
- function getVersionEditUrls({
206
- contentPath,
207
- contentPathLocalized,
208
- context: {siteDir, i18n},
209
- options: {id, path: currentVersionPath, editUrl, editCurrentVersion},
210
- }: {
211
- contentPath: string;
212
- contentPathLocalized: string;
213
- context: Pick<LoadContext, 'siteDir' | 'i18n'>;
214
- options: Pick<
215
- PluginOptions,
216
- 'id' | 'path' | 'editUrl' | 'editCurrentVersion'
217
- >;
218
- }): {versionEditUrl: string; versionEditUrlLocalized: string} | undefined {
219
- if (!editUrl) {
220
- return undefined;
221
- }
222
-
223
- // if the user is using the functional form of editUrl,
224
- // he has total freedom and we can't compute a "version edit url"
225
- if (typeof editUrl === 'function') {
226
- return undefined;
227
- }
228
-
229
- const editDirPath = editCurrentVersion ? currentVersionPath : contentPath;
230
- const editDirPathLocalized = editCurrentVersion
231
- ? getDocsDirPathLocalized({
232
- siteDir,
233
- locale: i18n.currentLocale,
234
- versionName: CURRENT_VERSION_NAME,
235
- pluginId: id,
236
- })
237
- : contentPathLocalized;
238
-
239
- const versionPathSegment = posixPath(
240
- path.relative(siteDir, path.resolve(siteDir, editDirPath)),
241
- );
242
- const versionPathSegmentLocalized = posixPath(
243
- path.relative(siteDir, path.resolve(siteDir, editDirPathLocalized)),
244
- );
245
-
246
- const versionEditUrl = normalizeUrl([editUrl, versionPathSegment]);
247
-
248
- const versionEditUrlLocalized = normalizeUrl([
249
- editUrl,
250
- versionPathSegmentLocalized,
251
- ]);
252
-
253
- return {
254
- versionEditUrl,
255
- versionEditUrlLocalized,
256
- };
257
- }
258
-
259
- function getDefaultVersionBanner({
260
- versionName,
261
- versionNames,
262
- lastVersionName,
263
- }: {
264
- versionName: string;
265
- versionNames: string[];
266
- lastVersionName: string;
267
- }): VersionBanner {
268
- // Current version: good, no banner
269
- if (versionName === lastVersionName) {
270
- return 'none';
271
- }
272
- // Upcoming versions: unreleased banner
273
- else if (
274
- versionNames.indexOf(versionName) < versionNames.indexOf(lastVersionName)
275
- ) {
276
- return 'unreleased';
277
- }
278
- // Older versions: display unmaintained banner
279
- else {
280
- return 'unmaintained';
281
- }
282
- }
283
-
284
- function getVersionBanner({
285
- versionName,
286
- versionNames,
287
- lastVersionName,
288
- options,
289
- }: {
290
- versionName: string;
291
- versionNames: string[];
292
- lastVersionName: string;
293
- options: Pick<PluginOptions, 'versions'>;
294
- }): VersionBanner {
295
- const versionOptionBanner = options.versions[versionName]?.banner;
296
-
297
- return (
298
- versionOptionBanner ??
299
- getDefaultVersionBanner({
300
- versionName,
301
- versionNames,
302
- lastVersionName,
303
- })
304
- );
305
- }
306
-
307
- function createVersionMetadata({
308
- versionName,
309
- versionNames,
310
- lastVersionName,
311
- context,
312
- options,
313
- }: {
314
- versionName: string;
315
- versionNames: string[];
316
- lastVersionName: string;
317
- context: Pick<LoadContext, 'siteDir' | 'baseUrl' | 'i18n'>;
318
- options: Pick<
319
- PluginOptions,
320
- | 'id'
321
- | 'path'
322
- | 'sidebarPath'
323
- | 'routeBasePath'
324
- | 'versions'
325
- | 'editUrl'
326
- | 'editCurrentVersion'
327
- >;
328
- }): VersionMetadata {
329
- const {
330
- sidebarFilePath,
331
- contentPath,
332
- contentPathLocalized,
333
- } = getVersionMetadataPaths({
334
- versionName,
335
- context,
336
- options,
337
- });
338
-
339
- const isLast = versionName === lastVersionName;
340
-
341
- // retro-compatible values
342
- const defaultVersionLabel =
343
- versionName === CURRENT_VERSION_NAME ? 'Next' : versionName;
344
- function getDefaultVersionPathPart() {
345
- if (isLast) {
346
- return '';
347
- }
348
- return versionName === CURRENT_VERSION_NAME ? 'next' : versionName;
349
- }
350
- const defaultVersionPathPart = getDefaultVersionPathPart();
351
-
352
- const versionOptions: VersionOptions = options.versions[versionName] ?? {};
353
-
354
- const versionLabel = versionOptions.label ?? defaultVersionLabel;
355
- const versionPathPart = versionOptions.path ?? defaultVersionPathPart;
356
-
357
- const versionPath = normalizeUrl([
358
- context.baseUrl,
359
- options.routeBasePath,
360
- versionPathPart,
361
- ]);
362
-
363
- const versionEditUrls = getVersionEditUrls({
364
- contentPath,
365
- contentPathLocalized,
366
- context,
367
- options,
368
- });
369
-
370
- // Because /docs/:route` should always be after `/docs/versionName/:route`.
371
- const routePriority = versionPathPart === '' ? -1 : undefined;
372
-
373
- return {
374
- versionName,
375
- versionLabel,
376
- versionPath,
377
- versionEditUrl: versionEditUrls?.versionEditUrl,
378
- versionEditUrlLocalized: versionEditUrls?.versionEditUrlLocalized,
379
- versionBanner: getVersionBanner({
380
- versionName,
381
- versionNames,
382
- lastVersionName,
383
- options,
384
- }),
385
- isLast,
386
- routePriority,
387
- sidebarFilePath,
388
- contentPath,
389
- contentPathLocalized,
390
- };
391
- }
392
-
393
- function checkVersionMetadataPaths({
394
- versionMetadata,
395
- context,
396
- }: {
397
- versionMetadata: VersionMetadata;
398
- context: Pick<LoadContext, 'siteDir'>;
399
- }) {
400
- const {versionName, contentPath, sidebarFilePath} = versionMetadata;
401
- const {siteDir} = context;
402
- const isCurrentVersion = versionName === CURRENT_VERSION_NAME;
403
-
404
- if (!fs.existsSync(contentPath)) {
405
- throw new Error(
406
- `The docs folder does not exist for version "${versionName}". A docs folder is expected to be found at ${path.relative(
407
- siteDir,
408
- contentPath,
409
- )}.`,
410
- );
411
- }
412
-
413
- // If the current version defines a path to a sidebar file that does not exist, we throw!
414
- // Note: for versioned sidebars, the file may not exist (as we prefer to not create it rather than to create an empty file)
415
- // See https://github.com/facebook/docusaurus/issues/3366
416
- // See https://github.com/facebook/docusaurus/pull/4775
417
- if (
418
- isCurrentVersion &&
419
- typeof sidebarFilePath === 'string' &&
420
- !fs.existsSync(sidebarFilePath)
421
- ) {
422
- throw new Error(`The path to the sidebar file does not exist at "${path.relative(
423
- siteDir,
424
- sidebarFilePath,
425
- )}".
426
- Please set the docs "sidebarPath" field in your config file to:
427
- - a sidebars path that exists
428
- - false: to disable the sidebar
429
- - undefined: for Docusaurus generates it automatically`);
430
- }
431
- }
432
-
433
- // TODO for retrocompatibility with existing behavior
434
- // We should make this configurable
435
- // "last version" is not a very good concept nor api surface
436
- function getDefaultLastVersionName(versionNames: string[]) {
437
- if (versionNames.length === 1) {
438
- return versionNames[0];
439
- } else {
440
- return versionNames.filter(
441
- (versionName) => versionName !== CURRENT_VERSION_NAME,
442
- )[0];
443
- }
444
- }
445
-
446
- function checkVersionsOptions(
447
- availableVersionNames: string[],
448
- options: VersionsOptions,
449
- ) {
450
- const availableVersionNamesMsg = `Available version names are: ${availableVersionNames.join(
451
- ', ',
452
- )}`;
453
- if (
454
- options.lastVersion &&
455
- !availableVersionNames.includes(options.lastVersion)
456
- ) {
457
- throw new Error(
458
- `Docs option lastVersion=${options.lastVersion} is invalid. ${availableVersionNamesMsg}`,
459
- );
460
- }
461
- const unknownVersionConfigNames = difference(
462
- Object.keys(options.versions),
463
- availableVersionNames,
464
- );
465
- if (unknownVersionConfigNames.length > 0) {
466
- throw new Error(
467
- `Invalid docs option "versions": unknown versions (${unknownVersionConfigNames.join(
468
- ',',
469
- )}) found. ${availableVersionNamesMsg}`,
470
- );
471
- }
472
-
473
- if (options.onlyIncludeVersions) {
474
- if (options.onlyIncludeVersions.length === 0) {
475
- throw new Error(
476
- `Invalid docs option "onlyIncludeVersions": an empty array is not allowed, at least one version is needed.`,
477
- );
478
- }
479
- const unknownOnlyIncludeVersionNames = difference(
480
- options.onlyIncludeVersions,
481
- availableVersionNames,
482
- );
483
- if (unknownOnlyIncludeVersionNames.length > 0) {
484
- throw new Error(
485
- `Invalid docs option "onlyIncludeVersions": unknown versions (${unknownOnlyIncludeVersionNames.join(
486
- ',',
487
- )}) found. ${availableVersionNamesMsg}`,
488
- );
489
- }
490
- if (
491
- options.lastVersion &&
492
- !options.onlyIncludeVersions.includes(options.lastVersion)
493
- ) {
494
- throw new Error(
495
- `Invalid docs option "lastVersion": if you use both the "onlyIncludeVersions" and "lastVersion" options, then "lastVersion" must be present in the provided "onlyIncludeVersions" array.`,
496
- );
497
- }
498
- }
499
- }
500
-
501
- // Filter versions according to provided options
502
- // Note: we preserve the order in which versions are provided
503
- // the order of the onlyIncludeVersions array does not matter
504
- function filterVersions(
505
- versionNamesUnfiltered: string[],
506
- options: Pick<PluginOptions, 'onlyIncludeVersions'>,
507
- ) {
508
- if (options.onlyIncludeVersions) {
509
- return versionNamesUnfiltered.filter((name) =>
510
- (options.onlyIncludeVersions || []).includes(name),
511
- );
512
- } else {
513
- return versionNamesUnfiltered;
514
- }
515
- }
516
-
517
- // TODO make this async (requires plugin init to be async)
518
- export function readVersionsMetadata({
519
- context,
520
- options,
521
- }: {
522
- context: Pick<LoadContext, 'siteDir' | 'baseUrl' | 'i18n'>;
523
- options: Pick<
524
- PluginOptions,
525
- | 'id'
526
- | 'path'
527
- | 'sidebarPath'
528
- | 'routeBasePath'
529
- | 'includeCurrentVersion'
530
- | 'disableVersioning'
531
- | 'lastVersion'
532
- | 'versions'
533
- | 'onlyIncludeVersions'
534
- | 'editUrl'
535
- | 'editCurrentVersion'
536
- >;
537
- }): VersionMetadata[] {
538
- const versionNamesUnfiltered = readVersionNames(context.siteDir, options);
539
-
540
- checkVersionsOptions(versionNamesUnfiltered, options);
541
-
542
- const versionNames = filterVersions(versionNamesUnfiltered, options);
543
-
544
- const lastVersionName =
545
- options.lastVersion ?? getDefaultLastVersionName(versionNames);
546
-
547
- const versionsMetadata = versionNames.map((versionName) =>
548
- createVersionMetadata({
549
- versionName,
550
- versionNames,
551
- lastVersionName,
552
- context,
553
- options,
554
- }),
555
- );
556
- versionsMetadata.forEach((versionMetadata) =>
557
- checkVersionMetadataPaths({versionMetadata, context}),
558
- );
559
- return versionsMetadata;
560
- }
561
-
562
- // order matter!
563
- // Read in priority the localized path, then the unlocalized one
564
- // We want the localized doc to "override" the unlocalized one
565
- export function getDocsDirPaths(
566
- versionMetadata: Pick<
567
- VersionMetadata,
568
- 'contentPath' | 'contentPathLocalized'
569
- >,
570
- ): [string, string] {
571
- return [versionMetadata.contentPathLocalized, versionMetadata.contentPath];
572
- }
package/tsconfig.json DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "incremental": true,
5
- "tsBuildInfoFile": "./lib/.tsbuildinfo",
6
- "rootDir": "src",
7
- "outDir": "lib"
8
- }
9
- }
package/types.d.ts DELETED
@@ -1,13 +0,0 @@
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
- declare module 'remark-admonitions' {
9
- type Options = Record<string, unknown>;
10
-
11
- const plugin: (options?: Options) => void;
12
- export = plugin;
13
- }