@docusaurus/plugin-content-docs 2.0.0-beta.12faed89d → 2.0.0-beta.13

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 (138) hide show
  1. package/lib/.tsbuildinfo +1 -1
  2. package/lib/categoryGeneratedIndex.d.ts +12 -0
  3. package/lib/categoryGeneratedIndex.js +37 -0
  4. package/lib/cli.d.ts +2 -2
  5. package/lib/cli.js +12 -34
  6. package/lib/client/docsClientUtils.d.ts +0 -3
  7. package/lib/client/docsClientUtils.js +19 -22
  8. package/lib/docFrontMatter.d.ts +1 -1
  9. package/lib/docFrontMatter.js +7 -3
  10. package/lib/docs.d.ts +25 -3
  11. package/lib/docs.js +125 -41
  12. package/lib/globalData.d.ts +1 -1
  13. package/lib/index.d.ts +1 -1
  14. package/lib/index.js +100 -131
  15. package/lib/lastUpdate.js +8 -9
  16. package/lib/markdown/index.d.ts +3 -6
  17. package/lib/markdown/index.js +3 -3
  18. package/lib/markdown/linkify.js +2 -2
  19. package/lib/numberPrefix.d.ts +1 -1
  20. package/lib/options.d.ts +3 -3
  21. package/lib/options.js +48 -11
  22. package/lib/props.d.ts +7 -2
  23. package/lib/props.js +60 -8
  24. package/lib/routes.d.ts +27 -0
  25. package/lib/routes.js +105 -0
  26. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +5 -2
  27. package/lib/sidebars/generator.js +216 -0
  28. package/lib/sidebars/index.d.ts +15 -0
  29. package/lib/sidebars/index.js +73 -0
  30. package/lib/sidebars/normalization.d.ts +14 -0
  31. package/lib/sidebars/normalization.js +77 -0
  32. package/lib/sidebars/processor.d.ts +18 -0
  33. package/lib/sidebars/processor.js +85 -0
  34. package/lib/sidebars/types.d.ts +127 -0
  35. package/lib/sidebars/types.js +8 -0
  36. package/lib/sidebars/utils.d.ts +35 -0
  37. package/lib/sidebars/utils.js +228 -0
  38. package/lib/sidebars/validation.d.ts +10 -0
  39. package/lib/sidebars/validation.js +138 -0
  40. package/lib/slug.d.ts +4 -3
  41. package/lib/slug.js +27 -15
  42. package/lib/tags.d.ts +8 -0
  43. package/lib/tags.js +20 -0
  44. package/lib/theme/hooks/useDocs.js +21 -21
  45. package/lib/translations.d.ts +2 -2
  46. package/lib/translations.js +71 -29
  47. package/lib/types.d.ts +52 -63
  48. package/lib/versions.d.ts +3 -3
  49. package/lib/versions.js +41 -22
  50. package/package.json +20 -20
  51. package/src/__tests__/__fixtures__/simple-site/docs/_partials/somePartial.md +3 -0
  52. package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +3 -0
  53. package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +3 -0
  54. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +5 -0
  55. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +2 -0
  56. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +2 -0
  57. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +2 -0
  58. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +2 -0
  59. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +2 -0
  60. package/src/__tests__/__fixtures__/simple-site/sidebars.json +15 -1
  61. package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +1 -0
  62. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +6 -0
  63. package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +3 -0
  64. package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +3 -0
  65. package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +3 -0
  66. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +3 -0
  67. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/somePartial.md +3 -0
  68. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +3 -0
  69. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +3 -0
  70. package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +3 -0
  71. package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +2 -2
  72. package/src/__tests__/__snapshots__/cli.test.ts.snap +48 -73
  73. package/src/__tests__/__snapshots__/docs.test.ts.snap +140 -0
  74. package/src/__tests__/__snapshots__/index.test.ts.snap +745 -97
  75. package/src/__tests__/__snapshots__/translations.test.ts.snap +45 -15
  76. package/src/__tests__/cli.test.ts +15 -11
  77. package/src/__tests__/docFrontMatter.test.ts +160 -45
  78. package/src/__tests__/docs.test.ts +311 -150
  79. package/src/__tests__/index.test.ts +108 -66
  80. package/src/__tests__/lastUpdate.test.ts +1 -1
  81. package/src/__tests__/options.test.ts +48 -3
  82. package/src/__tests__/props.test.ts +62 -0
  83. package/src/__tests__/slug.test.ts +127 -20
  84. package/src/__tests__/translations.test.ts +7 -1
  85. package/src/__tests__/versions.test.ts +73 -70
  86. package/src/categoryGeneratedIndex.ts +57 -0
  87. package/src/cli.ts +8 -41
  88. package/src/client/docsClientUtils.ts +14 -26
  89. package/{types.d.ts → src/deps.d.ts} +0 -0
  90. package/src/docFrontMatter.ts +9 -4
  91. package/src/docs.ts +158 -32
  92. package/src/globalData.ts +6 -1
  93. package/src/index.ts +125 -169
  94. package/src/lastUpdate.ts +10 -13
  95. package/src/markdown/index.ts +8 -12
  96. package/src/numberPrefix.ts +5 -3
  97. package/src/options.ts +59 -14
  98. package/src/plugin-content-docs.d.ts +173 -40
  99. package/src/props.ts +90 -15
  100. package/src/routes.ts +173 -0
  101. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -0
  102. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -0
  103. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -0
  104. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category.js +0 -0
  105. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -0
  106. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed.json +0 -0
  107. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -0
  108. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -0
  109. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -0
  110. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -0
  111. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link.json +0 -0
  112. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-unknown-type.json +0 -0
  113. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-wrong-field.json +0 -0
  114. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars.json +0 -0
  115. package/src/{__tests__/__snapshots__/sidebars.test.ts.snap → sidebars/__tests__/__snapshots__/index.test.ts.snap} +36 -6
  116. package/src/{__tests__/sidebarItemsGenerator.test.ts → sidebars/__tests__/generator.test.ts} +143 -18
  117. package/src/sidebars/__tests__/index.test.ts +204 -0
  118. package/src/sidebars/__tests__/processor.test.ts +237 -0
  119. package/src/sidebars/__tests__/utils.test.ts +695 -0
  120. package/src/sidebars/__tests__/validation.test.ts +105 -0
  121. package/src/sidebars/generator.ts +310 -0
  122. package/src/sidebars/index.ts +94 -0
  123. package/src/sidebars/normalization.ts +112 -0
  124. package/src/sidebars/processor.ts +154 -0
  125. package/src/sidebars/types.ts +211 -0
  126. package/src/sidebars/utils.ts +329 -0
  127. package/src/sidebars/validation.ts +168 -0
  128. package/src/slug.ts +32 -17
  129. package/src/tags.ts +19 -0
  130. package/src/translations.ts +103 -47
  131. package/src/types.ts +64 -107
  132. package/src/versions.ts +59 -25
  133. package/lib/sidebarItemsGenerator.js +0 -211
  134. package/lib/sidebars.d.ts +0 -43
  135. package/lib/sidebars.js +0 -320
  136. package/src/__tests__/sidebars.test.ts +0 -639
  137. package/src/sidebarItemsGenerator.ts +0 -307
  138. package/src/sidebars.ts +0 -522
