@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
@@ -1,337 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import path from 'path';
9
- import {cliDocsVersionCommand} from '../cli';
10
- import {PathOptions, SidebarOptions} from '../types';
11
- import fs from 'fs-extra';
12
- import {
13
- getVersionedDocsDirPath,
14
- getVersionsFilePath,
15
- getVersionedSidebarsDirPath,
16
- } from '../versions';
17
- import {DEFAULT_PLUGIN_ID} from '@docusaurus/core/lib/constants';
18
-
19
- const fixtureDir = path.join(__dirname, '__fixtures__');
20
-
21
- describe('docsVersion', () => {
22
- const simpleSiteDir = path.join(fixtureDir, 'simple-site');
23
- const versionedSiteDir = path.join(fixtureDir, 'versioned-site');
24
-
25
- const DEFAULT_OPTIONS: PathOptions & SidebarOptions = {
26
- path: 'docs',
27
- sidebarPath: '',
28
- sidebarCollapsed: true,
29
- sidebarCollapsible: true,
30
- };
31
-
32
- test('no version tag provided', () => {
33
- expect(() =>
34
- cliDocsVersionCommand(
35
- null,
36
- simpleSiteDir,
37
- DEFAULT_PLUGIN_ID,
38
- DEFAULT_OPTIONS,
39
- ),
40
- ).toThrowErrorMatchingInlineSnapshot(
41
- `"[docs]: no version tag specified! Pass the version you wish to create as an argument, for example: 1.0.0."`,
42
- );
43
- expect(() =>
44
- cliDocsVersionCommand(
45
- undefined,
46
- simpleSiteDir,
47
- DEFAULT_PLUGIN_ID,
48
- DEFAULT_OPTIONS,
49
- ),
50
- ).toThrowErrorMatchingInlineSnapshot(
51
- `"[docs]: no version tag specified! Pass the version you wish to create as an argument, for example: 1.0.0."`,
52
- );
53
- expect(() =>
54
- cliDocsVersionCommand(
55
- '',
56
- simpleSiteDir,
57
- DEFAULT_PLUGIN_ID,
58
- DEFAULT_OPTIONS,
59
- ),
60
- ).toThrowErrorMatchingInlineSnapshot(
61
- `"[docs]: no version tag specified! Pass the version you wish to create as an argument, for example: 1.0.0."`,
62
- );
63
- });
64
-
65
- test('version tag should not have slash', () => {
66
- expect(() =>
67
- cliDocsVersionCommand(
68
- 'foo/bar',
69
- simpleSiteDir,
70
- DEFAULT_PLUGIN_ID,
71
- DEFAULT_OPTIONS,
72
- ),
73
- ).toThrowErrorMatchingInlineSnapshot(
74
- `"[docs]: invalid version tag specified! Do not include slash (/) or backslash (\\\\). Try something like: 1.0.0."`,
75
- );
76
- expect(() =>
77
- cliDocsVersionCommand(
78
- 'foo\\bar',
79
- simpleSiteDir,
80
- DEFAULT_PLUGIN_ID,
81
- DEFAULT_OPTIONS,
82
- ),
83
- ).toThrowErrorMatchingInlineSnapshot(
84
- `"[docs]: invalid version tag specified! Do not include slash (/) or backslash (\\\\). Try something like: 1.0.0."`,
85
- );
86
- });
87
-
88
- test('version tag should not be too long', () => {
89
- expect(() =>
90
- cliDocsVersionCommand(
91
- 'a'.repeat(255),
92
- simpleSiteDir,
93
- DEFAULT_PLUGIN_ID,
94
- DEFAULT_OPTIONS,
95
- ),
96
- ).toThrowErrorMatchingInlineSnapshot(
97
- `"[docs]: invalid version tag specified! Length cannot exceed 32 characters. Try something like: 1.0.0."`,
98
- );
99
- });
100
-
101
- test('version tag should not be a dot or two dots', () => {
102
- expect(() =>
103
- cliDocsVersionCommand(
104
- '..',
105
- simpleSiteDir,
106
- DEFAULT_PLUGIN_ID,
107
- DEFAULT_OPTIONS,
108
- ),
109
- ).toThrowErrorMatchingInlineSnapshot(
110
- `"[docs]: invalid version tag specified! Do not name your version \\".\\" or \\"..\\". Try something like: 1.0.0."`,
111
- );
112
- expect(() =>
113
- cliDocsVersionCommand(
114
- '.',
115
- simpleSiteDir,
116
- DEFAULT_PLUGIN_ID,
117
- DEFAULT_OPTIONS,
118
- ),
119
- ).toThrowErrorMatchingInlineSnapshot(
120
- `"[docs]: invalid version tag specified! Do not name your version \\".\\" or \\"..\\". Try something like: 1.0.0."`,
121
- );
122
- });
123
-
124
- test('version tag should be a valid pathname', () => {
125
- expect(() =>
126
- cliDocsVersionCommand(
127
- '<foo|bar>',
128
- simpleSiteDir,
129
- DEFAULT_PLUGIN_ID,
130
- DEFAULT_OPTIONS,
131
- ),
132
- ).toThrowErrorMatchingInlineSnapshot(
133
- `"[docs]: invalid version tag specified! Please ensure its a valid pathname too. Try something like: 1.0.0."`,
134
- );
135
- expect(() =>
136
- cliDocsVersionCommand(
137
- 'foo\x00bar',
138
- simpleSiteDir,
139
- DEFAULT_PLUGIN_ID,
140
- DEFAULT_OPTIONS,
141
- ),
142
- ).toThrowErrorMatchingInlineSnapshot(
143
- `"[docs]: invalid version tag specified! Please ensure its a valid pathname too. Try something like: 1.0.0."`,
144
- );
145
- expect(() =>
146
- cliDocsVersionCommand(
147
- 'foo:bar',
148
- simpleSiteDir,
149
- DEFAULT_PLUGIN_ID,
150
- DEFAULT_OPTIONS,
151
- ),
152
- ).toThrowErrorMatchingInlineSnapshot(
153
- `"[docs]: invalid version tag specified! Please ensure its a valid pathname too. Try something like: 1.0.0."`,
154
- );
155
- });
156
-
157
- test('version tag already exist', () => {
158
- expect(() =>
159
- cliDocsVersionCommand(
160
- '1.0.0',
161
- versionedSiteDir,
162
- DEFAULT_PLUGIN_ID,
163
- DEFAULT_OPTIONS,
164
- ),
165
- ).toThrowErrorMatchingInlineSnapshot(
166
- `"[docs]: this version already exists! Use a version tag that does not already exist."`,
167
- );
168
- });
169
-
170
- test('no docs file to version', () => {
171
- const emptySiteDir = path.join(fixtureDir, 'empty-site');
172
- expect(() =>
173
- cliDocsVersionCommand(
174
- '1.0.0',
175
- emptySiteDir,
176
- DEFAULT_PLUGIN_ID,
177
- DEFAULT_OPTIONS,
178
- ),
179
- ).toThrowErrorMatchingInlineSnapshot(
180
- `"[docs]: there is no docs to version!"`,
181
- );
182
- });
183
-
184
- test('first time versioning', () => {
185
- const copyMock = jest.spyOn(fs, 'copySync').mockImplementation();
186
- const ensureMock = jest.spyOn(fs, 'ensureDirSync').mockImplementation();
187
- const writeMock = jest.spyOn(fs, 'writeFileSync');
188
- let versionedSidebar;
189
- let versionedSidebarPath;
190
- writeMock.mockImplementationOnce((filepath, content) => {
191
- versionedSidebarPath = filepath;
192
- versionedSidebar = JSON.parse(content as string);
193
- });
194
- let versionsPath;
195
- let versions;
196
- writeMock.mockImplementationOnce((filepath, content) => {
197
- versionsPath = filepath;
198
- versions = JSON.parse(content as string);
199
- });
200
- const consoleMock = jest.spyOn(console, 'log').mockImplementation();
201
- const options = {
202
- ...DEFAULT_OPTIONS,
203
- sidebarPath: path.join(simpleSiteDir, 'sidebars.json'),
204
- };
205
- cliDocsVersionCommand('1.0.0', simpleSiteDir, DEFAULT_PLUGIN_ID, options);
206
- expect(copyMock).toHaveBeenCalledWith(
207
- path.join(simpleSiteDir, options.path),
208
- path.join(
209
- getVersionedDocsDirPath(simpleSiteDir, DEFAULT_PLUGIN_ID),
210
- 'version-1.0.0',
211
- ),
212
- );
213
- expect(versionedSidebar).toMatchSnapshot();
214
- expect(versionedSidebarPath).toEqual(
215
- path.join(
216
- getVersionedSidebarsDirPath(simpleSiteDir, DEFAULT_PLUGIN_ID),
217
- 'version-1.0.0-sidebars.json',
218
- ),
219
- );
220
- expect(versionsPath).toEqual(
221
- getVersionsFilePath(simpleSiteDir, DEFAULT_PLUGIN_ID),
222
- );
223
- expect(versions).toEqual(['1.0.0']);
224
- expect(consoleMock).toHaveBeenCalledWith('[docs]: version 1.0.0 created!');
225
-
226
- copyMock.mockRestore();
227
- writeMock.mockRestore();
228
- consoleMock.mockRestore();
229
- ensureMock.mockRestore();
230
- });
231
-
232
- test('not the first time versioning', () => {
233
- const copyMock = jest.spyOn(fs, 'copySync').mockImplementation();
234
- const ensureMock = jest.spyOn(fs, 'ensureDirSync').mockImplementation();
235
- const writeMock = jest.spyOn(fs, 'writeFileSync');
236
- let versionedSidebar;
237
- let versionedSidebarPath;
238
- writeMock.mockImplementationOnce((filepath, content) => {
239
- versionedSidebarPath = filepath;
240
- versionedSidebar = JSON.parse(content as string);
241
- });
242
- let versionsPath;
243
- let versions;
244
- writeMock.mockImplementationOnce((filepath, content) => {
245
- versionsPath = filepath;
246
- versions = JSON.parse(content as string);
247
- });
248
- const consoleMock = jest.spyOn(console, 'log').mockImplementation();
249
- const options = {
250
- ...DEFAULT_OPTIONS,
251
- sidebarPath: path.join(versionedSiteDir, 'sidebars.json'),
252
- };
253
- cliDocsVersionCommand(
254
- '2.0.0',
255
- versionedSiteDir,
256
- DEFAULT_PLUGIN_ID,
257
- options,
258
- );
259
- expect(copyMock).toHaveBeenCalledWith(
260
- path.join(versionedSiteDir, options.path),
261
- path.join(
262
- getVersionedDocsDirPath(versionedSiteDir, DEFAULT_PLUGIN_ID),
263
- 'version-2.0.0',
264
- ),
265
- );
266
- expect(versionedSidebar).toMatchSnapshot();
267
- expect(versionedSidebarPath).toEqual(
268
- path.join(
269
- getVersionedSidebarsDirPath(versionedSiteDir, DEFAULT_PLUGIN_ID),
270
- 'version-2.0.0-sidebars.json',
271
- ),
272
- );
273
- expect(versionsPath).toEqual(
274
- getVersionsFilePath(versionedSiteDir, DEFAULT_PLUGIN_ID),
275
- );
276
- expect(versions).toEqual(['2.0.0', '1.0.1', '1.0.0', 'withSlugs']);
277
- expect(consoleMock).toHaveBeenCalledWith('[docs]: version 2.0.0 created!');
278
-
279
- copyMock.mockRestore();
280
- writeMock.mockRestore();
281
- consoleMock.mockRestore();
282
- ensureMock.mockRestore();
283
- });
284
-
285
- test('second docs instance versioning', () => {
286
- const pluginId = 'community';
287
-
288
- const copyMock = jest.spyOn(fs, 'copySync').mockImplementation();
289
- const ensureMock = jest.spyOn(fs, 'ensureDirSync').mockImplementation();
290
- const writeMock = jest.spyOn(fs, 'writeFileSync');
291
- let versionedSidebar;
292
- let versionedSidebarPath;
293
- writeMock.mockImplementationOnce((filepath, content) => {
294
- versionedSidebarPath = filepath;
295
- versionedSidebar = JSON.parse(content as string);
296
- });
297
- let versionsPath;
298
- let versions;
299
- writeMock.mockImplementationOnce((filepath, content) => {
300
- versionsPath = filepath;
301
- versions = JSON.parse(content as string);
302
- });
303
- const consoleMock = jest.spyOn(console, 'log').mockImplementation();
304
- const options = {
305
- ...DEFAULT_OPTIONS,
306
- path: 'community',
307
- sidebarPath: path.join(versionedSiteDir, 'community_sidebars.json'),
308
- };
309
- cliDocsVersionCommand('2.0.0', versionedSiteDir, pluginId, options);
310
- expect(copyMock).toHaveBeenCalledWith(
311
- path.join(versionedSiteDir, options.path),
312
- path.join(
313
- getVersionedDocsDirPath(versionedSiteDir, pluginId),
314
- 'version-2.0.0',
315
- ),
316
- );
317
- expect(versionedSidebar).toMatchSnapshot();
318
- expect(versionedSidebarPath).toEqual(
319
- path.join(
320
- getVersionedSidebarsDirPath(versionedSiteDir, pluginId),
321
- 'version-2.0.0-sidebars.json',
322
- ),
323
- );
324
- expect(versionsPath).toEqual(
325
- getVersionsFilePath(versionedSiteDir, pluginId),
326
- );
327
- expect(versions).toEqual(['2.0.0', '1.0.0']);
328
- expect(consoleMock).toHaveBeenCalledWith(
329
- '[community]: version 2.0.0 created!',
330
- );
331
-
332
- copyMock.mockRestore();
333
- writeMock.mockRestore();
334
- consoleMock.mockRestore();
335
- ensureMock.mockRestore();
336
- });
337
- });
@@ -1,244 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- import {validateDocFrontMatter} from '../docFrontMatter';
9
- import {DocFrontMatter} from '../types';
10
- import escapeStringRegexp from 'escape-string-regexp';
11
-
12
- function testField(params: {
13
- fieldName: keyof DocFrontMatter;
14
- validFrontMatters: DocFrontMatter[];
15
- convertibleFrontMatter?: [
16
- ConvertableFrontMatter: Record<string, unknown>,
17
- ConvertedFrontMatter: DocFrontMatter,
18
- ][];
19
- invalidFrontMatters?: [
20
- InvalidFrontMatter: Record<string, unknown>,
21
- ErrorMessage: string,
22
- ][];
23
- }) {
24
- describe(`"${params.fieldName}" field`, () => {
25
- test('accept valid values', () => {
26
- params.validFrontMatters.forEach((frontMatter) => {
27
- expect(validateDocFrontMatter(frontMatter)).toEqual(frontMatter);
28
- });
29
- });
30
-
31
- test('convert valid values', () => {
32
- params.convertibleFrontMatter?.forEach(
33
- ([convertibleFrontMatter, convertedFrontMatter]) => {
34
- expect(validateDocFrontMatter(convertibleFrontMatter)).toEqual(
35
- convertedFrontMatter,
36
- );
37
- },
38
- );
39
- });
40
-
41
- test('throw error for values', () => {
42
- params.invalidFrontMatters?.forEach(([frontMatter, message]) => {
43
- try {
44
- validateDocFrontMatter(frontMatter);
45
- fail(
46
- new Error(
47
- `Doc frontmatter is expected to be rejected, but was accepted successfully:\n ${JSON.stringify(
48
- frontMatter,
49
- null,
50
- 2,
51
- )}`,
52
- ),
53
- );
54
- } catch (e) {
55
- expect(e.message).toMatch(new RegExp(escapeStringRegexp(message)));
56
- }
57
- });
58
- });
59
- });
60
- }
61
-
62
- describe('validateDocFrontMatter', () => {
63
- test('accept empty object', () => {
64
- const frontMatter: DocFrontMatter = {};
65
- expect(validateDocFrontMatter(frontMatter)).toEqual(frontMatter);
66
- });
67
-
68
- test('accept unknown field', () => {
69
- const frontMatter = {abc: '1'};
70
- expect(validateDocFrontMatter(frontMatter)).toEqual(frontMatter);
71
- });
72
- });
73
-
74
- describe('validateDocFrontMatter id', () => {
75
- testField({
76
- fieldName: 'id',
77
- validFrontMatters: [{id: '123'}, {id: 'unique_id'}],
78
- invalidFrontMatters: [[{id: ''}, 'is not allowed to be empty']],
79
- });
80
- });
81
-
82
- describe('validateDocFrontMatter title', () => {
83
- testField({
84
- fieldName: 'title',
85
- validFrontMatters: [
86
- // See https://github.com/facebook/docusaurus/issues/4591#issuecomment-822372398
87
- {title: ''},
88
- {title: 'title'},
89
- ],
90
- });
91
- });
92
-
93
- describe('validateDocFrontMatter hide_title', () => {
94
- testField({
95
- fieldName: 'hide_title',
96
- validFrontMatters: [{hide_title: true}, {hide_title: false}],
97
- convertibleFrontMatter: [
98
- [{hide_title: 'true'}, {hide_title: true}],
99
- [{hide_title: 'false'}, {hide_title: false}],
100
- ],
101
- invalidFrontMatters: [
102
- [{hide_title: 'yes'}, 'must be a boolean'],
103
- [{hide_title: 'no'}, 'must be a boolean'],
104
- [{hide_title: ''}, 'must be a boolean'],
105
- ],
106
- });
107
- });
108
-
109
- describe('validateDocFrontMatter hide_table_of_contents', () => {
110
- testField({
111
- fieldName: 'hide_table_of_contents',
112
- validFrontMatters: [
113
- {hide_table_of_contents: true},
114
- {hide_table_of_contents: false},
115
- ],
116
- convertibleFrontMatter: [
117
- [{hide_table_of_contents: 'true'}, {hide_table_of_contents: true}],
118
- [{hide_table_of_contents: 'false'}, {hide_table_of_contents: false}],
119
- ],
120
- invalidFrontMatters: [
121
- [{hide_table_of_contents: 'yes'}, 'must be a boolean'],
122
- [{hide_table_of_contents: 'no'}, 'must be a boolean'],
123
- [{hide_table_of_contents: ''}, 'must be a boolean'],
124
- ],
125
- });
126
- });
127
-
128
- describe('validateDocFrontMatter keywords', () => {
129
- testField({
130
- fieldName: 'keywords',
131
- validFrontMatters: [
132
- {keywords: ['hello']},
133
- {keywords: ['hello', 'world']},
134
- {keywords: ['hello', 'world']},
135
- {keywords: ['hello']},
136
- ],
137
- invalidFrontMatters: [
138
- [{keywords: ''}, 'must be an array'],
139
- [{keywords: ['']}, 'is not allowed to be empty'],
140
- [{keywords: []}, 'does not contain 1 required value(s)'],
141
- ],
142
- });
143
- });
144
-
145
- describe('validateDocFrontMatter image', () => {
146
- testField({
147
- fieldName: 'image',
148
- validFrontMatters: [
149
- {image: 'https://docusaurus.io/blog/image.png'},
150
- {image: '/absolute/image.png'},
151
- {image: '../relative/image.png'},
152
- ],
153
- invalidFrontMatters: [
154
- [{image: ''}, 'does not match any of the allowed types'],
155
- ],
156
- });
157
- });
158
-
159
- describe('validateDocFrontMatter description', () => {
160
- testField({
161
- fieldName: 'description',
162
- validFrontMatters: [
163
- // See https://github.com/facebook/docusaurus/issues/4591#issuecomment-822372398
164
- {description: ''},
165
- {description: 'description'},
166
- ],
167
- });
168
- });
169
-
170
- describe('validateDocFrontMatter slug', () => {
171
- testField({
172
- fieldName: 'slug',
173
- validFrontMatters: [
174
- {slug: '/'},
175
- {slug: 'slug'},
176
- {slug: '/slug/'},
177
- {slug: './slug'},
178
- {slug: '../../slug'},
179
- {slug: '/api/plugins/@docusaurus'},
180
- {slug: '@site/api/asset'},
181
- {slug: 'slug1 slug2'},
182
- ],
183
- invalidFrontMatters: [[{slug: ''}, 'is not allowed to be empty']],
184
- });
185
- });
186
-
187
- describe('validateDocFrontMatter sidebar_label', () => {
188
- testField({
189
- fieldName: 'sidebar_label',
190
- validFrontMatters: [{sidebar_label: 'Awesome docs'}],
191
- invalidFrontMatters: [[{sidebar_label: ''}, 'is not allowed to be empty']],
192
- });
193
- });
194
-
195
- describe('validateDocFrontMatter sidebar_position', () => {
196
- testField({
197
- fieldName: 'sidebar_position',
198
- validFrontMatters: [
199
- {sidebar_position: -5},
200
- {sidebar_position: -3.5},
201
- {sidebar_position: 0},
202
- {sidebar_position: 5},
203
- {sidebar_position: 3.5},
204
- ],
205
- convertibleFrontMatter: [
206
- [{sidebar_position: '-1.5'}, {sidebar_position: -1.5}],
207
- [{sidebar_position: '1'}, {sidebar_position: 1}],
208
- [{sidebar_position: '1.5'}, {sidebar_position: 1.5}],
209
- ],
210
- });
211
- });
212
-
213
- describe('validateDocFrontMatter custom_edit_url', () => {
214
- testField({
215
- fieldName: 'custom_edit_url',
216
- validFrontMatters: [
217
- // See https://github.com/demisto/content-docs/pull/616#issuecomment-827087566
218
- {custom_edit_url: ''},
219
- {custom_edit_url: null},
220
- {custom_edit_url: 'https://github.com/facebook/docusaurus/markdown.md'},
221
- {custom_edit_url: '../../api/docs/markdown.md'},
222
- {custom_edit_url: '@site/api/docs/markdown.md'},
223
- ],
224
- });
225
- });
226
-
227
- describe('validateDocFrontMatter parse_number_prefixes', () => {
228
- testField({
229
- fieldName: 'parse_number_prefixes',
230
- validFrontMatters: [
231
- {parse_number_prefixes: true},
232
- {parse_number_prefixes: false},
233
- ],
234
- convertibleFrontMatter: [
235
- [{parse_number_prefixes: 'true'}, {parse_number_prefixes: true}],
236
- [{parse_number_prefixes: 'false'}, {parse_number_prefixes: false}],
237
- ],
238
- invalidFrontMatters: [
239
- [{parse_number_prefixes: 'yes'}, 'must be a boolean'],
240
- [{parse_number_prefixes: 'no'}, 'must be a boolean'],
241
- [{parse_number_prefixes: ''}, 'must be a boolean'],
242
- ],
243
- });
244
- });