@docusaurus/plugin-content-docs 2.0.0-beta.0e652730d → 2.0.0-beta.10

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 (140) 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 +1 -4
  7. package/lib/client/docsClientUtils.js +21 -31
  8. package/lib/docFrontMatter.d.ts +1 -1
  9. package/lib/docFrontMatter.js +10 -6
  10. package/lib/docs.d.ts +25 -3
  11. package/lib/docs.js +125 -38
  12. package/lib/globalData.d.ts +1 -1
  13. package/lib/index.d.ts +1 -1
  14. package/lib/index.js +104 -138
  15. package/lib/lastUpdate.js +9 -10
  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 +49 -17
  22. package/lib/props.d.ts +7 -2
  23. package/lib/props.js +61 -9
  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 +24 -21
  45. package/lib/translations.d.ts +2 -2
  46. package/lib/translations.js +71 -29
  47. package/lib/types.d.ts +52 -62
  48. package/lib/versions.d.ts +3 -3
  49. package/lib/versions.js +76 -24
  50. package/package.json +22 -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 +753 -112
  75. package/src/__tests__/__snapshots__/translations.test.ts.snap +45 -18
  76. package/src/__tests__/cli.test.ts +15 -11
  77. package/src/__tests__/docFrontMatter.test.ts +195 -40
  78. package/src/__tests__/docs.test.ts +311 -150
  79. package/src/__tests__/index.test.ts +112 -69
  80. package/src/__tests__/lastUpdate.test.ts +3 -2
  81. package/src/__tests__/options.test.ts +48 -4
  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 -2
  85. package/src/__tests__/versions.test.ts +93 -67
  86. package/src/categoryGeneratedIndex.ts +57 -0
  87. package/src/cli.ts +8 -41
  88. package/src/client/__tests__/docsClientUtils.test.ts +4 -5
  89. package/src/client/docsClientUtils.ts +19 -41
  90. package/{types.d.ts → src/deps.d.ts} +0 -0
  91. package/src/docFrontMatter.ts +13 -7
  92. package/src/docs.ts +158 -29
  93. package/src/globalData.ts +6 -1
  94. package/src/index.ts +134 -179
  95. package/src/lastUpdate.ts +10 -9
  96. package/src/markdown/index.ts +8 -12
  97. package/src/numberPrefix.ts +5 -3
  98. package/src/options.ts +59 -28
  99. package/src/plugin-content-docs.d.ts +179 -35
  100. package/src/props.ts +91 -16
  101. package/src/routes.ts +173 -0
  102. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -0
  103. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -0
  104. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -0
  105. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-category.js +0 -0
  106. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -0
  107. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-collapsed.json +0 -0
  108. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -0
  109. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -0
  110. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -0
  111. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -0
  112. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-link.json +0 -0
  113. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-unknown-type.json +0 -0
  114. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars-wrong-field.json +0 -0
  115. package/src/{__tests__ → sidebars/__tests__}/__fixtures__/sidebars/sidebars.json +0 -0
  116. package/src/{__tests__/__snapshots__/sidebars.test.ts.snap → sidebars/__tests__/__snapshots__/index.test.ts.snap} +36 -6
  117. package/src/{__tests__/sidebarItemsGenerator.test.ts → sidebars/__tests__/generator.test.ts} +143 -18
  118. package/src/sidebars/__tests__/index.test.ts +204 -0
  119. package/src/sidebars/__tests__/processor.test.ts +237 -0
  120. package/src/sidebars/__tests__/utils.test.ts +695 -0
  121. package/src/sidebars/__tests__/validation.test.ts +105 -0
  122. package/src/sidebars/generator.ts +310 -0
  123. package/src/sidebars/index.ts +94 -0
  124. package/src/sidebars/normalization.ts +112 -0
  125. package/src/sidebars/processor.ts +154 -0
  126. package/src/sidebars/types.ts +211 -0
  127. package/src/sidebars/utils.ts +329 -0
  128. package/src/sidebars/validation.ts +168 -0
  129. package/src/slug.ts +32 -17
  130. package/src/tags.ts +19 -0
  131. package/src/theme/hooks/useDocs.ts +5 -1
  132. package/src/translations.ts +103 -47
  133. package/src/types.ts +67 -105
  134. package/src/versions.ts +117 -21
  135. package/lib/sidebarItemsGenerator.js +0 -211
  136. package/lib/sidebars.d.ts +0 -43
  137. package/lib/sidebars.js +0 -319
  138. package/src/__tests__/sidebars.test.ts +0 -639
  139. package/src/sidebarItemsGenerator.ts +0 -307
  140. package/src/sidebars.ts +0 -506