@@ -0,0 +1,62 @@
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 {toTagDocListProp} from '../props';
9
+
10
+ describe('toTagDocListProp', () => {
11
+ type Params = Parameters<typeof toTagDocListProp>[0];
12
+ type Tag = Params['tag'];
13
+ type Doc = Params['docs'][number];
14
+
15
+ const allTagsPath = '/all/tags';
16
+
17
+ test('should work', () => {
18
+ const tag: Tag = {
19
+ name: 'tag1',
20
+ permalink: '/tag1',
21
+ docIds: ['id1', 'id3'],
22
+ };
23
+
24
+ const doc1: Doc = {
25
+ id: 'id1',
26
+ title: 'ZZZ 1',
27
+ description: 'Description 1',
28
+ permalink: '/doc1',
29
+ };
30
+ const doc2: Doc = {
31
+ id: 'id2',
32
+ title: 'XXX 2',
33
+ description: 'Description 2',
34
+ permalink: '/doc2',
35
+ };
36
+ const doc3: Doc = {
37
+ id: 'id3',
38
+ title: 'AAA 3',
39
+ description: 'Description 3',
40
+ permalink: '/doc3',
41
+ };
42
+ const doc4: Doc = {
43
+ id: 'id4',
44
+ title: 'UUU 4',
45
+ description: 'Description 4',
46
+ permalink: '/doc4',
47
+ };
48
+
49
+ const result = toTagDocListProp({
50
+ allTagsPath,
51
+ tag,
52
+ docs: [doc1, doc2, doc3, doc4],
53
+ });
54
+
55
+ expect(result).toEqual({
56
+ allTagsPath,
57
+ name: tag.name,
58
+ permalink: tag.permalink,
59
+ docs: [doc3, doc1], // docs sorted by title, ignore "id5" absence
60
+ });
61
+ });
62
+ });
@@ -9,24 +9,92 @@ import getSlug from '../slug';
9
9
 
