@docusaurus/plugin-content-docs 2.0.0-beta.ff31de0ff → 2.0.0-rc.1

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 (231) 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 +62 -72
  5. package/lib/client/docsClientUtils.d.ts +9 -28
  6. package/lib/client/docsClientUtils.js +35 -51
  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 +35 -8
  12. package/lib/docs.js +211 -78
  13. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/frontMatter.d.ts} +4 -10
  14. package/lib/frontMatter.js +53 -0
  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 +137 -146
  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 +7 -4
  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 +57 -29
  29. package/lib/props.d.ts +7 -2
  30. package/lib/props.js +87 -16
  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 -6
  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/{types.d.ts → lib/sidebars/types.js} +2 -7
  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 +29 -19
  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 -172
  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 -29
  65. package/src/categoryGeneratedIndex.ts +60 -0
  66. package/src/cli.ts +94 -114
  67. package/src/client/docsClientUtils.ts +47 -84
  68. package/src/client/index.ts +158 -0
  69. package/src/constants.ts +4 -2
  70. package/src/docs.ts +294 -78
  71. package/src/frontMatter.ts +63 -0
  72. package/src/globalData.ts +57 -7
  73. package/src/index.ts +200 -204
  74. package/src/lastUpdate.ts +27 -34
  75. package/src/markdown/index.ts +10 -16
  76. package/src/markdown/linkify.ts +8 -5
  77. package/src/numberPrefix.ts +19 -26
  78. package/src/options.ts +61 -43
  79. package/src/plugin-content-docs.d.ts +575 -78
  80. package/src/props.ts +128 -23
  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 +42 -23
  93. package/src/tags.ts +20 -0
  94. package/src/translations.ts +155 -124
  95. package/src/types.ts +17 -234
  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 -4673
  100. package/lib/docFrontMatter.d.ts +0 -21
  101. package/lib/docFrontMatter.js +0 -33
  102. package/lib/sidebarItemsGenerator.js +0 -211
  103. package/lib/sidebars.d.ts +0 -42
  104. package/lib/sidebars.js +0 -309
  105. package/lib/theme/hooks/useDocs.d.ts +0 -20
  106. package/lib/theme/hooks/useDocs.js +0 -72
  107. package/lib/versions.d.ts +0 -16
  108. package/lib/versions.js +0 -287
  109. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  110. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  111. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  112. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  113. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  114. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  115. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  116. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  117. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  118. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  119. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  120. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  121. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  122. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  123. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  124. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  125. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  126. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  127. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -67
  128. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  129. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -52
  130. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  131. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  132. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  133. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  134. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  135. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  136. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  137. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  138. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  139. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  140. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  141. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  142. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  143. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  144. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  145. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  146. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  147. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  148. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  149. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  150. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  151. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  152. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  153. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  154. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  155. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  156. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  157. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  158. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  159. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  160. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js +0 -14
  161. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  162. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  163. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  164. package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
  165. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  166. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  167. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  168. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  169. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  170. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  171. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  172. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  173. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  174. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  175. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  176. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  177. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  178. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  179. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  180. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  181. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  182. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  183. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  184. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  185. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  186. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  187. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  188. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  189. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  190. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  191. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  192. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  193. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  194. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  195. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  196. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  197. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  198. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  199. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
  200. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1907
  201. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
  202. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
  203. package/src/__tests__/cli.test.ts +0 -333
  204. package/src/__tests__/docFrontMatter.test.ts +0 -204
  205. package/src/__tests__/docs.test.ts +0 -875
  206. package/src/__tests__/index.test.ts +0 -1831
  207. package/src/__tests__/lastUpdate.test.ts +0 -68
  208. package/src/__tests__/numberPrefix.test.ts +0 -199
  209. package/src/__tests__/options.test.ts +0 -232
  210. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  211. package/src/__tests__/sidebars.test.ts +0 -638
  212. package/src/__tests__/slug.test.ts +0 -109
  213. package/src/__tests__/translations.test.ts +0 -159
  214. package/src/__tests__/versions.test.ts +0 -718
  215. package/src/client/__tests__/docsClientUtils.test.ts +0 -372
  216. package/src/docFrontMatter.ts +0 -53
  217. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  218. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  219. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  220. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  221. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  222. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  223. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  224. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  225. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  226. package/src/markdown/__tests__/linkify.test.ts +0 -190
  227. package/src/sidebarItemsGenerator.ts +0 -307
  228. package/src/sidebars.ts +0 -489
  229. package/src/theme/hooks/useDocs.ts +0 -99
  230. package/src/versions.ts +0 -511
  231. package/tsconfig.json +0 -9
