@docusaurus/plugin-content-docs 2.0.0-beta.2 → 2.0.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/categoryGeneratedIndex.d.ts +12 -0
- package/lib/categoryGeneratedIndex.js +37 -0
- package/lib/cli.d.ts +3 -2
- package/lib/cli.js +57 -72
- package/lib/client/docsClientUtils.d.ts +9 -28
- package/lib/client/docsClientUtils.js +34 -43
- package/lib/client/index.d.ts +81 -0
- package/lib/client/index.js +67 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +4 -1
- package/lib/docs.d.ts +34 -7
- package/lib/docs.js +202 -79
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
- package/lib/{docFrontMatter.js → frontMatter.js} +23 -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 +124 -154
- 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 +56 -23
- package/lib/props.d.ts +7 -2
- package/lib/props.js +84 -14
- 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 +59 -0
- package/lib/sidebars/postProcessor.d.ts +11 -0
- package/lib/sidebars/postProcessor.js +81 -0
- package/lib/sidebars/processor.d.ts +10 -0
- package/lib/sidebars/processor.js +79 -0
- package/lib/sidebars/types.d.ts +183 -0
- package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
- package/lib/sidebars/utils.d.ts +55 -0
- package/lib/sidebars/utils.js +259 -0
- package/lib/sidebars/validation.d.ts +11 -0
- package/lib/sidebars/validation.js +143 -0
- package/lib/slug.d.ts +5 -4
- package/lib/slug.js +28 -18
- package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
- package/lib/tags.js +21 -0
- package/lib/translations.d.ts +3 -3
- package/lib/translations.js +100 -93
- package/lib/types.d.ts +13 -185
- package/lib/versions/files.d.ts +50 -0
- package/lib/versions/files.js +141 -0
- package/lib/versions/index.d.ts +36 -0
- package/lib/versions/index.js +154 -0
- package/lib/versions/validation.d.ts +17 -0
- package/lib/versions/validation.js +71 -0
- package/package.json +44 -30
- package/src/categoryGeneratedIndex.ts +60 -0
- package/src/cli.ts +88 -114
- package/src/client/docsClientUtils.ts +44 -71
- package/src/client/index.ts +158 -0
- package/src/constants.ts +4 -2
- package/src/docs.ts +281 -83
- package/src/frontMatter.ts +63 -0
- package/src/globalData.ts +57 -7
- package/src/index.ts +183 -224
- package/src/lastUpdate.ts +27 -38
- package/src/markdown/index.ts +10 -16
- package/src/markdown/linkify.ts +7 -4
- package/src/numberPrefix.ts +19 -26
- package/src/options.ts +61 -29
- package/src/plugin-content-docs.d.ts +569 -93
- package/src/props.ts +121 -21
- package/src/routes.ts +159 -0
- package/src/server-export.ts +22 -0
- package/src/sidebars/README.md +10 -0
- package/src/sidebars/generator.ts +292 -0
- package/src/sidebars/index.ts +118 -0
- package/src/sidebars/normalization.ts +91 -0
- package/src/sidebars/postProcessor.ts +112 -0
- package/src/sidebars/processor.ts +123 -0
- package/src/sidebars/types.ts +280 -0
- package/src/sidebars/utils.ts +393 -0
- package/src/sidebars/validation.ts +179 -0
- package/src/slug.ts +41 -22
- package/src/tags.ts +20 -0
- package/src/translations.ts +155 -124
- package/src/types.ts +17 -250
- package/src/versions/files.ts +216 -0
- package/src/versions/index.ts +246 -0
- package/src/versions/validation.ts +115 -0
- package/lib/.tsbuildinfo +0 -1
- package/lib/sidebarItemsGenerator.js +0 -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/docFrontMatter.ts +0 -41
- package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
- package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
- package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
- package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
- package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
- package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
- package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
- package/src/markdown/__tests__/linkify.test.ts +0 -190
- package/src/sidebarItemsGenerator.ts +0 -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/types.d.ts +0 -13
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, mapValues} 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 {
|
|
52
|
-
import
|
|
40
|
+
import {getVersionTags} from './tags';
|
|
41
|
+
import {createVersionRoutes} from './routes';
|
|
42
|
+
import {createSidebarsUtils} from './sidebars/utils';
|
|
53
43
|
|
|
54
|
-
|
|
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(
|
|
55
64
|
context: LoadContext,
|
|
56
65
|
options: PluginOptions,
|
|
57
|
-
): Plugin<LoadedContent
|
|
66
|
+
): Promise<Plugin<LoadedContent>> {
|
|
58
67
|
const {siteDir, generatedFilesDir, baseUrl, siteConfig} = context;
|
|
68
|
+
// Mutate options to resolve sidebar path according to siteDir
|
|
69
|
+
options.sidebarPath = resolveSidebarPathOption(siteDir, options.sidebarPath);
|
|
59
70
|
|
|
60
|
-
const versionsMetadata = readVersionsMetadata({context, options});
|
|
71
|
+
const versionsMetadata = await readVersionsMetadata({context, options});
|
|
61
72
|
|
|
62
|
-
const pluginId = options.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() {
|
|
@@ -152,12 +142,13 @@ export default function pluginContentDocs(
|
|
|
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));
|
|
@@ -166,111 +157,45 @@ export default function pluginContentDocs(
|
|
|
166
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(
|
|
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
181
|
return {
|
|
256
182
|
...versionMetadata,
|
|
257
|
-
|
|
183
|
+
docs: addDocNavigation(
|
|
184
|
+
docs,
|
|
185
|
+
sidebarsUtils,
|
|
186
|
+
versionMetadata.sidebarFilePath as string,
|
|
187
|
+
),
|
|
188
|
+
drafts,
|
|
258
189
|
sidebars,
|
|
259
|
-
permalinkToSidebar,
|
|
260
|
-
docs: docs.map(addNavData),
|
|
261
190
|
};
|
|
262
191
|
}
|
|
263
192
|
|
|
264
193
|
async function loadVersion(versionMetadata: VersionMetadata) {
|
|
265
194
|
try {
|
|
266
195
|
return await doLoadVersion(versionMetadata);
|
|
267
|
-
} catch (
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
`Loading of version failed for version "${versionMetadata.versionName}"`,
|
|
271
|
-
),
|
|
272
|
-
);
|
|
273
|
-
throw e;
|
|
196
|
+
} catch (err) {
|
|
197
|
+
logger.error`Loading of version failed for version name=${versionMetadata.versionName}`;
|
|
198
|
+
throw err;
|
|
274
199
|
}
|
|
275
200
|
}
|
|
276
201
|
|
|
@@ -285,80 +210,101 @@ export default function pluginContentDocs(
|
|
|
285
210
|
|
|
286
211
|
async contentLoaded({content, actions}) {
|
|
287
212
|
const {loadedVersions} = content;
|
|
288
|
-
const {
|
|
213
|
+
const {
|
|
214
|
+
docLayoutComponent,
|
|
215
|
+
docItemComponent,
|
|
216
|
+
docCategoryGeneratedIndexComponent,
|
|
217
|
+
breadcrumbs,
|
|
218
|
+
} = options;
|
|
289
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
|
+
});
|
|
290
231
|
|
|
291
|
-
|
|
292
|
-
docs
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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),
|
|
301
250
|
);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
path: metadataItem.permalink,
|
|
305
|
-
component: docItemComponent,
|
|
251
|
+
addRoute({
|
|
252
|
+
path: version.tagsPath,
|
|
306
253
|
exact: true,
|
|
254
|
+
component: options.docTagsListComponent,
|
|
307
255
|
modules: {
|
|
308
|
-
|
|
256
|
+
tags: aliasedSource(tagsPropPath),
|
|
309
257
|
},
|
|
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
|
-
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
343
261
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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),
|
|
352
272
|
);
|
|
353
|
-
|
|
273
|
+
addRoute({
|
|
274
|
+
path: tag.permalink,
|
|
275
|
+
component: options.docTagDocListComponent,
|
|
276
|
+
exact: true,
|
|
277
|
+
modules: {
|
|
278
|
+
tag: aliasedSource(tagPropPath),
|
|
279
|
+
},
|
|
280
|
+
});
|
|
354
281
|
}
|
|
282
|
+
|
|
283
|
+
await createTagsListPage();
|
|
284
|
+
await Promise.all(Object.values(versionTags).map(createTagDocListPage));
|
|
355
285
|
}
|
|
356
286
|
|
|
357
|
-
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));
|
|
358
303
|
|
|
359
|
-
setGlobalData
|
|
304
|
+
setGlobalData({
|
|
360
305
|
path: normalizeUrl([baseUrl, options.routeBasePath]),
|
|
361
|
-
versions:
|
|
306
|
+
versions: versions.map(toGlobalDataVersion),
|
|
307
|
+
breadcrumbs,
|
|
362
308
|
});
|
|
363
309
|
},
|
|
364
310
|
|
|
@@ -372,10 +318,9 @@ export default function pluginContentDocs(
|
|
|
372
318
|
} = options;
|
|
373
319
|
|
|
374
320
|
function getSourceToPermalink(): SourceToPermalink {
|
|
375
|
-
const allDocs =
|
|
376
|
-
return
|
|
377
|
-
|
|
378
|
-
(d) => d.permalink,
|
|
321
|
+
const allDocs = content.loadedVersions.flatMap((v) => v.docs);
|
|
322
|
+
return Object.fromEntries(
|
|
323
|
+
allDocs.map(({source, permalink}) => [source, permalink]),
|
|
379
324
|
);
|
|
380
325
|
}
|
|
381
326
|
|
|
@@ -384,45 +329,59 @@ export default function pluginContentDocs(
|
|
|
384
329
|
sourceToPermalink: getSourceToPermalink(),
|
|
385
330
|
versionsMetadata,
|
|
386
331
|
onBrokenMarkdownLink: (brokenMarkdownLink) => {
|
|
387
|
-
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
reportMessage(
|
|
391
|
-
`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`,
|
|
332
|
+
logger.report(
|
|
392
333
|
siteConfig.onBrokenMarkdownLinks,
|
|
393
|
-
)
|
|
334
|
+
)`Docs markdown link couldn't be resolved: (url=${brokenMarkdownLink.link}) in path=${brokenMarkdownLink.filePath} for version number=${brokenMarkdownLink.contentPaths.versionName}`;
|
|
394
335
|
},
|
|
395
336
|
};
|
|
396
337
|
|
|
397
338
|
function createMDXLoaderRule(): RuleSetRule {
|
|
339
|
+
const contentDirs = versionsMetadata.flatMap(getContentPathList);
|
|
398
340
|
return {
|
|
399
|
-
test:
|
|
400
|
-
include:
|
|
341
|
+
test: /\.mdx?$/i,
|
|
342
|
+
include: contentDirs
|
|
401
343
|
// Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
|
|
402
344
|
.map(addTrailingPathSeparator),
|
|
403
|
-
use:
|
|
345
|
+
use: [
|
|
404
346
|
getJSLoader({isServer}),
|
|
405
347
|
{
|
|
406
348
|
loader: require.resolve('@docusaurus/mdx-loader'),
|
|
407
349
|
options: {
|
|
350
|
+
admonitions: options.admonitions,
|
|
408
351
|
remarkPlugins,
|
|
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
|
-
filePath
|
|
20
|
-
): Promise<
|
|
19
|
+
filePath: string,
|
|
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
|
+
}
|