@docusaurus/plugin-content-docs 2.0.0-beta.fc64c12e4 → 2.0.0
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 +3 -2
- package/lib/cli.js +57 -73
- package/lib/client/docsClientUtils.d.ts +9 -28
- package/lib/client/docsClientUtils.js +34 -43
- package/lib/client/index.d.ts +81 -0
- package/lib/client/index.js +67 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +4 -1
- package/lib/docs.d.ts +33 -6
- package/lib/docs.js +201 -78
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
- package/lib/{docFrontMatter.js → frontMatter.js} +22 -3
- package/lib/globalData.d.ts +3 -3
- package/lib/globalData.js +35 -6
- package/lib/index.d.ts +3 -3
- package/lib/index.js +120 -153
- package/lib/lastUpdate.d.ts +4 -6
- package/lib/lastUpdate.js +22 -26
- package/lib/markdown/index.d.ts +3 -6
- package/lib/markdown/index.js +3 -3
- package/lib/markdown/linkify.d.ts +1 -1
- package/lib/markdown/linkify.js +6 -3
- package/lib/numberPrefix.d.ts +1 -1
- package/lib/numberPrefix.js +16 -21
- package/lib/options.d.ts +3 -5
- package/lib/options.js +34 -26
- package/lib/props.d.ts +7 -2
- package/lib/props.js +84 -13
- package/lib/routes.d.ts +29 -0
- package/lib/routes.js +96 -0
- package/lib/server-export.d.ts +9 -0
- package/lib/server-export.js +25 -0
- package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -7
- package/lib/sidebars/generator.js +209 -0
- package/lib/sidebars/index.d.ts +13 -0
- package/lib/sidebars/index.js +92 -0
- package/lib/sidebars/normalization.d.ts +13 -0
- package/lib/sidebars/normalization.js +59 -0
- package/lib/sidebars/postProcessor.d.ts +11 -0
- package/lib/sidebars/postProcessor.js +81 -0
- package/lib/sidebars/processor.d.ts +10 -0
- package/lib/sidebars/processor.js +79 -0
- package/lib/sidebars/types.d.ts +183 -0
- package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
- package/lib/sidebars/utils.d.ts +55 -0
- package/lib/sidebars/utils.js +259 -0
- package/lib/sidebars/validation.d.ts +11 -0
- package/lib/sidebars/validation.js +143 -0
- package/lib/slug.d.ts +5 -4
- package/lib/slug.js +28 -18
- package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
- package/lib/tags.js +21 -0
- package/lib/translations.d.ts +3 -3
- package/lib/translations.js +100 -93
- package/lib/types.d.ts +13 -192
- package/lib/versions/files.d.ts +50 -0
- package/lib/versions/files.js +141 -0
- package/lib/versions/index.d.ts +36 -0
- package/lib/versions/index.js +154 -0
- package/lib/versions/validation.d.ts +17 -0
- package/lib/versions/validation.js +71 -0
- package/package.json +44 -30
- package/src/categoryGeneratedIndex.ts +60 -0
- package/src/cli.ts +88 -118
- package/src/client/docsClientUtils.ts +44 -71
- package/src/client/index.ts +158 -0
- package/src/constants.ts +4 -2
- package/src/docs.ts +277 -80
- package/src/frontMatter.ts +63 -0
- package/src/globalData.ts +57 -7
- package/src/index.ts +174 -221
- package/src/lastUpdate.ts +27 -38
- package/src/markdown/index.ts +10 -16
- package/src/markdown/linkify.ts +7 -4
- package/src/numberPrefix.ts +19 -26
- package/src/options.ts +38 -38
- package/src/plugin-content-docs.d.ts +570 -91
- package/src/props.ts +121 -20
- package/src/routes.ts +159 -0
- package/src/server-export.ts +26 -0
- package/src/sidebars/README.md +10 -0
- package/src/sidebars/generator.ts +292 -0
- package/src/sidebars/index.ts +118 -0
- package/src/sidebars/normalization.ts +91 -0
- package/src/sidebars/postProcessor.ts +112 -0
- package/src/sidebars/processor.ts +123 -0
- package/src/sidebars/types.ts +280 -0
- package/src/sidebars/utils.ts +393 -0
- package/src/sidebars/validation.ts +179 -0
- package/src/slug.ts +41 -22
- package/src/tags.ts +20 -0
- package/src/translations.ts +155 -124
- package/src/types.ts +17 -259
- package/src/versions/files.ts +216 -0
- package/src/versions/index.ts +246 -0
- package/src/versions/validation.ts +115 -0
- package/lib/.tsbuildinfo +0 -1
- package/lib/sidebarItemsGenerator.js +0 -215
- package/lib/sidebars.d.ts +0 -45
- package/lib/sidebars.js +0 -354
- package/lib/theme/hooks/useDocs.d.ts +0 -20
- package/lib/theme/hooks/useDocs.js +0 -75
- package/lib/versions.d.ts +0 -16
- package/lib/versions.js +0 -319
- 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-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/_partials/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +0 -3
- 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/partialAutogeneratedSidebars.js +0 -23
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
- 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/docusaurus.config.js +0 -14
- 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/_partials/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +0 -3
- 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 -95
- package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1926
- package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -233
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -484
- package/src/__tests__/cli.test.ts +0 -337
- package/src/__tests__/docFrontMatter.test.ts +0 -244
- package/src/__tests__/docs.test.ts +0 -878
- package/src/__tests__/index.test.ts +0 -1885
- package/src/__tests__/lastUpdate.test.ts +0 -69
- package/src/__tests__/numberPrefix.test.ts +0 -199
- package/src/__tests__/options.test.ts +0 -272
- package/src/__tests__/sidebarItemsGenerator.test.ts +0 -358
- package/src/__tests__/sidebars.test.ts +0 -746
- 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/docFrontMatter.ts +0 -41
- 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 -315
- package/src/sidebars.ts +0 -589
- package/src/theme/hooks/useDocs.ts +0 -103
- package/src/versions.ts +0 -572
- package/tsconfig.json +0 -9
- package/types.d.ts +0 -13
package/src/types.ts
CHANGED
|
@@ -5,285 +5,43 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from '@docusaurus/utils/lib/markdownLinks';
|
|
8
|
+
import type {BrokenMarkdownLink, Tag} from '@docusaurus/utils';
|
|
9
|
+
import type {
|
|
10
|
+
VersionMetadata,
|
|
11
|
+
LoadedVersion,
|
|
12
|
+
CategoryGeneratedIndexMetadata,
|
|
13
|
+
} from '@docusaurus/plugin-content-docs';
|
|
14
|
+
import type {SidebarsUtils} from './sidebars/utils';
|
|
16
15
|
|
|
17
16
|
export type DocFile = {
|
|
18
17
|
contentPath: string; // /!\ may be localized
|
|
19
18
|
filePath: string; // /!\ may be localized
|
|
20
19
|
source: string;
|
|
21
20
|
content: string;
|
|
22
|
-
lastUpdate: LastUpdateData;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export type VersionName = string;
|
|
26
|
-
|
|
27
|
-
export type VersionMetadata = ContentPaths & {
|
|
28
|
-
versionName: VersionName; // 1.0.0
|
|
29
|
-
versionLabel: string; // Version 1.0.0
|
|
30
|
-
versionPath: string; // /baseUrl/docs/1.0.0
|
|
31
|
-
versionEditUrl?: string | undefined;
|
|
32
|
-
versionEditUrlLocalized?: string | undefined;
|
|
33
|
-
versionBanner: VersionBanner;
|
|
34
|
-
isLast: boolean;
|
|
35
|
-
sidebarFilePath: string | false | undefined; // versioned_sidebars/1.0.0.json
|
|
36
|
-
routePriority: number | undefined; // -1 for the latest docs
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type EditUrlFunction = (editUrlParams: {
|
|
40
|
-
version: string;
|
|
41
|
-
versionDocsDirPath: string;
|
|
42
|
-
docPath: string;
|
|
43
|
-
permalink: string;
|
|
44
|
-
locale: string;
|
|
45
|
-
}) => string | undefined;
|
|
46
|
-
|
|
47
|
-
export type MetadataOptions = {
|
|
48
|
-
routeBasePath: string;
|
|
49
|
-
homePageId?: string;
|
|
50
|
-
editUrl?: string | EditUrlFunction;
|
|
51
|
-
editCurrentVersion: boolean;
|
|
52
|
-
editLocalizedFiles: boolean;
|
|
53
|
-
showLastUpdateTime?: boolean;
|
|
54
|
-
showLastUpdateAuthor?: boolean;
|
|
55
|
-
numberPrefixParser: NumberPrefixParser;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export type PathOptions = {
|
|
59
|
-
path: string;
|
|
60
|
-
sidebarPath?: string | false | undefined;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
// TODO support custom version banner? {type: "error", content: "html content"}
|
|
64
|
-
export type VersionBanner = 'none' | 'unreleased' | 'unmaintained';
|
|
65
|
-
|
|
66
|
-
export type VersionOptions = {
|
|
67
|
-
path?: string;
|
|
68
|
-
label?: string;
|
|
69
|
-
banner?: VersionBanner;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export type VersionsOptions = {
|
|
73
|
-
lastVersion?: string;
|
|
74
|
-
versions: Record<string, VersionOptions>;
|
|
75
|
-
onlyIncludeVersions?: string[];
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export type SidebarOptions = {
|
|
79
|
-
sidebarCollapsible: boolean;
|
|
80
|
-
sidebarCollapsed: boolean;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export type PluginOptions = MetadataOptions &
|
|
84
|
-
PathOptions &
|
|
85
|
-
VersionsOptions &
|
|
86
|
-
RemarkAndRehypePluginOptions &
|
|
87
|
-
SidebarOptions & {
|
|
88
|
-
id: string;
|
|
89
|
-
include: string[];
|
|
90
|
-
exclude: string[];
|
|
91
|
-
docLayoutComponent: string;
|
|
92
|
-
docItemComponent: string;
|
|
93
|
-
admonitions: Record<string, unknown>;
|
|
94
|
-
disableVersioning: boolean;
|
|
95
|
-
includeCurrentVersion: boolean;
|
|
96
|
-
sidebarItemsGenerator: SidebarItemsGeneratorOption;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export type SidebarItemBase = {
|
|
100
|
-
customProps?: Record<string, unknown>;
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
export type SidebarItemDoc = SidebarItemBase & {
|
|
104
|
-
type: 'doc' | 'ref';
|
|
105
|
-
label?: string;
|
|
106
|
-
id: string;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
export type SidebarItemLink = SidebarItemBase & {
|
|
110
|
-
type: 'link';
|
|
111
|
-
href: string;
|
|
112
|
-
label: string;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export type SidebarItemCategory = SidebarItemBase & {
|
|
116
|
-
type: 'category';
|
|
117
|
-
label: string;
|
|
118
|
-
items: SidebarItem[];
|
|
119
|
-
collapsed: boolean;
|
|
120
|
-
collapsible: boolean;
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
export type UnprocessedSidebarItemAutogenerated = {
|
|
124
|
-
type: 'autogenerated';
|
|
125
|
-
dirName: string;
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
export type UnprocessedSidebarItemCategory = SidebarItemBase & {
|
|
129
|
-
type: 'category';
|
|
130
|
-
label: string;
|
|
131
|
-
items: UnprocessedSidebarItem[];
|
|
132
|
-
collapsed: boolean;
|
|
133
|
-
collapsible: boolean;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
export type UnprocessedSidebarItem =
|
|
137
|
-
| SidebarItemDoc
|
|
138
|
-
| SidebarItemLink
|
|
139
|
-
| UnprocessedSidebarItemCategory
|
|
140
|
-
| UnprocessedSidebarItemAutogenerated;
|
|
141
|
-
|
|
142
|
-
export type UnprocessedSidebar = UnprocessedSidebarItem[];
|
|
143
|
-
export type UnprocessedSidebars = Record<string, UnprocessedSidebar>;
|
|
144
|
-
|
|
145
|
-
export type SidebarItem =
|
|
146
|
-
| SidebarItemDoc
|
|
147
|
-
| SidebarItemLink
|
|
148
|
-
| SidebarItemCategory;
|
|
149
|
-
|
|
150
|
-
export type Sidebar = SidebarItem[];
|
|
151
|
-
export type SidebarItemType = SidebarItem['type'];
|
|
152
|
-
export type Sidebars = Record<string, Sidebar>;
|
|
153
|
-
|
|
154
|
-
// Reduce API surface for options.sidebarItemsGenerator
|
|
155
|
-
// The user-provided generator fn should receive only a subset of metadatas
|
|
156
|
-
// A change to any of these metadatas can be considered as a breaking change
|
|
157
|
-
export type SidebarItemsGeneratorDoc = Pick<
|
|
158
|
-
DocMetadataBase,
|
|
159
|
-
'id' | 'frontMatter' | 'source' | 'sourceDirName' | 'sidebarPosition'
|
|
160
|
-
>;
|
|
161
|
-
export type SidebarItemsGeneratorVersion = Pick<
|
|
162
|
-
VersionMetadata,
|
|
163
|
-
'versionName' | 'contentPath'
|
|
164
|
-
>;
|
|
165
|
-
|
|
166
|
-
export type SidebarItemsGeneratorArgs = {
|
|
167
|
-
item: UnprocessedSidebarItemAutogenerated;
|
|
168
|
-
version: SidebarItemsGeneratorVersion;
|
|
169
|
-
docs: SidebarItemsGeneratorDoc[];
|
|
170
|
-
numberPrefixParser: NumberPrefixParser;
|
|
171
|
-
options: SidebarOptions;
|
|
172
|
-
};
|
|
173
|
-
export type SidebarItemsGenerator = (
|
|
174
|
-
generatorArgs: SidebarItemsGeneratorArgs,
|
|
175
|
-
) => Promise<SidebarItem[]>;
|
|
176
|
-
|
|
177
|
-
// Also inject the default generator to conveniently wrap/enhance/sort the default sidebar gen logic
|
|
178
|
-
// see https://github.com/facebook/docusaurus/issues/4640#issuecomment-822292320
|
|
179
|
-
export type SidebarItemsGeneratorOptionArgs = {
|
|
180
|
-
defaultSidebarItemsGenerator: SidebarItemsGenerator;
|
|
181
|
-
} & SidebarItemsGeneratorArgs;
|
|
182
|
-
export type SidebarItemsGeneratorOption = (
|
|
183
|
-
generatorArgs: SidebarItemsGeneratorOptionArgs,
|
|
184
|
-
) => Promise<SidebarItem[]>;
|
|
185
|
-
|
|
186
|
-
export type OrderMetadata = {
|
|
187
|
-
previous?: string;
|
|
188
|
-
next?: string;
|
|
189
|
-
sidebar?: string;
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
export type LastUpdateData = {
|
|
193
|
-
lastUpdatedAt?: number;
|
|
194
|
-
formattedLastUpdatedAt?: string;
|
|
195
|
-
lastUpdatedBy?: string;
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
export type DocFrontMatter = {
|
|
199
|
-
// Front matter uses snake case
|
|
200
|
-
/* eslint-disable camelcase */
|
|
201
|
-
id?: string;
|
|
202
|
-
title?: string;
|
|
203
|
-
hide_title?: boolean;
|
|
204
|
-
hide_table_of_contents?: boolean;
|
|
205
|
-
keywords?: string[];
|
|
206
|
-
image?: string;
|
|
207
|
-
description?: string;
|
|
208
|
-
slug?: string;
|
|
209
|
-
sidebar_label?: string;
|
|
210
|
-
sidebar_position?: number;
|
|
211
|
-
pagination_label?: string;
|
|
212
|
-
custom_edit_url?: string | null;
|
|
213
|
-
parse_number_prefixes?: boolean;
|
|
214
|
-
/* eslint-enable camelcase */
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
export type DocMetadataBase = LastUpdateData & {
|
|
218
|
-
version: VersionName;
|
|
219
|
-
unversionedId: string;
|
|
220
|
-
id: string;
|
|
221
|
-
isDocsHomePage: boolean;
|
|
222
|
-
title: string;
|
|
223
|
-
description: string;
|
|
224
|
-
source: string;
|
|
225
|
-
sourceDirName: string; // relative to the docs folder (can be ".")
|
|
226
|
-
slug: string;
|
|
227
|
-
permalink: string;
|
|
228
|
-
sidebarPosition?: number;
|
|
229
|
-
editUrl?: string | null;
|
|
230
|
-
frontMatter: DocFrontMatter & Record<string, unknown>;
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
export type DocNavLink = {
|
|
234
|
-
title: string;
|
|
235
|
-
permalink: string;
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
export type DocMetadata = DocMetadataBase & {
|
|
239
|
-
sidebar?: string;
|
|
240
|
-
previous?: DocNavLink;
|
|
241
|
-
next?: DocNavLink;
|
|
242
21
|
};
|
|
243
22
|
|
|
244
23
|
export type SourceToPermalink = {
|
|
245
24
|
[source: string]: string;
|
|
246
25
|
};
|
|
247
|
-
export type LoadedVersion = VersionMetadata & {
|
|
248
|
-
versionPath: string;
|
|
249
|
-
mainDocId: string;
|
|
250
|
-
docs: DocMetadata[];
|
|
251
|
-
sidebars: Sidebars;
|
|
252
|
-
};
|
|
253
26
|
|
|
254
|
-
export type
|
|
255
|
-
|
|
27
|
+
export type VersionTag = Tag & {
|
|
28
|
+
/** All doc ids having this tag. */
|
|
29
|
+
docIds: string[];
|
|
256
30
|
};
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
id: string;
|
|
260
|
-
path: string;
|
|
261
|
-
sidebar: string | undefined;
|
|
31
|
+
export type VersionTags = {
|
|
32
|
+
[permalink: string]: VersionTag;
|
|
262
33
|
};
|
|
263
34
|
|
|
264
|
-
export type
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
isLast: boolean;
|
|
268
|
-
path: string;
|
|
269
|
-
mainDocId: string; // home doc (if docs homepage configured), or first doc
|
|
270
|
-
docs: GlobalDoc[];
|
|
35
|
+
export type FullVersion = LoadedVersion & {
|
|
36
|
+
sidebarsUtils: SidebarsUtils;
|
|
37
|
+
categoryGeneratedIndices: CategoryGeneratedIndexMetadata[];
|
|
271
38
|
};
|
|
272
39
|
|
|
273
|
-
export type
|
|
274
|
-
path: string;
|
|
275
|
-
versions: GlobalVersion[];
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
export type BrokenMarkdownLink = IBrokenMarkdownLink<VersionMetadata>;
|
|
40
|
+
export type DocBrokenMarkdownLink = BrokenMarkdownLink<VersionMetadata>;
|
|
279
41
|
|
|
280
42
|
export type DocsMarkdownOption = {
|
|
281
43
|
versionsMetadata: VersionMetadata[];
|
|
282
44
|
siteDir: string;
|
|
283
45
|
sourceToPermalink: SourceToPermalink;
|
|
284
|
-
onBrokenMarkdownLink: (brokenMarkdownLink:
|
|
46
|
+
onBrokenMarkdownLink: (brokenMarkdownLink: DocBrokenMarkdownLink) => void;
|
|
285
47
|
};
|
|
286
|
-
|
|
287
|
-
export type NumberPrefixParser = (
|
|
288
|
-
filename: string,
|
|
289
|
-
) => {filename: string; numberPrefix?: number};
|
|
@@ -0,0 +1,216 @@
|
|
|
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 path from 'path';
|
|
9
|
+
import fs from 'fs-extra';
|
|
10
|
+
import {getPluginI18nPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils';
|
|
11
|
+
import {
|
|
12
|
+
VERSIONS_JSON_FILE,
|
|
13
|
+
VERSIONED_DOCS_DIR,
|
|
14
|
+
VERSIONED_SIDEBARS_DIR,
|
|
15
|
+
CURRENT_VERSION_NAME,
|
|
16
|
+
} from '../constants';
|
|
17
|
+
import {validateVersionNames} from './validation';
|
|
18
|
+
import type {
|
|
19
|
+
PluginOptions,
|
|
20
|
+
VersionMetadata,
|
|
21
|
+
} from '@docusaurus/plugin-content-docs';
|
|
22
|
+
import type {VersionContext} from './index';
|
|
23
|
+
|
|
24
|
+
/** Add a prefix like `community_version-1.0.0`. No-op for default instance. */
|
|
25
|
+
function addPluginIdPrefix(fileOrDir: string, pluginId: string): string {
|
|
26
|
+
return pluginId === DEFAULT_PLUGIN_ID
|
|
27
|
+
? fileOrDir
|
|
28
|
+
: `${pluginId}_${fileOrDir}`;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** `[siteDir]/community_versioned_docs/version-1.0.0` */
|
|
32
|
+
export function getVersionDocsDirPath(
|
|
33
|
+
siteDir: string,
|
|
34
|
+
pluginId: string,
|
|
35
|
+
versionName: string,
|
|
36
|
+
): string {
|
|
37
|
+
return path.join(
|
|
38
|
+
siteDir,
|
|
39
|
+
addPluginIdPrefix(VERSIONED_DOCS_DIR, pluginId),
|
|
40
|
+
`version-${versionName}`,
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** `[siteDir]/community_versioned_sidebars/version-1.0.0-sidebars.json` */
|
|
45
|
+
export function getVersionSidebarsPath(
|
|
46
|
+
siteDir: string,
|
|
47
|
+
pluginId: string,
|
|
48
|
+
versionName: string,
|
|
49
|
+
): string {
|
|
50
|
+
return path.join(
|
|
51
|
+
siteDir,
|
|
52
|
+
addPluginIdPrefix(VERSIONED_SIDEBARS_DIR, pluginId),
|
|
53
|
+
`version-${versionName}-sidebars.json`,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getDocsDirPathLocalized({
|
|
58
|
+
localizationDir,
|
|
59
|
+
pluginId,
|
|
60
|
+
versionName,
|
|
61
|
+
}: {
|
|
62
|
+
localizationDir: string;
|
|
63
|
+
pluginId: string;
|
|
64
|
+
versionName: string;
|
|
65
|
+
}): string {
|
|
66
|
+
return getPluginI18nPath({
|
|
67
|
+
localizationDir,
|
|
68
|
+
pluginName: 'docusaurus-plugin-content-docs',
|
|
69
|
+
pluginId,
|
|
70
|
+
subPaths: [
|
|
71
|
+
versionName === CURRENT_VERSION_NAME
|
|
72
|
+
? CURRENT_VERSION_NAME
|
|
73
|
+
: `version-${versionName}`,
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** `community` => `[siteDir]/community_versions.json` */
|
|
79
|
+
export function getVersionsFilePath(siteDir: string, pluginId: string): string {
|
|
80
|
+
return path.join(siteDir, addPluginIdPrefix(VERSIONS_JSON_FILE, pluginId));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Reads the plugin's respective `versions.json` file, and returns its content.
|
|
85
|
+
*
|
|
86
|
+
* @throws Throws if validation fails, i.e. `versions.json` doesn't contain an
|
|
87
|
+
* array of valid version names.
|
|
88
|
+
*/
|
|
89
|
+
export async function readVersionsFile(
|
|
90
|
+
siteDir: string,
|
|
91
|
+
pluginId: string,
|
|
92
|
+
): Promise<string[] | null> {
|
|
93
|
+
const versionsFilePath = getVersionsFilePath(siteDir, pluginId);
|
|
94
|
+
if (await fs.pathExists(versionsFilePath)) {
|
|
95
|
+
const content: unknown = await fs.readJSON(versionsFilePath);
|
|
96
|
+
validateVersionNames(content);
|
|
97
|
+
return content;
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Reads the `versions.json` file, and returns an ordered list of version names.
|
|
104
|
+
*
|
|
105
|
+
* - If `disableVersioning` is turned on, it will return `["current"]` (requires
|
|
106
|
+
* `includeCurrentVersion` to be true);
|
|
107
|
+
* - If `includeCurrentVersion` is turned on, "current" will be inserted at the
|
|
108
|
+
* beginning, if not already there.
|
|
109
|
+
*
|
|
110
|
+
* You need to use {@link filterVersions} after this.
|
|
111
|
+
*
|
|
112
|
+
* @throws Throws an error if `disableVersioning: true` but `versions.json`
|
|
113
|
+
* doesn't exist (i.e. site is not versioned)
|
|
114
|
+
* @throws Throws an error if versions list is empty (empty `versions.json` or
|
|
115
|
+
* `disableVersioning` is true, and not including current version)
|
|
116
|
+
*/
|
|
117
|
+
export async function readVersionNames(
|
|
118
|
+
siteDir: string,
|
|
119
|
+
options: PluginOptions,
|
|
120
|
+
): Promise<string[]> {
|
|
121
|
+
const versionFileContent = await readVersionsFile(siteDir, options.id);
|
|
122
|
+
|
|
123
|
+
if (!versionFileContent && options.disableVersioning) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
`Docs: using "disableVersioning: true" option on a non-versioned site does not make sense.`,
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const versions = options.disableVersioning ? [] : versionFileContent ?? [];
|
|
130
|
+
|
|
131
|
+
// We add the current version at the beginning, unless:
|
|
132
|
+
// - user don't want to; or
|
|
133
|
+
// - it's already been explicitly added to versions.json
|
|
134
|
+
if (
|
|
135
|
+
options.includeCurrentVersion &&
|
|
136
|
+
!versions.includes(CURRENT_VERSION_NAME)
|
|
137
|
+
) {
|
|
138
|
+
versions.unshift(CURRENT_VERSION_NAME);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (versions.length === 0) {
|
|
142
|
+
throw new Error(
|
|
143
|
+
`It is not possible to use docs without any version. No version is included because you have requested to not include ${path.resolve(
|
|
144
|
+
options.path,
|
|
145
|
+
)} through "includeCurrentVersion: false", while ${
|
|
146
|
+
options.disableVersioning
|
|
147
|
+
? 'versioning is disabled with "disableVersioning: true"'
|
|
148
|
+
: `the versions file is empty/non-existent`
|
|
149
|
+
}.`,
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return versions;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Gets the path-related version metadata.
|
|
158
|
+
*
|
|
159
|
+
* @throws Throws if the resolved docs folder or sidebars file doesn't exist.
|
|
160
|
+
* Does not throw if a versioned sidebar is missing (since we don't create empty
|
|
161
|
+
* files).
|
|
162
|
+
*/
|
|
163
|
+
export async function getVersionMetadataPaths({
|
|
164
|
+
versionName,
|
|
165
|
+
context,
|
|
166
|
+
options,
|
|
167
|
+
}: VersionContext): Promise<
|
|
168
|
+
Pick<
|
|
169
|
+
VersionMetadata,
|
|
170
|
+
'contentPath' | 'contentPathLocalized' | 'sidebarFilePath'
|
|
171
|
+
>
|
|
172
|
+
> {
|
|
173
|
+
const isCurrent = versionName === CURRENT_VERSION_NAME;
|
|
174
|
+
const contentPathLocalized = getDocsDirPathLocalized({
|
|
175
|
+
localizationDir: context.localizationDir,
|
|
176
|
+
pluginId: options.id,
|
|
177
|
+
versionName,
|
|
178
|
+
});
|
|
179
|
+
const contentPath = isCurrent
|
|
180
|
+
? path.resolve(context.siteDir, options.path)
|
|
181
|
+
: getVersionDocsDirPath(context.siteDir, options.id, versionName);
|
|
182
|
+
const sidebarFilePath = isCurrent
|
|
183
|
+
? options.sidebarPath
|
|
184
|
+
: getVersionSidebarsPath(context.siteDir, options.id, versionName);
|
|
185
|
+
|
|
186
|
+
if (!(await fs.pathExists(contentPath))) {
|
|
187
|
+
throw new Error(
|
|
188
|
+
`The docs folder does not exist for version "${versionName}". A docs folder is expected to be found at ${path.relative(
|
|
189
|
+
context.siteDir,
|
|
190
|
+
contentPath,
|
|
191
|
+
)}.`,
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// If the current version defines a path to a sidebar file that does not
|
|
196
|
+
// exist, we throw! Note: for versioned sidebars, the file may not exist (as
|
|
197
|
+
// we prefer to not create it rather than to create an empty file)
|
|
198
|
+
// See https://github.com/facebook/docusaurus/issues/3366
|
|
199
|
+
// See https://github.com/facebook/docusaurus/pull/4775
|
|
200
|
+
if (
|
|
201
|
+
versionName === CURRENT_VERSION_NAME &&
|
|
202
|
+
typeof sidebarFilePath === 'string' &&
|
|
203
|
+
!(await fs.pathExists(sidebarFilePath))
|
|
204
|
+
) {
|
|
205
|
+
throw new Error(`The path to the sidebar file does not exist at "${path.relative(
|
|
206
|
+
context.siteDir,
|
|
207
|
+
sidebarFilePath,
|
|
208
|
+
)}".
|
|
209
|
+
Please set the docs "sidebarPath" field in your config file to:
|
|
210
|
+
- a sidebars path that exists
|
|
211
|
+
- false: to disable the sidebar
|
|
212
|
+
- undefined: for Docusaurus to generate it automatically`);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return {contentPath, contentPathLocalized, sidebarFilePath};
|
|
216
|
+
}
|