@docusaurus/plugin-content-docs 2.0.0-beta.1 → 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
package/src/routes.ts ADDED
@@ -0,0 +1,173 @@
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 {PluginContentLoadedActions, RouteConfig} from '@docusaurus/types';
9
+ import {docuHash, createSlugger} from '@docusaurus/utils';
10
+ import {
11
+ CategoryGeneratedIndexMetadata,
12
+ DocMetadata,
13
+ LoadedVersion,
14
+ } from './types';
15
+ import type {PropCategoryGeneratedIndex} from '@docusaurus/plugin-content-docs';
16
+ import {toVersionMetadataProp} from './props';
17
+ import chalk from 'chalk';
18
+
19
+ export async function createCategoryGeneratedIndexRoutes({
20
+ version,
21
+ actions,
22
+ docCategoryGeneratedIndexComponent,
23
+ }: {
24
+ version: LoadedVersion;
25
+ actions: PluginContentLoadedActions;
26
+ docCategoryGeneratedIndexComponent: string;
27
+ }): Promise<RouteConfig[]> {
28
+ const slugs = createSlugger();
29
+
30
+ async function createCategoryGeneratedIndexRoute(
31
+ categoryGeneratedIndex: CategoryGeneratedIndexMetadata,
32
+ ): Promise<RouteConfig> {
33
+ const {sidebar, title, description, slug, permalink, previous, next} =
34
+ categoryGeneratedIndex;
35
+
36
+ const propFileName = slugs.slug(
37
+ `${version.versionPath}-${categoryGeneratedIndex.sidebar}-category-${categoryGeneratedIndex.title}`,
38
+ );
39
+
40
+ const prop: PropCategoryGeneratedIndex = {
41
+ title,
42
+ description,
43
+ slug,
44
+ permalink,
45
+ navigation: {
46
+ previous,
47
+ next,
48
+ },
49
+ };
50
+
51
+ const propData = await actions.createData(
52
+ `${docuHash(`category/${propFileName}`)}.json`,
53
+ JSON.stringify(prop, null, 2),
54
+ );
55
+
56
+ return {
57
+ path: permalink,
58
+ component: docCategoryGeneratedIndexComponent,
59
+ exact: true,
60
+ modules: {
61
+ categoryGeneratedIndex: propData,
62
+ },
63
+ // Same as doc, this sidebar route attribute permits to associate this subpage to the given sidebar
64
+ ...(sidebar && {sidebar}),
65
+ };
66
+ }
67
+
68
+ return Promise.all(
69
+ version.categoryGeneratedIndices.map(createCategoryGeneratedIndexRoute),
70
+ );
71
+ }
72
+
73
+ export async function createDocRoutes({
74
+ docs,
75
+ actions,
76
+ docItemComponent,
77
+ }: {
78
+ docs: DocMetadata[];
79
+ actions: PluginContentLoadedActions;
80
+ docItemComponent: string;
81
+ }): Promise<RouteConfig[]> {
82
+ return Promise.all(
83
+ docs.map(async (metadataItem) => {
84
+ await actions.createData(
85
+ // Note that this created data path must be in sync with
86
+ // metadataPath provided to mdx-loader.
87
+ `${docuHash(metadataItem.source)}.json`,
88
+ JSON.stringify(metadataItem, null, 2),
89
+ );
90
+
91
+ const docRoute: RouteConfig = {
92
+ path: metadataItem.permalink,
93
+ component: docItemComponent,
94
+ exact: true,
95
+ modules: {
96
+ content: metadataItem.source,
97
+ },
98
+ // Because the parent (DocPage) comp need to access it easily
99
+ // This permits to render the sidebar once without unmount/remount when navigating (and preserve sidebar state)
100
+ ...(metadataItem.sidebar && {
101
+ sidebar: metadataItem.sidebar,
102
+ }),
103
+ };
104
+
105
+ return docRoute;
106
+ }),
107
+ );
108
+ }
109
+
110
+ export async function createVersionRoutes({
111
+ loadedVersion,
112
+ actions,
113
+ docItemComponent,
114
+ docLayoutComponent,
115
+ docCategoryGeneratedIndexComponent,
116
+ pluginId,
117
+ aliasedSource,
118
+ }: {
119
+ loadedVersion: LoadedVersion;
120
+ actions: PluginContentLoadedActions;
121
+ docLayoutComponent: string;
122
+ docItemComponent: string;
123
+ docCategoryGeneratedIndexComponent: string;
124
+ pluginId: string;
125
+ aliasedSource: (str: string) => string;
126
+ }): Promise<void> {
127
+ async function doCreateVersionRoutes(version: LoadedVersion): Promise<void> {
128
+ const versionMetadata = toVersionMetadataProp(pluginId, version);
129
+ const versionMetadataPropPath = await actions.createData(
130
+ `${docuHash(`version-${version.versionName}-metadata-prop`)}.json`,
131
+ JSON.stringify(versionMetadata, null, 2),
132
+ );
133
+
134
+ async function createVersionSubRoutes() {
135
+ const [docRoutes, sidebarsRoutes] = await Promise.all([
136
+ createDocRoutes({docs: version.docs, actions, docItemComponent}),
137
+ createCategoryGeneratedIndexRoutes({
138
+ version,
139
+ actions,
140
+ docCategoryGeneratedIndexComponent,
141
+ }),
142
+ ]);
143
+
144
+ const routes = [...docRoutes, ...sidebarsRoutes];
145
+ return routes.sort((a, b) => a.path.localeCompare(b.path));
146
+ }
147
+
148
+ actions.addRoute({
149
+ path: version.versionPath,
150
+ // allow matching /docs/* as well
151
+ exact: false,
152
+ // main docs component (DocPage)
153
+ component: docLayoutComponent,
154
+ // sub-routes for each doc
155
+ routes: await createVersionSubRoutes(),
156
+ modules: {
157
+ versionMetadata: aliasedSource(versionMetadataPropPath),
158
+ },
159
+ priority: version.routePriority,
160
+ });
161
+ }
162
+
163
+ try {
164
+ return await doCreateVersionRoutes(loadedVersion);
165
+ } catch (e) {
166
+ console.error(
167
+ chalk.red(
168
+ `Can't create version routes for version "${loadedVersion.versionName}"`,
169
+ ),
170
+ );
171
+ throw e;
172
+ }
173
+ }
@@ -1,10 +1,11 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`loadSidebars sidebars link 1`] = `
3
+ exports[`loadNormalizedSidebars sidebars link 1`] = `
4
4
  Object {
5
5
  "docs": Array [
6
6
  Object {
7
7
  "collapsed": true,
8
+ "collapsible": true,
8
9
  "items": Array [
9
10
  Object {
10
11
  "href": "https://github.com",
@@ -13,20 +14,23 @@ Object {
13
14
  },
14
15
  ],
15
16
  "label": "Test",
17
+ "link": undefined,
16
18
  "type": "category",
17
19
  },
18
20
  ],
19
21
  }
20
22
  `;
21
23
 
22
- exports[`loadSidebars sidebars with category.collapsed property 1`] = `
24
+ exports[`loadNormalizedSidebars sidebars with category.collapsed property 1`] = `
23
25
  Object {
24
26
  "docs": Array [
25
27
  Object {
26
28
  "collapsed": true,
29
+ "collapsible": true,
27
30
  "items": Array [
28
31
  Object {
29
32
  "collapsed": false,
33
+ "collapsible": true,
30
34
  "items": Array [
31
35
  Object {
32
36
  "id": "doc1",
@@ -34,17 +38,21 @@ Object {
34
38
  },
35
39
  ],
36
40
  "label": "Introduction",
41
+ "link": undefined,
37
42
  "type": "category",
38
43
  },
39
44
  ],
40
45
  "label": "Test",
46
+ "link": undefined,
41
47
  "type": "category",
42
48
  },
43
49
  Object {
44
50
  "collapsed": true,
51
+ "collapsible": true,
45
52
  "items": Array [
46
53
  Object {
47
54
  "collapsed": false,
55
+ "collapsible": true,
48
56
  "items": Array [
49
57
  Object {
50
58
  "id": "doc2",
@@ -52,21 +60,24 @@ Object {
52
60
  },
53
61
  ],
54
62
  "label": "Powering MDX",
63
+ "link": undefined,
55
64
  "type": "category",
56
65
  },
57
66
  ],
58
67
  "label": "Reference",
68
+ "link": undefined,
59
69
  "type": "category",
60
70
  },
61
71
  ],
62
72
  }
63
73
  `;
64
74
 
65
- exports[`loadSidebars sidebars with category.collapsed property at first level 1`] = `
75
+ exports[`loadNormalizedSidebars sidebars with category.collapsed property at first level 1`] = `
66
76
  Object {
67
77
  "docs": Array [
68
78
  Object {
69
79
  "collapsed": false,
80
+ "collapsible": true,
70
81
  "items": Array [
71
82
  Object {
72
83
  "id": "doc1",
@@ -74,10 +85,12 @@ Object {
74
85
  },
75
86
  ],
76
87
  "label": "Introduction",
88
+ "link": undefined,
77
89
  "type": "category",
78
90
  },
79
91
  Object {
80
92
  "collapsed": false,
93
+ "collapsible": true,
81
94
  "items": Array [
82
95
  Object {
83
96
  "id": "doc2",
@@ -85,17 +98,19 @@ Object {
85
98
  },
86
99
  ],
87
100
  "label": "Powering MDX",
101
+ "link": undefined,
88
102
  "type": "category",
89
103
  },
90
104
  ],
91
105
  }
92
106
  `;
93
107
 
94
- exports[`loadSidebars sidebars with deep level of category 1`] = `
108
+ exports[`loadNormalizedSidebars sidebars with deep level of category 1`] = `
95
109
  Object {
96
110
  "docs": Array [
97
111
  Object {
98
112
  "collapsed": true,
113
+ "collapsible": true,
99
114
  "items": Array [
100
115
  Object {
101
116
  "id": "a",
@@ -103,9 +118,11 @@ Object {
103
118
  },
104
119
  Object {
105
120
  "collapsed": true,
121
+ "collapsible": true,
106
122
  "items": Array [
107
123
  Object {
108
124
  "collapsed": true,
125
+ "collapsible": true,
109
126
  "items": Array [
110
127
  Object {
111
128
  "id": "c",
@@ -113,6 +130,7 @@ Object {
113
130
  },
114
131
  Object {
115
132
  "collapsed": true,
133
+ "collapsible": true,
116
134
  "items": Array [
117
135
  Object {
118
136
  "id": "d",
@@ -120,6 +138,7 @@ Object {
120
138
  },
121
139
  Object {
122
140
  "collapsed": true,
141
+ "collapsible": true,
123
142
  "items": Array [
124
143
  Object {
125
144
  "id": "e",
@@ -127,14 +146,17 @@ Object {
127
146
  },
128
147
  ],
129
148
  "label": "deeper more more",
149
+ "link": undefined,
130
150
  "type": "category",
131
151
  },
132
152
  ],
133
153
  "label": "level 4",
154
+ "link": undefined,
134
155
  "type": "category",
135
156
  },
136
157
  ],
137
158
  "label": "level 3",
159
+ "link": undefined,
138
160
  "type": "category",
139
161
  },
140
162
  Object {
@@ -143,21 +165,24 @@ Object {
143
165
  },
144
166
  ],
145
167
  "label": "level 2",
168
+ "link": undefined,
146
169
  "type": "category",
147
170
  },
148
171
  ],
149
172
  "label": "level 1",
173
+ "link": undefined,
150
174
  "type": "category",
151
175
  },
152
176
  ],
153
177
  }
154
178
  `;
155
179
 
156
- exports[`loadSidebars sidebars with first level not a category 1`] = `
180
+ exports[`loadNormalizedSidebars sidebars with first level not a category 1`] = `
157
181
  Object {
158
182
  "docs": Array [
159
183
  Object {
160
184
  "collapsed": true,
185
+ "collapsible": true,
161
186
  "items": Array [
162
187
  Object {
163
188
  "id": "greeting",
@@ -165,6 +190,7 @@ Object {
165
190
  },
166
191
  ],
167
192
  "label": "Getting Started",
193
+ "link": undefined,
168
194
  "type": "category",
169
195
  },
170
196
  Object {
@@ -175,11 +201,12 @@ Object {
175
201
  }
176
202
  `;
177
203
 
178
- exports[`loadSidebars sidebars with known sidebar item type 1`] = `
204
+ exports[`loadNormalizedSidebars sidebars with known sidebar item type 1`] = `
179
205
  Object {
180
206
  "docs": Array [
181
207
  Object {
182
208
  "collapsed": true,
209
+ "collapsible": true,
183
210
  "items": Array [
184
211
  Object {
185
212
  "id": "foo/bar",
@@ -200,10 +227,12 @@ Object {
200
227
  },
201
228
  ],
202
229
  "label": "Test",
230
+ "link": undefined,
203
231
  "type": "category",
204
232
  },
205
233
  Object {
206
234
  "collapsed": true,
235
+ "collapsible": true,
207
236
  "items": Array [
208
237
  Object {
209
238
  "id": "hello",
@@ -211,6 +240,7 @@ Object {
211
240
  },
212
241
  ],
213
242
  "label": "Guides",
243
+ "link": undefined,
214
244
  "type": "category",
215
245
  },
216
246
  ],