@@ -7,21 +7,29 @@
7
7
 
8
8
  import path from 'path';
9
9
  import {loadContext} from '@docusaurus/core/src/server/index';
10
- import {processDocMetadata, readVersionDocs, readDocFile} from '../docs';
11
- import {readVersionsMetadata} from '../versions';
12
10
  import {
11
+ processDocMetadata,
12
+ readVersionDocs,
13
+ readDocFile,
14
+ addDocNavigation,
15
+ isConventionalDocIndex,
16
+ } from '../docs';
17
+ import {loadSidebars} from '../sidebars';
18
+ import {readVersionsMetadata} from '../versions';
19
+ import type {
13
20
  DocFile,
14
21
  DocMetadataBase,
15
22
  MetadataOptions,
16
23
  VersionMetadata,
17
24
  PluginOptions,
18
25
  EditUrlFunction,
26
+ DocNavLink,
19
27
  } from '../types';
20
- import {LoadContext} from '@docusaurus/types';
21
- import {DEFAULT_PLUGIN_ID} from '@docusaurus/core/lib/constants';
28
+ import type {LoadContext} from '@docusaurus/types';
22
29
  import {DEFAULT_OPTIONS} from '../options';
23
30
  import {Optional} from 'utility-types';
24
- import {posixPath} from '@docusaurus/utils';
31
+ import {createSlugger, posixPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils';
32
+ import {createSidebarsUtils} from '../sidebars/utils';
25
33
 
26
34
  const fixtureDir = path.join(__dirname, '__fixtures__');
27
35
 
@@ -110,7 +118,41 @@ function createTestUtils({
110
118
  expect(metadata.permalink).toEqual(expectedPermalink);
111
119
  }
112
120
 
113
- return {processDocFile, testMeta, testSlug};
121
+ async function generateNavigation(
122
+ docFiles: DocFile[],
123
+ ): Promise<[DocNavLink | undefined, DocNavLink | undefined][]> {
124
+ const rawDocs = await Promise.all(
125
+ docFiles.map((docFile) =>
126
+ processDocMetadata({
127
+ docFile,
128
+ versionMetadata,
129
+ context,
130
+ options,
131
+ }),
132
+ ),
133
+ );
134
+ const sidebars = await loadSidebars(versionMetadata.sidebarFilePath, {
135
+ sidebarItemsGenerator: ({defaultSidebarItemsGenerator, ...args}) =>
136
+ defaultSidebarItemsGenerator({...args}),
137
+ numberPrefixParser: options.numberPrefixParser,
138
+ docs: rawDocs,
139
+ version: versionMetadata,
140
+ sidebarOptions: {
141
+ sidebarCollapsed: false,
142
+ sidebarCollapsible: true,
143
+ },
144
+ categoryLabelSlugger: createSlugger(),
145
+ });
146
+ const sidebarsUtils = createSidebarsUtils(sidebars);
147
+
148
+ return addDocNavigation(
149
+ rawDocs,
150
+ sidebarsUtils,
151
+ versionMetadata.sidebarFilePath as string,
152
+ ).map((doc) => [doc.previous, doc.next]);
153
+ }
154
+
155
+ return {processDocFile, testMeta, testSlug, generateNavigation};
114
156
  }
115
157
 
116
158
  describe('simple site', () => {
@@ -177,7 +219,6 @@ describe('simple site', () => {
177
219
  id: 'foo/bar',
178
220
  unversionedId: 'foo/bar',
179
221
  sourceDirName: 'foo',
180
- isDocsHomePage: false,
181
222
  permalink: '/docs/foo/bar',
182
223
  slug: '/foo/bar',
183
224
  title: 'Bar',
@@ -187,43 +228,13 @@ describe('simple site', () => {
187
228
  id: 'bar',
188
229
  title: 'Bar',
189
230
  },
231
+ tags: [],
190
232
  });
191
233
  await defaultTestUtils.testMeta(path.join('hello.md'), {
192
234
  version: 'current',
193
235
  id: 'hello',
194
236
  unversionedId: 'hello',
195
237
  sourceDirName: '.',
196
- isDocsHomePage: false,
197
- permalink: '/docs/hello',
198
- slug: '/hello',
199
- title: 'Hello, World !',
200
- description: `Hi, Endilie here :)`,
201
- frontMatter: {
202
- id: 'hello',
203
- title: 'Hello, World !',
204
- sidebar_label: 'Hello sidebar_label',
205
- },
206
- });
207
- });
208
-
209
- test('homePageId doc', async () => {
210
- const {siteDir, context, options, currentVersion} = await loadSite({
211
- options: {homePageId: 'hello'},
212
- });
213
-
214
- const testUtilsLocal = createTestUtils({
215
- siteDir,
216
- context,
217
- options,
218
- versionMetadata: currentVersion,
219
- });
220
-
221
- await testUtilsLocal.testMeta(path.join('hello.md'), {
222
- version: 'current',
223
- id: 'hello',
224
- unversionedId: 'hello',
225
- sourceDirName: '.',
226
- isDocsHomePage: true,
227
238
  permalink: '/docs/',
228
239
  slug: '/',
229
240
  title: 'Hello, World !',
@@ -232,44 +243,26 @@ describe('simple site', () => {
232
243
  id: 'hello',
233
244
  title: 'Hello, World !',
234
245
  sidebar_label: 'Hello sidebar_label',
246
+ slug: '/',
247
+ tags: ['tag-1', 'tag 3'],
235
248
  },
236
- });
237
- });
238
-
239
- test('homePageId doc nested', async () => {
240
- const {siteDir, context, options, currentVersion} = await loadSite({
241
- options: {homePageId: 'foo/bar'},
242
- });
243
-
244
- const testUtilsLocal = createTestUtils({
245
- siteDir,
246
- context,
247
- options,
248
- versionMetadata: currentVersion,
249
- });
250
-
251
- await testUtilsLocal.testMeta(path.join('foo', 'bar.md'), {
252
- version: 'current',
253
- id: 'foo/bar',
254
- unversionedId: 'foo/bar',
255
- sourceDirName: 'foo',
256
- isDocsHomePage: true,
257
- permalink: '/docs/',
258
- slug: '/',
259
- title: 'Bar',
260
- description: 'This is custom description',
261
- frontMatter: {
262
- description: 'This is custom description',
263
- id: 'bar',
264
- title: 'Bar',
265
- },
249
+ tags: [
250
+ {
251
+ label: 'tag-1',
252
+ permalink: '/docs/tags/tag-1',
253
+ },
254
+ {
255
+ label: 'tag 3',
256
+ permalink: '/docs/tags/tag-3',
257
+ },
258
+ ],
266
259
  });
267
260
  });
268
261
 
269
262
  test('docs with editUrl', async () => {
270
263
  const {siteDir, context, options, currentVersion} = await loadSite({
271
264
  options: {
272
- editUrl: 'https://github.com/facebook/docusaurus/edit/master/website',
265
+ editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
273
266
  },
274
267
  });
275
268
 
@@ -285,19 +278,33 @@ describe('simple site', () => {
285
278
  id: 'foo/baz',
286
279
  unversionedId: 'foo/baz',
287
280
  sourceDirName: 'foo',
288
- isDocsHomePage: false,
289
281
  permalink: '/docs/foo/bazSlug.html',
290
282
  slug: '/foo/bazSlug.html',
291
283
  title: 'baz',
292
284
  editUrl:
293
- 'https://github.com/facebook/docusaurus/edit/master/website/docs/foo/baz.md',
285
+ 'https://github.com/facebook/docusaurus/edit/main/website/docs/foo/baz.md',
294
286
  description: 'Images',
295
287
  frontMatter: {
296
288
  id: 'baz',
297
289
  slug: 'bazSlug.html',
298
290
  title: 'baz',
299
291
  pagination_label: 'baz pagination_label',
292
+ tags: [
293
+ 'tag 1',
294
+ 'tag-1',
295
+ {label: 'tag 2', permalink: 'tag2-custom-permalink'},
296
+ ],
300
297
  },
298
+ tags: [
299
+ {
300
+ label: 'tag 1',
301
+ permalink: '/docs/tags/tag-1',
302
+ },
303
+ {
304
+ label: 'tag 2',
305
+ permalink: '/docs/tags/tag2-custom-permalink',
306
+ },
307
+ ],
301
308
  });
302
309
  });
303
310
 
@@ -309,7 +316,6 @@ describe('simple site', () => {
309
316
  id: 'lorem',
310
317
  unversionedId: 'lorem',
311
318
  sourceDirName: '.',
312
- isDocsHomePage: false,
313
319
  permalink: '/docs/lorem',
314
320
  slug: '/lorem',
315
321
  title: 'lorem',
@@ -319,6 +325,7 @@ describe('simple site', () => {
319
325
  custom_edit_url: 'https://github.com/customUrl/docs/lorem.md',
320
326
  unrelated_frontmatter: "won't be part of metadata",
321
327
  },
328
+ tags: [],
322
329
  });
323
330
  });
324
331
 
@@ -345,7 +352,6 @@ describe('simple site', () => {
345
352
  id: 'foo/baz',
346
353
  unversionedId: 'foo/baz',
347
354
  sourceDirName: 'foo',
348
- isDocsHomePage: false,
349
355
  permalink: '/docs/foo/bazSlug.html',
350
356
  slug: '/foo/bazSlug.html',
351
357
  title: 'baz',
@@ -356,7 +362,22 @@ describe('simple site', () => {
356
362
  slug: 'bazSlug.html',
357
363
  title: 'baz',
358
364
  pagination_label: 'baz pagination_label',
365
+ tags: [
366
+ 'tag 1',
367
+ 'tag-1',
368
+ {label: 'tag 2', permalink: 'tag2-custom-permalink'},
369
+ ],
359
370
  },
371
+ tags: [
372
+ {
373
+ label: 'tag 1',
374
+ permalink: '/docs/tags/tag-1',
375
+ },
376
+ {
377
+ label: 'tag 2',
378
+ permalink: '/docs/tags/tag2-custom-permalink',
379
+ },
380
+ ],
360
381
  });
361
382
 
362
383
  expect(editUrlFunction).toHaveBeenCalledTimes(1);
@@ -389,7 +410,6 @@ describe('simple site', () => {
389
410
  id: 'lorem',
390
411
  unversionedId: 'lorem',
391
412
  sourceDirName: '.',
392
- isDocsHomePage: false,
393
413
  permalink: '/docs/lorem',
394
414
  slug: '/lorem',
395
415
  title: 'lorem',
@@ -402,6 +422,7 @@ describe('simple site', () => {
402
422
  lastUpdatedAt: 1539502055,
403
423
  formattedLastUpdatedAt: '10/14/2018',
404
424
  lastUpdatedBy: 'Author',
425
+ tags: [],
405
426
  });
406
427
  });
407
428
 
@@ -459,30 +480,25 @@ describe('simple site', () => {
459
480
  );
460
481
  });
461
482
 
462
- test('docs with slug on doc home', async () => {
463
- const {siteDir, context, options, currentVersion} = await loadSite({
464
- options: {
465
- homePageId: 'homePageId',
466
- },
467
- });
483
+ test('custom pagination', async () => {
484
+ const {defaultTestUtils, options, versionsMetadata} = await loadSite();
485
+ const docs = await readVersionDocs(versionsMetadata[0], options);
486
+ expect(await defaultTestUtils.generateNavigation(docs)).toMatchSnapshot();
487
+ });
468
488
 
469
- const testUtilsLocal = createTestUtils({
470
- siteDir,
471
- context,
472
- options,
473
- versionMetadata: currentVersion,
474
- });
475
- expect(() => {
476
- testUtilsLocal.processDocFile(
477
- createFakeDocFile({
478
- source: 'homePageId',
479
- frontmatter: {
480
- slug: '/x/y',
481
- },
482
- }),
483
- );
484
- }).toThrowErrorMatchingInlineSnapshot(
485
- `"The docs homepage (homePageId=homePageId) is not allowed to have a frontmatter slug=/x/y => you have to choose either homePageId or slug, not both"`,
489
+ test('bad pagination', async () => {
490
+ const {defaultTestUtils, options, versionsMetadata} = await loadSite();
491
+ const docs = await readVersionDocs(versionsMetadata[0], options);
492
+ docs.push(
493
+ createFakeDocFile({
494
+ source: 'hehe',
495
+ frontmatter: {pagination_prev: 'nonexistent'},
496
+ }),
497
+ );
498
+ await expect(async () => {
499
+ await defaultTestUtils.generateNavigation(docs);
500
+ }).rejects.toThrowErrorMatchingInlineSnapshot(
501
+ `"Error when loading hehe in .: the pagination_prev front matter points to a non-existent ID nonexistent."`,
486
502
  );
487
503
  });
488
504
  });
@@ -507,12 +523,8 @@ describe('versioned site', () => {
507
523
  options,
508
524
  });
509
525
  expect(versionsMetadata.length).toEqual(4);
510
- const [
511
- currentVersion,
512
- version101,
513
- version100,
514
- versionWithSlugs,
515
- ] = versionsMetadata;
526
+ const [currentVersion, version101, version100, versionWithSlugs] =
527
+ versionsMetadata;
516
528
 
517
529
  const currentVersionTestUtils = createTestUtils({
518
530
  siteDir,
@@ -559,27 +571,52 @@ describe('versioned site', () => {
559
571
 
560
572
  await currentVersionTestUtils.testMeta(path.join('foo', 'bar.md'), {
561
573
  id: 'foo/bar',
574
+ version: 'current',
562
575
  unversionedId: 'foo/bar',
563
576
  sourceDirName: 'foo',
564
- isDocsHomePage: false,
565
577
  permalink: '/docs/next/foo/barSlug',
566
578
  slug: '/foo/barSlug',
567
579
  title: 'bar',
568
580
  description: 'This is next version of bar.',
569
- frontMatter: {slug: 'barSlug'},
570
- version: 'current',
581
+ frontMatter: {
582
+ slug: 'barSlug',
583
+ tags: [
584
+ 'barTag 1',
585
+ 'barTag-2',
586
+ {
587
+ label: 'barTag 3',
588
+ permalink: 'barTag-3-permalink',
589
+ },
590
+ ],
591
+ },
592
+ tags: [
593
+ {
594
+ label: 'barTag 1',
595
+ permalink: '/docs/next/tags/bar-tag-1',
596
+ },
597
+ {
598
+ label: 'barTag-2',
599
+ permalink: '/docs/next/tags/bar-tag-2',
600
+ },
601
+ {
602
+ label: 'barTag 3',
603
+ permalink: '/docs/next/tags/barTag-3-permalink',
604
+ },
605
+ ],
571
606
  });
572
607
  await currentVersionTestUtils.testMeta(path.join('hello.md'), {
573
608
  id: 'hello',
609
+ version: 'current',
574
610
  unversionedId: 'hello',
575
611
  sourceDirName: '.',
576
- isDocsHomePage: false,
577
- permalink: '/docs/next/hello',
578
- slug: '/hello',
612
+ permalink: '/docs/next/',
613
+ slug: '/',
579
614
  title: 'hello',
580
615
  description: 'Hello next !',
581
- frontMatter: {},
582
- version: 'current',
616
+ frontMatter: {
617
+ slug: '/',
618
+ },
619
+ tags: [],
583
620
  });
584
621
  });
585
622
 
@@ -590,51 +627,55 @@ describe('versioned site', () => {
590
627
  id: 'version-1.0.0/foo/bar',
591
628
  unversionedId: 'foo/bar',
592
629
  sourceDirName: 'foo',
593
- isDocsHomePage: false,
594
630
  permalink: '/docs/1.0.0/foo/barSlug',
595
631
  slug: '/foo/barSlug',
596
632
  title: 'bar',
597
633
  description: 'Bar 1.0.0 !',
598
634
  frontMatter: {slug: 'barSlug'},
599
635
  version: '1.0.0',
636
+ tags: [],
600
637
  });
601
638
  await version100TestUtils.testMeta(path.join('hello.md'), {
602
639
  id: 'version-1.0.0/hello',
603
640
  unversionedId: 'hello',
604
641
  sourceDirName: '.',
605
- isDocsHomePage: false,
606
- permalink: '/docs/1.0.0/hello',
607
- slug: '/hello',
642
+ permalink: '/docs/1.0.0/',
643
+ slug: '/',
608
644
  title: 'hello',
609
645
  description: 'Hello 1.0.0 ! (translated en)',
610
- frontMatter: {},
646
+ frontMatter: {
647
+ slug: '/',
648
+ },
611
649
  version: '1.0.0',
612
650
  source:
613
651
  '@site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
652
+ tags: [],
614
653
  });
615
654
  await version101TestUtils.testMeta(path.join('foo', 'bar.md'), {
616
655
  id: 'version-1.0.1/foo/bar',
617
656
  unversionedId: 'foo/bar',
618
657
  sourceDirName: 'foo',
619
- isDocsHomePage: false,
620
658
  permalink: '/docs/foo/bar',
621
659
  slug: '/foo/bar',
622
660
  title: 'bar',
623
661
  description: 'Bar 1.0.1 !',
624
662
  version: '1.0.1',
625
663
  frontMatter: {},
664
+ tags: [],
626
665
  });
627
666
  await version101TestUtils.testMeta(path.join('hello.md'), {
628
667
  id: 'version-1.0.1/hello',
629
668
  unversionedId: 'hello',
630
669
  sourceDirName: '.',
631
- isDocsHomePage: false,
632
- permalink: '/docs/hello',
633
- slug: '/hello',
670
+ permalink: '/docs/',
671
+ slug: '/',
634
672
  title: 'hello',
635
673
  description: 'Hello 1.0.1 !',
636
674
  version: '1.0.1',
637
- frontMatter: {},
675
+ frontMatter: {
676
+ slug: '/',
677
+ },
678
+ tags: [],
638
679
  });
639
680
  });
640
681
 
@@ -719,16 +760,18 @@ describe('versioned site', () => {
719
760
  id: 'version-1.0.0/hello',
720
761
  unversionedId: 'hello',
721
762
  sourceDirName: '.',
722
- isDocsHomePage: false,
723
- permalink: '/docs/1.0.0/hello',
724
- slug: '/hello',
763
+ permalink: '/docs/1.0.0/',
764
+ slug: '/',
725
765
  title: 'hello',
726
766
  description: 'Hello 1.0.0 ! (translated en)',
727
- frontMatter: {},
767
+ frontMatter: {
768
+ slug: '/',
769
+ },
728
770
  version: '1.0.0',
729
771
  source:
730
772
  '@site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
731
773
  editUrl: hardcodedEditUrl,
774
+ tags: [],
732
775
  });
733
776
 
734
777
  expect(editUrlFunction).toHaveBeenCalledTimes(1);
@@ -736,7 +779,7 @@ describe('versioned site', () => {
736
779
  version: '1.0.0',
737
780
  versionDocsDirPath: 'versioned_docs/version-1.0.0',
738
781
  docPath: path.join('hello.md'),
739
- permalink: '/docs/1.0.0/hello',
782
+ permalink: '/docs/1.0.0/',
740
783
  locale: 'en',
741
784
  });
742
785
  });
@@ -744,7 +787,7 @@ describe('versioned site', () => {
744
787
  test('translated doc with editUrl', async () => {
745
788
  const {siteDir, context, options, version100} = await loadSite({
746
789
  options: {
747
- editUrl: 'https://github.com/facebook/docusaurus/edit/master/website',
790
+ editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
748
791
  // editCurrentVersion: true,
749
792
  },
750
793
  });
@@ -760,24 +803,26 @@ describe('versioned site', () => {
760
803
  id: 'version-1.0.0/hello',
761
804
  unversionedId: 'hello',
762
805
  sourceDirName: '.',
763
- isDocsHomePage: false,
764
- permalink: '/docs/1.0.0/hello',
765
- slug: '/hello',
806
+ permalink: '/docs/1.0.0/',
807
+ slug: '/',
766
808
  title: 'hello',
767
809
  description: 'Hello 1.0.0 ! (translated en)',
768
- frontMatter: {},
810
+ frontMatter: {
811
+ slug: '/',
812
+ },
769
813
  version: '1.0.0',
770
814
  source:
771
815
  '@site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
772
816
  editUrl:
773
- 'https://github.com/facebook/docusaurus/edit/master/website/versioned_docs/version-1.0.0/hello.md',
817
+ 'https://github.com/facebook/docusaurus/edit/main/website/versioned_docs/version-1.0.0/hello.md',
818
+ tags: [],
774
819
  });
775
820
  });
776
821
 
777
822
  test('translated en doc with editUrl and editCurrentVersion=true', async () => {
778
823
  const {siteDir, context, options, version100} = await loadSite({
779
824
  options: {
780
- editUrl: 'https://github.com/facebook/docusaurus/edit/master/website',
825
+ editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
781
826
  editCurrentVersion: true,
782
827
  },
783
828
  });
@@ -793,24 +838,26 @@ describe('versioned site', () => {
793
838
  id: 'version-1.0.0/hello',
794
839
  unversionedId: 'hello',
795
840
  sourceDirName: '.',
796
- isDocsHomePage: false,
797
- permalink: '/docs/1.0.0/hello',
798
- slug: '/hello',
841
+ permalink: '/docs/1.0.0/',
842
+ slug: '/',
799
843
  title: 'hello',
800
844
  description: 'Hello 1.0.0 ! (translated en)',
801
- frontMatter: {},
845
+ frontMatter: {
846
+ slug: '/',
847
+ },
802
848
  version: '1.0.0',
803
849
  source:
804
850
  '@site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
805
851
  editUrl:
806
- 'https://github.com/facebook/docusaurus/edit/master/website/docs/hello.md',
852
+ 'https://github.com/facebook/docusaurus/edit/main/website/docs/hello.md',
853
+ tags: [],
807
854
  });
808
855
  });
809
856
 
810
857
  test('translated fr doc with editUrl and editLocalizedFiles=true', async () => {
811
858
  const {siteDir, context, options, version100} = await loadSite({
812
859
  options: {
813
- editUrl: 'https://github.com/facebook/docusaurus/edit/master/website',
860
+ editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
814
861
  editLocalizedFiles: true,
815
862
  },
816
863
  locale: 'fr',
@@ -827,24 +874,26 @@ describe('versioned site', () => {
827
874
  id: 'version-1.0.0/hello',
828
875
  unversionedId: 'hello',
829
876
  sourceDirName: '.',
830
- isDocsHomePage: false,
831
- permalink: '/fr/docs/1.0.0/hello',
832
- slug: '/hello',
877
+ permalink: '/fr/docs/1.0.0/',
878
+ slug: '/',
833
879
  title: 'hello',
834
880
  description: 'Hello 1.0.0 ! (translated fr)',
835
- frontMatter: {},
881
+ frontMatter: {
882
+ slug: '/',
883
+ },
836
884
  version: '1.0.0',
837
885
  source:
838
886
  '@site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
839
887
  editUrl:
840
- 'https://github.com/facebook/docusaurus/edit/master/website/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
888
+ 'https://github.com/facebook/docusaurus/edit/main/website/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
889
+ tags: [],
841
890
  });
842
891
  });
843
892
 
844
893
  test('translated fr doc with editUrl and editLocalizedFiles=true + editCurrentVersion=true', async () => {
845
894
  const {siteDir, context, options, version100} = await loadSite({
846
895
  options: {
847
- editUrl: 'https://github.com/facebook/docusaurus/edit/master/website',
896
+ editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
848
897
  editCurrentVersion: true,
849
898
  editLocalizedFiles: true,
850
899
  },
@@ -862,17 +911,129 @@ describe('versioned site', () => {
862
911
  id: 'version-1.0.0/hello',
863
912
  unversionedId: 'hello',
864
913
  sourceDirName: '.',
865
- isDocsHomePage: false,
866
- permalink: '/fr/docs/1.0.0/hello',
867
- slug: '/hello',
914
+ permalink: '/fr/docs/1.0.0/',
915
+ slug: '/',
868
916
  title: 'hello',
869
917
  description: 'Hello 1.0.0 ! (translated fr)',
870
- frontMatter: {},
918
+ frontMatter: {
919
+ slug: '/',
920
+ },
871
921
  version: '1.0.0',
872
922
  source:
873
923
  '@site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md',
874
924
  editUrl:
875
- 'https://github.com/facebook/docusaurus/edit/master/website/i18n/fr/docusaurus-plugin-content-docs/current/hello.md',
925
+ 'https://github.com/facebook/docusaurus/edit/main/website/i18n/fr/docusaurus-plugin-content-docs/current/hello.md',
926
+ tags: [],
876
927
  });
877
928
  });
878
929
  });
930
+
931
+ describe('isConventionalDocIndex', () => {
932
+ test('supports readme', () => {
933
+ expect(
934
+ isConventionalDocIndex({
935
+ sourceDirName: 'doesNotMatter',
936
+ source: 'readme.md',
937
+ }),
938
+ ).toEqual(true);
939
+ expect(
940
+ isConventionalDocIndex({
941
+ sourceDirName: 'doesNotMatter',
942
+ source: 'readme.mdx',
943
+ }),
944
+ ).toEqual(true);
945
+ expect(
946
+ isConventionalDocIndex({
947
+ sourceDirName: 'doesNotMatter',
948
+ source: 'README.md',
949
+ }),
950
+ ).toEqual(true);
951
+ expect(
952
+ isConventionalDocIndex({
953
+ sourceDirName: 'doesNotMatter',
954
+ source: 'parent/ReAdMe',
955
+ }),
956
+ ).toEqual(true);
957
+ });
958
+
959
+ test('supports index', () => {
960
+ expect(
961
+ isConventionalDocIndex({
962
+ sourceDirName: 'doesNotMatter',
963
+ source: 'index.md',
964
+ }),
965
+ ).toEqual(true);
966
+ expect(
967
+ isConventionalDocIndex({
968
+ sourceDirName: 'doesNotMatter',
969
+ source: 'index.mdx',
970
+ }),
971
+ ).toEqual(true);
972
+ expect(
973
+ isConventionalDocIndex({
974
+ sourceDirName: 'doesNotMatter',
975
+ source: 'INDEX.md',
976
+ }),
977
+ ).toEqual(true);
978
+ expect(
979
+ isConventionalDocIndex({
980
+ sourceDirName: 'doesNotMatter',
981
+ source: 'parent/InDeX',
982
+ }),
983
+ ).toEqual(true);
984
+ });
985
+
986
+ test('supports <categoryName>/<categoryName>.md', () => {
987
+ expect(
988
+ isConventionalDocIndex({
989
+ sourceDirName: 'someCategory',
990
+ source: 'someCategory',
991
+ }),
992
+ ).toEqual(true);
993
+ expect(
994
+ isConventionalDocIndex({
995
+ sourceDirName: 'someCategory',
996
+ source: 'someCategory.md',
997
+ }),
998
+ ).toEqual(true);
999
+ expect(
1000
+ isConventionalDocIndex({
1001
+ sourceDirName: 'someCategory',
1002
+ source: 'someCategory.mdx',
1003
+ }),
1004
+ ).toEqual(true);
1005
+ expect(
1006
+ isConventionalDocIndex({
1007
+ sourceDirName: 'some_category',
1008
+ source: 'SOME_CATEGORY.md',
1009
+ }),
1010
+ ).toEqual(true);
1011
+ expect(
1012
+ isConventionalDocIndex({
1013
+ sourceDirName: 'some_category',
1014
+ source: 'parent/some_category',
1015
+ }),
1016
+ ).toEqual(true);
1017
+ });
1018
+
1019
+ test('reject other cases', () => {
1020
+ expect(
1021
+ isConventionalDocIndex({
1022
+ sourceDirName: 'someCategory',
1023
+ source: 'some_Category',
1024
+ }),
1025
+ ).toEqual(false);
1026
+ expect(
1027
+ isConventionalDocIndex({
1028
+ sourceDirName: 'doesNotMatter',
1029
+ source: 'read_me',
1030
+ }),
1031
+ ).toEqual(false);
1032
+ expect(
1033
+ isConventionalDocIndex({
1034
+ sourceDirName: 'doesNotMatter',
1035
+ source: 'the index',
1036
+ }),
1037
+ ).toEqual(false);
1038
+ });
1039
+ });