@docusaurus/plugin-content-docs 2.0.0-beta.8e9b829d9 → 2.0.0-beta.9

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 (103) hide show
  1. package/lib/.tsbuildinfo +1 -1
  2. package/lib/cli.d.ts +1 -1
  3. package/lib/cli.js +18 -23
  4. package/lib/client/docsClientUtils.d.ts +0 -3
  5. package/lib/client/docsClientUtils.js +10 -7
  6. package/lib/docFrontMatter.js +6 -2
  7. package/lib/docs.d.ts +3 -1
  8. package/lib/docs.js +76 -25
  9. package/lib/index.js +70 -77
  10. package/lib/lastUpdate.js +4 -4
  11. package/lib/markdown/index.d.ts +3 -6
  12. package/lib/markdown/index.js +3 -3
  13. package/lib/markdown/linkify.js +2 -2
  14. package/lib/options.js +12 -4
  15. package/lib/props.d.ts +7 -2
  16. package/lib/props.js +26 -3
  17. package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +2 -1
  18. package/lib/sidebars/generator.js +174 -0
  19. package/lib/sidebars/index.d.ts +14 -0
  20. package/lib/sidebars/index.js +64 -0
  21. package/lib/sidebars/normalization.d.ts +9 -0
  22. package/lib/sidebars/normalization.js +58 -0
  23. package/lib/sidebars/processor.d.ts +16 -0
  24. package/lib/sidebars/processor.js +70 -0
  25. package/lib/sidebars/types.d.ts +87 -0
  26. package/lib/sidebars/types.js +13 -0
  27. package/lib/sidebars/utils.d.ts +22 -0
  28. package/lib/sidebars/utils.js +101 -0
  29. package/lib/sidebars/validation.d.ts +8 -0
  30. package/lib/sidebars/validation.js +102 -0
  31. package/lib/slug.js +4 -4
  32. package/lib/tags.d.ts +8 -0
  33. package/lib/tags.js +22 -0
  34. package/lib/theme/hooks/useDocs.js +21 -21
  35. package/lib/translations.d.ts +1 -1
  36. package/lib/translations.js +13 -13
  37. package/lib/types.d.ts +29 -61
  38. package/lib/versions.d.ts +1 -1
  39. package/lib/versions.js +40 -20
  40. package/package.json +15 -14
  41. package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +5 -0
  42. package/src/__tests__/__fixtures__/simple-site/docs/hello.md +1 -0
  43. package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +2 -0
  44. package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +2 -0
  45. package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +2 -0
  46. package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +2 -0
  47. package/src/__tests__/__fixtures__/simple-site/sidebars.json +15 -1
  48. package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +6 -0
  49. package/src/__tests__/__snapshots__/cli.test.ts.snap +28 -0
  50. package/src/__tests__/__snapshots__/docs.test.ts.snap +140 -0
  51. package/src/__tests__/__snapshots__/index.test.ts.snap +426 -25
  52. package/src/__tests__/docFrontMatter.test.ts +160 -45
  53. package/src/__tests__/docs.test.ts +167 -21
  54. package/src/__tests__/index.test.ts +53 -27
  55. package/src/__tests__/options.test.ts +4 -1
  56. package/src/__tests__/props.test.ts +62 -0
  57. package/src/__tests__/versions.test.ts +68 -63
  58. package/src/cli.ts +23 -30
  59. package/src/client/docsClientUtils.ts +1 -12
  60. package/src/docFrontMatter.ts +7 -2
  61. package/src/docs.ts +88 -9
  62. package/src/index.ts +77 -91
  63. package/src/markdown/index.ts +8 -12
  64. package/src/numberPrefix.ts +4 -2
  65. package/src/options.ts +13 -1
  66. package/src/plugin-content-docs.d.ts +107 -32
  67. package/src/props.ts +41 -5
  68. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -0
  69. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -0
  70. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -0
  71. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category.js +0 -0
  72. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -0
  73. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed.json +0 -0
  74. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -0
  75. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -0
  76. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -0
  77. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -0
  78. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link.json +0 -0
  79. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-unknown-type.json +0 -0
  80. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-wrong-field.json +0 -0
  81. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars.json +0 -0
  82. package/src/{__tests__/__snapshots__/sidebars.test.ts.snap → sidebars/__tests__/__snapshots__/index.test.ts.snap} +6 -6
  83. package/src/{__tests__/sidebarItemsGenerator.test.ts → sidebars/__tests__/generator.test.ts} +2 -2
  84. package/src/sidebars/__tests__/index.test.ts +202 -0
  85. package/src/sidebars/__tests__/processor.test.ts +148 -0
  86. package/src/sidebars/__tests__/utils.test.ts +395 -0
  87. package/src/sidebars/generator.ts +253 -0
  88. package/src/sidebars/index.ts +84 -0
  89. package/src/sidebars/normalization.ts +88 -0
  90. package/src/sidebars/processor.ts +124 -0
  91. package/src/sidebars/types.ts +156 -0
  92. package/src/sidebars/utils.ts +146 -0
  93. package/src/sidebars/validation.ts +124 -0
  94. package/src/tags.ts +21 -0
  95. package/src/translations.ts +26 -36
  96. package/src/types.ts +35 -101
  97. package/src/versions.ts +51 -21
  98. package/lib/sidebarItemsGenerator.js +0 -215
  99. package/lib/sidebars.d.ts +0 -45
  100. package/lib/sidebars.js +0 -354
  101. package/src/__tests__/sidebars.test.ts +0 -746
  102. package/src/sidebarItemsGenerator.ts +0 -315
  103. package/src/sidebars.ts +0 -589