package/src/types.ts CHANGED
@@ -5,260 +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
- isLast: boolean;
34
- sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
35
- routePriority: number | undefined; // -1 for the latest docs
36
- };
37
-
38
- export type EditUrlFunction = (editUrlParams: {
39
- version: string;
40
- versionDocsDirPath: string;
41
- docPath: string;
42
- permalink: string;
43
- locale: string;
44
- }) => string | undefined;
45
-
46
- export type MetadataOptions = {
47
- routeBasePath: string;
48
- homePageId?: string;
49
- editUrl?: string | EditUrlFunction;
50
- editCurrentVersion: boolean;
51
- editLocalizedFiles: boolean;
52
- showLastUpdateTime?: boolean;
53
- showLastUpdateAuthor?: boolean;
54
- numberPrefixParser: NumberPrefixParser;
55
- };
56
-
57
- export type PathOptions = {
58
- path: string;
59
- sidebarPath?: string | false | undefined;
60
- };
61
-
62
- export type VersionOptions = {
63
- path?: string;
64
- label?: string;
65
- };
66
-
67
- export type VersionsOptions = {
68
- lastVersion?: string;
69
- versions: Record<string, VersionOptions>;
70
- onlyIncludeVersions?: string[];
71
- };
72
-
73
- export type PluginOptions = MetadataOptions &
74
- PathOptions &
75
- VersionsOptions &
76
- RemarkAndRehypePluginOptions & {
77
- id: string;
78
- include: string[];
79
- docLayoutComponent: string;
80
- docItemComponent: string;
81
- admonitions: Record<string, unknown>;
82
- disableVersioning: boolean;
83
- excludeNextVersionDocs?: boolean;
84
- includeCurrentVersion: boolean;
85
- sidebarItemsGenerator: SidebarItemsGeneratorOption;
86
- };
87
-
88
- export type SidebarItemBase = {
89
- customProps?: Record<string, unknown>;
90
- };
91
-
92
- export type SidebarItemDoc = SidebarItemBase & {
93
- type: 'doc' | 'ref';
94
- label?: string;
95
- id: string;
96
- };
97
-
98
- export type SidebarItemLink = SidebarItemBase & {
99
- type: 'link';
100
- href: string;
101
- label: string;
102
- };
103
-
104
- export type SidebarItemCategory = SidebarItemBase & {
105
- type: 'category';
106
- label: string;
107
- items: SidebarItem[];
108
- collapsed: boolean;
109
- };
110
-
111
- export type UnprocessedSidebarItemAutogenerated = {
112
- type: 'autogenerated';
113
- dirName: string;
114
- };
115
-
116
- export type UnprocessedSidebarItemCategory = SidebarItemBase & {
117
- type: 'category';
118
- label: string;
119
- items: UnprocessedSidebarItem[];
120
- collapsed: boolean;
121
- };
122
-
123
- export type UnprocessedSidebarItem =
124
- | SidebarItemDoc
125
- | SidebarItemLink
126
- | UnprocessedSidebarItemCategory
127
- | UnprocessedSidebarItemAutogenerated;
128
-
129
- export type UnprocessedSidebar = UnprocessedSidebarItem[];
130
- export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
131
-
132
- export type SidebarItem =
133
- | SidebarItemDoc
134
- | SidebarItemLink
135
- | SidebarItemCategory;
136
-
137
- export type Sidebar = SidebarItem[];
138
- export type SidebarItemType = SidebarItem['type'];
139
- export type Sidebars = Record<string, Sidebar>;
140
-
141
- // Reduce API surface for options.sidebarItemsGenerator
142
- // The user-provided generator fn should receive only a subset of metadatas
143
- // A change to any of these metadatas can be considered as a breaking change
144
- export type SidebarItemsGeneratorDoc = Pick<
145
- DocMetadataBase,
146
- 'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
147
- >;
148
- export type SidebarItemsGeneratorVersion = Pick<
149
- VersionMetadata,
150
- 'versionName' | 'contentPath'
151
- >;
152
-
153
- export type SidebarItemsGeneratorArgs = {
154
- item: UnprocessedSidebarItemAutogenerated;
155
- version: SidebarItemsGeneratorVersion;
156
- docs: SidebarItemsGeneratorDoc[];
157
- numberPrefixParser: NumberPrefixParser;
158
- };
159
- export type SidebarItemsGenerator = (
160
- generatorArgs: SidebarItemsGeneratorArgs,
161
- ) => Promise<SidebarItem[]>;
162
-
163
- // Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
164
- // see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
165
- export type SidebarItemsGeneratorOptionArgs = {
166
- defaultSidebarItemsGenerator: SidebarItemsGenerator;
167
- } & SidebarItemsGeneratorArgs;
168
- export type SidebarItemsGeneratorOption = (
169
- generatorArgs: SidebarItemsGeneratorOptionArgs,
170
- ) => Promise<SidebarItem[]>;
171
-
172
- export type OrderMetadata = {
173
- previous?: string;
174
- next?: string;
175
- sidebar?: string;
176
- };
177
-
178
- export type LastUpdateData = {
179
- lastUpdatedAt?: number;
180
- formattedLastUpdatedAt?: string;
181
- lastUpdatedBy?: string;
182
- };
183
-
184
- export type FrontMatter = {
185
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
- [key: string]: any;
187
- };
188
-
189
- export type DocMetadataBase = LastUpdateData & {
190
- version: VersionName;
191
- unversionedId: string;
192
- id: string;
193
- isDocsHomePage: boolean;
194
- title: string;
195
- description: string;
196
- source: string;
197
- sourceDirName: string; // relative to the docs folder (can be ".")
198
- slug: string;
199
- permalink: string;
200
- // eslint-disable-next-line camelcase
201
- sidebar_label?: string;
202
- sidebarPosition?: number;
203
- editUrl?: string | null;
204
- frontMatter: FrontMatter;
205
- };
206
-
207
- export type DocNavLink = {
208
- title: string;
209
- permalink: string;
210
- };
211
-
212
- export type DocMetadata = DocMetadataBase & {
213
- sidebar?: string;
214
- previous?: DocNavLink;
215
- next?: DocNavLink;
216
21
  };
