@docusaurus/plugin-content-docs 2.0.0-beta.12faed89d → 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.
- package/lib/categoryGeneratedIndex.d.ts +12 -0
- package/lib/categoryGeneratedIndex.js +37 -0
- package/lib/cli.d.ts +2 -2
- package/lib/cli.js +14 -35
- package/lib/client/docsClientUtils.d.ts +0 -3
- package/lib/client/docsClientUtils.js +19 -22
- package/lib/docFrontMatter.d.ts +1 -1
- package/lib/docFrontMatter.js +7 -3
- package/lib/docs.d.ts +25 -3
- package/lib/docs.js +126 -41
- package/lib/globalData.d.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +101 -132
- package/lib/lastUpdate.js +12 -12
- package/lib/markdown/index.d.ts +3 -6
- package/lib/markdown/index.js +3 -3
- package/lib/markdown/linkify.js +2 -2
- package/lib/numberPrefix.d.ts +1 -1
- package/lib/options.d.ts +3 -3
- package/lib/options.js +48 -11
- package/lib/props.d.ts +7 -2
- package/lib/props.js +60 -8
- package/lib/routes.d.ts +27 -0
- package/lib/routes.js +105 -0
- package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +5 -2
- package/lib/sidebars/generator.js +216 -0
- package/lib/sidebars/index.d.ts +15 -0
- package/lib/sidebars/index.js +73 -0
- package/lib/sidebars/normalization.d.ts +14 -0
- package/lib/sidebars/normalization.js +77 -0
- package/lib/sidebars/processor.d.ts +18 -0
- package/lib/sidebars/processor.js +85 -0
- package/lib/sidebars/types.d.ts +127 -0
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js → lib/sidebars/types.js} +2 -10
- package/lib/sidebars/utils.d.ts +35 -0
- package/lib/sidebars/utils.js +228 -0
- package/lib/sidebars/validation.d.ts +10 -0
- package/lib/sidebars/validation.js +138 -0
- package/lib/slug.d.ts +4 -3
- package/lib/slug.js +27 -15
- package/{src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js → lib/tags.d.ts} +2 -8
- package/lib/tags.js +20 -0
- package/lib/theme/hooks/useDocs.js +21 -21
- package/lib/translations.d.ts +2 -2
- package/lib/translations.js +71 -29
- package/lib/types.d.ts +52 -63
- package/lib/versions.d.ts +3 -3
- package/lib/versions.js +41 -22
- package/package.json +20 -20
- package/src/categoryGeneratedIndex.ts +57 -0
- package/src/cli.ts +10 -42
- package/src/client/docsClientUtils.ts +14 -26
- package/{types.d.ts → src/deps.d.ts} +0 -0
- package/src/docFrontMatter.ts +9 -4
- package/src/docs.ts +164 -36
- package/src/globalData.ts +6 -1
- package/src/index.ts +127 -175
- package/src/lastUpdate.ts +14 -16
- package/src/markdown/index.ts +8 -12
- package/src/numberPrefix.ts +5 -3
- package/src/options.ts +56 -15
- package/src/plugin-content-docs.d.ts +173 -40
- package/src/props.ts +90 -15
- package/src/routes.ts +169 -0
- package/src/sidebars/generator.ts +302 -0
- package/src/sidebars/index.ts +94 -0
- package/src/sidebars/normalization.ts +112 -0
- package/src/sidebars/processor.ts +154 -0
- package/src/sidebars/types.ts +211 -0
- package/src/sidebars/utils.ts +329 -0
- package/src/sidebars/validation.ts +168 -0
- package/src/slug.ts +32 -17
- package/src/tags.ts +19 -0
- package/src/translations.ts +103 -47
- package/src/types.ts +64 -107
- package/src/versions.ts +59 -25
- package/lib/.tsbuildinfo +0 -1
- package/lib/sidebarItemsGenerator.js +0 -211
- package/lib/sidebars.d.ts +0 -43
- package/lib/sidebars.js +0 -320
- package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
- package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
- package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
- package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
- package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
- package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
- package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
- package/src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js +0 -20
- package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
- package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
- package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
- package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
- package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
- package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
- package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
- package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
- package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
- package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
- package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
- package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
- package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
- package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1902
- package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -484
- package/src/__tests__/cli.test.ts +0 -333
- package/src/__tests__/docFrontMatter.test.ts +0 -244
- package/src/__tests__/docs.test.ts +0 -878
- package/src/__tests__/index.test.ts +0 -1868
- package/src/__tests__/lastUpdate.test.ts +0 -69
- package/src/__tests__/numberPrefix.test.ts +0 -199
- package/src/__tests__/options.test.ts +0 -231
- package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
- package/src/__tests__/sidebars.test.ts +0 -639
- package/src/__tests__/slug.test.ts +0 -109
- package/src/__tests__/translations.test.ts +0 -158
- package/src/__tests__/versions.test.ts +0 -741
- package/src/client/__tests__/docsClientUtils.test.ts +0 -371
- package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
- package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
- package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
- package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
- package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
- package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
- package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
- package/src/markdown/__tests__/linkify.test.ts +0 -190
- package/src/sidebarItemsGenerator.ts +0 -307
- package/src/sidebars.ts +0 -522
- package/tsconfig.json +0 -9
package/src/docs.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import fs from 'fs-extra';
|
|
10
|
+
import logger from '@docusaurus/logger';
|
|
11
|
+
import {keyBy, last} from 'lodash';
|
|
10
12
|
import {
|
|
11
13
|
aliasedSitePath,
|
|
12
14
|
getEditUrl,
|
|
@@ -14,25 +16,33 @@ import {
|
|
|
14
16
|
normalizeUrl,
|
|
15
17
|
parseMarkdownString,
|
|
16
18
|
posixPath,
|
|
19
|
+
Globby,
|
|
20
|
+
normalizeFrontMatterTags,
|
|
17
21
|
} from '@docusaurus/utils';
|
|
18
|
-
import {LoadContext} from '@docusaurus/types';
|
|
22
|
+
import type {LoadContext} from '@docusaurus/types';
|
|
19
23
|
|
|
20
24
|
import {getFileLastUpdate} from './lastUpdate';
|
|
21
25
|
import {
|
|
22
26
|
DocFile,
|
|
23
27
|
DocMetadataBase,
|
|
28
|
+
DocMetadata,
|
|
29
|
+
DocNavLink,
|
|
24
30
|
LastUpdateData,
|
|
25
31
|
MetadataOptions,
|
|
26
32
|
PluginOptions,
|
|
27
33
|
VersionMetadata,
|
|
34
|
+
LoadedVersion,
|
|
28
35
|
} from './types';
|
|
29
36
|
import getSlug from './slug';
|
|
30
37
|
import {CURRENT_VERSION_NAME} from './constants';
|
|
31
|
-
import globby from 'globby';
|
|
32
38
|
import {getDocsDirPaths} from './versions';
|
|
33
39
|
import {stripPathNumberPrefixes} from './numberPrefix';
|
|
34
40
|
import {validateDocFrontMatter} from './docFrontMatter';
|
|
35
|
-
import
|
|
41
|
+
import {
|
|
42
|
+
SidebarsUtils,
|
|
43
|
+
toDocNavigationLink,
|
|
44
|
+
toNavigationLink,
|
|
45
|
+
} from './sidebars/utils';
|
|
36
46
|
|
|
37
47
|
type LastUpdateOptions = Pick<
|
|
38
48
|
PluginOptions,
|
|
@@ -92,11 +102,12 @@ export async function readVersionDocs(
|
|
|
92
102
|
versionMetadata: VersionMetadata,
|
|
93
103
|
options: Pick<
|
|
94
104
|
PluginOptions,
|
|
95
|
-
'include' | 'showLastUpdateAuthor' | 'showLastUpdateTime'
|
|
105
|
+
'include' | 'exclude' | 'showLastUpdateAuthor' | 'showLastUpdateTime'
|
|
96
106
|
>,
|
|
97
107
|
): Promise<DocFile[]> {
|
|
98
|
-
const sources = await
|
|
108
|
+
const sources = await Globby(options.include, {
|
|
99
109
|
cwd: versionMetadata.contentPath,
|
|
110
|
+
ignore: options.exclude,
|
|
100
111
|
});
|
|
101
112
|
return Promise.all(
|
|
102
113
|
sources.map((source) => readDocFile(versionMetadata, source, options)),
|
|
@@ -115,7 +126,6 @@ function doProcessDocMetadata({
|
|
|
115
126
|
options: MetadataOptions;
|
|
116
127
|
}): DocMetadataBase {
|
|
117
128
|
const {source, content, lastUpdate, contentPath, filePath} = docFile;
|
|
118
|
-
const {homePageId} = options;
|
|
119
129
|
const {siteDir, i18n} = context;
|
|
120
130
|
|
|
121
131
|
const {
|
|
@@ -129,9 +139,8 @@ function doProcessDocMetadata({
|
|
|
129
139
|
custom_edit_url: customEditURL,
|
|
130
140
|
|
|
131
141
|
// Strip number prefixes by default (01-MyFolder/01-MyDoc.md => MyFolder/MyDoc) by default,
|
|
132
|
-
// but allow to disable this behavior with
|
|
133
|
-
|
|
134
|
-
parse_number_prefixes = true,
|
|
142
|
+
// but allow to disable this behavior with frontmatter
|
|
143
|
+
parse_number_prefixes: parseNumberPrefixes = true,
|
|
135
144
|
} = frontMatter;
|
|
136
145
|
|
|
137
146
|
// ex: api/plugins/myDoc -> myDoc
|
|
@@ -145,8 +154,7 @@ function doProcessDocMetadata({
|
|
|
145
154
|
// ex: myDoc -> .
|
|
146
155
|
const sourceDirName = path.dirname(source);
|
|
147
156
|
|
|
148
|
-
|
|
149
|
-
const {filename: unprefixedFileName, numberPrefix} = parse_number_prefixes
|
|
157
|
+
const {filename: unprefixedFileName, numberPrefix} = parseNumberPrefixes
|
|
150
158
|
? options.numberPrefixParser(sourceFileNameWithoutExtension)
|
|
151
159
|
: {filename: sourceFileNameWithoutExtension, numberPrefix: undefined};
|
|
152
160
|
|
|
@@ -174,8 +182,7 @@ function doProcessDocMetadata({
|
|
|
174
182
|
return undefined;
|
|
175
183
|
}
|
|
176
184
|
// Eventually remove the number prefixes from intermediate directories
|
|
177
|
-
|
|
178
|
-
return parse_number_prefixes
|
|
185
|
+
return parseNumberPrefixes
|
|
179
186
|
? stripPathNumberPrefixes(sourceDirName, options.numberPrefixParser)
|
|
180
187
|
: sourceDirName;
|
|
181
188
|
}
|
|
@@ -188,23 +195,14 @@ function doProcessDocMetadata({
|
|
|
188
195
|
// legacy versioned id, requires a breaking change to modify this
|
|
189
196
|
const id = [versionIdPrefix, unversionedId].filter(Boolean).join('/');
|
|
190
197
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const docSlug = isDocsHomePage
|
|
200
|
-
? '/'
|
|
201
|
-
: getSlug({
|
|
202
|
-
baseID,
|
|
203
|
-
dirName: sourceDirName,
|
|
204
|
-
frontmatterSlug: frontMatter.slug,
|
|
205
|
-
stripDirNumberPrefixes: parse_number_prefixes,
|
|
206
|
-
numberPrefixParser: options.numberPrefixParser,
|
|
207
|
-
});
|
|
198
|
+
const docSlug = getSlug({
|
|
199
|
+
baseID,
|
|
200
|
+
source,
|
|
201
|
+
sourceDirName,
|
|
202
|
+
frontmatterSlug: frontMatter.slug,
|
|
203
|
+
stripDirNumberPrefixes: parseNumberPrefixes,
|
|
204
|
+
numberPrefixParser: options.numberPrefixParser,
|
|
205
|
+
});
|
|
208
206
|
|
|
209
207
|
// Note: the title is used by default for page title, sidebar label, pagination buttons...
|
|
210
208
|
// frontMatter.title should be used in priority over contentTitle (because it can contain markdown/JSX syntax)
|
|
@@ -246,7 +244,6 @@ function doProcessDocMetadata({
|
|
|
246
244
|
return {
|
|
247
245
|
unversionedId,
|
|
248
246
|
id,
|
|
249
|
-
isDocsHomePage,
|
|
250
247
|
title,
|
|
251
248
|
description,
|
|
252
249
|
source: aliasedSitePath(filePath, siteDir),
|
|
@@ -254,6 +251,7 @@ function doProcessDocMetadata({
|
|
|
254
251
|
slug: docSlug,
|
|
255
252
|
permalink,
|
|
256
253
|
editUrl: customEditURL !== undefined ? customEditURL : getDocEditUrl(),
|
|
254
|
+
tags: normalizeFrontMatterTags(versionMetadata.tagsPath, frontMatter.tags),
|
|
257
255
|
version: versionMetadata.versionName,
|
|
258
256
|
lastUpdatedBy: lastUpdate.lastUpdatedBy,
|
|
259
257
|
lastUpdatedAt: lastUpdate.lastUpdatedAt,
|
|
@@ -276,11 +274,141 @@ export function processDocMetadata(args: {
|
|
|
276
274
|
try {
|
|
277
275
|
return doProcessDocMetadata(args);
|
|
278
276
|
} catch (e) {
|
|
279
|
-
|
|
280
|
-
chalk.red(
|
|
281
|
-
`Can't process doc metadatas for doc at path "${args.docFile.filePath}" in version "${args.versionMetadata.versionName}"`,
|
|
282
|
-
),
|
|
283
|
-
);
|
|
277
|
+
logger.error`Can't process doc metadata for doc at path path=${args.docFile.filePath} in version name=${args.versionMetadata.versionName}`;
|
|
284
278
|
throw e;
|
|
285
279
|
}
|
|
286
280
|
}
|
|
281
|
+
|
|
282
|
+
export function addDocNavigation(
|
|
283
|
+
docsBase: DocMetadataBase[],
|
|
284
|
+
sidebarsUtils: SidebarsUtils,
|
|
285
|
+
sidebarFilePath: string,
|
|
286
|
+
): LoadedVersion['docs'] {
|
|
287
|
+
const docsById = createDocsByIdIndex(docsBase);
|
|
288
|
+
|
|
289
|
+
sidebarsUtils.checkSidebarsDocIds(
|
|
290
|
+
docsBase.flatMap(getDocIds),
|
|
291
|
+
sidebarFilePath,
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
// Add sidebar/next/previous to the docs
|
|
295
|
+
function addNavData(doc: DocMetadataBase): DocMetadata {
|
|
296
|
+
const navigation = sidebarsUtils.getDocNavigation(
|
|
297
|
+
doc.unversionedId,
|
|
298
|
+
doc.id,
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
const toNavigationLinkByDocId = (
|
|
302
|
+
docId: string | null | undefined,
|
|
303
|
+
type: 'prev' | 'next',
|
|
304
|
+
): DocNavLink | undefined => {
|
|
305
|
+
if (!docId) {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
const navDoc = docsById[docId];
|
|
309
|
+
if (!navDoc) {
|
|
310
|
+
// This could only happen if user provided the ID through front matter
|
|
311
|
+
throw new Error(
|
|
312
|
+
`Error when loading ${doc.id} in ${doc.sourceDirName}: the pagination_${type} front matter points to a non-existent ID ${docId}.`,
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
return toDocNavigationLink(navDoc);
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
const previous =
|
|
319
|
+
doc.frontMatter.pagination_prev !== undefined
|
|
320
|
+
? toNavigationLinkByDocId(doc.frontMatter.pagination_prev, 'prev')
|
|
321
|
+
: toNavigationLink(navigation.previous, docsById);
|
|
322
|
+
const next =
|
|
323
|
+
doc.frontMatter.pagination_next !== undefined
|
|
324
|
+
? toNavigationLinkByDocId(doc.frontMatter.pagination_next, 'next')
|
|
325
|
+
: toNavigationLink(navigation.next, docsById);
|
|
326
|
+
|
|
327
|
+
return {...doc, sidebar: navigation.sidebarName, previous, next};
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const docsWithNavigation = docsBase.map(addNavData);
|
|
331
|
+
// sort to ensure consistent output for tests
|
|
332
|
+
docsWithNavigation.sort((a, b) => a.id.localeCompare(b.id));
|
|
333
|
+
return docsWithNavigation;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* The "main doc" is the "version entry point"
|
|
338
|
+
* We browse this doc by clicking on a version:
|
|
339
|
+
* - the "home" doc (at '/docs/')
|
|
340
|
+
* - the first doc of the first sidebar
|
|
341
|
+
* - a random doc (if no docs are in any sidebar... edge case)
|
|
342
|
+
*/
|
|
343
|
+
export function getMainDocId({
|
|
344
|
+
docs,
|
|
345
|
+
sidebarsUtils,
|
|
346
|
+
}: {
|
|
347
|
+
docs: DocMetadataBase[];
|
|
348
|
+
sidebarsUtils: SidebarsUtils;
|
|
349
|
+
}): string {
|
|
350
|
+
function getMainDoc(): DocMetadata {
|
|
351
|
+
const versionHomeDoc = docs.find((doc) => doc.slug === '/');
|
|
352
|
+
const firstDocIdOfFirstSidebar =
|
|
353
|
+
sidebarsUtils.getFirstDocIdOfFirstSidebar();
|
|
354
|
+
if (versionHomeDoc) {
|
|
355
|
+
return versionHomeDoc;
|
|
356
|
+
} else if (firstDocIdOfFirstSidebar) {
|
|
357
|
+
return docs.find(
|
|
358
|
+
(doc) =>
|
|
359
|
+
doc.id === firstDocIdOfFirstSidebar ||
|
|
360
|
+
doc.unversionedId === firstDocIdOfFirstSidebar,
|
|
361
|
+
)!;
|
|
362
|
+
} else {
|
|
363
|
+
return docs[0];
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return getMainDoc().unversionedId;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function getLastPathSegment(str: string): string {
|
|
371
|
+
return last(str.split('/'))!;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// By convention, Docusaurus considers some docs are "indexes":
|
|
375
|
+
// - index.md
|
|
376
|
+
// - readme.md
|
|
377
|
+
// - <folder>/<folder>.md
|
|
378
|
+
//
|
|
379
|
+
// Those index docs produce a different behavior
|
|
380
|
+
// - Slugs do not end with a weird "/index" suffix
|
|
381
|
+
// - Auto-generated sidebar categories link to them as intro
|
|
382
|
+
export function isConventionalDocIndex(doc: {
|
|
383
|
+
source: DocMetadataBase['slug'];
|
|
384
|
+
sourceDirName: DocMetadataBase['sourceDirName'];
|
|
385
|
+
}): boolean {
|
|
386
|
+
// "@site/docs/folder/subFolder/subSubFolder/myDoc.md" => "myDoc"
|
|
387
|
+
const docName = path.parse(doc.source).name;
|
|
388
|
+
|
|
389
|
+
// "folder/subFolder/subSubFolder" => "subSubFolder"
|
|
390
|
+
const lastDirName = getLastPathSegment(doc.sourceDirName);
|
|
391
|
+
|
|
392
|
+
const eligibleDocIndexNames = ['index', 'readme', lastDirName.toLowerCase()];
|
|
393
|
+
|
|
394
|
+
return eligibleDocIndexNames.includes(docName.toLowerCase());
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Return both doc ids
|
|
398
|
+
// TODO legacy retro-compatibility due to old versioned sidebars using versioned doc ids
|
|
399
|
+
// ("id" should be removed & "versionedId" should be renamed to "id")
|
|
400
|
+
export function getDocIds(doc: DocMetadataBase): [string, string] {
|
|
401
|
+
return [doc.unversionedId, doc.id];
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// docs are indexed by both versioned and unversioned ids at the same time
|
|
405
|
+
// TODO legacy retro-compatibility due to old versioned sidebars using versioned doc ids
|
|
406
|
+
// ("id" should be removed & "versionedId" should be renamed to "id")
|
|
407
|
+
export function createDocsByIdIndex<
|
|
408
|
+
Doc extends {id: string; unversionedId: string},
|
|
409
|
+
>(docs: Doc[]): Record<string, Doc> {
|
|
410
|
+
return {
|
|
411
|
+
...keyBy(docs, (doc) => doc.unversionedId),
|
|
412
|
+
...keyBy(docs, (doc) => doc.id),
|
|
413
|
+
};
|
|
414
|
+
}
|
package/src/globalData.ts
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import type {
|
|
9
|
+
DocMetadata,
|
|
10
|
+
GlobalDoc,
|
|
11
|
+
LoadedVersion,
|
|
12
|
+
GlobalVersion,
|
|
13
|
+
} from './types';
|
|
9
14
|
|
|
10
15
|
export function toGlobalDataDoc(doc: DocMetadata): GlobalDoc {
|
|
11
16
|
return {
|