@docusaurus/plugin-content-docs 2.0.0-beta.fc64c12e4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/categoryGeneratedIndex.d.ts +12 -0
- package/lib/categoryGeneratedIndex.js +37 -0
- package/lib/cli.d.ts +3 -2
- package/lib/cli.js +57 -73
- package/lib/client/docsClientUtils.d.ts +9 -28
- package/lib/client/docsClientUtils.js +34 -43
- package/lib/client/index.d.ts +81 -0
- package/lib/client/index.js +67 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +4 -1
- package/lib/docs.d.ts +33 -6
- package/lib/docs.js +201 -78
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
- package/lib/{docFrontMatter.js → frontMatter.js} +22 -3
- package/lib/globalData.d.ts +3 -3
- package/lib/globalData.js +35 -6
- package/lib/index.d.ts +3 -3
- package/lib/index.js +120 -153
- package/lib/lastUpdate.d.ts +4 -6
- package/lib/lastUpdate.js +22 -26
- package/lib/markdown/index.d.ts +3 -6
- package/lib/markdown/index.js +3 -3
- package/lib/markdown/linkify.d.ts +1 -1
- package/lib/markdown/linkify.js +6 -3
- package/lib/numberPrefix.d.ts +1 -1
- package/lib/numberPrefix.js +16 -21
- package/lib/options.d.ts +3 -5
- package/lib/options.js +34 -26
- package/lib/props.d.ts +7 -2
- package/lib/props.js +84 -13
- package/lib/routes.d.ts +29 -0
- package/lib/routes.js +96 -0
- package/lib/server-export.d.ts +9 -0
- package/lib/server-export.js +25 -0
- package/lib/{sidebarItemsGenerator.d.ts → sidebars/generator.d.ts} +1 -7
- package/lib/sidebars/generator.js +209 -0
- package/lib/sidebars/index.d.ts +13 -0
- package/lib/sidebars/index.js +92 -0
- package/lib/sidebars/normalization.d.ts +13 -0
- package/lib/sidebars/normalization.js +59 -0
- package/lib/sidebars/postProcessor.d.ts +11 -0
- package/lib/sidebars/postProcessor.js +81 -0
- package/lib/sidebars/processor.d.ts +10 -0
- package/lib/sidebars/processor.js +79 -0
- package/lib/sidebars/types.d.ts +183 -0
- package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
- package/lib/sidebars/utils.d.ts +55 -0
- package/lib/sidebars/utils.js +259 -0
- package/lib/sidebars/validation.d.ts +11 -0
- package/lib/sidebars/validation.js +143 -0
- package/lib/slug.d.ts +5 -4
- package/lib/slug.js +28 -18
- package/{src/__tests__/__fixtures__/sidebars/sidebars-first-level-not-category.js → lib/tags.d.ts} +3 -14
- package/lib/tags.js +21 -0
- package/lib/translations.d.ts +3 -3
- package/lib/translations.js +100 -93
- package/lib/types.d.ts +13 -192
- package/lib/versions/files.d.ts +50 -0
- package/lib/versions/files.js +141 -0
- package/lib/versions/index.d.ts +36 -0
- package/lib/versions/index.js +154 -0
- package/lib/versions/validation.d.ts +17 -0
- package/lib/versions/validation.js +71 -0
- package/package.json +44 -30
- package/src/categoryGeneratedIndex.ts +60 -0
- package/src/cli.ts +88 -118
- package/src/client/docsClientUtils.ts +44 -71
- package/src/client/index.ts +158 -0
- package/src/constants.ts +4 -2
- package/src/docs.ts +277 -80
- package/src/frontMatter.ts +63 -0
- package/src/globalData.ts +57 -7
- package/src/index.ts +174 -221
- package/src/lastUpdate.ts +27 -38
- package/src/markdown/index.ts +10 -16
- package/src/markdown/linkify.ts +7 -4
- package/src/numberPrefix.ts +19 -26
- package/src/options.ts +38 -38
- package/src/plugin-content-docs.d.ts +570 -91
- package/src/props.ts +121 -20
- package/src/routes.ts +159 -0
- package/src/server-export.ts +26 -0
- package/src/sidebars/README.md +10 -0
- package/src/sidebars/generator.ts +292 -0
- package/src/sidebars/index.ts +118 -0
- package/src/sidebars/normalization.ts +91 -0
- package/src/sidebars/postProcessor.ts +112 -0
- package/src/sidebars/processor.ts +123 -0
- package/src/sidebars/types.ts +280 -0
- package/src/sidebars/utils.ts +393 -0
- package/src/sidebars/validation.ts +179 -0
- package/src/slug.ts +41 -22
- package/src/tags.ts +20 -0
- package/src/translations.ts +155 -124
- package/src/types.ts +17 -259
- package/src/versions/files.ts +216 -0
- package/src/versions/index.ts +246 -0
- package/src/versions/validation.ts +115 -0
- package/lib/.tsbuildinfo +0 -1
- package/lib/sidebarItemsGenerator.js +0 -215
- package/lib/sidebars.d.ts +0 -45
- package/lib/sidebars.js +0 -354
- package/lib/theme/hooks/useDocs.d.ts +0 -20
- package/lib/theme/hooks/useDocs.js +0 -75
- package/lib/versions.d.ts +0 -16
- package/lib/versions.js +0 -319
- package/src/__tests__/__fixtures__/bad-id-site/docs/invalid-id.md +0 -5
- package/src/__tests__/__fixtures__/bad-slug-on-doc-home-site/docs/docWithSlug.md +0 -5
- package/src/__tests__/__fixtures__/empty-site/docusaurus.config.js +0 -16
- package/src/__tests__/__fixtures__/empty-site/sidebars.json +0 -1
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-shorthand.js +0 -34
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-items.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-category-wrong-label.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-category.js +0 -44
- package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed-first-level.json +0 -20
- package/src/__tests__/__fixtures__/sidebars/sidebars-collapsed.json +0 -21
- package/src/__tests__/__fixtures__/sidebars/sidebars-doc-id-not-string.json +0 -10
- package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-href.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-link-wrong-label.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-link.json +0 -11
- package/src/__tests__/__fixtures__/sidebars/sidebars-unknown-type.json +0 -14
- package/src/__tests__/__fixtures__/sidebars/sidebars-wrong-field.json +0 -20
- package/src/__tests__/__fixtures__/sidebars/sidebars.json +0 -20
- package/src/__tests__/__fixtures__/simple-site/docs/_partials/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/simple-site/docs/_partials/subfolder/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/simple-site/docs/_somePartial.md +0 -3
- package/src/__tests__/__fixtures__/simple-site/docs/foo/bar.md +0 -69
- package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
- package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
- package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
- package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
- package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
- package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
- package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
- package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_partials/subfolder/somePartial.md +0 -3
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/_somePartial.md +0 -3
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
- package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -95
- package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1926
- package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -233
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -484
- package/src/__tests__/cli.test.ts +0 -337
- package/src/__tests__/docFrontMatter.test.ts +0 -244
- package/src/__tests__/docs.test.ts +0 -878
- package/src/__tests__/index.test.ts +0 -1885
- package/src/__tests__/lastUpdate.test.ts +0 -69
- package/src/__tests__/numberPrefix.test.ts +0 -199
- package/src/__tests__/options.test.ts +0 -272
- package/src/__tests__/sidebarItemsGenerator.test.ts +0 -358
- package/src/__tests__/sidebars.test.ts +0 -746
- package/src/__tests__/slug.test.ts +0 -109
- package/src/__tests__/translations.test.ts +0 -158
- package/src/__tests__/versions.test.ts +0 -741
- package/src/client/__tests__/docsClientUtils.test.ts +0 -371
- package/src/docFrontMatter.ts +0 -41
- package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
- package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
- package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
- package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
- package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
- package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
- package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
- package/src/markdown/__tests__/linkify.test.ts +0 -190
- package/src/sidebarItemsGenerator.ts +0 -315
- package/src/sidebars.ts +0 -589
- package/src/theme/hooks/useDocs.ts +0 -103
- package/src/versions.ts +0 -572
- package/tsconfig.json +0 -9
- package/types.d.ts +0 -13
package/src/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,
|
|
21
18
|
createAbsoluteFilePathMatcher,
|
|
19
|
+
createSlugger,
|
|
20
|
+
DEFAULT_PLUGIN_ID,
|
|
22
21
|
} from '@docusaurus/utils';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {readVersionDocs, processDocMetadata} from './docs';
|
|
26
|
-
import {getDocsDirPaths, readVersionsMetadata} from './versions';
|
|
27
|
-
|
|
22
|
+
import {loadSidebars, resolveSidebarPathOption} from './sidebars';
|
|
23
|
+
import {CategoryMetadataFilenamePattern} from './sidebars/generator';
|
|
28
24
|
import {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
VersionMetadata,
|
|
36
|
-
DocNavLink,
|
|
37
|
-
LoadedVersion,
|
|
38
|
-
DocFile,
|
|
39
|
-
DocsMarkdownOption,
|
|
40
|
-
} from './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';
|
|
43
|
+
|
|
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';
|
|
53
62
|
|
|
54
|
-
export default function pluginContentDocs(
|
|
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,28 +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
|
-
sidebarCollapsed: options.sidebarCollapsed,
|
|
104
|
-
sidebarCollapsible: options.sidebarCollapsible,
|
|
105
|
-
});
|
|
106
|
-
});
|
|
102
|
+
.action((version: unknown) =>
|
|
103
|
+
cliDocsVersionCommand(version, options, context),
|
|
104
|
+
);
|
|
107
105
|
},
|
|
108
106
|
|
|
109
|
-
|
|
107
|
+
getTranslationFiles({content}) {
|
|
110
108
|
return getLoadedContentTranslationFiles(content);
|
|
111
109
|
},
|
|
112
110
|
|
|
113
111
|
getPathsToWatch() {
|
|
114
112
|
function getVersionPathsToWatch(version: VersionMetadata): string[] {
|
|
115
113
|
const result = [
|
|
116
|
-
...
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
120
|
-
),
|
|
114
|
+
...options.include.flatMap((pattern) =>
|
|
115
|
+
getContentPathList(version).map(
|
|
116
|
+
(docsDirPath) => `${docsDirPath}/${pattern}`,
|
|
121
117
|
),
|
|
122
118
|
),
|
|
123
119
|
`${version.contentPath}/**/${CategoryMetadataFilenamePattern}`,
|
|
@@ -128,7 +124,7 @@ export default function pluginContentDocs(
|
|
|
128
124
|
return result;
|
|
129
125
|
}
|
|
130
126
|
|
|
131
|
-
return
|
|
127
|
+
return versionsMetadata.flatMap(getVersionPathsToWatch);
|
|
132
128
|
},
|
|
133
129
|
|
|
134
130
|
async loadContent() {
|
|
@@ -146,12 +142,13 @@ export default function pluginContentDocs(
|
|
|
146
142
|
)}".`,
|
|
147
143
|
);
|
|
148
144
|
}
|
|
149
|
-
|
|
145
|
+
function processVersionDoc(docFile: DocFile) {
|
|
150
146
|
return processDocMetadata({
|
|
151
147
|
docFile,
|
|
152
148
|
versionMetadata,
|
|
153
149
|
context,
|
|
154
150
|
options,
|
|
151
|
+
env: process.env.NODE_ENV as DocEnv,
|
|
155
152
|
});
|
|
156
153
|
}
|
|
157
154
|
return Promise.all(docFiles.map(processVersionDoc));
|
|
@@ -160,110 +157,45 @@ export default function pluginContentDocs(
|
|
|
160
157
|
async function doLoadVersion(
|
|
161
158
|
versionMetadata: VersionMetadata,
|
|
162
159
|
): Promise<LoadedVersion> {
|
|
163
|
-
const unprocessedSidebars = loadSidebars(
|
|
164
|
-
versionMetadata.sidebarFilePath,
|
|
165
|
-
{
|
|
166
|
-
sidebarCollapsed: options.sidebarCollapsed,
|
|
167
|
-
sidebarCollapsible: options.sidebarCollapsible,
|
|
168
|
-
},
|
|
169
|
-
);
|
|
170
|
-
|
|
171
160
|
const docsBase: DocMetadataBase[] = await loadVersionDocsBase(
|
|
172
161
|
versionMetadata,
|
|
173
162
|
);
|
|
174
|
-
const docsBaseById: Record<string, DocMetadataBase> = keyBy(
|
|
175
|
-
docsBase,
|
|
176
|
-
(doc) => doc.id,
|
|
177
|
-
);
|
|
178
163
|
|
|
179
|
-
const
|
|
164
|
+
const [drafts, docs] = _.partition(docsBase, (doc) => doc.draft);
|
|
165
|
+
|
|
166
|
+
const sidebars = await loadSidebars(versionMetadata.sidebarFilePath, {
|
|
180
167
|
sidebarItemsGenerator: options.sidebarItemsGenerator,
|
|
181
168
|
numberPrefixParser: options.numberPrefixParser,
|
|
182
|
-
|
|
183
|
-
|
|
169
|
+
docs,
|
|
170
|
+
drafts,
|
|
184
171
|
version: versionMetadata,
|
|
185
|
-
|
|
172
|
+
sidebarOptions: {
|
|
186
173
|
sidebarCollapsed: options.sidebarCollapsed,
|
|
187
174
|
sidebarCollapsible: options.sidebarCollapsible,
|
|
188
175
|
},
|
|
176
|
+
categoryLabelSlugger: createSlugger(),
|
|
189
177
|
});
|
|
190
178
|
|
|
191
179
|
const sidebarsUtils = createSidebarsUtils(sidebars);
|
|
192
180
|
|
|
193
|
-
const validDocIds = Object.keys(docsBaseById);
|
|
194
|
-
sidebarsUtils.checkSidebarsDocIds(
|
|
195
|
-
validDocIds,
|
|
196
|
-
versionMetadata.sidebarFilePath as string,
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
// Add sidebar/next/previous to the docs
|
|
200
|
-
function addNavData(doc: DocMetadataBase): DocMetadata {
|
|
201
|
-
const {
|
|
202
|
-
sidebarName,
|
|
203
|
-
previousId,
|
|
204
|
-
nextId,
|
|
205
|
-
} = sidebarsUtils.getDocNavigation(doc.id);
|
|
206
|
-
const toDocNavLink = (navDocId: string): DocNavLink => {
|
|
207
|
-
const {title, permalink, frontMatter} = docsBaseById[navDocId];
|
|
208
|
-
return {
|
|
209
|
-
title:
|
|
210
|
-
frontMatter.pagination_label ??
|
|
211
|
-
frontMatter.sidebar_label ??
|
|
212
|
-
title,
|
|
213
|
-
permalink,
|
|
214
|
-
};
|
|
215
|
-
};
|
|
216
|
-
return {
|
|
217
|
-
...doc,
|
|
218
|
-
sidebar: sidebarName,
|
|
219
|
-
previous: previousId ? toDocNavLink(previousId) : undefined,
|
|
220
|
-
next: nextId ? toDocNavLink(nextId) : undefined,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
const docs = docsBase.map(addNavData);
|
|
225
|
-
|
|
226
|
-
// sort to ensure consistent output for tests
|
|
227
|
-
docs.sort((a, b) => a.id.localeCompare(b.id));
|
|
228
|
-
|
|
229
|
-
// The "main doc" is the "version entry point"
|
|
230
|
-
// We browse this doc by clicking on a version:
|
|
231
|
-
// - the "home" doc (at '/docs/')
|
|
232
|
-
// - the first doc of the first sidebar
|
|
233
|
-
// - a random doc (if no docs are in any sidebar... edge case)
|
|
234
|
-
function getMainDoc(): DocMetadata {
|
|
235
|
-
const versionHomeDoc = docs.find(
|
|
236
|
-
(doc) =>
|
|
237
|
-
doc.unversionedId === options.homePageId || doc.slug === '/',
|
|
238
|
-
);
|
|
239
|
-
const firstDocIdOfFirstSidebar = sidebarsUtils.getFirstDocIdOfFirstSidebar();
|
|
240
|
-
if (versionHomeDoc) {
|
|
241
|
-
return versionHomeDoc;
|
|
242
|
-
} else if (firstDocIdOfFirstSidebar) {
|
|
243
|
-
return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar)!;
|
|
244
|
-
} else {
|
|
245
|
-
return docs[0];
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
181
|
return {
|
|
250
182
|
...versionMetadata,
|
|
251
|
-
|
|
183
|
+
docs: addDocNavigation(
|
|
184
|
+
docs,
|
|
185
|
+
sidebarsUtils,
|
|
186
|
+
versionMetadata.sidebarFilePath as string,
|
|
187
|
+
),
|
|
188
|
+
drafts,
|
|
252
189
|
sidebars,
|
|
253
|
-
docs: docs.map(addNavData),
|
|
254
190
|
};
|
|
255
191
|
}
|
|
256
192
|
|
|
257
193
|
async function loadVersion(versionMetadata: VersionMetadata) {
|
|
258
194
|
try {
|
|
259
195
|
return await doLoadVersion(versionMetadata);
|
|
260
|
-
} catch (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
`Loading of version failed for version "${versionMetadata.versionName}"`,
|
|
264
|
-
),
|
|
265
|
-
);
|
|
266
|
-
throw e;
|
|
196
|
+
} catch (err) {
|
|
197
|
+
logger.error`Loading of version failed for version name=${versionMetadata.versionName}`;
|
|
198
|
+
throw err;
|
|
267
199
|
}
|
|
268
200
|
}
|
|
269
201
|
|
|
@@ -278,88 +210,101 @@ export default function pluginContentDocs(
|
|
|
278
210
|
|
|
279
211
|
async contentLoaded({content, actions}) {
|
|
280
212
|
const {loadedVersions} = content;
|
|
281
|
-
const {
|
|
213
|
+
const {
|
|
214
|
+
docLayoutComponent,
|
|
215
|
+
docItemComponent,
|
|
216
|
+
docCategoryGeneratedIndexComponent,
|
|
217
|
+
breadcrumbs,
|
|
218
|
+
} = options;
|
|
282
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
|
+
});
|
|
283
231
|
|
|
284
|
-
|
|
285
|
-
docs
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
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),
|
|
294
250
|
);
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
path: metadataItem.permalink,
|
|
298
|
-
component: docItemComponent,
|
|
251
|
+
addRoute({
|
|
252
|
+
path: version.tagsPath,
|
|
299
253
|
exact: true,
|
|
254
|
+
component: options.docTagsListComponent,
|
|
300
255
|
modules: {
|
|
301
|
-
|
|
256
|
+
tags: aliasedSource(tagsPropPath),
|
|
302
257
|
},
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
sidebar: metadataItem.sidebar,
|
|
307
|
-
}),
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
return docRoute;
|
|
311
|
-
}),
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
return routes.sort((a, b) => a.path.localeCompare(b.path));
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
async function doCreateVersionRoutes(
|
|
318
|
-
loadedVersion: LoadedVersion,
|
|
319
|
-
): Promise<void> {
|
|
320
|
-
const versionMetadata = toVersionMetadataProp(pluginId, loadedVersion);
|
|
321
|
-
const versionMetadataPropPath = await createData(
|
|
322
|
-
`${docuHash(
|
|
323
|
-
`version-${loadedVersion.versionName}-metadata-prop`,
|
|
324
|
-
)}.json`,
|
|
325
|
-
JSON.stringify(versionMetadata, null, 2),
|
|
326
|
-
);
|
|
327
|
-
|
|
328
|
-
addRoute({
|
|
329
|
-
path: loadedVersion.versionPath,
|
|
330
|
-
// allow matching /docs/* as well
|
|
331
|
-
exact: false,
|
|
332
|
-
// main docs component (DocPage)
|
|
333
|
-
component: docLayoutComponent,
|
|
334
|
-
// sub-routes for each doc
|
|
335
|
-
routes: await createDocRoutes(loadedVersion.docs),
|
|
336
|
-
modules: {
|
|
337
|
-
versionMetadata: aliasedSource(versionMetadataPropPath),
|
|
338
|
-
},
|
|
339
|
-
priority: loadedVersion.routePriority,
|
|
340
|
-
});
|
|
341
|
-
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
342
261
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
),
|
|
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),
|
|
353
272
|
);
|
|
354
|
-
|
|
273
|
+
addRoute({
|
|
274
|
+
path: tag.permalink,
|
|
275
|
+
component: options.docTagDocListComponent,
|
|
276
|
+
exact: true,
|
|
277
|
+
modules: {
|
|
278
|
+
tag: aliasedSource(tagPropPath),
|
|
279
|
+
},
|
|
280
|
+
});
|
|
355
281
|
}
|
|
282
|
+
|
|
283
|
+
await createTagsListPage();
|
|
284
|
+
await Promise.all(Object.values(versionTags).map(createTagDocListPage));
|
|
356
285
|
}
|
|
357
286
|
|
|
358
|
-
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));
|
|
359
303
|
|
|
360
|
-
setGlobalData
|
|
304
|
+
setGlobalData({
|
|
361
305
|
path: normalizeUrl([baseUrl, options.routeBasePath]),
|
|
362
|
-
versions:
|
|
306
|
+
versions: versions.map(toGlobalDataVersion),
|
|
307
|
+
breadcrumbs,
|
|
363
308
|
});
|
|
364
309
|
},
|
|
365
310
|
|
|
@@ -373,10 +318,9 @@ export default function pluginContentDocs(
|
|
|
373
318
|
} = options;
|
|
374
319
|
|
|
375
320
|
function getSourceToPermalink(): SourceToPermalink {
|
|
376
|
-
const allDocs =
|
|
377
|
-
return
|
|
378
|
-
|
|
379
|
-
(d) => d.permalink,
|
|
321
|
+
const allDocs = content.loadedVersions.flatMap((v) => v.docs);
|
|
322
|
+
return Object.fromEntries(
|
|
323
|
+
allDocs.map(({source, permalink}) => [source, permalink]),
|
|
380
324
|
);
|
|
381
325
|
}
|
|
382
326
|
|
|
@@ -385,33 +329,33 @@ export default function pluginContentDocs(
|
|
|
385
329
|
sourceToPermalink: getSourceToPermalink(),
|
|
386
330
|
versionsMetadata,
|
|
387
331
|
onBrokenMarkdownLink: (brokenMarkdownLink) => {
|
|
388
|
-
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
reportMessage(
|
|
392
|
-
`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`,
|
|
332
|
+
logger.report(
|
|
393
333
|
siteConfig.onBrokenMarkdownLinks,
|
|
394
|
-
)
|
|
334
|
+
)`Docs markdown link couldn't be resolved: (url=${brokenMarkdownLink.link}) in path=${brokenMarkdownLink.filePath} for version number=${brokenMarkdownLink.contentPaths.versionName}`;
|
|
395
335
|
},
|
|
396
336
|
};
|
|
397
337
|
|
|
398
338
|
function createMDXLoaderRule(): RuleSetRule {
|
|
399
|
-
const contentDirs =
|
|
339
|
+
const contentDirs = versionsMetadata.flatMap(getContentPathList);
|
|
400
340
|
return {
|
|
401
|
-
test:
|
|
341
|
+
test: /\.mdx?$/i,
|
|
402
342
|
include: contentDirs
|
|
403
343
|
// Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
|
|
404
344
|
.map(addTrailingPathSeparator),
|
|
405
|
-
use:
|
|
345
|
+
use: [
|
|
406
346
|
getJSLoader({isServer}),
|
|
407
347
|
{
|
|
408
348
|
loader: require.resolve('@docusaurus/mdx-loader'),
|
|
409
349
|
options: {
|
|
350
|
+
admonitions: options.admonitions,
|
|
410
351
|
remarkPlugins,
|
|
411
352
|
rehypePlugins,
|
|
412
353
|
beforeDefaultRehypePlugins,
|
|
413
354
|
beforeDefaultRemarkPlugins,
|
|
414
|
-
|
|
355
|
+
staticDirs: siteConfig.staticDirectories.map((dir) =>
|
|
356
|
+
path.resolve(siteDir, dir),
|
|
357
|
+
),
|
|
358
|
+
siteDir,
|
|
415
359
|
isMDXPartial: createAbsoluteFilePathMatcher(
|
|
416
360
|
options.exclude,
|
|
417
361
|
contentDirs,
|
|
@@ -422,13 +366,22 @@ export default function pluginContentDocs(
|
|
|
422
366
|
const aliasedPath = aliasedSitePath(mdxPath, siteDir);
|
|
423
367
|
return path.join(dataDir, `${docuHash(aliasedPath)}.json`);
|
|
424
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
|
+
}),
|
|
425
378
|
},
|
|
426
379
|
},
|
|
427
380
|
{
|
|
428
381
|
loader: path.resolve(__dirname, './markdown/index.js'),
|
|
429
382
|
options: docsMarkdownOptions,
|
|
430
383
|
},
|
|
431
|
-
]),
|
|
384
|
+
].filter(Boolean),
|
|
432
385
|
};
|
|
433
386
|
}
|
|
434
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
|
+
}
|