@docusaurus/plugin-content-docs 2.0.0-beta.138b4c997 → 2.0.0-beta.14

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 (201) hide show
  1. package/lib/categoryGeneratedIndex.d.ts +12 -0
  2. package/lib/categoryGeneratedIndex.js +37 -0
  3. package/lib/cli.d.ts +2 -2
  4. package/lib/cli.js +14 -35
  5. package/lib/client/docsClientUtils.d.ts +0 -3
  6. package/lib/client/docsClientUtils.js +19 -22
  7. package/lib/docFrontMatter.d.ts +1 -1
  8. package/lib/docFrontMatter.js +8 -4
  9. package/lib/docs.d.ts +25 -3
  10. package/lib/docs.js +126 -41
  11. package/lib/globalData.d.ts +1 -1
  12. package/lib/index.d.ts +1 -1
  13. package/lib/index.js +101 -133
  14. package/lib/lastUpdate.js +12 -12
  15. package/lib/markdown/index.d.ts +3 -6
  16. package/lib/markdown/index.js +3 -3
  17. package/lib/markdown/linkify.js +2 -2
  18. package/lib/numberPrefix.d.ts +1 -1
  19. package/lib/options.d.ts +3 -3
  20. package/lib/options.js +48 -11
  21. package/lib/props.d.ts +7 -2
  22. package/lib/props.js +60 -9
  23. package/lib/routes.d.ts +27 -0
  24. package/lib/routes.js +105 -0
  25. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +5 -2
  26. package/lib/sidebars/generator.js +216 -0
  27. package/lib/sidebars/index.d.ts +15 -0
  28. package/lib/sidebars/index.js +73 -0
  29. package/lib/sidebars/normalization.d.ts +14 -0
  30. package/lib/sidebars/normalization.js +77 -0
  31. package/lib/sidebars/processor.d.ts +18 -0
  32. package/lib/sidebars/processor.js +85 -0
  33. package/lib/sidebars/types.d.ts +127 -0
  34. package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/sidebars/types.js} +2 -10
  35. package/lib/sidebars/utils.d.ts +35 -0
  36. package/lib/sidebars/utils.js +228 -0
  37. package/lib/sidebars/validation.d.ts +10 -0
  38. package/lib/sidebars/validation.js +138 -0
  39. package/lib/slug.d.ts +4 -3
  40. package/lib/slug.js +27 -15
  41. package/{src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js → lib/tags.d.ts} +2 -8
  42. package/lib/tags.js +20 -0
  43. package/lib/theme/hooks/useDocs.js +24 -21
  44. package/lib/translations.d.ts +2 -2
  45. package/lib/translations.js +71 -29
  46. package/lib/types.d.ts +52 -64
  47. package/lib/versions.d.ts +3 -3
  48. package/lib/versions.js +41 -22
  49. package/package.json +20 -20
  50. package/src/categoryGeneratedIndex.ts +57 -0
  51. package/src/cli.ts +10 -42
  52. package/src/client/docsClientUtils.ts +14 -26
  53. package/{types.d.ts → src/deps.d.ts} +0 -0
  54. package/src/docFrontMatter.ts +10 -5
  55. package/src/docs.ts +164 -36
  56. package/src/globalData.ts +6 -1
  57. package/src/index.ts +127 -177
  58. package/src/lastUpdate.ts +14 -16
  59. package/src/markdown/index.ts +8 -12
  60. package/src/numberPrefix.ts +5 -3
  61. package/src/options.ts +56 -15
  62. package/src/plugin-content-docs.d.ts +172 -43
  63. package/src/props.ts +90 -16
  64. package/src/routes.ts +169 -0
  65. package/src/sidebars/generator.ts +302 -0
  66. package/src/sidebars/index.ts +94 -0
  67. package/src/sidebars/normalization.ts +112 -0
  68. package/src/sidebars/processor.ts +154 -0
  69. package/src/sidebars/types.ts +211 -0
  70. package/src/sidebars/utils.ts +329 -0
  71. package/src/sidebars/validation.ts +168 -0
  72. package/src/slug.ts +32 -17
  73. package/src/tags.ts +19 -0
  74. package/src/theme/hooks/useDocs.ts +5 -1
  75. package/src/translations.ts +103 -47
  76. package/src/types.ts +64 -108
  77. package/src/versions.ts +59 -25
  78. package/lib/.tsbuildinfo +0 -1
  79. package/lib/sidebarItemsGenerator.js +0 -211
  80. package/lib/sidebars.d.ts +0 -43
  81. package/lib/sidebars.js +0 -320
  82. package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
  83. package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
  84. package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
  85. package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
  86. package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
  87. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
  88. package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
  89. package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
  90. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
  91. package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
  92. package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
  93. package/src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -20
  94. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
  95. package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
  96. package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
  97. package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
  98. package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
  99. package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
  100. package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
  101. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
  102. package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
  103. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
  104. package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
  105. package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
  106. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
  107. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
  108. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
  109. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
  110. package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
  111. package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
  112. package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
  113. package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
  114. package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
  115. package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
  116. package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
  117. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
  118. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
  119. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
  120. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
  121. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
  122. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
  123. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
  124. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
  125. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
  126. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
  127. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
  128. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
  129. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
  130. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
  131. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
  132. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
  133. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
  134. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js +0 -14
  135. package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
  136. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
  137. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
  138. package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
  139. package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
  140. package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
  141. package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
  142. package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
  143. package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
  144. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
  145. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
  146. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
  147. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
  148. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
  149. package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
  150. package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
  151. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  152. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
  153. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
  154. package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
  155. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
  156. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
  157. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
  158. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
  159. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
  160. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
  161. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
  162. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
  163. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
  164. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
  165. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
  166. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
  167. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
  168. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  169. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
  170. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
  171. package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
  172. package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
  173. package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1916
  174. package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
  175. package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
  176. package/src/__tests__/cli.test.ts +0 -333
  177. package/src/__tests__/docFrontMatter.test.ts +0 -244
  178. package/src/__tests__/docs.test.ts +0 -878
  179. package/src/__tests__/index.test.ts +0 -1871
  180. package/src/__tests__/lastUpdate.test.ts +0 -69
  181. package/src/__tests__/numberPrefix.test.ts +0 -199
  182. package/src/__tests__/options.test.ts +0 -231
  183. package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
  184. package/src/__tests__/sidebars.test.ts +0 -639
  185. package/src/__tests__/slug.test.ts +0 -109
  186. package/src/__tests__/translations.test.ts +0 -159
  187. package/src/__tests__/versions.test.ts +0 -741
  188. package/src/client/__tests__/docsClientUtils.test.ts +0 -371
  189. package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
  190. package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
  191. package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
  192. package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
  193. package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
  194. package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
  195. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
  196. package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
  197. package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
  198. package/src/markdown/__tests__/linkify.test.ts +0 -190
  199. package/src/sidebarItemsGenerator.ts +0 -307
  200. package/src/sidebars.ts +0 -522
  201. package/tsconfig.json +0 -9