@@ -10,7 +10,7 @@ import {DocFrontMatter} from '../types';
10
10
  import escapeStringRegexp from 'escape-string-regexp';
11
11
 
12
12
  function testField(params: {
13
- fieldName: keyof DocFrontMatter;
13
+ prefix: string;
14
14
  validFrontMatters: DocFrontMatter[];
15
15
  convertibleFrontMatter?: [
16
16
  ConvertableFrontMatter: Record<string, unknown>,
@@ -21,40 +21,38 @@ function testField(params: {
21
21
  ErrorMessage: string,
22
22
  ][];
23
23
  }) {
24
- describe(`"${params.fieldName}" field`, () => {
25
- test('accept valid values', () => {
26
- params.validFrontMatters.forEach((frontMatter) => {
27
- expect(validateDocFrontMatter(frontMatter)).toEqual(frontMatter);
28
- });
24
+ test(`[${params.prefix}] accept valid values`, () => {
25
+ params.validFrontMatters.forEach((frontMatter) => {
26
+ expect(validateDocFrontMatter(frontMatter)).toEqual(frontMatter);
29
27
  });
28
+ });
30
29
 
31
- test('convert valid values', () => {
32
- params.convertibleFrontMatter?.forEach(
33
- ([convertibleFrontMatter, convertedFrontMatter]) => {
34
- expect(validateDocFrontMatter(convertibleFrontMatter)).toEqual(
35
- convertedFrontMatter,
36
- );
37
- },
38
- );
39
- });
30
+ test(`[${params.prefix}] convert valid values`, () => {
31
+ params.convertibleFrontMatter?.forEach(
32
+ ([convertibleFrontMatter, convertedFrontMatter]) => {
33
+ expect(validateDocFrontMatter(convertibleFrontMatter)).toEqual(
34
+ convertedFrontMatter,
35
+ );
36
+ },
37
+ );
38
+ });
40
39
 
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
- });
40
+ test(`[${params.prefix}] throw error for values`, () => {
41
+ params.invalidFrontMatters?.forEach(([frontMatter, message]) => {
42
+ try {
43
+ validateDocFrontMatter(frontMatter);
44
+ fail(
45
+ new Error(
46
+ `Doc frontmatter is expected to be rejected, but was accepted successfully:\n ${JSON.stringify(
47
+ frontMatter,
48
+ null,
49
+ 2,
50
+ )}`,
51
+ ),
52
+ );
53
+ } catch (e) {
54
+ expect(e.message).toMatch(new RegExp(escapeStringRegexp(message)));
55
+ }
58
56
  });
59
57
  });
60
58
  }
@@ -73,7 +71,7 @@ describe('validateDocFrontMatter', () => {
73
71
 
74
72
  describe('validateDocFrontMatter id', () => {
75
73
  testField({
76
- fieldName: 'id',
74
+ prefix: 'id',
77
75
  validFrontMatters: [{id: '123'}, {id: 'unique_id'}],
78
76
  invalidFrontMatters: [[{id: ''}, 'is not allowed to be empty']],
79
77
  });
@@ -81,7 +79,7 @@ describe('validateDocFrontMatter id', () => {
81
79
 
82
80
  describe('validateDocFrontMatter title', () => {
83
81
  testField({
84
- fieldName: 'title',
82
+ prefix: 'title',
85
83
  validFrontMatters: [
86
84
  // See https://github.com/facebook/docusaurus/issues/4591#issuecomment-822372398
87
85
  {title: ''},
@@ -92,7 +90,7 @@ describe('validateDocFrontMatter title', () => {
92
90
 
93
91
  describe('validateDocFrontMatter hide_title', () => {
94
92
  testField({
95
- fieldName: 'hide_title',
93
+ prefix: 'hide_title',
96
94
  validFrontMatters: [{hide_title: true}, {hide_title: false}],
97
95
  convertibleFrontMatter: [
98
96
  [{hide_title: 'true'}, {hide_title: true}],
@@ -108,7 +106,7 @@ describe('validateDocFrontMatter hide_title', () => {
108
106
 
109
107
  describe('validateDocFrontMatter hide_table_of_contents', () => {
110
108
  testField({
111
- fieldName: 'hide_table_of_contents',
109
+ prefix: 'hide_table_of_contents',
112
110
  validFrontMatters: [
113
111
  {hide_table_of_contents: true},
114
112
  {hide_table_of_contents: false},
@@ -127,7 +125,7 @@ describe('validateDocFrontMatter hide_table_of_contents', () => {
127
125
 
128
126
  describe('validateDocFrontMatter keywords', () => {
129
127
  testField({
130
- fieldName: 'keywords',
128
+ prefix: 'keywords',
131
129
  validFrontMatters: [
132
130
  {keywords: ['hello']},
133
131
  {keywords: ['hello', 'world']},
@@ -144,21 +142,21 @@ describe('validateDocFrontMatter keywords', () => {
144
142
 
145
143
  describe('validateDocFrontMatter image', () => {
146
144
  testField({
147
- fieldName: 'image',
145
+ prefix: 'image',
148
146
  validFrontMatters: [
149
147
  {image: 'https://docusaurus.io/blog/image.png'},
150
148
  {image: '/absolute/image.png'},
151
149
  {image: '../relative/image.png'},
152
150
  ],
153
151
  invalidFrontMatters: [
154
- [{image: ''}, 'does not match any of the allowed types'],
152
+ [{image: ''}, '"image" does not look like a valid url (value=\'\')'],
155
153
  ],
156
154
  });
157
155
  });
158
156
 
159
157
  describe('validateDocFrontMatter description', () => {
160
158
  testField({
161
- fieldName: 'description',
159
+ prefix: 'description',
162
160
  validFrontMatters: [
163
161
  // See https://github.com/facebook/docusaurus/issues/4591#issuecomment-822372398
164
162
  {description: ''},
@@ -169,7 +167,7 @@ describe('validateDocFrontMatter description', () => {
169
167
 
170
168
  describe('validateDocFrontMatter slug', () => {
171
169
  testField({
172
- fieldName: 'slug',
170
+ prefix: 'slug',
173
171
  validFrontMatters: [
174
172
  {slug: '/'},
175
173
  {slug: 'slug'},
@@ -186,7 +184,7 @@ describe('validateDocFrontMatter slug', () => {
186
184
 
187
185
  describe('validateDocFrontMatter sidebar_label', () => {
188
186
  testField({
189
- fieldName: 'sidebar_label',
187
+ prefix: 'sidebar_label',
190
188
  validFrontMatters: [{sidebar_label: 'Awesome docs'}],
191
189
  invalidFrontMatters: [[{sidebar_label: ''}, 'is not allowed to be empty']],
192
190
  });
@@ -194,7 +192,7 @@ describe('validateDocFrontMatter sidebar_label', () => {
194
192
 
195
193
  describe('validateDocFrontMatter sidebar_position', () => {
196
194
  testField({
197
- fieldName: 'sidebar_position',
195
+ prefix: 'sidebar_position',
198
196
  validFrontMatters: [
199
197
  {sidebar_position: -5},
200
198
  {sidebar_position: -3.5},
@@ -212,7 +210,7 @@ describe('validateDocFrontMatter sidebar_position', () => {
212
210
 
213
211
  describe('validateDocFrontMatter custom_edit_url', () => {
214
212
  testField({
215
- fieldName: 'custom_edit_url',
213
+ prefix: 'custom_edit_url',
216
214
  validFrontMatters: [
217
215
  // See https://github.com/demisto/content-docs/pull/616#issuecomment-827087566
218
216
  {custom_edit_url: ''},
@@ -226,7 +224,7 @@ describe('validateDocFrontMatter custom_edit_url', () => {
226
224
 
227
225
  describe('validateDocFrontMatter parse_number_prefixes', () => {
228
226
  testField({
229
- fieldName: 'parse_number_prefixes',
227
+ prefix: 'parse_number_prefixes',
230
228
  validFrontMatters: [
231
229
  {parse_number_prefixes: true},
232
230
  {parse_number_prefixes: false},
@@ -242,3 +240,120 @@ describe('validateDocFrontMatter parse_number_prefixes', () => {
242
240
  ],
243
241
  });
244
242
  });
243
+
244
+ describe('validateDocFrontMatter tags', () => {
245
+ testField({
246
+ prefix: 'tags',
247
+ validFrontMatters: [{}, {tags: undefined}, {tags: ['tag1', 'tag2']}],
248
+ convertibleFrontMatter: [[{tags: ['tag1', 42]}, {tags: ['tag1', '42']}]],
249
+ invalidFrontMatters: [
250
+ [{tags: 42}, '"tags" does not look like a valid FrontMatter Yaml array.'],
251
+ [
252
+ {tags: 'tag1, tag2'},
253
+ '"tags" does not look like a valid FrontMatter Yaml array.',
254
+ ],
255
+ [{tags: [{}]}, '"tags[0]" does not look like a valid tag'],
256
+ [{tags: [true]}, '"tags[0]" does not look like a valid tag'],
257
+ [
258
+ {tags: ['tag1', {hey: 'test'}]},
259
+ '"tags[1]" does not look like a valid tag',
260
+ ],
261
+ ],
262
+ });
263
+ });
264
+
265
+ describe('validateDocFrontMatter toc_min_heading_level', () => {
266
+ testField({
267
+ prefix: 'toc_min_heading_level',
268
+ validFrontMatters: [
269
+ {},
270
+ {toc_min_heading_level: undefined},
271
+ {toc_min_heading_level: 2},
272
+ {toc_min_heading_level: 3},
273
+ {toc_min_heading_level: 4},
274
+ {toc_min_heading_level: 5},
275
+ {toc_min_heading_level: 6},
276
+ ],
277
+ convertibleFrontMatter: [
278
+ [{toc_min_heading_level: '2'}, {toc_min_heading_level: 2}],
279
+ ],
280
+ invalidFrontMatters: [
281
+ [
282
+ {toc_min_heading_level: 1},
283
+ '"toc_min_heading_level" must be greater than or equal to 2',
284
+ ],
285
+ [
286
+ {toc_min_heading_level: 7},
287
+ '"toc_min_heading_level" must be less than or equal to 6',
288
+ ],
289
+ [
290
+ {toc_min_heading_level: 'hello'},
291
+ '"toc_min_heading_level" must be a number',
292
+ ],
293
+ [
294
+ {toc_min_heading_level: true},
295
+ '"toc_min_heading_level" must be a number',
296
+ ],
297
+ ],
298
+ });
299
+ });
300
+
301
+ describe('validateDocFrontMatter toc_max_heading_level', () => {
302
+ testField({
303
+ prefix: 'toc_max_heading_level',
304
+ validFrontMatters: [
305
+ {},
306
+ {toc_max_heading_level: undefined},
307
+ {toc_max_heading_level: 2},
308
+ {toc_max_heading_level: 3},
309
+ {toc_max_heading_level: 4},
310
+ {toc_max_heading_level: 5},
311
+ {toc_max_heading_level: 6},
312
+ ],
313
+ convertibleFrontMatter: [
314
+ [{toc_max_heading_level: '2'}, {toc_max_heading_level: 2}],
315
+ ],
316
+ invalidFrontMatters: [
317
+ [
318
+ {toc_max_heading_level: 1},
319
+ '"toc_max_heading_level" must be greater than or equal to 2',
320
+ ],
321
+ [
322
+ {toc_max_heading_level: 7},
323
+ '"toc_max_heading_level" must be less than or equal to 6',
324
+ ],
325
+ [
326
+ {toc_max_heading_level: 'hello'},
327
+ '"toc_max_heading_level" must be a number',
328
+ ],
329
+ [
330
+ {toc_max_heading_level: true},
331
+ '"toc_max_heading_level" must be a number',
332
+ ],
333
+ ],
334
+ });
335
+ });
336
+
337
+ describe('validateDocFrontMatter toc min/max consistency', () => {
338
+ testField({
339
+ prefix: 'toc min/max',
340
+ validFrontMatters: [
341
+ {},
342
+ {toc_min_heading_level: undefined, toc_max_heading_level: undefined},
343
+ {toc_min_heading_level: 2, toc_max_heading_level: 2},
344
+ {toc_min_heading_level: 2, toc_max_heading_level: 6},
345
+ {toc_min_heading_level: 2, toc_max_heading_level: 3},
346
+ {toc_min_heading_level: 3, toc_max_heading_level: 3},
347
+ ],
348
+ invalidFrontMatters: [
349
+ [
350
+ {toc_min_heading_level: 4, toc_max_heading_level: 3},
351
+ '"toc_min_heading_level" must be less than or equal to ref:toc_max_heading_level',
352
+ ],
353
+ [
354
+ {toc_min_heading_level: 6, toc_max_heading_level: 2},
355
+ '"toc_min_heading_level" must be less than or equal to ref:toc_max_heading_level',
356
+ ],
357
+ ],
358
+ });
359
+ });