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