@@ -1,69 +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 fs from 'fs';
9
- import path from 'path';
10
- import shell from 'shelljs';
11
-
12
- import {getFileLastUpdate} from '../lastUpdate';
13
-
14
- describe('lastUpdate', () => {
15
- const existingFilePath = path.join(
16
- __dirname,
17
- '__fixtures__/simple-site/docs/hello.md',
18
- );
19
- test('existing test file in repository with Git timestamp', async () => {
20
- const lastUpdateData = await getFileLastUpdate(existingFilePath);
21
- expect(lastUpdateData).not.toBeNull();
22
-
23
- const {author, timestamp} = lastUpdateData;
24
- expect(author).not.toBeNull();
25
- expect(typeof author).toBe('string');
26
-
27
- expect(timestamp).not.toBeNull();
28
- expect(typeof timestamp).toBe('number');
29
- });
30
-
31
- test('non-existing file', async () => {
32
- const consoleMock = jest.spyOn(console, 'error');
33
- consoleMock.mockImplementation();
34
- const nonExistingFileName = '.nonExisting';
35
- const nonExistingFilePath = path.join(
36
- __dirname,
37
- '__fixtures__',
38
- nonExistingFileName,
39
- );
40
- expect(await getFileLastUpdate(nonExistingFilePath)).toBeNull();
41
- expect(consoleMock).toHaveBeenCalledTimes(1);
42
- expect(consoleMock.mock.calls[0][0].message).toContain(
43
- `Command failed with exit code 128: git log -1 --format=%ct, %an ${nonExistingFileName}`,
44
- );
45
- expect(await getFileLastUpdate(null)).toBeNull();
46
- expect(await getFileLastUpdate(undefined)).toBeNull();
47
- consoleMock.mockRestore();
48
- });
49
-
50
- test('temporary created file that has no git timestamp', async () => {
51
- const tempFilePath = path.join(__dirname, '__fixtures__', '.temp');
52
- fs.writeFileSync(tempFilePath, 'Lorem ipsum :)');
53
- expect(await getFileLastUpdate(tempFilePath)).toBeNull();
54
- fs.unlinkSync(tempFilePath);
55
- });
56
-
57
- test('Git does not exist', async () => {
58
- const mock = jest.spyOn(shell, 'which').mockImplementationOnce(() => null);
59
- const consoleMock = jest.spyOn(console, 'warn').mockImplementation();
60
- const lastUpdateData = await getFileLastUpdate(existingFilePath);
61
- expect(lastUpdateData).toBeNull();
62
- expect(consoleMock).toHaveBeenLastCalledWith(
63
- 'Sorry, the docs plugin last update options require Git.',
64
- );
65
-
66
- consoleMock.mockRestore();
67
- mock.mockRestore();
68
- });
69
- });
@@ -1,199 +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 {
9
- DefaultNumberPrefixParser,
10
- DisabledNumberPrefixParser,
11
- stripNumberPrefix,
12
- stripPathNumberPrefixes,
13
- } from '../numberPrefix';
14
-
15
- const IgnoredNumberPrefixPatterns = [
16
- // Patterns without number prefix
17
- 'MyDoc',
18
- 'a1-My Doc',
19
- 'My Doc-000',
20
- 'My Doc - 1',
21
- 'My Doc - 02',
22
- 'Hey - 03 - My Doc',
23
- '00abc01-My Doc',
24
- 'My 001- Doc',
25
- 'My -001 Doc',
26
- // ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
27
- '2021-01-31 - Doc',
28
- '31-01-2021 - Doc',
29
- '2021_01_31 - Doc',
30
- '31_01_2021 - Doc',
31
- '2021.01.31 - Doc',
32
- '31.01.2021 - Doc',
33
- '2021-01 - Doc',
34
- '2021_01 - Doc',
35
- '2021.01 - Doc',
36
- '01-2021 - Doc',
37
- '01_2021 - Doc',
38
- '01.2021 - Doc',
39
- // date patterns without suffix
40
- '2021-01-31',
41
- '2021-01',
42
- '21-01-31',
43
- '21-01',
44
- '2021_01_31',
45
- '2021_01',
46
- '21_01_31',
47
- '21_01',
48
- '01_31',
49
- '01',
50
- '2021',
51
- '01',
52
- // ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
53
- '8.0',
54
- '8.0.0',
55
- '14.2.16',
56
- '18.2',
57
- '8.0 - Doc',
58
- '8.0.0 - Doc',
59
- '8_0',
60
- '8_0_0',
61
- '14_2_16',
62
- '18_2',
63
- '8.0 - Doc',
64
- '8.0.0 - Doc',
65
- ];
66
-
67
- describe('stripNumberPrefix', () => {
68
- function stripNumberPrefixDefault(str: string) {
69
- return stripNumberPrefix(str, DefaultNumberPrefixParser);
70
- }
71
-
72
- test('should strip number prefix if present', () => {
73
- expect(stripNumberPrefixDefault('1-My Doc')).toEqual('My Doc');
74
- expect(stripNumberPrefixDefault('01-My Doc')).toEqual('My Doc');
75
- expect(stripNumberPrefixDefault('001-My Doc')).toEqual('My Doc');
76
- expect(stripNumberPrefixDefault('001 - My Doc')).toEqual('My Doc');
77
- expect(stripNumberPrefixDefault('001 - My Doc')).toEqual('My Doc');
78
- expect(stripNumberPrefixDefault('999 - My Doc')).toEqual(
79
- 'My Doc',
80
- );
81
- //
82
- expect(stripNumberPrefixDefault('1---My Doc')).toEqual('My Doc');
83
- expect(stripNumberPrefixDefault('01---My Doc')).toEqual('My Doc');
84
- expect(stripNumberPrefixDefault('001---My Doc')).toEqual('My Doc');
85
- expect(stripNumberPrefixDefault('001 --- My Doc')).toEqual('My Doc');
86
- expect(stripNumberPrefixDefault('001 --- My Doc')).toEqual(
87
- 'My Doc',
88
- );
89
- expect(stripNumberPrefixDefault('999 --- My Doc')).toEqual(
90
- 'My Doc',
91
- );
92
- //
93
- expect(stripNumberPrefixDefault('1___My Doc')).toEqual('My Doc');
94
- expect(stripNumberPrefixDefault('01___My Doc')).toEqual('My Doc');
95
- expect(stripNumberPrefixDefault('001___My Doc')).toEqual('My Doc');
96
- expect(stripNumberPrefixDefault('001 ___ My Doc')).toEqual('My Doc');
97
- expect(stripNumberPrefixDefault('001 ___ My Doc')).toEqual(
98
- 'My Doc',
99
- );
100
- expect(stripNumberPrefixDefault('999 ___ My Doc')).toEqual(
101
- 'My Doc',
102
- );
103
- //
104
- expect(stripNumberPrefixDefault('1.My Doc')).toEqual('My Doc');
105
- expect(stripNumberPrefixDefault('01.My Doc')).toEqual('My Doc');
106
- expect(stripNumberPrefixDefault('001.My Doc')).toEqual('My Doc');
107
- expect(stripNumberPrefixDefault('001 . My Doc')).toEqual('My Doc');
108
- expect(stripNumberPrefixDefault('001 . My Doc')).toEqual('My Doc');
109
- expect(stripNumberPrefixDefault('999 . My Doc')).toEqual(
110
- 'My Doc',
111
- );
112
- });
113
-
114
- test('should not strip number prefix if pattern does not match', () => {
115
- IgnoredNumberPrefixPatterns.forEach((badPattern) => {
116
- expect(stripNumberPrefixDefault(badPattern)).toEqual(badPattern);
117
- });
118
- });
119
- });
120
-
121
- describe('stripPathNumberPrefix', () => {
122
- test('should strip number prefixes in paths', () => {
123
- expect(
124
- stripPathNumberPrefixes(
125
- '0-MyRootFolder0/1 - MySubFolder1/2. MyDeepFolder2/3 _MyDoc3',
126
- DefaultNumberPrefixParser,
127
- ),
128
- ).toEqual('MyRootFolder0/MySubFolder1/MyDeepFolder2/MyDoc3');
129
- });
130
-
131
- test('should strip number prefixes in paths with custom parser', () => {
132
- function stripPathNumberPrefixCustom(str: string) {
133
- return {
134
- filename: str.substring(1, str.length),
135
- numberPrefix: 0,
136
- };
137
- }
138
-
139
- expect(
140
- stripPathNumberPrefixes('aaaa/bbbb/cccc', stripPathNumberPrefixCustom),
141
- ).toEqual('aaa/bbb/ccc');
142
- });
143
-
144
- test('should strip number prefixes in paths with disabled parser', () => {
145
- expect(
146
- stripPathNumberPrefixes(
147
- '0-MyRootFolder0/1 - MySubFolder1/2. MyDeepFolder2/3 _MyDoc3',
148
- DisabledNumberPrefixParser,
149
- ),
150
- ).toEqual('0-MyRootFolder0/1 - MySubFolder1/2. MyDeepFolder2/3 _MyDoc3');
151
- });
152
- });
153
-
154
- describe('DefaultNumberPrefixParser', () => {
155
- test('should extract number prefix if present', () => {
156
- expect(DefaultNumberPrefixParser('0-My Doc')).toEqual({
157
- filename: 'My Doc',
158
- numberPrefix: 0,
159
- });
160
- expect(DefaultNumberPrefixParser('1-My Doc')).toEqual({
161
- filename: 'My Doc',
162
- numberPrefix: 1,
163
- });
164
- expect(DefaultNumberPrefixParser('01-My Doc')).toEqual({
165
- filename: 'My Doc',
166
- numberPrefix: 1,
167
- });
168
- expect(DefaultNumberPrefixParser('001-My Doc')).toEqual({
169
- filename: 'My Doc',
170
- numberPrefix: 1,
171
- });
172
- expect(DefaultNumberPrefixParser('001 - My Doc')).toEqual({
173
- filename: 'My Doc',
174
- numberPrefix: 1,
175
- });
176
- expect(DefaultNumberPrefixParser('001 - My Doc')).toEqual({
177
- filename: 'My Doc',
178
- numberPrefix: 1,
179
- });
180
- expect(DefaultNumberPrefixParser('999 - My Doc')).toEqual({
181
- filename: 'My Doc',
182
- numberPrefix: 999,
183
- });
184
-
185
- expect(DefaultNumberPrefixParser('0046036 - My Doc')).toEqual({
186
- filename: 'My Doc',
187
- numberPrefix: 46036,
188
- });
189
- });
190
-
191
- test('should not extract number prefix if pattern does not match', () => {
192
- IgnoredNumberPrefixPatterns.forEach((badPattern) => {
193
- expect(DefaultNumberPrefixParser(badPattern)).toEqual({
194
- filename: badPattern,
195
- numberPrefix: undefined,
196
- });
197
- });
198
- });
199
- });
@@ -1,231 +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 {OptionsSchema, DEFAULT_OPTIONS} from '../options';
9
- import {normalizePluginOptions} from '@docusaurus/utils-validation';
10
- import {DefaultSidebarItemsGenerator} from '../sidebarItemsGenerator';
11
- import {
12
- DefaultNumberPrefixParser,
13
- DisabledNumberPrefixParser,
14
- } from '../numberPrefix';
15
-
16
- // the type of remark/rehype plugins is function
17
- const markdownPluginsFunctionStub = () => {};
18
- const markdownPluginsObjectStub = {};
19
-
20
- describe('normalizeDocsPluginOptions', () => {
21
- test('should return default options for undefined user options', async () => {
22
- const {value, error} = await OptionsSchema.validate({});
23
- expect(value).toEqual(DEFAULT_OPTIONS);
24
- expect(error).toBe(undefined);
25
- });
26
-
27
- test('should accept correctly defined user options', async () => {
28
- const userOptions = {
29
- path: 'my-docs', // Path to data on filesystem, relative to site dir.
30
- routeBasePath: 'my-docs', // URL Route.
31
- homePageId: 'home', // Document id for docs home page.
32
- include: ['**/*.{md,mdx}'], // Extensions to include.
33
- sidebarPath: 'my-sidebar', // Path to sidebar configuration for showing a list of markdown pages.
34
- sidebarItemsGenerator: DefaultSidebarItemsGenerator,
35
- numberPrefixParser: DefaultNumberPrefixParser,
36
- docLayoutComponent: '@theme/DocPage',
37
- docItemComponent: '@theme/DocItem',
38
- remarkPlugins: [markdownPluginsObjectStub],
39
- rehypePlugins: [markdownPluginsFunctionStub],
40
- beforeDefaultRehypePlugins: [],
41
- beforeDefaultRemarkPlugins: [],
42
- showLastUpdateTime: true,
43
- showLastUpdateAuthor: true,
44
- admonitions: {},
45
- includeCurrentVersion: false,
46
- disableVersioning: true,
47
- editCurrentVersion: true,
48
- editLocalizedFiles: true,
49
- versions: {
50
- current: {
51
- path: 'next',
52
- label: 'next',
53
- },
54
- version1: {
55
- path: 'hello',
56
- label: 'world',
57
- },
58
- },
59
- };
60
- const {value, error} = await OptionsSchema.validate(userOptions);
61
- expect(value).toEqual(userOptions);
62
- expect(error).toBe(undefined);
63
- });
64
-
65
- test('should accept correctly defined remark and rehype plugin options', async () => {
66
- const userOptions = {
67
- ...DEFAULT_OPTIONS,
68
- beforeDefaultRemarkPlugins: [],
69
- beforeDefaultRehypePlugins: [markdownPluginsFunctionStub],
70
- remarkPlugins: [[markdownPluginsFunctionStub, {option1: '42'}]],
71
- rehypePlugins: [
72
- markdownPluginsObjectStub,
73
- [markdownPluginsFunctionStub, {option1: '42'}],
74
- ],
75
- };
76
- const {value, error} = await OptionsSchema.validate(userOptions);
77
- expect(value).toEqual(userOptions);
78
- expect(error).toBe(undefined);
79
- });
80
-
81
- test('should accept admonitions false', async () => {
82
- const admonitionsFalse = {
83
- ...DEFAULT_OPTIONS,
84
- admonitions: false,
85
- };
86
- const {value, error} = OptionsSchema.validate(admonitionsFalse);
87
- expect(value).toEqual(admonitionsFalse);
88
- expect(error).toBe(undefined);
89
- });
90
-
91
- test('should accept numberPrefixParser function', () => {
92
- function customNumberPrefixParser() {}
93
- expect(
94
- normalizePluginOptions(OptionsSchema, {
95
- ...DEFAULT_OPTIONS,
96
- numberPrefixParser: customNumberPrefixParser,
97
- }),
98
- ).toEqual({
99
- ...DEFAULT_OPTIONS,
100
- id: 'default',
101
- numberPrefixParser: customNumberPrefixParser,
102
- });
103
- });
104
-
105
- test('should accept numberPrefixParser false', () => {
106
- expect(
107
- normalizePluginOptions(OptionsSchema, {
108
- ...DEFAULT_OPTIONS,
109
- numberPrefixParser: false,
110
- }),
111
- ).toEqual({
112
- ...DEFAULT_OPTIONS,
113
- id: 'default',
114
- numberPrefixParser: DisabledNumberPrefixParser,
115
- });
116
- });
117
-
118
- test('should accept numberPrefixParser true', () => {
119
- expect(
120
- normalizePluginOptions(OptionsSchema, {
121
- ...DEFAULT_OPTIONS,
122
- numberPrefixParser: true,
123
- }),
124
- ).toEqual({
125
- ...DEFAULT_OPTIONS,
126
- id: 'default',
127
- numberPrefixParser: DefaultNumberPrefixParser,
128
- });
129
- });
130
-
131
- test('should reject admonitions true', async () => {
132
- const admonitionsTrue = {
133
- ...DEFAULT_OPTIONS,
134
- admonitions: true,
135
- };
136
- const {error} = OptionsSchema.validate(admonitionsTrue);
137
- expect(error).toMatchInlineSnapshot(
138
- `[ValidationError: "admonitions" contains an invalid value]`,
139
- );
140
- });
141
-
142
- test('should reject invalid remark plugin options', () => {
143
- expect(() => {
144
- normalizePluginOptions(OptionsSchema, {
145
- remarkPlugins: [[{option1: '42'}, markdownPluginsFunctionStub]],
146
- });
147
- }).toThrowErrorMatchingInlineSnapshot(
148
- `"\\"remarkPlugins[0]\\" does not match any of the allowed types"`,
149
- );
150
- });
151
-
152
- test('should reject invalid rehype plugin options', () => {
153
- expect(() => {
154
- normalizePluginOptions(OptionsSchema, {
155
- rehypePlugins: [
156
- [
157
- markdownPluginsFunctionStub,
158
- {option1: '42'},
159
- markdownPluginsFunctionStub,
160
- ],
161
- ],
162
- });
163
- }).toThrowErrorMatchingInlineSnapshot(
164
- `"\\"rehypePlugins[0]\\" does not match any of the allowed types"`,
165
- );
166
- });
167
-
168
- test('should reject bad path inputs', () => {
169
- expect(() => {
170
- normalizePluginOptions(OptionsSchema, {
171
- path: 2,
172
- });
173
- }).toThrowErrorMatchingInlineSnapshot(`"\\"path\\" must be a string"`);
174
- });
175
-
176
- test('should reject bad include inputs', () => {
177
- expect(() => {
178
- normalizePluginOptions(OptionsSchema, {
179
- include: '**/*.{md,mdx}',
180
- });
181
- }).toThrowErrorMatchingInlineSnapshot(`"\\"include\\" must be an array"`);
182
- });
183
-
184
- test('should reject bad showLastUpdateTime inputs', () => {
185
- expect(() => {
186
- normalizePluginOptions(OptionsSchema, {
187
- showLastUpdateTime: 'true',
188
- });
189
- }).toThrowErrorMatchingInlineSnapshot(
190
- `"\\"showLastUpdateTime\\" must be a boolean"`,
191
- );
192
- });
193
-
194
- test('should reject bad remarkPlugins input', () => {
195
- expect(() => {
196
- normalizePluginOptions(OptionsSchema, {
197
- remarkPlugins: 'remark-math',
198
- });
199
- }).toThrowErrorMatchingInlineSnapshot(
200
- `"\\"remarkPlugins\\" must be an array"`,
201
- );
202
- });
203
-
204
- test('should reject bad lastVersion', () => {
205
- expect(() => {
206
- normalizePluginOptions(OptionsSchema, {
207
- lastVersion: false,
208
- });
209
- }).toThrowErrorMatchingInlineSnapshot(
210
- `"\\"lastVersion\\" must be a string"`,
211
- );
212
- });
213
-
214
- test('should reject bad versions', () => {
215
- expect(() => {
216
- normalizePluginOptions(OptionsSchema, {
217
- versions: {
218
- current: {
219
- hey: 3,
220
- },
221
- version1: {
222
- path: 'hello',
223
- label: 'world',
224
- },
225
- },
226
- });
227
- }).toThrowErrorMatchingInlineSnapshot(
228
- `"\\"versions.current.hey\\" is not allowed"`,
229
- );
230
- });
231
- });