10
10
  describe('getSlug', () => {
11
11
  test('should default to dirname/id', () => {
12
- expect(getSlug({baseID: 'doc', dirName: '/dir'})).toEqual('/dir/doc');
13
- expect(getSlug({baseID: 'doc', dirName: '/dir/subdir'})).toEqual(
14
- '/dir/subdir/doc',
15
- );
12
+ expect(
13
+ getSlug({
14
+ baseID: 'doc',
15
+ source: '@site/docs/dir/doc.md',
16
+ sourceDirName: '/dir',
17
+ }),
18
+ ).toEqual('/dir/doc');
19
+ expect(
20
+ getSlug({
21
+ baseID: 'doc',
22
+ source: '@site/docs/dir/subdir/doc.md',
23
+ sourceDirName: '/dir/subdir',
24
+ }),
25
+ ).toEqual('/dir/subdir/doc');
26
+ });
27
+
28
+ test('should handle conventional doc indexes', () => {
29
+ expect(
30
+ getSlug({
31
+ baseID: 'doc',
32
+ source: '@site/docs/dir/subdir/index.md',
33
+ sourceDirName: '/dir/subdir',
34
+ }),
35
+ ).toEqual('/dir/subdir/');
36
+ expect(
37
+ getSlug({
38
+ baseID: 'doc',
39
+ source: '@site/docs/dir/subdir/inDEx.mdx',
40
+ sourceDirName: '/dir/subdir',
41
+ }),
42
+ ).toEqual('/dir/subdir/');
43
+ expect(
44
+ getSlug({
45
+ baseID: 'doc',
46
+ source: '@site/docs/dir/subdir/readme.md',
47
+ sourceDirName: '/dir/subdir',
48
+ }),
49
+ ).toEqual('/dir/subdir/');
50
+ expect(
51
+ getSlug({
52
+ baseID: 'doc',
53
+ source: '@site/docs/dir/subdir/reADMe.mdx',
54
+ sourceDirName: '/dir/subdir',
55
+ }),
56
+ ).toEqual('/dir/subdir/');
57
+ expect(
58
+ getSlug({
59
+ baseID: 'doc',
60
+ source: '@site/docs/dir/subdir/subdir.md',
61
+ sourceDirName: '/dir/subdir',
62
+ }),
63
+ ).toEqual('/dir/subdir/');
64
+ expect(
65
+ getSlug({
66
+ baseID: 'doc',
67
+ source: '@site/docs/dir/subdir/suBDir.mdx',
68
+ sourceDirName: '/dir/subdir',
69
+ }),
70
+ ).toEqual('/dir/subdir/');
71
+ });
72
+
73
+ test('should ignore conventional doc index when explicit slug frontmatter is provided', () => {
74
+ expect(
75
+ getSlug({
76
+ baseID: 'doc',
77
+ source: '@site/docs/dir/subdir/index.md',
78
+ sourceDirName: '/dir/subdir',
79
+ frontmatterSlug: '/my/frontMatterSlug',
80
+ }),
81
+ ).toEqual('/my/frontMatterSlug');
16
82
  });
17
83
 
18
84
  test('can strip dir number prefixes', () => {
19
85
  expect(
20
86
  getSlug({
21
87
  baseID: 'doc',
22
- dirName: '/001-dir1/002-dir2',
88
+ source: '@site/docs/001-dir1/002-dir2/doc.md',
89
+ sourceDirName: '/001-dir1/002-dir2',
23
90
  stripDirNumberPrefixes: true,
24
91
  }),
25
92
  ).toEqual('/dir1/dir2/doc');
26
93
  expect(
27
94
  getSlug({
28
95
  baseID: 'doc',
29
- dirName: '/001-dir1/002-dir2',
96
+ source: '@site/docs/001-dir1/002-dir2/doc.md',
97
+ sourceDirName: '/001-dir1/002-dir2',
30
98
  stripDirNumberPrefixes: false,
31
99
  }),
32
100
  ).toEqual('/001-dir1/002-dir2/doc');
@@ -35,26 +103,45 @@ describe('getSlug', () => {
35
103
  // See https://github.com/facebook/docusaurus/issues/3223
36
104
  test('should handle special chars in doc path', () => {
37
105
  expect(
38
- getSlug({baseID: 'my dôc', dirName: '/dir with spâce/hey $hello'}),
106
+ getSlug({
107
+ baseID: 'my dôc',
108
+ source: '@site/docs/dir with spâce/hey $hello/doc.md',
109
+ sourceDirName: '/dir with spâce/hey $hello',
110
+ }),
39
111
  ).toEqual('/dir with spâce/hey $hello/my dôc');
40
112
  });
41
113
 
42
114
  test('should handle current dir', () => {
43
- expect(getSlug({baseID: 'doc', dirName: '.'})).toEqual('/doc');
44
- expect(getSlug({baseID: 'doc', dirName: '/'})).toEqual('/doc');
115
+ expect(
116
+ getSlug({baseID: 'doc', source: '@site/docs/doc.md', sourceDirName: '.'}),
117
+ ).toEqual('/doc');
118
+ expect(
119
+ getSlug({baseID: 'doc', source: '@site/docs/doc.md', sourceDirName: '/'}),
120
+ ).toEqual('/doc');
45
121
  });
46
122
 
47
123
  test('should resolve absolute slug frontmatter', () => {
48
124
  expect(
49
- getSlug({baseID: 'any', dirName: '.', frontmatterSlug: '/abc/def'}),
125
+ getSlug({
126
+ baseID: 'any',
127
+ source: '@site/docs/doc.md',
128
+ sourceDirName: '.',
129
+ frontmatterSlug: '/abc/def',
130
+ }),
50
131
  ).toEqual('/abc/def');
51
132
  expect(
52
- getSlug({baseID: 'any', dirName: './any', frontmatterSlug: '/abc/def'}),
133
+ getSlug({
134
+ baseID: 'any',
135
+ source: '@site/docs/any/doc.md',
136
+ sourceDirName: './any',
137
+ frontmatterSlug: '/abc/def',
138
+ }),
53
139
  ).toEqual('/abc/def');
54
140
  expect(
55
141
  getSlug({
56
142
  baseID: 'any',
57
- dirName: './any/any',
143
+ source: '@site/docs/any/any/doc.md',
144
+ sourceDirName: './any/any',
58
145
  frontmatterSlug: '/abc/def',
59
146
  }),
60
147
  ).toEqual('/abc/def');
@@ -62,46 +149,66 @@ describe('getSlug', () => {
62
149
 
63
150
  test('should resolve relative slug frontmatter', () => {
64
151
  expect(
65
- getSlug({baseID: 'any', dirName: '.', frontmatterSlug: 'abc/def'}),
152
+ getSlug({
153
+ baseID: 'any',
154
+ source: '@site/docs/doc.md',
155
+ sourceDirName: '.',
156
+ frontmatterSlug: 'abc/def',
157
+ }),
66
158
  ).toEqual('/abc/def');
67
159
  expect(
68
- getSlug({baseID: 'any', dirName: '/dir', frontmatterSlug: 'abc/def'}),
160
+ getSlug({
161
+ baseID: 'any',
162
+ source: '@site/docs/dir/doc.md',
163
+ sourceDirName: '/dir',
164
+ frontmatterSlug: 'abc/def',
165
+ }),
69
166
  ).toEqual('/dir/abc/def');
70
167
  expect(
71
168
  getSlug({
72
169
  baseID: 'any',
73
- dirName: 'unslashedDir',
170
+ source: '@site/docs/unslashedDir/doc.md',
171
+ sourceDirName: 'unslashedDir',
74
172
  frontmatterSlug: 'abc/def',
75
173
  }),
76
174
  ).toEqual('/unslashedDir/abc/def');
77
175
  expect(
78
176
  getSlug({
79
177
  baseID: 'any',
80
- dirName: 'dir/subdir',
178
+ source: '@site/docs/dir/subdir/doc.md',
179
+ sourceDirName: 'dir/subdir',
81
180
  frontmatterSlug: 'abc/def',
82
181
  }),
83
182
  ).toEqual('/dir/subdir/abc/def');
84
183
  expect(
85
- getSlug({baseID: 'any', dirName: '/dir', frontmatterSlug: './abc/def'}),
184
+ getSlug({
185
+ baseID: 'any',
186
+ source: '@site/docs/dir/doc.md',
187
+ sourceDirName: '/dir',
188
+ frontmatterSlug: './abc/def',
189
+ }),
86
190
  ).toEqual('/dir/abc/def');
87
191
  expect(
88
192
  getSlug({
89
193
  baseID: 'any',
90
- dirName: '/dir',
194
+ source: '@site/docs/dir/doc.md',
195
+ sourceDirName: '/dir',
91
196
  frontmatterSlug: './abc/../def',
92
197
  }),
93
198
  ).toEqual('/dir/def');
94
199
  expect(
95
200
  getSlug({
96
201
  baseID: 'any',
97
- dirName: '/dir/subdir',
202
+ source: '@site/docs/dir/subdir/doc.md',
203
+ sourceDirName: '/dir/subdir',
98
204
  frontmatterSlug: '../abc/def',
99
205
  }),
100
206
  ).toEqual('/dir/abc/def');
101
207
  expect(
102
208
  getSlug({
103
209
  baseID: 'any',
104
- dirName: '/dir/subdir',
210
+ source: '@site/docs/dir/subdirdoc.md',
211
+ sourceDirName: '/dir/subdir',
105
212
  frontmatterSlug: '../../../../../abc/../def',
106
213
  }),
107
214
  ).toEqual('/def');
@@ -16,7 +16,6 @@ import {updateTranslationFileMessages} from '@docusaurus/utils';
16
16
  function createSampleDoc(doc: Pick<DocMetadata, 'id'>): DocMetadata {
17
17
  return {
18
18
  editUrl: 'any',
19
- isDocsHomePage: false,
20
19
  lastUpdatedAt: 0,
21
20
  lastUpdatedBy: 'any',
22
21
  next: undefined,
@@ -68,6 +67,13 @@ function createSampleVersion(
68
67
  type: 'category',
69
68
  label: 'Getting started',
70
69
  collapsed: false,
70
+ link: {
71
+ type: 'generated-index',
72
+ slug: '/category/getting-started-index-slug',
73
+ permalink: '/docs/category/getting-started-index-slug',
74
+ title: 'Getting started index title',
75
+ description: 'Getting started index description',
76
+ },
71
77
  items: [
72
78
  {
73
79
  type: 'doc',