217
22
 
218
23
  export type SourceToPermalink = {
219
24
  [source: string]: string;
220
25
  };
221
- export type LoadedVersion = VersionMetadata & {
222
- versionPath: string;
223
- mainDocId: string;
224
- docs: DocMetadata[];
225
- sidebars: Sidebars;
226
- permalinkToSidebar: Record<string, string>;
227
- };
228
-
229
- export type LoadedContent = {
230
- loadedVersions: LoadedVersion[];
231
- };
232
26
 
233
- export type GlobalDoc = {
234
- id: string;
235
- path: string;
236
- sidebar: string | undefined;
27
+ export type VersionTag = Tag & {
28
+ /** All doc ids having this tag. */
29
+ docIds: string[];
237
30
  };
238
-
239
- export type GlobalVersion = {
240
- name: VersionName;
241
- label: string;
242
- isLast: boolean;
243
- path: string;
244
- mainDocId: string; // home doc (if docs homepage configured), or first doc
245
- docs: GlobalDoc[];
31
+ export type VersionTags = {
32
+ [permalink: string]: VersionTag;
246
33
  };
247
34
 
248
- export type GlobalPluginData = {
249
- path: string;
250
- versions: GlobalVersion[];
35
+ export type FullVersion = LoadedVersion & {
36
+ sidebarsUtils: SidebarsUtils;
37
+ categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
251
38
  };
252
39
 
253
- export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
40
+ export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
254
41
 
255
42
  export type DocsMarkdownOption = {
256
43
  versionsMetadata: VersionMetadata[];
257
44
  siteDir: string;
258
45
  sourceToPermalink: SourceToPermalink;
259
- onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
46
+ onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
260
47
  };
261
-
262
- export type NumberPrefixParser = (
263
- filename: string,
264
- ) => {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
+ }