@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/index.ts
CHANGED
|
@@ -7,10 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
import path from 'path';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
STATIC_DIR_NAME,
|
|
12
|
-
DEFAULT_PLUGIN_ID,
|
|
13
|
-
} from '@docusaurus/core/lib/constants';
|
|
14
10
|
import {
|
|
15
11
|
normalizeUrl,
|
|
16
12
|
docuHash,
|
|
@@ -18,10 +14,19 @@ import {
|
|
|
18
14
|
reportMessage,
|
|
19
15
|
posixPath,
|
|
20
16
|
addTrailingPathSeparator,
|
|
17
|
+
createAbsoluteFilePathMatcher,
|
|
18
|
+
createSlugger,
|
|
19
|
+
DEFAULT_PLUGIN_ID,
|
|
21
20
|
} from '@docusaurus/utils';
|
|
22
|
-
import {LoadContext, Plugin
|
|
23
|
-
import {loadSidebars
|
|
24
|
-
import {
|
|
21
|
+
import type {LoadContext, Plugin} from '@docusaurus/types';
|
|
22
|
+
import {loadSidebars} from './sidebars';
|
|
23
|
+
import {CategoryMetadataFilenamePattern} from './sidebars/generator';
|
|
24
|
+
import {
|
|
25
|
+
readVersionDocs,
|
|
26
|
+
processDocMetadata,
|
|
27
|
+
addDocNavigation,
|
|
28
|
+
getMainDocId,
|
|
29
|
+
} from './docs';
|
|
25
30
|
import {getDocsDirPaths, readVersionsMetadata} from './versions';
|
|
26
31
|
|
|
27
32
|
import {
|
|
@@ -29,26 +34,29 @@ import {
|
|
|
29
34
|
LoadedContent,
|
|
30
35
|
SourceToPermalink,
|
|
31
36
|
DocMetadataBase,
|
|
32
|
-
DocMetadata,
|
|
33
37
|
GlobalPluginData,
|
|
34
38
|
VersionMetadata,
|
|
35
|
-
DocNavLink,
|
|
36
39
|
LoadedVersion,
|
|
37
40
|
DocFile,
|
|
38
41
|
DocsMarkdownOption,
|
|
42
|
+
VersionTag,
|
|
39
43
|
} from './types';
|
|
40
|
-
import {RuleSetRule} from 'webpack';
|
|
44
|
+
import type {RuleSetRule} from 'webpack';
|
|
41
45
|
import {cliDocsVersionCommand} from './cli';
|
|
42
46
|
import {VERSIONS_JSON_FILE} from './constants';
|
|
43
|
-
import {
|
|
47
|
+
import {keyBy, mapValues} from 'lodash';
|
|
44
48
|
import {toGlobalDataVersion} from './globalData';
|
|
45
|
-
import {
|
|
49
|
+
import {toTagDocListProp} from './props';
|
|
46
50
|
import {
|
|
47
51
|
translateLoadedContent,
|
|
48
52
|
getLoadedContentTranslationFiles,
|
|
49
53
|
} from './translations';
|
|
50
|
-
import
|
|
51
|
-
import
|
|
54
|
+
import logger from '@docusaurus/logger';
|
|
55
|
+
import {getVersionTags} from './tags';
|
|
56
|
+
import {createVersionRoutes} from './routes';
|
|
57
|
+
import type {PropTagsListPage} from '@docusaurus/plugin-content-docs';
|
|
58
|
+
import {createSidebarsUtils} from './sidebars/utils';
|
|
59
|
+
import {getCategoryGeneratedIndexMetadataList} from './categoryGeneratedIndex';
|
|
52
60
|
|
|
53
61
|
export default function pluginContentDocs(
|
|
54
62
|
context: LoadContext,
|
|
@@ -99,6 +107,8 @@ export default function pluginContentDocs(
|
|
|
99
107
|
cliDocsVersionCommand(version, siteDir, pluginId, {
|
|
100
108
|
path: options.path,
|
|
101
109
|
sidebarPath: options.sidebarPath,
|
|
110
|
+
sidebarCollapsed: options.sidebarCollapsed,
|
|
111
|
+
sidebarCollapsible: options.sidebarCollapsible,
|
|
102
112
|
});
|
|
103
113
|
});
|
|
104
114
|
},
|
|
@@ -107,22 +117,12 @@ export default function pluginContentDocs(
|
|
|
107
117
|
return getLoadedContentTranslationFiles(content);
|
|
108
118
|
},
|
|
109
119
|
|
|
110
|
-
getClientModules() {
|
|
111
|
-
const modules = [];
|
|
112
|
-
if (options.admonitions) {
|
|
113
|
-
modules.push(require.resolve('remark-admonitions/styles/infima.css'));
|
|
114
|
-
}
|
|
115
|
-
return modules;
|
|
116
|
-
},
|
|
117
|
-
|
|
118
120
|
getPathsToWatch() {
|
|
119
121
|
function getVersionPathsToWatch(version: VersionMetadata): string[] {
|
|
120
122
|
const result = [
|
|
121
|
-
...
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
125
|
-
),
|
|
123
|
+
...options.include.flatMap((pattern) =>
|
|
124
|
+
getDocsDirPaths(version).map(
|
|
125
|
+
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
126
126
|
),
|
|
127
127
|
),
|
|
128
128
|
`${version.contentPath}/**/${CategoryMetadataFilenamePattern}`,
|
|
@@ -133,7 +133,7 @@ export default function pluginContentDocs(
|
|
|
133
133
|
return result;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
return
|
|
136
|
+
return versionsMetadata.flatMap(getVersionPathsToWatch);
|
|
137
137
|
},
|
|
138
138
|
|
|
139
139
|
async loadContent() {
|
|
@@ -165,89 +165,37 @@ export default function pluginContentDocs(
|
|
|
165
165
|
async function doLoadVersion(
|
|
166
166
|
versionMetadata: VersionMetadata,
|
|
167
167
|
): Promise<LoadedVersion> {
|
|
168
|
-
const
|
|
169
|
-
versionMetadata.sidebarFilePath,
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
const docsBase: DocMetadataBase[] = await loadVersionDocsBase(
|
|
168
|
+
const docs: DocMetadataBase[] = await loadVersionDocsBase(
|
|
173
169
|
versionMetadata,
|
|
174
170
|
);
|
|
175
|
-
const docsBaseById: Record<string, DocMetadataBase> = keyBy(
|
|
176
|
-
docsBase,
|
|
177
|
-
(doc) => doc.id,
|
|
178
|
-
);
|
|
179
171
|
|
|
180
|
-
const sidebars = await
|
|
172
|
+
const sidebars = await loadSidebars(versionMetadata.sidebarFilePath, {
|
|
181
173
|
sidebarItemsGenerator: options.sidebarItemsGenerator,
|
|
182
174
|
numberPrefixParser: options.numberPrefixParser,
|
|
183
|
-
|
|
184
|
-
docs: docsBase,
|
|
175
|
+
docs,
|
|
185
176
|
version: versionMetadata,
|
|
177
|
+
sidebarOptions: {
|
|
178
|
+
sidebarCollapsed: options.sidebarCollapsed,
|
|
179
|
+
sidebarCollapsible: options.sidebarCollapsible,
|
|
180
|
+
},
|
|
181
|
+
categoryLabelSlugger: createSlugger(),
|
|
186
182
|
});
|
|
187
183
|
|
|
188
184
|
const sidebarsUtils = createSidebarsUtils(sidebars);
|
|
189
185
|
|
|
190
|
-
const validDocIds = Object.keys(docsBaseById);
|
|
191
|
-
sidebarsUtils.checkSidebarsDocIds(
|
|
192
|
-
validDocIds,
|
|
193
|
-
versionMetadata.sidebarFilePath as string,
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
// Add sidebar/next/previous to the docs
|
|
197
|
-
function addNavData(doc: DocMetadataBase): DocMetadata {
|
|
198
|
-
const {
|
|
199
|
-
sidebarName,
|
|
200
|
-
previousId,
|
|
201
|
-
nextId,
|
|
202
|
-
} = sidebarsUtils.getDocNavigation(doc.id);
|
|
203
|
-
const toDocNavLink = (navDocId: string): DocNavLink => {
|
|
204
|
-
const {title, permalink, frontMatter} = docsBaseById[navDocId];
|
|
205
|
-
return {
|
|
206
|
-
title:
|
|
207
|
-
frontMatter.pagination_label ??
|
|
208
|
-
frontMatter.sidebar_label ??
|
|
209
|
-
title,
|
|
210
|
-
permalink,
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
-
return {
|
|
214
|
-
...doc,
|
|
215
|
-
sidebar: sidebarName,
|
|
216
|
-
previous: previousId ? toDocNavLink(previousId) : undefined,
|
|
217
|
-
next: nextId ? toDocNavLink(nextId) : undefined,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
const docs = docsBase.map(addNavData);
|
|
222
|
-
|
|
223
|
-
// sort to ensure consistent output for tests
|
|
224
|
-
docs.sort((a, b) => a.id.localeCompare(b.id));
|
|
225
|
-
|
|
226
|
-
// The "main doc" is the "version entry point"
|
|
227
|
-
// We browse this doc by clicking on a version:
|
|
228
|
-
// - the "home" doc (at '/docs/')
|
|
229
|
-
// - the first doc of the first sidebar
|
|
230
|
-
// - a random doc (if no docs are in any sidebar... edge case)
|
|
231
|
-
function getMainDoc(): DocMetadata {
|
|
232
|
-
const versionHomeDoc = docs.find(
|
|
233
|
-
(doc) =>
|
|
234
|
-
doc.unversionedId === options.homePageId || doc.slug === '/',
|
|
235
|
-
);
|
|
236
|
-
const firstDocIdOfFirstSidebar = sidebarsUtils.getFirstDocIdOfFirstSidebar();
|
|
237
|
-
if (versionHomeDoc) {
|
|
238
|
-
return versionHomeDoc;
|
|
239
|
-
} else if (firstDocIdOfFirstSidebar) {
|
|
240
|
-
return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar)!;
|
|
241
|
-
} else {
|
|
242
|
-
return docs[0];
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
186
|
return {
|
|
247
187
|
...versionMetadata,
|
|
248
|
-
|
|
188
|
+
docs: addDocNavigation(
|
|
189
|
+
docs,
|
|
190
|
+
sidebarsUtils,
|
|
191
|
+
versionMetadata.sidebarFilePath as string,
|
|
192
|
+
),
|
|
249
193
|
sidebars,
|
|
250
|
-
|
|
194
|
+
mainDocId: getMainDocId({docs, sidebarsUtils}),
|
|
195
|
+
categoryGeneratedIndices: getCategoryGeneratedIndexMetadataList({
|
|
196
|
+
docs,
|
|
197
|
+
sidebarsUtils,
|
|
198
|
+
}),
|
|
251
199
|
};
|
|
252
200
|
}
|
|
253
201
|
|
|
@@ -255,11 +203,7 @@ export default function pluginContentDocs(
|
|
|
255
203
|
try {
|
|
256
204
|
return await doLoadVersion(versionMetadata);
|
|
257
205
|
} catch (e) {
|
|
258
|
-
|
|
259
|
-
chalk.red(
|
|
260
|
-
`Loading of version failed for version "${versionMetadata.versionName}"`,
|
|
261
|
-
),
|
|
262
|
-
);
|
|
206
|
+
logger.error`Loading of version failed for version name=${versionMetadata.versionName}`;
|
|
263
207
|
throw e;
|
|
264
208
|
}
|
|
265
209
|
}
|
|
@@ -275,84 +219,84 @@ export default function pluginContentDocs(
|
|
|
275
219
|
|
|
276
220
|
async contentLoaded({content, actions}) {
|
|
277
221
|
const {loadedVersions} = content;
|
|
278
|
-
const {
|
|
222
|
+
const {
|
|
223
|
+
docLayoutComponent,
|
|
224
|
+
docItemComponent,
|
|
225
|
+
docCategoryGeneratedIndexComponent,
|
|
226
|
+
} = options;
|
|
279
227
|
const {addRoute, createData, setGlobalData} = actions;
|
|
280
228
|
|
|
281
|
-
|
|
282
|
-
docs
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
229
|
+
async function createVersionTagsRoutes(version: LoadedVersion) {
|
|
230
|
+
const versionTags = getVersionTags(version.docs);
|
|
231
|
+
|
|
232
|
+
// TODO tags should be a sub route of the version route
|
|
233
|
+
async function createTagsListPage() {
|
|
234
|
+
const tagsProp: PropTagsListPage['tags'] = Object.values(
|
|
235
|
+
versionTags,
|
|
236
|
+
).map((tagValue) => ({
|
|
237
|
+
name: tagValue.name,
|
|
238
|
+
permalink: tagValue.permalink,
|
|
239
|
+
count: tagValue.docIds.length,
|
|
240
|
+
}));
|
|
241
|
+
|
|
242
|
+
// Only create /tags page if there are tags.
|
|
243
|
+
if (Object.keys(tagsProp).length > 0) {
|
|
244
|
+
const tagsPropPath = await createData(
|
|
245
|
+
`${docuHash(`tags-list-${version.versionName}-prop`)}.json`,
|
|
246
|
+
JSON.stringify(tagsProp, null, 2),
|
|
291
247
|
);
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
path: metadataItem.permalink,
|
|
295
|
-
component: docItemComponent,
|
|
248
|
+
addRoute({
|
|
249
|
+
path: version.tagsPath,
|
|
296
250
|
exact: true,
|
|
251
|
+
component: options.docTagsListComponent,
|
|
297
252
|
modules: {
|
|
298
|
-
|
|
253
|
+
tags: aliasedSource(tagsPropPath),
|
|
299
254
|
},
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
sidebar: metadataItem.sidebar,
|
|
304
|
-
}),
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
return docRoute;
|
|
308
|
-
}),
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
return routes.sort((a, b) => a.path.localeCompare(b.path));
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
async function doCreateVersionRoutes(
|
|
315
|
-
loadedVersion: LoadedVersion,
|
|
316
|
-
): Promise<void> {
|
|
317
|
-
const versionMetadata = toVersionMetadataProp(pluginId, loadedVersion);
|
|
318
|
-
const versionMetadataPropPath = await createData(
|
|
319
|
-
`${docuHash(
|
|
320
|
-
`version-${loadedVersion.versionName}-metadata-prop`,
|
|
321
|
-
)}.json`,
|
|
322
|
-
JSON.stringify(versionMetadata, null, 2),
|
|
323
|
-
);
|
|
324
|
-
|
|
325
|
-
addRoute({
|
|
326
|
-
path: loadedVersion.versionPath,
|
|
327
|
-
// allow matching /docs/* as well
|
|
328
|
-
exact: false,
|
|
329
|
-
// main docs component (DocPage)
|
|
330
|
-
component: docLayoutComponent,
|
|
331
|
-
// sub-routes for each doc
|
|
332
|
-
routes: await createDocRoutes(loadedVersion.docs),
|
|
333
|
-
modules: {
|
|
334
|
-
versionMetadata: aliasedSource(versionMetadataPropPath),
|
|
335
|
-
},
|
|
336
|
-
priority: loadedVersion.routePriority,
|
|
337
|
-
});
|
|
338
|
-
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
339
258
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
),
|
|
259
|
+
// TODO tags should be a sub route of the version route
|
|
260
|
+
async function createTagDocListPage(tag: VersionTag) {
|
|
261
|
+
const tagProps = toTagDocListProp({
|
|
262
|
+
allTagsPath: version.tagsPath,
|
|
263
|
+
tag,
|
|
264
|
+
docs: version.docs,
|
|
265
|
+
});
|
|
266
|
+
const tagPropPath = await createData(
|
|
267
|
+
`${docuHash(`tag-${tag.permalink}`)}.json`,
|
|
268
|
+
JSON.stringify(tagProps, null, 2),
|
|
350
269
|
);
|
|
351
|
-
|
|
270
|
+
addRoute({
|
|
271
|
+
path: tag.permalink,
|
|
272
|
+
component: options.docTagDocListComponent,
|
|
273
|
+
exact: true,
|
|
274
|
+
modules: {
|
|
275
|
+
tag: aliasedSource(tagPropPath),
|
|
276
|
+
},
|
|
277
|
+
});
|
|
352
278
|
}
|
|
279
|
+
|
|
280
|
+
await createTagsListPage();
|
|
281
|
+
await Promise.all(Object.values(versionTags).map(createTagDocListPage));
|
|
353
282
|
}
|
|
354
283
|
|
|
355
|
-
await Promise.all(
|
|
284
|
+
await Promise.all(
|
|
285
|
+
loadedVersions.map((loadedVersion) =>
|
|
286
|
+
createVersionRoutes({
|
|
287
|
+
loadedVersion,
|
|
288
|
+
docItemComponent,
|
|
289
|
+
docLayoutComponent,
|
|
290
|
+
docCategoryGeneratedIndexComponent,
|
|
291
|
+
pluginId,
|
|
292
|
+
aliasedSource,
|
|
293
|
+
actions,
|
|
294
|
+
}),
|
|
295
|
+
),
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
// TODO tags should be a sub route of the version route
|
|
299
|
+
await Promise.all(loadedVersions.map(createVersionTagsRoutes));
|
|
356
300
|
|
|
357
301
|
setGlobalData<GlobalPluginData>({
|
|
358
302
|
path: normalizeUrl([baseUrl, options.routeBasePath]),
|
|
@@ -370,7 +314,7 @@ export default function pluginContentDocs(
|
|
|
370
314
|
} = options;
|
|
371
315
|
|
|
372
316
|
function getSourceToPermalink(): SourceToPermalink {
|
|
373
|
-
const allDocs =
|
|
317
|
+
const allDocs = content.loadedVersions.flatMap((v) => v.docs);
|
|
374
318
|
return mapValues(
|
|
375
319
|
keyBy(allDocs, (d) => d.source),
|
|
376
320
|
(d) => d.permalink,
|
|
@@ -393,12 +337,13 @@ export default function pluginContentDocs(
|
|
|
393
337
|
};
|
|
394
338
|
|
|
395
339
|
function createMDXLoaderRule(): RuleSetRule {
|
|
340
|
+
const contentDirs = versionsMetadata.flatMap(getDocsDirPaths);
|
|
396
341
|
return {
|
|
397
342
|
test: /(\.mdx?)$/,
|
|
398
|
-
include:
|
|
343
|
+
include: contentDirs
|
|
399
344
|
// Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
|
|
400
345
|
.map(addTrailingPathSeparator),
|
|
401
|
-
use:
|
|
346
|
+
use: [
|
|
402
347
|
getJSLoader({isServer}),
|
|
403
348
|
{
|
|
404
349
|
loader: require.resolve('@docusaurus/mdx-loader'),
|
|
@@ -407,7 +352,14 @@ export default function pluginContentDocs(
|
|
|
407
352
|
rehypePlugins,
|
|
408
353
|
beforeDefaultRehypePlugins,
|
|
409
354
|
beforeDefaultRemarkPlugins,
|
|
410
|
-
|
|
355
|
+
staticDirs: siteConfig.staticDirectories.map((dir) =>
|
|
356
|
+
path.resolve(siteDir, dir),
|
|
357
|
+
),
|
|
358
|
+
siteDir,
|
|
359
|
+
isMDXPartial: createAbsoluteFilePathMatcher(
|
|
360
|
+
options.exclude,
|
|
361
|
+
contentDirs,
|
|
362
|
+
),
|
|
411
363
|
metadataPath: (mdxPath: string) => {
|
|
412
364
|
// Note that metadataPath must be the same/in-sync as
|
|
413
365
|
// the path from createData for each MDX.
|
|
@@ -420,7 +372,7 @@ export default function pluginContentDocs(
|
|
|
420
372
|
loader: path.resolve(__dirname, './markdown/index.js'),
|
|
421
373
|
options: docsMarkdownOptions,
|
|
422
374
|
},
|
|
423
|
-
]),
|
|
375
|
+
].filter(Boolean),
|
|
424
376
|
};
|
|
425
377
|
}
|
|
426
378
|
|
package/src/lastUpdate.ts
CHANGED
|
@@ -6,12 +6,11 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import shell from 'shelljs';
|
|
9
|
-
import
|
|
10
|
-
import path from 'path';
|
|
9
|
+
import logger from '@docusaurus/logger';
|
|
11
10
|
|
|
12
11
|
type FileLastUpdateData = {timestamp?: number; author?: string};
|
|
13
12
|
|
|
14
|
-
const GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX = /^(\d+),
|
|
13
|
+
const GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX = /^(\d+),(.+)$/;
|
|
15
14
|
|
|
16
15
|
let showedGitRequirementError = false;
|
|
17
16
|
|
|
@@ -38,24 +37,23 @@ export async function getFileLastUpdate(
|
|
|
38
37
|
if (!shell.which('git')) {
|
|
39
38
|
if (!showedGitRequirementError) {
|
|
40
39
|
showedGitRequirementError = true;
|
|
41
|
-
|
|
40
|
+
logger.warn('Sorry, the docs plugin last update options require Git.');
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
return null;
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
console.error(error);
|
|
46
|
+
const result = shell.exec(`git log -1 --format=%ct,%an ${filePath}`, {
|
|
47
|
+
silent: true,
|
|
48
|
+
});
|
|
49
|
+
if (result.code !== 0) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
`Retrieval of git history failed at ${filePath} with exit code ${result.code}: ${result.stderr}`,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
return getTimestampAndAuthor(result.stdout.trim());
|
|
55
|
+
} catch (e) {
|
|
56
|
+
logger.error(e);
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
return null;
|
package/src/markdown/index.ts
CHANGED
|
@@ -7,20 +7,16 @@
|
|
|
7
7
|
|
|
8
8
|
import {linkify} from './linkify';
|
|
9
9
|
import {DocsMarkdownOption} from '../types';
|
|
10
|
+
import type {LoaderContext} from 'webpack';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const markdownLoader: Loader = function (source) {
|
|
18
|
-
const fileString = source as string;
|
|
12
|
+
export default function markdownLoader(
|
|
13
|
+
this: LoaderContext<DocsMarkdownOption>,
|
|
14
|
+
source: string,
|
|
15
|
+
): void {
|
|
16
|
+
const fileString = source;
|
|
19
17
|
const callback = this.async();
|
|
20
|
-
const options = this.getOptions()
|
|
18
|
+
const options = this.getOptions();
|
|
21
19
|
return (
|
|
22
20
|
callback && callback(null, linkify(fileString, this.resourcePath, options))
|
|
23
21
|
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default markdownLoader;
|
|
22
|
+
}
|
package/src/numberPrefix.ts
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {NumberPrefixParser} from './types';
|
|
8
|
+
import type {NumberPrefixParser} from './types';
|
|
9
9
|
|
|
10
10
|
// Best-effort to avoid parsing some patterns as number prefix
|
|
11
11
|
const IgnoredPrefixPatterns = (function () {
|
|
12
12
|
// ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
|
|
13
|
-
const DateLikePrefixRegex =
|
|
13
|
+
const DateLikePrefixRegex =
|
|
14
|
+
/^((\d{2}|\d{4})[-_.]\d{2}([-_.](\d{2}|\d{4}))?)(.*)$/;
|
|
14
15
|
|
|
15
16
|
// ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
|
|
16
17
|
// note: we could try to parse float numbers in filenames but that is probably not worth it
|
|
@@ -23,7 +24,8 @@ const IgnoredPrefixPatterns = (function () {
|
|
|
23
24
|
);
|
|
24
25
|
})();
|
|
25
26
|
|
|
26
|
-
const NumberPrefixRegex =
|
|
27
|
+
const NumberPrefixRegex =
|
|
28
|
+
/^(?<numberPrefix>\d+)(?<separator>\s*[-_.]+\s*)(?<suffix>.*)$/;
|
|
27
29
|
|
|
28
30
|
// 0-myDoc => {filename: myDoc, numberPrefix: 0}
|
|
29
31
|
// 003 - myDoc => {filename: myDoc, numberPrefix: 3}
|
package/src/options.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
import type {PluginOptions} from './types';
|
|
8
9
|
import {
|
|
9
10
|
Joi,
|
|
10
11
|
RemarkPluginsSchema,
|
|
@@ -12,10 +13,15 @@ import {
|
|
|
12
13
|
AdmonitionsSchema,
|
|
13
14
|
URISchema,
|
|
14
15
|
} from '@docusaurus/utils-validation';
|
|
15
|
-
import {
|
|
16
|
-
|
|
16
|
+
import {GlobExcludeDefault} from '@docusaurus/utils';
|
|
17
|
+
|
|
18
|
+
import type {
|
|
19
|
+
OptionValidationContext,
|
|
20
|
+
ValidationResult,
|
|
21
|
+
} from '@docusaurus/types';
|
|
22
|
+
import logger from '@docusaurus/logger';
|
|
17
23
|
import admonitions from 'remark-admonitions';
|
|
18
|
-
import {DefaultSidebarItemsGenerator} from './
|
|
24
|
+
import {DefaultSidebarItemsGenerator} from './sidebars/generator';
|
|
19
25
|
import {
|
|
20
26
|
DefaultNumberPrefixParser,
|
|
21
27
|
DisabledNumberPrefixParser,
|
|
@@ -24,12 +30,16 @@ import {
|
|
|
24
30
|
export const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'> = {
|
|
25
31
|
path: 'docs', // Path to data on filesystem, relative to site dir.
|
|
26
32
|
routeBasePath: 'docs', // URL Route.
|
|
27
|
-
|
|
33
|
+
tagsBasePath: 'tags', // URL Tags Route.
|
|
28
34
|
include: ['**/*.{md,mdx}'], // Extensions to include.
|
|
35
|
+
exclude: GlobExcludeDefault,
|
|
29
36
|
sidebarItemsGenerator: DefaultSidebarItemsGenerator,
|
|
30
37
|
numberPrefixParser: DefaultNumberPrefixParser,
|
|
31
38
|
docLayoutComponent: '@theme/DocPage',
|
|
32
39
|
docItemComponent: '@theme/DocItem',
|
|
40
|
+
docTagDocListComponent: '@theme/DocTagDocListPage',
|
|
41
|
+
docTagsListComponent: '@theme/DocTagsListPage',
|
|
42
|
+
docCategoryGeneratedIndexComponent: '@theme/DocCategoryGeneratedIndexPage',
|
|
33
43
|
remarkPlugins: [],
|
|
34
44
|
rehypePlugins: [],
|
|
35
45
|
beforeDefaultRemarkPlugins: [],
|
|
@@ -43,12 +53,16 @@ export const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'> = {
|
|
|
43
53
|
versions: {},
|
|
44
54
|
editCurrentVersion: false,
|
|
45
55
|
editLocalizedFiles: false,
|
|
56
|
+
sidebarCollapsible: true,
|
|
57
|
+
sidebarCollapsed: true,
|
|
46
58
|
};
|
|
47
59
|
|
|
48
60
|
const VersionOptionsSchema = Joi.object({
|
|
49
61
|
path: Joi.string().allow('').optional(),
|
|
50
62
|
label: Joi.string().optional(),
|
|
51
63
|
banner: Joi.string().equal('none', 'unreleased', 'unmaintained').optional(),
|
|
64
|
+
badge: Joi.boolean().optional(),
|
|
65
|
+
className: Joi.string().optional(),
|
|
52
66
|
});
|
|
53
67
|
|
|
54
68
|
const VersionsOptionsSchema = Joi.object()
|
|
@@ -64,8 +78,14 @@ export const OptionsSchema = Joi.object({
|
|
|
64
78
|
// '' not allowed, see https://github.com/facebook/docusaurus/issues/3374
|
|
65
79
|
// .allow('') ""
|
|
66
80
|
.default(DEFAULT_OPTIONS.routeBasePath),
|
|
67
|
-
|
|
81
|
+
tagsBasePath: Joi.string().default(DEFAULT_OPTIONS.tagsBasePath),
|
|
82
|
+
homePageId: Joi.any().forbidden().messages({
|
|
83
|
+
'any.unknown':
|
|
84
|
+
'The docs plugin option homePageId is not supported anymore. To make a doc the "home", please add "slug: /" in its front matter. See: https://docusaurus.io/docs/next/docs-introduction#home-page-docs',
|
|
85
|
+
}),
|
|
86
|
+
|
|
68
87
|
include: Joi.array().items(Joi.string()).default(DEFAULT_OPTIONS.include),
|
|
88
|
+
exclude: Joi.array().items(Joi.string()).default(DEFAULT_OPTIONS.exclude),
|
|
69
89
|
sidebarPath: Joi.alternatives().try(
|
|
70
90
|
Joi.boolean().invalid(true),
|
|
71
91
|
Joi.string(),
|
|
@@ -73,6 +93,8 @@ export const OptionsSchema = Joi.object({
|
|
|
73
93
|
sidebarItemsGenerator: Joi.function().default(
|
|
74
94
|
() => DEFAULT_OPTIONS.sidebarItemsGenerator,
|
|
75
95
|
),
|
|
96
|
+
sidebarCollapsible: Joi.boolean().default(DEFAULT_OPTIONS.sidebarCollapsible),
|
|
97
|
+
sidebarCollapsed: Joi.boolean().default(DEFAULT_OPTIONS.sidebarCollapsed),
|
|
76
98
|
numberPrefixParser: Joi.alternatives()
|
|
77
99
|
.try(
|
|
78
100
|
Joi.function(),
|
|
@@ -86,6 +108,15 @@ export const OptionsSchema = Joi.object({
|
|
|
86
108
|
.default(() => DEFAULT_OPTIONS.numberPrefixParser),
|
|
87
109
|
docLayoutComponent: Joi.string().default(DEFAULT_OPTIONS.docLayoutComponent),
|
|
88
110
|
docItemComponent: Joi.string().default(DEFAULT_OPTIONS.docItemComponent),
|
|
111
|
+
docTagsListComponent: Joi.string().default(
|
|
112
|
+
DEFAULT_OPTIONS.docTagsListComponent,
|
|
113
|
+
),
|
|
114
|
+
docTagDocListComponent: Joi.string().default(
|
|
115
|
+
DEFAULT_OPTIONS.docTagDocListComponent,
|
|
116
|
+
),
|
|
117
|
+
docCategoryGeneratedIndexComponent: Joi.string().default(
|
|
118
|
+
DEFAULT_OPTIONS.docCategoryGeneratedIndexComponent,
|
|
119
|
+
),
|
|
89
120
|
remarkPlugins: RemarkPluginsSchema.default(DEFAULT_OPTIONS.remarkPlugins),
|
|
90
121
|
rehypePlugins: RehypePluginsSchema.default(DEFAULT_OPTIONS.rehypePlugins),
|
|
91
122
|
beforeDefaultRemarkPlugins: RemarkPluginsSchema.default(
|
|
@@ -112,16 +143,26 @@ export const OptionsSchema = Joi.object({
|
|
|
112
143
|
|
|
113
144
|
export function validateOptions({
|
|
114
145
|
validate,
|
|
115
|
-
options,
|
|
146
|
+
options: userOptions,
|
|
116
147
|
}: OptionValidationContext<PluginOptions>): ValidationResult<PluginOptions> {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (options.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
148
|
+
let options = userOptions;
|
|
149
|
+
|
|
150
|
+
if (options.sidebarCollapsible === false) {
|
|
151
|
+
// When sidebarCollapsible=false and sidebarCollapsed=undefined, we don't want to have the inconsistency warning
|
|
152
|
+
// We let options.sidebarCollapsible become the default value for options.sidebarCollapsed
|
|
153
|
+
if (typeof options.sidebarCollapsed === 'undefined') {
|
|
154
|
+
options = {
|
|
155
|
+
...options,
|
|
156
|
+
sidebarCollapsed: false,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (options.sidebarCollapsed) {
|
|
160
|
+
logger.warn`The docs plugin config is inconsistent. It does not make sense to use code=${'sidebarCollapsible: false'} and code=${'sidebarCollapsed: true'} at the same time. code=${'sidebarCollapsed: true'} will be ignored.`;
|
|
161
|
+
options = {
|
|
162
|
+
...options,
|
|
163
|
+
sidebarCollapsed: false,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
125
166
|
}
|
|
126
167
|
|
|
127
168
|
const normalizedOptions = validate(OptionsSchema, options);
|