@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/slug.ts
CHANGED
|
@@ -15,39 +15,52 @@ import {
|
|
|
15
15
|
DefaultNumberPrefixParser,
|
|
16
16
|
stripPathNumberPrefixes,
|
|
17
17
|
} from './numberPrefix';
|
|
18
|
-
import {NumberPrefixParser} from './types';
|
|
18
|
+
import type {DocMetadataBase, NumberPrefixParser} from './types';
|
|
19
|
+
import {isConventionalDocIndex} from './docs';
|
|
19
20
|
|
|
20
21
|
export default function getSlug({
|
|
21
22
|
baseID,
|
|
22
23
|
frontmatterSlug,
|
|
23
|
-
|
|
24
|
+
source,
|
|
25
|
+
sourceDirName,
|
|
24
26
|
stripDirNumberPrefixes = true,
|
|
25
27
|
numberPrefixParser = DefaultNumberPrefixParser,
|
|
26
28
|
}: {
|
|
27
29
|
baseID: string;
|
|
28
30
|
frontmatterSlug?: string;
|
|
29
|
-
|
|
31
|
+
source: DocMetadataBase['slug'];
|
|
32
|
+
sourceDirName: DocMetadataBase['sourceDirName'];
|
|
30
33
|
stripDirNumberPrefixes?: boolean;
|
|
31
34
|
numberPrefixParser?: NumberPrefixParser;
|
|
32
35
|
}): string {
|
|
33
|
-
|
|
34
|
-
let slug: string;
|
|
35
|
-
if (baseSlug.startsWith('/')) {
|
|
36
|
-
slug = baseSlug;
|
|
37
|
-
} else {
|
|
36
|
+
function getDirNameSlug(): string {
|
|
38
37
|
const dirNameStripped = stripDirNumberPrefixes
|
|
39
|
-
? stripPathNumberPrefixes(
|
|
40
|
-
:
|
|
38
|
+
? stripPathNumberPrefixes(sourceDirName, numberPrefixParser)
|
|
39
|
+
: sourceDirName;
|
|
41
40
|
const resolveDirname =
|
|
42
|
-
|
|
41
|
+
sourceDirName === '.'
|
|
43
42
|
? '/'
|
|
44
43
|
: addLeadingSlash(addTrailingSlash(dirNameStripped));
|
|
45
|
-
|
|
44
|
+
return resolveDirname;
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
function computeSlug(): string {
|
|
48
|
+
if (frontmatterSlug?.startsWith('/')) {
|
|
49
|
+
return frontmatterSlug;
|
|
50
|
+
} else {
|
|
51
|
+
const dirNameSlug = getDirNameSlug();
|
|
52
|
+
if (!frontmatterSlug && isConventionalDocIndex({source, sourceDirName})) {
|
|
53
|
+
return dirNameSlug;
|
|
54
|
+
}
|
|
55
|
+
const baseSlug = frontmatterSlug || baseID;
|
|
56
|
+
return resolvePathname(baseSlug, getDirNameSlug());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function ensureValidSlug(slug: string): string {
|
|
61
|
+
if (!isValidPathname(slug)) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
`We couldn't compute a valid slug for document with id "${baseID}" in "${sourceDirName}" directory.
|
|
51
64
|
The slug we computed looks invalid: ${slug}.
|
|
52
65
|
Maybe your slug frontmatter is incorrect or you use weird chars in the file path?
|
|
53
66
|
By using the slug frontmatter, you should be able to fix this error, by using the slug of your choice:
|
|
@@ -57,8 +70,10 @@ Example =>
|
|
|
57
70
|
slug: /my/customDocPath
|
|
58
71
|
---
|
|
59
72
|
`,
|
|
60
|
-
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return slug;
|
|
61
76
|
}
|
|
62
77
|
|
|
63
|
-
return
|
|
78
|
+
return ensureValidSlug(computeSlug());
|
|
64
79
|
}
|
package/src/tags.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
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 {groupTaggedItems} from '@docusaurus/utils';
|
|
9
|
+
import type {VersionTags, DocMetadata} from './types';
|
|
10
|
+
import {mapValues} from 'lodash';
|
|
11
|
+
|
|
12
|
+
export function getVersionTags(docs: DocMetadata[]): VersionTags {
|
|
13
|
+
const groups = groupTaggedItems(docs, (doc) => doc.tags);
|
|
14
|
+
return mapValues(groups, (group) => ({
|
|
15
|
+
name: group.tag.label,
|
|
16
|
+
docIds: group.items.map((item) => item.id),
|
|
17
|
+
permalink: group.tag.permalink,
|
|
18
|
+
}));
|
|
19
|
+
}
|
package/src/translations.ts
CHANGED
|
@@ -5,27 +5,28 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
|
|
8
|
+
import type {LoadedVersion, LoadedContent} from './types';
|
|
9
|
+
import type {
|
|
10
10
|
Sidebar,
|
|
11
|
-
|
|
11
|
+
SidebarItemCategory,
|
|
12
|
+
SidebarItemCategoryLink,
|
|
12
13
|
Sidebars,
|
|
13
|
-
|
|
14
|
-
} from './types';
|
|
14
|
+
} from './sidebars/types';
|
|
15
15
|
|
|
16
|
-
import {chain, mapValues,
|
|
16
|
+
import {chain, mapValues, keyBy} from 'lodash';
|
|
17
17
|
import {
|
|
18
18
|
collectSidebarCategories,
|
|
19
19
|
transformSidebarItems,
|
|
20
20
|
collectSidebarLinks,
|
|
21
|
-
} from './sidebars';
|
|
22
|
-
import {
|
|
21
|
+
} from './sidebars/utils';
|
|
22
|
+
import type {
|
|
23
23
|
TranslationFileContent,
|
|
24
24
|
TranslationFile,
|
|
25
25
|
TranslationFiles,
|
|
26
26
|
} from '@docusaurus/types';
|
|
27
27
|
import {mergeTranslations} from '@docusaurus/utils';
|
|
28
28
|
import {CURRENT_VERSION_NAME} from './constants';
|
|
29
|
+
import {TranslationMessage} from '@docusaurus/types';
|
|
29
30
|
|
|
30
31
|
function getVersionFileName(versionName: string): string {
|
|
31
32
|
if (versionName === CURRENT_VERSION_NAME) {
|
|
@@ -55,7 +56,7 @@ function getNormalizedSidebarName({
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/*
|
|
58
|
-
// Do we need to translate doc
|
|
59
|
+
// Do we need to translate doc metadata?
|
|
59
60
|
// It seems translating frontmatter labels is good enough
|
|
60
61
|
function getDocTranslations(doc: DocMetadata): TranslationFileContent {
|
|
61
62
|
return {
|
|
@@ -101,14 +102,48 @@ function getSidebarTranslationFileContent(
|
|
|
101
102
|
sidebar: Sidebar,
|
|
102
103
|
sidebarName: string,
|
|
103
104
|
): TranslationFileContent {
|
|
105
|
+
type TranslationMessageEntry = [string, TranslationMessage];
|
|
106
|
+
|
|
104
107
|
const categories = collectSidebarCategories(sidebar);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
|
|
109
|
+
const categoryContent: TranslationFileContent = Object.fromEntries(
|
|
110
|
+
categories.flatMap((category) => {
|
|
111
|
+
const entries: TranslationMessageEntry[] = [];
|
|
112
|
+
|
|
113
|
+
entries.push([
|
|
114
|
+
`sidebar.${sidebarName}.category.${category.label}`,
|
|
115
|
+
{
|
|
116
|
+
message: category.label,
|
|
117
|
+
description: `The label for category ${category.label} in sidebar ${sidebarName}`,
|
|
118
|
+
},
|
|
119
|
+
]);
|
|
120
|
+
|
|
121
|
+
if (category.link) {
|
|
122
|
+
if (category.link.type === 'generated-index') {
|
|
123
|
+
if (category.link.title) {
|
|
124
|
+
entries.push([
|
|
125
|
+
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`,
|
|
126
|
+
{
|
|
127
|
+
message: category.link.title,
|
|
128
|
+
description: `The generated-index page title for category ${category.label} in sidebar ${sidebarName}`,
|
|
129
|
+
},
|
|
130
|
+
]);
|
|
131
|
+
}
|
|
132
|
+
if (category.link.description) {
|
|
133
|
+
entries.push([
|
|
134
|
+
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`,
|
|
135
|
+
{
|
|
136
|
+
message: category.link.description,
|
|
137
|
+
description: `The generated-index page description for category ${category.label} in sidebar ${sidebarName}`,
|
|
138
|
+
},
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return entries;
|
|
145
|
+
}),
|
|
146
|
+
);
|
|
112
147
|
|
|
113
148
|
const links = collectSidebarLinks(sidebar);
|
|
114
149
|
const linksContent: TranslationFileContent = chain(links)
|
|
@@ -131,29 +166,51 @@ function translateSidebar({
|
|
|
131
166
|
sidebarName: string;
|
|
132
167
|
sidebarsTranslations: TranslationFileContent;
|
|
133
168
|
}): Sidebar {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
function transformSidebarCategoryLink(
|
|
170
|
+
category: SidebarItemCategory,
|
|
171
|
+
): SidebarItemCategoryLink | undefined {
|
|
172
|
+
if (!category.link) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
if (category.link.type === 'generated-index') {
|
|
176
|
+
const title =
|
|
177
|
+
sidebarsTranslations[
|
|
178
|
+
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`
|
|
179
|
+
]?.message ?? category.link.title;
|
|
180
|
+
const description =
|
|
181
|
+
sidebarsTranslations[
|
|
182
|
+
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`
|
|
183
|
+
]?.message ?? category.link.description;
|
|
184
|
+
return {
|
|
185
|
+
...category.link,
|
|
186
|
+
title,
|
|
187
|
+
description,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return category.link;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return transformSidebarItems(sidebar, (item) => {
|
|
194
|
+
if (item.type === 'category') {
|
|
195
|
+
const link = transformSidebarCategoryLink(item);
|
|
196
|
+
return {
|
|
197
|
+
...item,
|
|
198
|
+
label:
|
|
199
|
+
sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]
|
|
200
|
+
?.message ?? item.label,
|
|
201
|
+
...(link && {link}),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (item.type === 'link') {
|
|
205
|
+
return {
|
|
206
|
+
...item,
|
|
207
|
+
label:
|
|
208
|
+
sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
|
|
209
|
+
?.message ?? item.label,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return item;
|
|
213
|
+
});
|
|
157
214
|
}
|
|
158
215
|
|
|
159
216
|
function getSidebarsTranslations(
|
|
@@ -173,16 +230,16 @@ function translateSidebars(
|
|
|
173
230
|
version: LoadedVersion,
|
|
174
231
|
sidebarsTranslations: TranslationFileContent,
|
|
175
232
|
): Sidebars {
|
|
176
|
-
return mapValues(version.sidebars, (sidebar, sidebarName) =>
|
|
177
|
-
|
|
233
|
+
return mapValues(version.sidebars, (sidebar, sidebarName) =>
|
|
234
|
+
translateSidebar({
|
|
178
235
|
sidebar,
|
|
179
236
|
sidebarName: getNormalizedSidebarName({
|
|
180
237
|
sidebarName,
|
|
181
238
|
versionName: version.versionName,
|
|
182
239
|
}),
|
|
183
240
|
sidebarsTranslations,
|
|
184
|
-
})
|
|
185
|
-
|
|
241
|
+
}),
|
|
242
|
+
);
|
|
186
243
|
}
|
|
187
244
|
|
|
188
245
|
function getVersionTranslationFiles(version: LoadedVersion): TranslationFiles {
|
|
@@ -193,9 +250,8 @@ function getVersionTranslationFiles(version: LoadedVersion): TranslationFiles {
|
|
|
193
250
|
},
|
|
194
251
|
};
|
|
195
252
|
|
|
196
|
-
const sidebarsTranslations: TranslationFileContent =
|
|
197
|
-
version
|
|
198
|
-
);
|
|
253
|
+
const sidebarsTranslations: TranslationFileContent =
|
|
254
|
+
getSidebarsTranslations(version);
|
|
199
255
|
|
|
200
256
|
// const docsTranslations: TranslationFileContent = getDocsTranslations(version);
|
|
201
257
|
|
|
@@ -227,7 +283,7 @@ function translateVersion(
|
|
|
227
283
|
function getVersionsTranslationFiles(
|
|
228
284
|
versions: LoadedVersion[],
|
|
229
285
|
): TranslationFiles {
|
|
230
|
-
return
|
|
286
|
+
return versions.flatMap(getVersionTranslationFiles);
|
|
231
287
|
}
|
|
232
288
|
function translateVersions(
|
|
233
289
|
versions: LoadedVersion[],
|
package/src/types.ts
CHANGED
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
// eslint-disable-next-line spaced-comment
|
|
9
8
|
/// <reference types="@docusaurus/module-type-aliases" />
|
|
10
9
|
|
|
11
10
|
import type {RemarkAndRehypePluginOptions} from '@docusaurus/mdx-loader';
|
|
12
|
-
import {
|
|
11
|
+
import type {Tag, FrontMatterTag, Slugger} from '@docusaurus/utils';
|
|
12
|
+
import type {
|
|
13
13
|
BrokenMarkdownLink as IBrokenMarkdownLink,
|
|
14
14
|
ContentPaths,
|
|
15
15
|
} from '@docusaurus/utils/lib/markdownLinks';
|
|
16
|
+
import type {SidebarItemsGeneratorOption, Sidebars} from './sidebars/types';
|
|
16
17
|
|
|
17
18
|
export type DocFile = {
|
|
18
19
|
contentPath: string; // /!\ may be localized
|
|
@@ -28,9 +29,12 @@ export type VersionMetadata = ContentPaths & {
|
|
|
28
29
|
versionName: VersionName; // 1.0.0
|
|
29
30
|
versionLabel: string; // Version 1.0.0
|
|
30
31
|
versionPath: string; // /baseUrl/docs/1.0.0
|
|
32
|
+
tagsPath: string;
|
|
31
33
|
versionEditUrl?: string | undefined;
|
|
32
34
|
versionEditUrlLocalized?: string | undefined;
|
|
33
|
-
versionBanner: VersionBanner;
|
|
35
|
+
versionBanner: VersionBanner | null;
|
|
36
|
+
versionBadge: boolean;
|
|
37
|
+
versionClassName: string;
|
|
34
38
|
isLast: boolean;
|
|
35
39
|
sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
|
|
36
40
|
routePriority: number | undefined; // -1 for the latest docs
|
|
@@ -46,7 +50,6 @@ export type EditUrlFunction = (editUrlParams: {
|
|
|
46
50
|
|
|
47
51
|
export type MetadataOptions = {
|
|
48
52
|
routeBasePath: string;
|
|
49
|
-
homePageId?: string;
|
|
50
53
|
editUrl?: string | EditUrlFunction;
|
|
51
54
|
editCurrentVersion: boolean;
|
|
52
55
|
editLocalizedFiles: boolean;
|
|
@@ -61,12 +64,14 @@ export type PathOptions = {
|
|
|
61
64
|
};
|
|
62
65
|
|
|
63
66
|
// TODO support custom version banner? {type: "error", content: "html content"}
|
|
64
|
-
export type VersionBanner = '
|
|
67
|
+
export type VersionBanner = 'unreleased' | 'unmaintained';
|
|
65
68
|
|
|
66
69
|
export type VersionOptions = {
|
|
67
70
|
path?: string;
|
|
68
71
|
label?: string;
|
|
69
|
-
banner?: VersionBanner;
|
|
72
|
+
banner?: 'none' | VersionBanner;
|
|
73
|
+
badge?: boolean;
|
|
74
|
+
className?: string;
|
|
70
75
|
};
|
|
71
76
|
|
|
72
77
|
export type VersionsOptions = {
|
|
@@ -75,110 +80,36 @@ export type VersionsOptions = {
|
|
|
75
80
|
onlyIncludeVersions?: string[];
|
|
76
81
|
};
|
|
77
82
|
|
|
83
|
+
export type SidebarOptions = {
|
|
84
|
+
sidebarCollapsible: boolean;
|
|
85
|
+
sidebarCollapsed: boolean;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export type NormalizeSidebarsParams = SidebarOptions & {
|
|
89
|
+
version: VersionMetadata;
|
|
90
|
+
categoryLabelSlugger: Slugger;
|
|
91
|
+
};
|
|
92
|
+
|
|
78
93
|
export type PluginOptions = MetadataOptions &
|
|
79
94
|
PathOptions &
|
|
80
95
|
VersionsOptions &
|
|
81
|
-
RemarkAndRehypePluginOptions &
|
|
96
|
+
RemarkAndRehypePluginOptions &
|
|
97
|
+
SidebarOptions & {
|
|
82
98
|
id: string;
|
|
83
99
|
include: string[];
|
|
100
|
+
exclude: string[];
|
|
84
101
|
docLayoutComponent: string;
|
|
85
102
|
docItemComponent: string;
|
|
103
|
+
docTagDocListComponent: string;
|
|
104
|
+
docTagsListComponent: string;
|
|
105
|
+
docCategoryGeneratedIndexComponent: string;
|
|
86
106
|
admonitions: Record<string, unknown>;
|
|
87
107
|
disableVersioning: boolean;
|
|
88
108
|
includeCurrentVersion: boolean;
|
|
89
109
|
sidebarItemsGenerator: SidebarItemsGeneratorOption;
|
|
110
|
+
tagsBasePath: string;
|
|
90
111
|
};
|
|
91
112
|
|
|
92
|
-
export type SidebarItemBase = {
|
|
93
|
-
customProps?: Record<string, unknown>;
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
export type SidebarItemDoc = SidebarItemBase & {
|
|
97
|
-
type: 'doc' | 'ref';
|
|
98
|
-
label?: string;
|
|
99
|
-
id: string;
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
export type SidebarItemLink = SidebarItemBase & {
|
|
103
|
-
type: 'link';
|
|
104
|
-
href: string;
|
|
105
|
-
label: string;
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export type SidebarItemCategory = SidebarItemBase & {
|
|
109
|
-
type: 'category';
|
|
110
|
-
label: string;
|
|
111
|
-
items: SidebarItem[];
|
|
112
|
-
collapsed: boolean;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export type UnprocessedSidebarItemAutogenerated = {
|
|
116
|
-
type: 'autogenerated';
|
|
117
|
-
dirName: string;
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
export type UnprocessedSidebarItemCategory = SidebarItemBase & {
|
|
121
|
-
type: 'category';
|
|
122
|
-
label: string;
|
|
123
|
-
items: UnprocessedSidebarItem[];
|
|
124
|
-
collapsed: boolean;
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export type UnprocessedSidebarItem =
|
|
128
|
-
| SidebarItemDoc
|
|
129
|
-
| SidebarItemLink
|
|
130
|
-
| UnprocessedSidebarItemCategory
|
|
131
|
-
| UnprocessedSidebarItemAutogenerated;
|
|
132
|
-
|
|
133
|
-
export type UnprocessedSidebar = UnprocessedSidebarItem[];
|
|
134
|
-
export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
|
|
135
|
-
|
|
136
|
-
export type SidebarItem =
|
|
137
|
-
| SidebarItemDoc
|
|
138
|
-
| SidebarItemLink
|
|
139
|
-
| SidebarItemCategory;
|
|
140
|
-
|
|
141
|
-
export type Sidebar = SidebarItem[];
|
|
142
|
-
export type SidebarItemType = SidebarItem['type'];
|
|
143
|
-
export type Sidebars = Record<string, Sidebar>;
|
|
144
|
-
|
|
145
|
-
// Reduce API surface for options.sidebarItemsGenerator
|
|
146
|
-
// The user-provided generator fn should receive only a subset of metadatas
|
|
147
|
-
// A change to any of these metadatas can be considered as a breaking change
|
|
148
|
-
export type SidebarItemsGeneratorDoc = Pick<
|
|
149
|
-
DocMetadataBase,
|
|
150
|
-
'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
|
|
151
|
-
>;
|
|
152
|
-
export type SidebarItemsGeneratorVersion = Pick<
|
|
153
|
-
VersionMetadata,
|
|
154
|
-
'versionName' | 'contentPath'
|
|
155
|
-
>;
|
|
156
|
-
|
|
157
|
-
export type SidebarItemsGeneratorArgs = {
|
|
158
|
-
item: UnprocessedSidebarItemAutogenerated;
|
|
159
|
-
version: SidebarItemsGeneratorVersion;
|
|
160
|
-
docs: SidebarItemsGeneratorDoc[];
|
|
161
|
-
numberPrefixParser: NumberPrefixParser;
|
|
162
|
-
};
|
|
163
|
-
export type SidebarItemsGenerator = (
|
|
164
|
-
generatorArgs: SidebarItemsGeneratorArgs,
|
|
165
|
-
) => Promise<SidebarItem[]>;
|
|
166
|
-
|
|
167
|
-
// Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
|
|
168
|
-
// see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
|
|
169
|
-
export type SidebarItemsGeneratorOptionArgs = {
|
|
170
|
-
defaultSidebarItemsGenerator: SidebarItemsGenerator;
|
|
171
|
-
} & SidebarItemsGeneratorArgs;
|
|
172
|
-
export type SidebarItemsGeneratorOption = (
|
|
173
|
-
generatorArgs: SidebarItemsGeneratorOptionArgs,
|
|
174
|
-
) => Promise<SidebarItem[]>;
|
|
175
|
-
|
|
176
|
-
export type OrderMetadata = {
|
|
177
|
-
previous?: string;
|
|
178
|
-
next?: string;
|
|
179
|
-
sidebar?: string;
|
|
180
|
-
};
|
|
181
|
-
|
|
182
113
|
export type LastUpdateData = {
|
|
183
114
|
lastUpdatedAt?: number;
|
|
184
115
|
formattedLastUpdatedAt?: string;
|
|
@@ -187,9 +118,9 @@ export type LastUpdateData = {
|
|
|
187
118
|
|
|
188
119
|
export type DocFrontMatter = {
|
|
189
120
|
// Front matter uses snake case
|
|
190
|
-
/* eslint-disable camelcase */
|
|
191
121
|
id?: string;
|
|
192
122
|
title?: string;
|
|
123
|
+
tags?: FrontMatterTag[];
|
|
193
124
|
hide_title?: boolean;
|
|
194
125
|
hide_table_of_contents?: boolean;
|
|
195
126
|
keywords?: string[];
|
|
@@ -198,25 +129,29 @@ export type DocFrontMatter = {
|
|
|
198
129
|
slug?: string;
|
|
199
130
|
sidebar_label?: string;
|
|
200
131
|
sidebar_position?: number;
|
|
132
|
+
sidebar_class_name?: string;
|
|
201
133
|
pagination_label?: string;
|
|
202
134
|
custom_edit_url?: string | null;
|
|
203
135
|
parse_number_prefixes?: boolean;
|
|
204
|
-
|
|
136
|
+
toc_min_heading_level?: number;
|
|
137
|
+
toc_max_heading_level?: number;
|
|
138
|
+
pagination_next?: string | null;
|
|
139
|
+
pagination_prev?: string | null;
|
|
205
140
|
};
|
|
206
141
|
|
|
207
142
|
export type DocMetadataBase = LastUpdateData & {
|
|
143
|
+
id: string; // TODO legacy versioned id => try to remove
|
|
144
|
+
unversionedId: string; // TODO new unversioned id => try to rename to "id"
|
|
208
145
|
version: VersionName;
|
|
209
|
-
unversionedId: string;
|
|
210
|
-
id: string;
|
|
211
|
-
isDocsHomePage: boolean;
|
|
212
146
|
title: string;
|
|
213
147
|
description: string;
|
|
214
|
-
source: string;
|
|
215
|
-
sourceDirName: string; // relative to the docs folder (can be ".")
|
|
148
|
+
source: string; // @site aliased source => "@site/docs/folder/subFolder/subSubFolder/myDoc.md"
|
|
149
|
+
sourceDirName: string; // relative to the versioned docs folder (can be ".") => "folder/subFolder/subSubFolder"
|
|
216
150
|
slug: string;
|
|
217
151
|
permalink: string;
|
|
218
152
|
sidebarPosition?: number;
|
|
219
153
|
editUrl?: string | null;
|
|
154
|
+
tags: Tag[];
|
|
220
155
|
frontMatter: DocFrontMatter & Record<string, unknown>;
|
|
221
156
|
};
|
|
222
157
|
|
|
@@ -231,14 +166,35 @@ export type DocMetadata = DocMetadataBase & {
|
|
|
231
166
|
next?: DocNavLink;
|
|
232
167
|
};
|
|
233
168
|
|
|
169
|
+
export type CategoryGeneratedIndexMetadata = {
|
|
170
|
+
title: string;
|
|
171
|
+
description?: string;
|
|
172
|
+
slug: string;
|
|
173
|
+
permalink: string;
|
|
174
|
+
sidebar: string;
|
|
175
|
+
previous?: DocNavLink;
|
|
176
|
+
next?: DocNavLink;
|
|
177
|
+
};
|
|
178
|
+
|
|
234
179
|
export type SourceToPermalink = {
|
|
235
180
|
[source: string]: string;
|
|
236
181
|
};
|
|
182
|
+
|
|
183
|
+
export type VersionTag = {
|
|
184
|
+
name: string; // normalized name/label of the tag
|
|
185
|
+
docIds: string[]; // all doc ids having this tag
|
|
186
|
+
permalink: string; // pathname of the tag
|
|
187
|
+
};
|
|
188
|
+
export type VersionTags = {
|
|
189
|
+
[key: string]: VersionTag;
|
|
190
|
+
};
|
|
191
|
+
|
|
237
192
|
export type LoadedVersion = VersionMetadata & {
|
|
238
193
|
versionPath: string;
|
|
239
194
|
mainDocId: string;
|
|
240
195
|
docs: DocMetadata[];
|
|
241
196
|
sidebars: Sidebars;
|
|
197
|
+
categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
|
|
242
198
|
};
|
|
243
199
|
|
|
244
200
|
export type LoadedContent = {
|
|
@@ -274,6 +230,7 @@ export type DocsMarkdownOption = {
|
|
|
274
230
|
onBrokenMarkdownLink: (brokenMarkdownLink: BrokenMarkdownLink) => void;
|
|
275
231
|
};
|
|
276
232
|
|
|
277
|
-
export type NumberPrefixParser = (
|
|
278
|
-
filename: string
|
|
279
|
-
|
|
233
|
+
export type NumberPrefixParser = (filename: string) => {
|
|
234
|
+
filename: string;
|
|
235
|
+
numberPrefix?: number;
|
|
236
|
+
};
|