@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/types.ts CHANGED
@@ -5,285 +5,43 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // eslint-disable-next-line spaced-comment
9
- /// <reference types="@docusaurus/module-type-aliases" />
10
-
11
- import type {RemarkAndRehypePluginOptions} from '@docusaurus/mdx-loader';
12
- import {
13
- BrokenMarkdownLink as IBrokenMarkdownLink,
14
- ContentPaths,
15
- } from '@docusaurus/utils/lib/markdownLinks';
8
+ import type {BrokenMarkdownLink, Tag} from '@docusaurus/utils';
9
+ import type {
10
+ VersionMetadata,
11
+ LoadedVersion,
12
+ CategoryGeneratedIndexMetadata,
13
+ } from '@docusaurus/plugin-content-docs';
14
+ import type {SidebarsUtils} from './sidebars/utils';
16
15
 
17
16
  export type DocFile = {
18
17
  contentPath: string; // /!\ may be localized
19
18
  filePath: string; // /!\ may be localized
20
19
  source: string;
21
20
  content: string;
22
- lastUpdate: LastUpdateData;
23
- };
24
-
25
- export type VersionName = string;
26
-
27
- export type VersionMetadata = ContentPaths & {
28
- versionName: VersionName; // 1.0.0
29
- versionLabel: string; // Version 1.0.0
30
- versionPath: string; // /baseUrl/docs/1.0.0
31
- versionEditUrl?: string | undefined;
32
- versionEditUrlLocalized?: string | undefined;
33
- versionBanner: VersionBanner;
34
- isLast: boolean;
35
- sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
36
- routePriority: number | undefined; // -1 for the latest docs
37
- };
38
-
39
- export type EditUrlFunction = (editUrlParams: {
40
- version: string;
41
- versionDocsDirPath: string;
42
- docPath: string;
43
- permalink: string;
44
- locale: string;
45
- }) => string | undefined;
46
-
47
- export type MetadataOptions = {
48
- routeBasePath: string;
49
- homePageId?: string;
50
- editUrl?: string | EditUrlFunction;
51
- editCurrentVersion: boolean;
52
- editLocalizedFiles: boolean;
53
- showLastUpdateTime?: boolean;
54
- showLastUpdateAuthor?: boolean;
55
- numberPrefixParser: NumberPrefixParser;
56
- };
57
-
58
- export type PathOptions = {
59
- path: string;
60
- sidebarPath?: string | false | undefined;
61
- };
62
-
63
- // TODO support custom version banner? {type: "error", content: "html content"}
64
- export type VersionBanner = 'none' | 'unreleased' | 'unmaintained';
65
-
66
- export type VersionOptions = {
67
- path?: string;
68
- label?: string;
69
- banner?: VersionBanner;
70
- };
71
-
72
- export type VersionsOptions = {
73
- lastVersion?: string;
74
- versions: Record<string, VersionOptions>;
75
- onlyIncludeVersions?: string[];
76
- };
77
-
78
- export type SidebarOptions = {
79
- sidebarCollapsible: boolean;
80
- sidebarCollapsed: boolean;
81
- };
82
-
83
- export type PluginOptions = MetadataOptions &
84
- PathOptions &
85
- VersionsOptions &
86
- RemarkAndRehypePluginOptions &
87
- SidebarOptions & {
88
- id: string;
89
- include: string[];
90
- exclude: string[];
91
- docLayoutComponent: string;
92
- docItemComponent: string;
93
- admonitions: Record<string, unknown>;
94
- disableVersioning: boolean;
95
- includeCurrentVersion: boolean;
96
- sidebarItemsGenerator: SidebarItemsGeneratorOption;
97
- };
98
-
99
- export type SidebarItemBase = {
100
- customProps?: Record<string, unknown>;
101
- };
102
-
103
- export type SidebarItemDoc = SidebarItemBase & {
104
- type: 'doc' | 'ref';
105
- label?: string;
106
- id: string;
107
- };
108
-
109
- export type SidebarItemLink = SidebarItemBase & {
110
- type: 'link';
111
- href: string;
112
- label: string;
113
- };
114
-
115
- export type SidebarItemCategory = SidebarItemBase & {
116
- type: 'category';
117
- label: string;
118
- items: SidebarItem[];
119
- collapsed: boolean;
120
- collapsible: boolean;
121
- };
122
-
123
- export type UnprocessedSidebarItemAutogenerated = {
124
- type: 'autogenerated';
125
- dirName: string;
126
- };
127
-
128
- export type UnprocessedSidebarItemCategory = SidebarItemBase & {
129
- type: 'category';
130
- label: string;
131
- items: UnprocessedSidebarItem[];
132
- collapsed: boolean;
133
- collapsible: boolean;
134
- };
135
-
136
- export type UnprocessedSidebarItem =
137
- | SidebarItemDoc
138
- | SidebarItemLink
139
- | UnprocessedSidebarItemCategory
140
- | UnprocessedSidebarItemAutogenerated;
141
-
142
- export type UnprocessedSidebar = UnprocessedSidebarItem[];
143
- export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
144
-
145
- export type SidebarItem =
146
- | SidebarItemDoc
147
- | SidebarItemLink
148
- | SidebarItemCategory;
149
-
150
- export type Sidebar = SidebarItem[];
151
- export type SidebarItemType = SidebarItem['type'];
152
- export type Sidebars = Record<string, Sidebar>;
153
-
154
- // Reduce API surface for options.sidebarItemsGenerator
155
- // The user-provided generator fn should receive only a subset of metadatas
156
- // A change to any of these metadatas can be considered as a breaking change
157
- export type SidebarItemsGeneratorDoc = Pick<
158
- DocMetadataBase,
159
- 'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
160
- >;
161
- export type SidebarItemsGeneratorVersion = Pick<
162
- VersionMetadata,
163
- 'versionName' | 'contentPath'
164
- >;
165
-
166
- export type SidebarItemsGeneratorArgs = {
167
- item: UnprocessedSidebarItemAutogenerated;
168
- version: SidebarItemsGeneratorVersion;
169
- docs: SidebarItemsGeneratorDoc[];
170
- numberPrefixParser: NumberPrefixParser;
171
- options: SidebarOptions;
172
- };
173
- export type SidebarItemsGenerator = (
174
- generatorArgs: SidebarItemsGeneratorArgs,
175
- ) => Promise<SidebarItem[]>;
176
-
177
- // Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
178
- // see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
179
- export type SidebarItemsGeneratorOptionArgs = {
180
- defaultSidebarItemsGenerator: SidebarItemsGenerator;
181
- } & SidebarItemsGeneratorArgs;
182
- export type SidebarItemsGeneratorOption = (
183
- generatorArgs: SidebarItemsGeneratorOptionArgs,
184
- ) => Promise<SidebarItem[]>;
185
-
186
- export type OrderMetadata = {
187
- previous?: string;
188
- next?: string;
189
- sidebar?: string;
190
- };
191
-
192
- export type LastUpdateData = {
193
- lastUpdatedAt?: number;
194
- formattedLastUpdatedAt?: string;
195
- lastUpdatedBy?: string;
196
- };
197
-
198
- export type DocFrontMatter = {
199
- // Front matter uses snake case
200
- /* eslint-disable camelcase */
201
- id?: string;
202
- title?: string;
203
- hide_title?: boolean;
204
- hide_table_of_contents?: boolean;
205
- keywords?: string[];
206
- image?: string;
207
- description?: string;
208
- slug?: string;
209
- sidebar_label?: string;
210
- sidebar_position?: number;
211
- pagination_label?: string;
212
- custom_edit_url?: string | null;
213
- parse_number_prefixes?: boolean;
214
- /* eslint-enable camelcase */
215
- };
216
-
217
- export type DocMetadataBase = LastUpdateData & {
218
- version: VersionName;
219
- unversionedId: string;
220
- id: string;
221
- isDocsHomePage: boolean;
222
- title: string;
223
- description: string;
224
- source: string;
225
- sourceDirName: string; // relative to the docs folder (can be ".")
226
- slug: string;
227
- permalink: string;
228
- sidebarPosition?: number;
229
- editUrl?: string | null;
230
- frontMatter: DocFrontMatter & Record<string, unknown>;
231
- };
232
-
233
- export type DocNavLink = {
234
- title: string;
235
- permalink: string;
236
- };
237
-
238
- export type DocMetadata = DocMetadataBase & {
239
- sidebar?: string;
240
- previous?: DocNavLink;
241
- next?: DocNavLink;
242
21
  };
