@docusaurus/plugin-content-docs 2.0.0-beta.2 → 2.0.0-beta.22

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