@docusaurus/plugin-content-docs 2.0.0-beta.2 → 2.0.0-beta.20
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 +60 -69
- package/lib/client/docsClientUtils.d.ts +9 -28
- package/lib/client/docsClientUtils.js +33 -34
- package/lib/client/index.d.ts +22 -0
- package/lib/client/index.js +72 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +4 -1
- package/lib/docs.d.ts +32 -3
- package/lib/docs.js +164 -63
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
- package/lib/{docFrontMatter.js → frontMatter.js} +13 -4
- package/lib/globalData.d.ts +3 -3
- package/lib/globalData.js +35 -6
- package/lib/index.d.ts +3 -3
- package/lib/index.js +122 -148
- 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 +54 -13
- package/lib/props.d.ts +7 -2
- package/lib/props.js +69 -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 +22 -0
- package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -6
- 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 +55 -0
- package/lib/sidebars/postProcessor.d.ts +8 -0
- package/lib/sidebars/postProcessor.js +65 -0
- package/lib/sidebars/processor.d.ts +10 -0
- package/lib/sidebars/processor.js +90 -0
- package/lib/sidebars/types.d.ts +178 -0
- package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
- package/lib/sidebars/utils.d.ts +54 -0
- package/lib/sidebars/utils.js +255 -0
- package/lib/sidebars/validation.d.ts +11 -0
- package/lib/sidebars/validation.js +138 -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 +84 -94
- package/lib/types.d.ts +13 -184
- package/lib/versions/files.d.ts +44 -0
- package/lib/versions/files.js +142 -0
- package/lib/versions/index.d.ts +36 -0
- package/lib/versions/index.js +155 -0
- package/lib/versions/validation.d.ts +17 -0
- package/lib/versions/validation.js +71 -0
- package/package.json +32 -27
- package/src/categoryGeneratedIndex.ts +60 -0
- package/src/cli.ts +84 -109
- package/src/client/docsClientUtils.ts +43 -70
- package/src/client/index.ts +103 -0
- package/src/constants.ts +4 -2
- package/{types.d.ts → src/deps.d.ts} +1 -1
- package/src/docs.ts +228 -65
- package/src/{docFrontMatter.ts → frontMatter.ts} +21 -11
- package/src/globalData.ts +57 -7
- package/src/index.ts +169 -210
- package/src/lastUpdate.ts +26 -37
- package/src/markdown/index.ts +10 -16
- package/src/markdown/linkify.ts +7 -4
- package/src/numberPrefix.ts +19 -26
- package/src/options.ts +60 -18
- package/src/plugin-content-docs.d.ts +625 -89
- package/src/props.ts +102 -20
- package/src/routes.ts +159 -0
- package/src/server-export.ts +22 -0
- package/src/sidebars/README.md +9 -0
- package/src/sidebars/generator.ts +292 -0
- package/src/sidebars/index.ts +118 -0
- package/src/sidebars/normalization.ts +85 -0
- package/src/sidebars/postProcessor.ts +89 -0
- package/src/sidebars/processor.ts +139 -0
- package/src/sidebars/types.ts +275 -0
- package/src/sidebars/utils.ts +391 -0
- package/src/sidebars/validation.ts +174 -0
- package/src/slug.ts +41 -22
- package/src/tags.ts +20 -0
- package/src/translations.ts +124 -117
- package/src/types.ts +18 -247
- package/src/versions/files.ts +220 -0
- package/src/versions/index.ts +247 -0
- package/src/versions/validation.ts +113 -0
- 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/lib/theme/hooks/useDocs.d.ts +0 -20
- package/lib/theme/hooks/useDocs.js +0 -72
- 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/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/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 -1916
- package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
- 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 -1871
- 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 -159
- 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/src/theme/hooks/useDocs.ts +0 -99
- package/src/versions.ts +0 -572
- package/tsconfig.json +0 -9
package/src/index.ts
CHANGED
|
@@ -7,59 +7,67 @@
|
|
|
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,
|
|
17
13
|
aliasedSitePath,
|
|
14
|
+
getContentPathList,
|
|
18
15
|
reportMessage,
|
|
19
16
|
posixPath,
|
|
20
17
|
addTrailingPathSeparator,
|
|
18
|
+
createAbsoluteFilePathMatcher,
|
|
19
|
+
createSlugger,
|
|
20
|
+
DEFAULT_PLUGIN_ID,
|
|
21
21
|
} from '@docusaurus/utils';
|
|
22
|
-
import {LoadContext, Plugin
|
|
23
|
-
import {loadSidebars,
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
LoadedContent,
|
|
22
|
+
import type {LoadContext, Plugin} from '@docusaurus/types';
|
|
23
|
+
import {loadSidebars, resolveSidebarPathOption} from './sidebars';
|
|
24
|
+
import {CategoryMetadataFilenamePattern} from './sidebars/generator';
|
|
25
|
+
import type {DocEnv} from './docs';
|
|
26
|
+
import {readVersionDocs, processDocMetadata, addDocNavigation} from './docs';
|
|
27
|
+
import {readVersionsMetadata} from './versions';
|
|
28
|
+
import type {
|
|
30
29
|
SourceToPermalink,
|
|
31
|
-
DocMetadataBase,
|
|
32
|
-
DocMetadata,
|
|
33
|
-
GlobalPluginData,
|
|
34
|
-
VersionMetadata,
|
|
35
|
-
DocNavLink,
|
|
36
|
-
LoadedVersion,
|
|
37
30
|
DocFile,
|
|
38
31
|
DocsMarkdownOption,
|
|
32
|
+
VersionTag,
|
|
33
|
+
FullVersion,
|
|
39
34
|
} from './types';
|
|
40
|
-
import {
|
|
41
|
-
import {RuleSetRule} from 'webpack';
|
|
35
|
+
import type {RuleSetRule} from 'webpack';
|
|
42
36
|
import {cliDocsVersionCommand} from './cli';
|
|
43
37
|
import {VERSIONS_JSON_FILE} from './constants';
|
|
44
|
-
import {flatten, keyBy, compact, mapValues} from 'lodash';
|
|
45
38
|
import {toGlobalDataVersion} from './globalData';
|
|
46
|
-
import {
|
|
39
|
+
import {toTagDocListProp} from './props';
|
|
40
|
+
import {getCategoryGeneratedIndexMetadataList} from './categoryGeneratedIndex';
|
|
47
41
|
import {
|
|
48
42
|
translateLoadedContent,
|
|
49
43
|
getLoadedContentTranslationFiles,
|
|
50
44
|
} from './translations';
|
|
51
|
-
import
|
|
52
|
-
import
|
|
45
|
+
import logger from '@docusaurus/logger';
|
|
46
|
+
import {getVersionTags} from './tags';
|
|
47
|
+
import {createVersionRoutes} from './routes';
|
|
48
|
+
import type {
|
|
49
|
+
PropTagsListPage,
|
|
50
|
+
PluginOptions,
|
|
51
|
+
DocMetadataBase,
|
|
52
|
+
VersionMetadata,
|
|
53
|
+
DocFrontMatter,
|
|
54
|
+
LoadedContent,
|
|
55
|
+
LoadedVersion,
|
|
56
|
+
} from '@docusaurus/plugin-content-docs';
|
|
57
|
+
import {createSidebarsUtils} from './sidebars/utils';
|
|
58
|
+
import _ from 'lodash';
|
|
53
59
|
|
|
54
|
-
export default function pluginContentDocs(
|
|
60
|
+
export default async function pluginContentDocs(
|
|
55
61
|
context: LoadContext,
|
|
56
62
|
options: PluginOptions,
|
|
57
|
-
): Plugin<LoadedContent
|
|
63
|
+
): Promise<Plugin<LoadedContent>> {
|
|
58
64
|
const {siteDir, generatedFilesDir, baseUrl, siteConfig} = context;
|
|
65
|
+
// Mutate options to resolve sidebar path according to siteDir
|
|
66
|
+
options.sidebarPath = resolveSidebarPathOption(siteDir, options.sidebarPath);
|
|
59
67
|
|
|
60
|
-
const versionsMetadata = readVersionsMetadata({context, options});
|
|
68
|
+
const versionsMetadata = await readVersionsMetadata({context, options});
|
|
61
69
|
|
|
62
|
-
const pluginId = options.id
|
|
70
|
+
const pluginId = options.id;
|
|
63
71
|
|
|
64
72
|
const pluginDataDirRoot = path.join(
|
|
65
73
|
generatedFilesDir,
|
|
@@ -72,14 +80,6 @@ export default function pluginContentDocs(
|
|
|
72
80
|
return {
|
|
73
81
|
name: 'docusaurus-plugin-content-docs',
|
|
74
82
|
|
|
75
|
-
getThemePath() {
|
|
76
|
-
return path.resolve(__dirname, './theme');
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
getTypeScriptThemePath() {
|
|
80
|
-
return path.resolve(__dirname, '..', 'src', 'theme');
|
|
81
|
-
},
|
|
82
|
-
|
|
83
83
|
extendCli(cli) {
|
|
84
84
|
const isDefaultPluginId = pluginId === DEFAULT_PLUGIN_ID;
|
|
85
85
|
|
|
@@ -97,33 +97,20 @@ export default function pluginContentDocs(
|
|
|
97
97
|
.arguments('<version>')
|
|
98
98
|
.description(commandDescription)
|
|
99
99
|
.action((version) => {
|
|
100
|
-
cliDocsVersionCommand(version,
|
|
101
|
-
path: options.path,
|
|
102
|
-
sidebarPath: options.sidebarPath,
|
|
103
|
-
});
|
|
100
|
+
cliDocsVersionCommand(version, options, context);
|
|
104
101
|
});
|
|
105
102
|
},
|
|
106
103
|
|
|
107
|
-
|
|
104
|
+
getTranslationFiles({content}) {
|
|
108
105
|
return getLoadedContentTranslationFiles(content);
|
|
109
106
|
},
|
|
110
107
|
|
|
111
|
-
getClientModules() {
|
|
112
|
-
const modules = [];
|
|
113
|
-
if (options.admonitions) {
|
|
114
|
-
modules.push(require.resolve('remark-admonitions/styles/infima.css'));
|
|
115
|
-
}
|
|
116
|
-
return modules;
|
|
117
|
-
},
|
|
118
|
-
|
|
119
108
|
getPathsToWatch() {
|
|
120
109
|
function getVersionPathsToWatch(version: VersionMetadata): string[] {
|
|
121
110
|
const result = [
|
|
122
|
-
...
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
126
|
-
),
|
|
111
|
+
...options.include.flatMap((pattern) =>
|
|
112
|
+
getContentPathList(version).map(
|
|
113
|
+
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
127
114
|
),
|
|
128
115
|
),
|
|
129
116
|
`${version.contentPath}/**/${CategoryMetadataFilenamePattern}`,
|
|
@@ -134,7 +121,7 @@ export default function pluginContentDocs(
|
|
|
134
121
|
return result;
|
|
135
122
|
}
|
|
136
123
|
|
|
137
|
-
return
|
|
124
|
+
return versionsMetadata.flatMap(getVersionPathsToWatch);
|
|
138
125
|
},
|
|
139
126
|
|
|
140
127
|
async loadContent() {
|
|
@@ -158,6 +145,7 @@ export default function pluginContentDocs(
|
|
|
158
145
|
versionMetadata,
|
|
159
146
|
context,
|
|
160
147
|
options,
|
|
148
|
+
env: process.env.NODE_ENV as DocEnv,
|
|
161
149
|
});
|
|
162
150
|
}
|
|
163
151
|
return Promise.all(docFiles.map(processVersionDoc));
|
|
@@ -166,111 +154,45 @@ export default function pluginContentDocs(
|
|
|
166
154
|
async function doLoadVersion(
|
|
167
155
|
versionMetadata: VersionMetadata,
|
|
168
156
|
): Promise<LoadedVersion> {
|
|
169
|
-
const unprocessedSidebars = loadSidebars(
|
|
170
|
-
versionMetadata.sidebarFilePath,
|
|
171
|
-
);
|
|
172
|
-
|
|
173
157
|
const docsBase: DocMetadataBase[] = await loadVersionDocsBase(
|
|
174
158
|
versionMetadata,
|
|
175
159
|
);
|
|
176
|
-
const docsBaseById: Record<string, DocMetadataBase> = keyBy(
|
|
177
|
-
docsBase,
|
|
178
|
-
(doc) => doc.id,
|
|
179
|
-
);
|
|
180
160
|
|
|
181
|
-
const
|
|
161
|
+
const [drafts, docs] = _.partition(docsBase, (doc) => doc.draft);
|
|
162
|
+
|
|
163
|
+
const sidebars = await loadSidebars(versionMetadata.sidebarFilePath, {
|
|
182
164
|
sidebarItemsGenerator: options.sidebarItemsGenerator,
|
|
183
165
|
numberPrefixParser: options.numberPrefixParser,
|
|
184
|
-
|
|
185
|
-
|
|
166
|
+
docs,
|
|
167
|
+
drafts,
|
|
186
168
|
version: versionMetadata,
|
|
169
|
+
sidebarOptions: {
|
|
170
|
+
sidebarCollapsed: options.sidebarCollapsed,
|
|
171
|
+
sidebarCollapsible: options.sidebarCollapsible,
|
|
172
|
+
},
|
|
173
|
+
categoryLabelSlugger: createSlugger(),
|
|
187
174
|
});
|
|
188
175
|
|
|
189
176
|
const sidebarsUtils = createSidebarsUtils(sidebars);
|
|
190
177
|
|
|
191
|
-
const validDocIds = Object.keys(docsBaseById);
|
|
192
|
-
sidebarsUtils.checkSidebarsDocIds(
|
|
193
|
-
validDocIds,
|
|
194
|
-
versionMetadata.sidebarFilePath as string,
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
// Add sidebar/next/previous to the docs
|
|
198
|
-
function addNavData(doc: DocMetadataBase): DocMetadata {
|
|
199
|
-
const {
|
|
200
|
-
sidebarName,
|
|
201
|
-
previousId,
|
|
202
|
-
nextId,
|
|
203
|
-
} = sidebarsUtils.getDocNavigation(doc.id);
|
|
204
|
-
const toDocNavLink = (navDocId: string): DocNavLink => {
|
|
205
|
-
const {title, permalink, frontMatter} = docsBaseById[navDocId];
|
|
206
|
-
return {
|
|
207
|
-
title:
|
|
208
|
-
frontMatter.pagination_label ??
|
|
209
|
-
frontMatter.sidebar_label ??
|
|
210
|
-
title,
|
|
211
|
-
permalink,
|
|
212
|
-
};
|
|
213
|
-
};
|
|
214
|
-
return {
|
|
215
|
-
...doc,
|
|
216
|
-
sidebar: sidebarName,
|
|
217
|
-
previous: previousId ? toDocNavLink(previousId) : undefined,
|
|
218
|
-
next: nextId ? toDocNavLink(nextId) : undefined,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
const docs = docsBase.map(addNavData);
|
|
223
|
-
|
|
224
|
-
// sort to ensure consistent output for tests
|
|
225
|
-
docs.sort((a, b) => a.id.localeCompare(b.id));
|
|
226
|
-
|
|
227
|
-
// TODO really useful? replace with global state logic?
|
|
228
|
-
const permalinkToSidebar: PermalinkToSidebar = {};
|
|
229
|
-
Object.values(docs).forEach((doc) => {
|
|
230
|
-
if (doc.sidebar) {
|
|
231
|
-
permalinkToSidebar[doc.permalink] = doc.sidebar;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
// The "main doc" is the "version entry point"
|
|
236
|
-
// We browse this doc by clicking on a version:
|
|
237
|
-
// - the "home" doc (at '/docs/')
|
|
238
|
-
// - the first doc of the first sidebar
|
|
239
|
-
// - a random doc (if no docs are in any sidebar... edge case)
|
|
240
|
-
function getMainDoc(): DocMetadata {
|
|
241
|
-
const versionHomeDoc = docs.find(
|
|
242
|
-
(doc) =>
|
|
243
|
-
doc.unversionedId === options.homePageId || doc.slug === '/',
|
|
244
|
-
);
|
|
245
|
-
const firstDocIdOfFirstSidebar = sidebarsUtils.getFirstDocIdOfFirstSidebar();
|
|
246
|
-
if (versionHomeDoc) {
|
|
247
|
-
return versionHomeDoc;
|
|
248
|
-
} else if (firstDocIdOfFirstSidebar) {
|
|
249
|
-
return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar)!;
|
|
250
|
-
} else {
|
|
251
|
-
return docs[0];
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
178
|
return {
|
|
256
179
|
...versionMetadata,
|
|
257
|
-
|
|
180
|
+
docs: addDocNavigation(
|
|
181
|
+
docs,
|
|
182
|
+
sidebarsUtils,
|
|
183
|
+
versionMetadata.sidebarFilePath as string,
|
|
184
|
+
),
|
|
185
|
+
drafts,
|
|
258
186
|
sidebars,
|
|
259
|
-
permalinkToSidebar,
|
|
260
|
-
docs: docs.map(addNavData),
|
|
261
187
|
};
|
|
262
188
|
}
|
|
263
189
|
|
|
264
190
|
async function loadVersion(versionMetadata: VersionMetadata) {
|
|
265
191
|
try {
|
|
266
192
|
return await doLoadVersion(versionMetadata);
|
|
267
|
-
} catch (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
`Loading of version failed for version "${versionMetadata.versionName}"`,
|
|
271
|
-
),
|
|
272
|
-
);
|
|
273
|
-
throw e;
|
|
193
|
+
} catch (err) {
|
|
194
|
+
logger.error`Loading of version failed for version name=${versionMetadata.versionName}`;
|
|
195
|
+
throw err;
|
|
274
196
|
}
|
|
275
197
|
}
|
|
276
198
|
|
|
@@ -285,80 +207,101 @@ export default function pluginContentDocs(
|
|
|
285
207
|
|
|
286
208
|
async contentLoaded({content, actions}) {
|
|
287
209
|
const {loadedVersions} = content;
|
|
288
|
-
const {
|
|
210
|
+
const {
|
|
211
|
+
docLayoutComponent,
|
|
212
|
+
docItemComponent,
|
|
213
|
+
docCategoryGeneratedIndexComponent,
|
|
214
|
+
breadcrumbs,
|
|
215
|
+
} = options;
|
|
289
216
|
const {addRoute, createData, setGlobalData} = actions;
|
|
217
|
+
const versions: FullVersion[] = loadedVersions.map((version) => {
|
|
218
|
+
const sidebarsUtils = createSidebarsUtils(version.sidebars);
|
|
219
|
+
return {
|
|
220
|
+
...version,
|
|
221
|
+
sidebarsUtils,
|
|
222
|
+
categoryGeneratedIndices: getCategoryGeneratedIndexMetadataList({
|
|
223
|
+
docs: version.docs,
|
|
224
|
+
sidebarsUtils,
|
|
225
|
+
}),
|
|
226
|
+
};
|
|
227
|
+
});
|
|
290
228
|
|
|
291
|
-
|
|
292
|
-
docs
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
229
|
+
async function createVersionTagsRoutes(version: FullVersion) {
|
|
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
|
+
label: tagValue.label,
|
|
238
|
+
permalink: tagValue.permalink,
|
|
239
|
+
count: tagValue.docIds.length,
|
|
240
|
+
}));
|
|
241
|
+
|
|
242
|
+
// Only create /tags page if there are tags.
|
|
243
|
+
if (tagsProp.length > 0) {
|
|
244
|
+
const tagsPropPath = await createData(
|
|
245
|
+
`${docuHash(`tags-list-${version.versionName}-prop`)}.json`,
|
|
246
|
+
JSON.stringify(tagsProp, null, 2),
|
|
301
247
|
);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
path: metadataItem.permalink,
|
|
305
|
-
component: docItemComponent,
|
|
248
|
+
addRoute({
|
|
249
|
+
path: version.tagsPath,
|
|
306
250
|
exact: true,
|
|
251
|
+
component: options.docTagsListComponent,
|
|
307
252
|
modules: {
|
|
308
|
-
|
|
253
|
+
tags: aliasedSource(tagsPropPath),
|
|
309
254
|
},
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
return routes.sort((a, b) => a.path.localeCompare(b.path));
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
async function doCreateVersionRoutes(loadedVersion: LoadedVersion) {
|
|
318
|
-
const versionMetadataPropPath = await createData(
|
|
319
|
-
`${docuHash(
|
|
320
|
-
`version-${loadedVersion.versionName}-metadata-prop`,
|
|
321
|
-
)}.json`,
|
|
322
|
-
JSON.stringify(
|
|
323
|
-
toVersionMetadataProp(pluginId, loadedVersion),
|
|
324
|
-
null,
|
|
325
|
-
2,
|
|
326
|
-
),
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
addRoute({
|
|
330
|
-
path: loadedVersion.versionPath,
|
|
331
|
-
// allow matching /docs/* as well
|
|
332
|
-
exact: false,
|
|
333
|
-
// main docs component (DocPage)
|
|
334
|
-
component: docLayoutComponent,
|
|
335
|
-
// sub-routes for each doc
|
|
336
|
-
routes: await createDocRoutes(loadedVersion.docs),
|
|
337
|
-
modules: {
|
|
338
|
-
versionMetadata: aliasedSource(versionMetadataPropPath),
|
|
339
|
-
},
|
|
340
|
-
priority: loadedVersion.routePriority,
|
|
341
|
-
});
|
|
342
|
-
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
343
258
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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),
|
|
352
269
|
);
|
|
353
|
-
|
|
270
|
+
addRoute({
|
|
271
|
+
path: tag.permalink,
|
|
272
|
+
component: options.docTagDocListComponent,
|
|
273
|
+
exact: true,
|
|
274
|
+
modules: {
|
|
275
|
+
tag: aliasedSource(tagPropPath),
|
|
276
|
+
},
|
|
277
|
+
});
|
|
354
278
|
}
|
|
279
|
+
|
|
280
|
+
await createTagsListPage();
|
|
281
|
+
await Promise.all(Object.values(versionTags).map(createTagDocListPage));
|
|
355
282
|
}
|
|
356
283
|
|
|
357
|
-
await Promise.all(
|
|
284
|
+
await Promise.all(
|
|
285
|
+
versions.map((version) =>
|
|
286
|
+
createVersionRoutes({
|
|
287
|
+
version,
|
|
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(versions.map(createVersionTagsRoutes));
|
|
358
300
|
|
|
359
|
-
setGlobalData
|
|
301
|
+
setGlobalData({
|
|
360
302
|
path: normalizeUrl([baseUrl, options.routeBasePath]),
|
|
361
|
-
versions:
|
|
303
|
+
versions: versions.map(toGlobalDataVersion),
|
|
304
|
+
breadcrumbs,
|
|
362
305
|
});
|
|
363
306
|
},
|
|
364
307
|
|
|
@@ -372,10 +315,9 @@ export default function pluginContentDocs(
|
|
|
372
315
|
} = options;
|
|
373
316
|
|
|
374
317
|
function getSourceToPermalink(): SourceToPermalink {
|
|
375
|
-
const allDocs =
|
|
376
|
-
return
|
|
377
|
-
|
|
378
|
-
(d) => d.permalink,
|
|
318
|
+
const allDocs = content.loadedVersions.flatMap((v) => v.docs);
|
|
319
|
+
return Object.fromEntries(
|
|
320
|
+
allDocs.map(({source, permalink}) => [source, permalink]),
|
|
379
321
|
);
|
|
380
322
|
}
|
|
381
323
|
|
|
@@ -395,12 +337,13 @@ export default function pluginContentDocs(
|
|
|
395
337
|
};
|
|
396
338
|
|
|
397
339
|
function createMDXLoaderRule(): RuleSetRule {
|
|
340
|
+
const contentDirs = versionsMetadata.flatMap(getContentPathList);
|
|
398
341
|
return {
|
|
399
|
-
test:
|
|
400
|
-
include:
|
|
342
|
+
test: /\.mdx?$/i,
|
|
343
|
+
include: contentDirs
|
|
401
344
|
// Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
|
|
402
345
|
.map(addTrailingPathSeparator),
|
|
403
|
-
use:
|
|
346
|
+
use: [
|
|
404
347
|
getJSLoader({isServer}),
|
|
405
348
|
{
|
|
406
349
|
loader: require.resolve('@docusaurus/mdx-loader'),
|
|
@@ -409,20 +352,36 @@ export default function pluginContentDocs(
|
|
|
409
352
|
rehypePlugins,
|
|
410
353
|
beforeDefaultRehypePlugins,
|
|
411
354
|
beforeDefaultRemarkPlugins,
|
|
412
|
-
|
|
355
|
+
staticDirs: siteConfig.staticDirectories.map((dir) =>
|
|
356
|
+
path.resolve(siteDir, dir),
|
|
357
|
+
),
|
|
358
|
+
siteDir,
|
|
359
|
+
isMDXPartial: createAbsoluteFilePathMatcher(
|
|
360
|
+
options.exclude,
|
|
361
|
+
contentDirs,
|
|
362
|
+
),
|
|
413
363
|
metadataPath: (mdxPath: string) => {
|
|
414
364
|
// Note that metadataPath must be the same/in-sync as
|
|
415
365
|
// the path from createData for each MDX.
|
|
416
366
|
const aliasedPath = aliasedSitePath(mdxPath, siteDir);
|
|
417
367
|
return path.join(dataDir, `${docuHash(aliasedPath)}.json`);
|
|
418
368
|
},
|
|
369
|
+
// Assets allow to convert some relative images paths to
|
|
370
|
+
// require(...) calls
|
|
371
|
+
createAssets: ({
|
|
372
|
+
frontMatter,
|
|
373
|
+
}: {
|
|
374
|
+
frontMatter: DocFrontMatter;
|
|
375
|
+
}) => ({
|
|
376
|
+
image: frontMatter.image,
|
|
377
|
+
}),
|
|
419
378
|
},
|
|
420
379
|
},
|
|
421
380
|
{
|
|
422
381
|
loader: path.resolve(__dirname, './markdown/index.js'),
|
|
423
382
|
options: docsMarkdownOptions,
|
|
424
383
|
},
|
|
425
|
-
]),
|
|
384
|
+
].filter(Boolean),
|
|
426
385
|
};
|
|
427
386
|
}
|
|
428
387
|
|
package/src/lastUpdate.ts
CHANGED
|
@@ -5,58 +5,47 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX = /^(\d+), (.+)$/;
|
|
8
|
+
import logger from '@docusaurus/logger';
|
|
9
|
+
import {
|
|
10
|
+
getFileCommitDate,
|
|
11
|
+
FileNotTrackedError,
|
|
12
|
+
GitNotFoundError,
|
|
13
|
+
} from '@docusaurus/utils';
|
|
15
14
|
|
|
16
15
|
let showedGitRequirementError = false;
|
|
16
|
+
let showedFileNotTrackedError = false;
|
|
17
17
|
|
|
18
18
|
export async function getFileLastUpdate(
|
|
19
19
|
filePath?: string,
|
|
20
|
-
): Promise<
|
|
20
|
+
): Promise<{timestamp: number; author: string} | null> {
|
|
21
21
|
if (!filePath) {
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
|
-
function getTimestampAndAuthor(str: string): FileLastUpdateData | null {
|
|
25
|
-
if (!str) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const temp = str.match(GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX);
|
|
30
|
-
return !temp || temp.length < 3
|
|
31
|
-
? null
|
|
32
|
-
: {timestamp: +temp[1], author: temp[2]};
|
|
33
|
-
}
|
|
34
24
|
|
|
35
25
|
// Wrap in try/catch in case the shell commands fail
|
|
36
26
|
// (e.g. project doesn't use Git, etc).
|
|
37
27
|
try {
|
|
38
|
-
|
|
28
|
+
const result = getFileCommitDate(filePath, {
|
|
29
|
+
age: 'newest',
|
|
30
|
+
includeAuthor: true,
|
|
31
|
+
});
|
|
32
|
+
return {timestamp: result.timestamp, author: result.author};
|
|
33
|
+
} catch (err) {
|
|
34
|
+
if (err instanceof GitNotFoundError) {
|
|
39
35
|
if (!showedGitRequirementError) {
|
|
36
|
+
logger.warn('Sorry, the docs plugin last update options require Git.');
|
|
40
37
|
showedGitRequirementError = true;
|
|
41
|
-
console.warn('Sorry, the docs plugin last update options require Git.');
|
|
42
38
|
}
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
} else if (err instanceof FileNotTrackedError) {
|
|
40
|
+
if (!showedFileNotTrackedError) {
|
|
41
|
+
logger.warn(
|
|
42
|
+
'Cannot infer the update date for some files, as they are not tracked by git.',
|
|
43
|
+
);
|
|
44
|
+
showedFileNotTrackedError = true;
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
logger.warn(err);
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
const fileBasename = path.basename(filePath);
|
|
48
|
-
const fileDirname = path.dirname(filePath);
|
|
49
|
-
const {stdout} = await execa(
|
|
50
|
-
'git',
|
|
51
|
-
['log', '-1', '--format=%ct, %an', fileBasename],
|
|
52
|
-
{
|
|
53
|
-
cwd: fileDirname,
|
|
54
|
-
},
|
|
55
|
-
);
|
|
56
|
-
return getTimestampAndAuthor(stdout);
|
|
57
|
-
} catch (error) {
|
|
58
|
-
console.error(error);
|
|
49
|
+
return null;
|
|
59
50
|
}
|
|
60
|
-
|
|
61
|
-
return null;
|
|
62
51
|
}
|
package/src/markdown/index.ts
CHANGED
|
@@ -6,21 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import {linkify} from './linkify';
|
|
9
|
-
import {DocsMarkdownOption} from '../types';
|
|
9
|
+
import type {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()
|
|
21
|
-
return (
|
|
22
|
-
|
|
23
|
-
);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export default markdownLoader;
|
|
18
|
+
const options = this.getOptions();
|
|
19
|
+
return callback?.(null, linkify(fileString, this.resourcePath, options));
|
|
20
|
+
}
|
package/src/markdown/linkify.ts
CHANGED
|
@@ -5,16 +5,19 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {DocsMarkdownOption} from '../types';
|
|
9
|
-
import {
|
|
10
|
-
import {replaceMarkdownLinks} from '@docusaurus/utils';
|
|
8
|
+
import type {DocsMarkdownOption} from '../types';
|
|
9
|
+
import {replaceMarkdownLinks, getContentPathList} from '@docusaurus/utils';
|
|
11
10
|
|
|
12
11
|
function getVersion(filePath: string, options: DocsMarkdownOption) {
|
|
13
12
|
const versionFound = options.versionsMetadata.find((version) =>
|
|
14
|
-
|
|
13
|
+
getContentPathList(version).some((docsDirPath) =>
|
|
15
14
|
filePath.startsWith(docsDirPath),
|
|
16
15
|
),
|
|
17
16
|
);
|
|
17
|
+
// At this point, this should never happen, because the MDX loaders' paths are
|
|
18
|
+
// literally using the version content paths; but if we allow sourcing content
|
|
19
|
+
// from outside the docs directory (through the `include` option, for example;
|
|
20
|
+
// is there a compelling use-case?), this would actually be testable
|
|
18
21
|
if (!versionFound) {
|
|
19
22
|
throw new Error(
|
|
20
23
|
`Unexpected error: Markdown file at "${filePath}" does not belong to any docs version!`,
|