243
22
 
244
23
  export type SourceToPermalink = {
245
24
  [source: string]: string;
246
25
  };
247
- export type LoadedVersion = VersionMetadata & {
248
- versionPath: string;
249
- mainDocId: string;
250
- docs: DocMetadata[];
251
- sidebars: Sidebars;
252
- };
253
26
 
254
- export type LoadedContent = {
255
- loadedVersions: LoadedVersion[];
27
+ export type VersionTag = Tag & {
28
+ /** All doc ids having this tag. */
29
+ docIds: string[];
256
30
  };
257
-
258
- export type GlobalDoc = {
259
- id: string;
260
- path: string;
261
- sidebar: string | undefined;
31
+ export type VersionTags = {
32
+ [permalink: string]: VersionTag;
262
33
  };
263
34
 
264
- export type GlobalVersion = {
265
- name: VersionName;
266
- label: string;
267
- isLast: boolean;
268
- path: string;
269
- mainDocId: string; // home doc (if docs homepage configured), or first doc
270
- docs: GlobalDoc[];
35
+ export type FullVersion = LoadedVersion & {
36
+ sidebarsUtils: SidebarsUtils;
37
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
271
38
  };
272
39
 
273
- export type GlobalPluginData = {
274
- path: string;
275
- versions: GlobalVersion[];
276
- };
277
-
278
- export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
40
+ export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
279
41
 
280
42
  export type DocsMarkdownOption = {
281
43
  versionsMetadata: VersionMetadata[];
282
44
  siteDir: string;
283
45
  sourceToPermalink: SourceToPermalink;
284
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
46
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
285
47
  };
286
-
287
- export type NumberPrefixParser = (
288
- filename: string,
289
- ) => {filename: string; numberPrefix?: number};
@@ -0,0 +1,216 @@
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 {getPluginI18nPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils';
11
+ import {
12
+ VERSIONS_JSON_FILE,
13
+ VERSIONED_DOCS_DIR,
14
+ VERSIONED_SIDEBARS_DIR,
15
+ CURRENT_VERSION_NAME,
16
+ } from '../constants';
17
+ import {validateVersionNames} from './validation';
18
+ import type {
19
+ PluginOptions,
20
+ VersionMetadata,
21
+ } from '@docusaurus/plugin-content-docs';
22
+ import type {VersionContext} from './index';
23
+
24
+ /** Add a prefix like `community_version-1.0.0`. No-op for default instance. */
25
+ function addPluginIdPrefix(fileOrDir: string, pluginId: string): string {
26
+ return pluginId === DEFAULT_PLUGIN_ID
27
+ ? fileOrDir
28
+ : `${pluginId}_${fileOrDir}`;
29
+ }
30
+
31
+ /** `[siteDir]/community_versioned_docs/version-1.0.0` */
32
+ export function getVersionDocsDirPath(
33
+ siteDir: string,
34
+ pluginId: string,
35
+ versionName: string,
36
+ ): string {
37
+ return path.join(
38
+ siteDir,
39
+ addPluginIdPrefix(VERSIONED_DOCS_DIR, pluginId),
40
+ `version-${versionName}`,
41
+ );
42
+ }
43
+
44
+ /** `[siteDir]/community_versioned_sidebars/version-1.0.0-sidebars.json` */
45
+ export function getVersionSidebarsPath(
46
+ siteDir: string,
47
+ pluginId: string,
48
+ versionName: string,
49
+ ): string {
50
+ return path.join(
51
+ siteDir,
52
+ addPluginIdPrefix(VERSIONED_SIDEBARS_DIR, pluginId),
53
+ `version-${versionName}-sidebars.json`,
54
+ );
55
+ }
56
+
57
+ export function getDocsDirPathLocalized({
58
+ localizationDir,
59
+ pluginId,
60
+ versionName,
61
+ }: {
62
+ localizationDir: string;
63
+ pluginId: string;
64
+ versionName: string;
65
+ }): string {
66
+ return getPluginI18nPath({
67
+ localizationDir,
68
+ pluginName: 'docusaurus-plugin-content-docs',
69
+ pluginId,
70
+ subPaths: [
71
+ versionName === CURRENT_VERSION_NAME
72
+ ? CURRENT_VERSION_NAME
73
+ : `version-${versionName}`,
74
+ ],
75
+ });
76
+ }
77
+
78
+ /** `community` => `[siteDir]/community_versions.json` */
79
+ export function getVersionsFilePath(siteDir: string, pluginId: string): string {
80
+ return path.join(siteDir, addPluginIdPrefix(VERSIONS_JSON_FILE, pluginId));
81
+ }
82
+
83
+ /**
84
+ * Reads the plugin's respective `versions.json` file, and returns its content.
85
+ *
86
+ * @throws Throws if validation fails, i.e. `versions.json` doesn't contain an
87
+ * array of valid version names.
88
+ */
89
+ export async function readVersionsFile(
90
+ siteDir: string,
91
+ pluginId: string,
92
+ ): Promise<string[] | null> {
93
+ const versionsFilePath = getVersionsFilePath(siteDir, pluginId);
94
+ if (await fs.pathExists(versionsFilePath)) {
95
+ const content: unknown = await fs.readJSON(versionsFilePath);
96
+ validateVersionNames(content);
97
+ return content;
98
+ }
99
+ return null;
100
+ }
101
+
102
+ /**
103
+ * Reads the `versions.json` file, and returns an ordered list of version names.
104
+ *
105
+ * - If `disableVersioning` is turned on, it will return `["current"]` (requires
106
+ * `includeCurrentVersion` to be true);
107
+ * - If `includeCurrentVersion` is turned on, "current" will be inserted at the
108
+ * beginning, if not already there.
109
+ *
110
+ * You need to use {@link filterVersions} after this.
111
+ *
112
+ * @throws Throws an error if `disableVersioning: true` but `versions.json`
113
+ * doesn't exist (i.e. site is not versioned)
114
+ * @throws Throws an error if versions list is empty (empty `versions.json` or
115
+ * `disableVersioning` is true, and not including current version)
116
+ */
117
+ export async function readVersionNames(
118
+ siteDir: string,
119
+ options: PluginOptions,
120
+ ): Promise<string[]> {
121
+ const versionFileContent = await readVersionsFile(siteDir, options.id);
122
+
123
+ if (!versionFileContent && options.disableVersioning) {
124
+ throw new Error(
125
+ `Docs: using "disableVersioning: true" option on a non-versioned site does not make sense.`,
126
+ );
127
+ }
128
+
129
+ const versions = options.disableVersioning ? [] : versionFileContent ?? [];
130
+
131
+ // We add the current version at the beginning, unless:
132
+ // - user don't want to; or
133
+ // - it's already been explicitly added to versions.json
134
+ if (
135
+ options.includeCurrentVersion &&
136
+ !versions.includes(CURRENT_VERSION_NAME)
137
+ ) {
138
+ versions.unshift(CURRENT_VERSION_NAME);
139
+ }
140
+
141
+ if (versions.length === 0) {
142
+ throw new Error(
143
+ `It is not possible to use docs without any version. No version is included because you have requested to not include ${path.resolve(
144
+ options.path,
145
+ )} through "includeCurrentVersion: false", while ${
146
+ options.disableVersioning
147
+ ? 'versioning is disabled with "disableVersioning: true"'
148
+ : `the versions file is empty/non-existent`
149
+ }.`,
150
+ );
151
+ }
152
+
153
+ return versions;
154
+ }
155
+
156
+ /**
157
+ * Gets the path-related version metadata.
158
+ *
159
+ * @throws Throws if the resolved docs folder or sidebars file doesn't exist.
160
+ * Does not throw if a versioned sidebar is missing (since we don't create empty
161
+ * files).
162
+ */
163
+ export async function getVersionMetadataPaths({
164
+ versionName,
165
+ context,
166
+ options,
167
+ }: VersionContext): Promise<
168
+ Pick<
169
+ VersionMetadata,
170
+ 'contentPath' | 'contentPathLocalized' | 'sidebarFilePath'
171
+ >
172
+ > {
173
+ const isCurrent = versionName === CURRENT_VERSION_NAME;
174
+ const contentPathLocalized = getDocsDirPathLocalized({
175
+ localizationDir: context.localizationDir,
176
+ pluginId: options.id,
177
+ versionName,
178
+ });
179
+ const contentPath = isCurrent
180
+ ? path.resolve(context.siteDir, options.path)
181
+ : getVersionDocsDirPath(context.siteDir, options.id, versionName);
182
+ const sidebarFilePath = isCurrent
183
+ ? options.sidebarPath
184
+ : getVersionSidebarsPath(context.siteDir, options.id, versionName);
185
+
186
+ if (!(await fs.pathExists(contentPath))) {
187
+ throw new Error(
188
+ `The docs folder does not exist for version "${versionName}". A docs folder is expected to be found at ${path.relative(
189
+ context.siteDir,
190
+ contentPath,
191
+ )}.`,
192
+ );
193
+ }
194
+
195
+ // If the current version defines a path to a sidebar file that does not
196
+ // exist, we throw! Note: for versioned sidebars, the file may not exist (as
197
+ // we prefer to not create it rather than to create an empty file)
198
+ // See https://github.com/facebook/docusaurus/issues/3366
199
+ // See https://github.com/facebook/docusaurus/pull/4775
200
+ if (
201
+ versionName === CURRENT_VERSION_NAME &&
202
+ typeof sidebarFilePath === 'string' &&
203
+ !(await fs.pathExists(sidebarFilePath))
204
+ ) {
205
+ throw new Error(`The path to the sidebar file does not exist at "${path.relative(
206
+ context.siteDir,
207
+ sidebarFilePath,
208
+ )}".
209
+ Please set the docs "sidebarPath" field in your config file to:
210
+ - a sidebars path that exists
211
+ - false: to disable the sidebar
212
+ - undefined: for Docusaurus to generate it automatically`);
213
+ }
214
+
215
+ return {contentPath, contentPathLocalized, sidebarFilePath};
216
+ }