@docusaurus/plugin-content-docs 2.0.0-beta.1ec2c95e3 → 2.0.0-beta.21
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 +58 -72
- package/lib/client/docsClientUtils.d.ts +9 -28
- package/lib/client/docsClientUtils.js +34 -43
- package/lib/client/index.d.ts +22 -0
- package/lib/client/index.js +59 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +4 -1
- package/lib/docs.d.ts +32 -3
- package/lib/docs.js +164 -63
- package/{src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docusaurus.config.js → lib/frontMatter.d.ts} +4 -8
- package/lib/{docFrontMatter.js → frontMatter.js} +12 -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 +123 -149
- package/lib/lastUpdate.d.ts +4 -6
- package/lib/lastUpdate.js +22 -26
- package/lib/markdown/index.d.ts +3 -6
- package/lib/markdown/index.js +3 -3
- package/lib/markdown/linkify.d.ts +1 -1
- package/lib/markdown/linkify.js +6 -3
- package/lib/numberPrefix.d.ts +1 -1
- package/lib/numberPrefix.js +16 -21
- package/lib/options.d.ts +3 -5
- package/lib/options.js +54 -13
- package/lib/props.d.ts +7 -2
- package/lib/props.js +70 -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 +55 -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 +178 -0
- package/lib/{docFrontMatter.d.ts → sidebars/types.js} +2 -2
- package/lib/sidebars/utils.d.ts +54 -0
- package/lib/sidebars/utils.js +255 -0
- package/lib/sidebars/validation.d.ts +11 -0
- package/lib/sidebars/validation.js +142 -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 +83 -93
- package/lib/types.d.ts +13 -184
- package/lib/versions/files.d.ts +51 -0
- package/lib/versions/files.js +143 -0
- package/lib/versions/index.d.ts +36 -0
- package/lib/versions/index.js +155 -0
- package/lib/versions/validation.d.ts +17 -0
- package/lib/versions/validation.js +71 -0
- package/package.json +34 -29
- package/src/categoryGeneratedIndex.ts +60 -0
- package/src/cli.ts +85 -114
- package/src/client/docsClientUtils.ts +44 -71
- package/src/client/index.ts +106 -0
- package/src/constants.ts +4 -2
- package/{types.d.ts → src/deps.d.ts} +1 -1
- package/src/docs.ts +228 -65
- package/src/{docFrontMatter.ts → frontMatter.ts} +20 -10
- package/src/globalData.ts +57 -7
- package/src/index.ts +179 -216
- package/src/lastUpdate.ts +26 -37
- package/src/markdown/index.ts +10 -16
- package/src/markdown/linkify.ts +7 -4
- package/src/numberPrefix.ts +19 -26
- package/src/options.ts +59 -18
- package/src/plugin-content-docs.d.ts +642 -89
- package/src/props.ts +103 -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 +85 -0
- package/src/sidebars/postProcessor.ts +112 -0
- package/src/sidebars/processor.ts +123 -0
- package/src/sidebars/types.ts +275 -0
- package/src/sidebars/utils.ts +390 -0
- package/src/sidebars/validation.ts +178 -0
- package/src/slug.ts +41 -22
- package/src/tags.ts +20 -0
- package/src/translations.ts +129 -123
- package/src/types.ts +18 -249
- package/src/versions/files.ts +220 -0
- package/src/versions/index.ts +247 -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 -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/foo/bar.md +0 -69
- package/src/__tests__/__fixtures__/simple-site/docs/foo/baz.md +0 -70
- package/src/__tests__/__fixtures__/simple-site/docs/headingAsTitle.md +0 -1
- package/src/__tests__/__fixtures__/simple-site/docs/hello.md +0 -53
- package/src/__tests__/__fixtures__/simple-site/docs/ipsum.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/lorem.md +0 -6
- package/src/__tests__/__fixtures__/simple-site/docs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/simple-site/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/simple-site/sidebars.json +0 -23
- package/src/__tests__/__fixtures__/simple-site/wrong-sidebars.json +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/0-getting-started.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/1-installation.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/00_api-overview.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/0 --- Client API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/01_Core APIs/1 --- Server API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/0. Plugin API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/1. Theme API.md +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/02_Extension APIs/_category_.yml +0 -1
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/03_api-end.md +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/3-API/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/0-guide2.5.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/02-guide2.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/_category_.json +0 -3
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/a-guide4.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/b-guide5.md +0 -7
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/guide3.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/docs/Guides/z-guide1.md +0 -8
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars.js +0 -23
- package/src/__tests__/__fixtures__/site-with-autogenerated-sidebar/partialAutogeneratedSidebars2.js +0 -16
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-1.md +0 -7
- package/src/__tests__/__fixtures__/site-with-doc-label/docs/hello-2.md +0 -8
- package/src/__tests__/__fixtures__/site-with-doc-label/docusaurus.config.js +0 -14
- package/src/__tests__/__fixtures__/site-with-doc-label/sidebars.json +0 -14
- package/src/__tests__/__fixtures__/versioned-site/community/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_docs/version-1.0.0/team.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/community_versioned_sidebars/version-1.0.0-sidebars.json +0 -3
- package/src/__tests__/__fixtures__/versioned-site/community_versions.json +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/docs/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/docusaurus.config.js +0 -18
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/i18n/en/docusaurus-plugin-content-docs-community/current/team.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/i18n/fr/docusaurus-plugin-content-docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/bar.md +0 -4
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/foo/baz.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.0/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/foo/bar.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-1.0.1/hello.md +0 -1
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootAbsoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootRelativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootResolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/rootTryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/absoluteSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/relativeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/resolvedSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_docs/version-withSlugs/slugs/tryToEscapeSlug.md +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-1.0.1-sidebars.json +0 -10
- package/src/__tests__/__fixtures__/versioned-site/versioned_sidebars/version-withSlugs-sidebars.json +0 -5
- package/src/__tests__/__fixtures__/versioned-site/versions.json +0 -5
- package/src/__tests__/__snapshots__/cli.test.ts.snap +0 -90
- package/src/__tests__/__snapshots__/index.test.ts.snap +0 -1916
- package/src/__tests__/__snapshots__/sidebars.test.ts.snap +0 -218
- package/src/__tests__/__snapshots__/translations.test.ts.snap +0 -487
- package/src/__tests__/cli.test.ts +0 -333
- package/src/__tests__/docFrontMatter.test.ts +0 -244
- package/src/__tests__/docs.test.ts +0 -878
- package/src/__tests__/index.test.ts +0 -1871
- package/src/__tests__/lastUpdate.test.ts +0 -69
- package/src/__tests__/numberPrefix.test.ts +0 -199
- package/src/__tests__/options.test.ts +0 -231
- package/src/__tests__/sidebarItemsGenerator.test.ts +0 -336
- package/src/__tests__/sidebars.test.ts +0 -639
- package/src/__tests__/slug.test.ts +0 -109
- package/src/__tests__/translations.test.ts +0 -159
- package/src/__tests__/versions.test.ts +0 -741
- package/src/client/__tests__/docsClientUtils.test.ts +0 -371
- package/src/markdown/__tests__/__fixtures__/docs/doc-localized.md +0 -1
- package/src/markdown/__tests__/__fixtures__/docs/doc1.md +0 -13
- package/src/markdown/__tests__/__fixtures__/docs/doc2.md +0 -12
- package/src/markdown/__tests__/__fixtures__/docs/doc4.md +0 -19
- package/src/markdown/__tests__/__fixtures__/docs/doc5.md +0 -6
- package/src/markdown/__tests__/__fixtures__/docs/subdir/doc3.md +0 -3
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/doc2.md +0 -7
- package/src/markdown/__tests__/__fixtures__/versioned_docs/version-1.0.0/subdir/doc1.md +0 -3
- package/src/markdown/__tests__/__snapshots__/linkify.test.ts.snap +0 -82
- package/src/markdown/__tests__/linkify.test.ts +0 -190
- package/src/sidebarItemsGenerator.ts +0 -307
- package/src/sidebars.ts +0 -522
- package/src/theme/hooks/useDocs.ts +0 -103
- package/src/versions.ts +0 -572
- package/tsconfig.json +0 -9
package/lib/index.js
CHANGED
|
@@ -9,37 +9,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.validateOptions = void 0;
|
|
10
10
|
const tslib_1 = require("tslib");
|
|
11
11
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
12
|
-
const
|
|
12
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
13
|
+
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
13
14
|
const utils_1 = require("@docusaurus/utils");
|
|
14
15
|
const sidebars_1 = require("./sidebars");
|
|
16
|
+
const generator_1 = require("./sidebars/generator");
|
|
15
17
|
const docs_1 = require("./docs");
|
|
16
18
|
const versions_1 = require("./versions");
|
|
17
19
|
const cli_1 = require("./cli");
|
|
18
|
-
const
|
|
19
|
-
const lodash_1 = require("lodash");
|
|
20
|
+
const constants_1 = require("./constants");
|
|
20
21
|
const globalData_1 = require("./globalData");
|
|
21
22
|
const props_1 = require("./props");
|
|
23
|
+
const categoryGeneratedIndex_1 = require("./categoryGeneratedIndex");
|
|
22
24
|
const translations_1 = require("./translations");
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const tags_1 = require("./tags");
|
|
26
|
+
const routes_1 = require("./routes");
|
|
27
|
+
const utils_2 = require("./sidebars/utils");
|
|
28
|
+
async function pluginContentDocs(context, options) {
|
|
27
29
|
const { siteDir, generatedFilesDir, baseUrl, siteConfig } = context;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
// Mutate options to resolve sidebar path according to siteDir
|
|
31
|
+
options.sidebarPath = (0, sidebars_1.resolveSidebarPathOption)(siteDir, options.sidebarPath);
|
|
32
|
+
const versionsMetadata = await (0, versions_1.readVersionsMetadata)({ context, options });
|
|
33
|
+
const pluginId = options.id;
|
|
30
34
|
const pluginDataDirRoot = path_1.default.join(generatedFilesDir, 'docusaurus-plugin-content-docs');
|
|
31
35
|
const dataDir = path_1.default.join(pluginDataDirRoot, pluginId);
|
|
32
|
-
const aliasedSource = (source) => `~docs/${utils_1.posixPath(path_1.default.relative(pluginDataDirRoot, source))}`;
|
|
36
|
+
const aliasedSource = (source) => `~docs/${(0, utils_1.posixPath)(path_1.default.relative(pluginDataDirRoot, source))}`;
|
|
33
37
|
return {
|
|
34
38
|
name: 'docusaurus-plugin-content-docs',
|
|
35
|
-
getThemePath() {
|
|
36
|
-
return path_1.default.resolve(__dirname, './theme');
|
|
37
|
-
},
|
|
38
|
-
getTypeScriptThemePath() {
|
|
39
|
-
return path_1.default.resolve(__dirname, '..', 'src', 'theme');
|
|
40
|
-
},
|
|
41
39
|
extendCli(cli) {
|
|
42
|
-
const isDefaultPluginId = pluginId ===
|
|
40
|
+
const isDefaultPluginId = pluginId === utils_1.DEFAULT_PLUGIN_ID;
|
|
43
41
|
// Need to create one distinct command per plugin instance
|
|
44
42
|
// otherwise 2 instances would try to execute the command!
|
|
45
43
|
const command = isDefaultPluginId
|
|
@@ -53,126 +51,72 @@ function pluginContentDocs(context, options) {
|
|
|
53
51
|
.arguments('<version>')
|
|
54
52
|
.description(commandDescription)
|
|
55
53
|
.action((version) => {
|
|
56
|
-
cli_1.cliDocsVersionCommand(version,
|
|
57
|
-
path: options.path,
|
|
58
|
-
sidebarPath: options.sidebarPath,
|
|
59
|
-
});
|
|
54
|
+
(0, cli_1.cliDocsVersionCommand)(version, options, context);
|
|
60
55
|
});
|
|
61
56
|
},
|
|
62
|
-
|
|
63
|
-
return translations_1.getLoadedContentTranslationFiles(content);
|
|
64
|
-
},
|
|
65
|
-
getClientModules() {
|
|
66
|
-
const modules = [];
|
|
67
|
-
if (options.admonitions) {
|
|
68
|
-
modules.push(require.resolve('remark-admonitions/styles/infima.css'));
|
|
69
|
-
}
|
|
70
|
-
return modules;
|
|
57
|
+
getTranslationFiles({ content }) {
|
|
58
|
+
return (0, translations_1.getLoadedContentTranslationFiles)(content);
|
|
71
59
|
},
|
|
72
60
|
getPathsToWatch() {
|
|
73
61
|
function getVersionPathsToWatch(version) {
|
|
74
62
|
const result = [
|
|
75
|
-
...
|
|
76
|
-
`${version.contentPath}/**/${
|
|
63
|
+
...options.include.flatMap((pattern) => (0, utils_1.getContentPathList)(version).map((docsDirPath) => `${docsDirPath}/${pattern}`)),
|
|
64
|
+
`${version.contentPath}/**/${generator_1.CategoryMetadataFilenamePattern}`,
|
|
77
65
|
];
|
|
78
66
|
if (typeof version.sidebarFilePath === 'string') {
|
|
79
67
|
result.unshift(version.sidebarFilePath);
|
|
80
68
|
}
|
|
81
69
|
return result;
|
|
82
70
|
}
|
|
83
|
-
return
|
|
71
|
+
return versionsMetadata.flatMap(getVersionPathsToWatch);
|
|
84
72
|
},
|
|
85
73
|
async loadContent() {
|
|
86
74
|
async function loadVersionDocsBase(versionMetadata) {
|
|
87
|
-
const docFiles = await docs_1.readVersionDocs(versionMetadata, options);
|
|
75
|
+
const docFiles = await (0, docs_1.readVersionDocs)(versionMetadata, options);
|
|
88
76
|
if (docFiles.length === 0) {
|
|
89
77
|
throw new Error(`Docs version "${versionMetadata.versionName}" has no docs! At least one doc should exist at "${path_1.default.relative(siteDir, versionMetadata.contentPath)}".`);
|
|
90
78
|
}
|
|
91
|
-
|
|
92
|
-
return docs_1.processDocMetadata({
|
|
79
|
+
function processVersionDoc(docFile) {
|
|
80
|
+
return (0, docs_1.processDocMetadata)({
|
|
93
81
|
docFile,
|
|
94
82
|
versionMetadata,
|
|
95
83
|
context,
|
|
96
84
|
options,
|
|
85
|
+
env: process.env.NODE_ENV,
|
|
97
86
|
});
|
|
98
87
|
}
|
|
99
88
|
return Promise.all(docFiles.map(processVersionDoc));
|
|
100
89
|
}
|
|
101
90
|
async function doLoadVersion(versionMetadata) {
|
|
102
|
-
const unprocessedSidebars = sidebars_1.loadSidebars(versionMetadata.sidebarFilePath);
|
|
103
91
|
const docsBase = await loadVersionDocsBase(versionMetadata);
|
|
104
|
-
const
|
|
105
|
-
const sidebars = await sidebars_1.
|
|
92
|
+
const [drafts, docs] = lodash_1.default.partition(docsBase, (doc) => doc.draft);
|
|
93
|
+
const sidebars = await (0, sidebars_1.loadSidebars)(versionMetadata.sidebarFilePath, {
|
|
106
94
|
sidebarItemsGenerator: options.sidebarItemsGenerator,
|
|
107
95
|
numberPrefixParser: options.numberPrefixParser,
|
|
108
|
-
|
|
109
|
-
|
|
96
|
+
docs,
|
|
97
|
+
drafts,
|
|
110
98
|
version: versionMetadata,
|
|
99
|
+
sidebarOptions: {
|
|
100
|
+
sidebarCollapsed: options.sidebarCollapsed,
|
|
101
|
+
sidebarCollapsible: options.sidebarCollapsible,
|
|
102
|
+
},
|
|
103
|
+
categoryLabelSlugger: (0, utils_1.createSlugger)(),
|
|
111
104
|
});
|
|
112
|
-
const sidebarsUtils =
|
|
113
|
-
const validDocIds = Object.keys(docsBaseById);
|
|
114
|
-
sidebarsUtils.checkSidebarsDocIds(validDocIds, versionMetadata.sidebarFilePath);
|
|
115
|
-
// Add sidebar/next/previous to the docs
|
|
116
|
-
function addNavData(doc) {
|
|
117
|
-
const { sidebarName, previousId, nextId, } = sidebarsUtils.getDocNavigation(doc.id);
|
|
118
|
-
const toDocNavLink = (navDocId) => {
|
|
119
|
-
var _a, _b;
|
|
120
|
-
const { title, permalink, frontMatter } = docsBaseById[navDocId];
|
|
121
|
-
return {
|
|
122
|
-
title: (_b = (_a = frontMatter.pagination_label) !== null && _a !== void 0 ? _a : frontMatter.sidebar_label) !== null && _b !== void 0 ? _b : title,
|
|
123
|
-
permalink,
|
|
124
|
-
};
|
|
125
|
-
};
|
|
126
|
-
return {
|
|
127
|
-
...doc,
|
|
128
|
-
sidebar: sidebarName,
|
|
129
|
-
previous: previousId ? toDocNavLink(previousId) : undefined,
|
|
130
|
-
next: nextId ? toDocNavLink(nextId) : undefined,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
const docs = docsBase.map(addNavData);
|
|
134
|
-
// sort to ensure consistent output for tests
|
|
135
|
-
docs.sort((a, b) => a.id.localeCompare(b.id));
|
|
136
|
-
// TODO really useful? replace with global state logic?
|
|
137
|
-
const permalinkToSidebar = {};
|
|
138
|
-
Object.values(docs).forEach((doc) => {
|
|
139
|
-
if (doc.sidebar) {
|
|
140
|
-
permalinkToSidebar[doc.permalink] = doc.sidebar;
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
// The "main doc" is the "version entry point"
|
|
144
|
-
// We browse this doc by clicking on a version:
|
|
145
|
-
// - the "home" doc (at '/docs/')
|
|
146
|
-
// - the first doc of the first sidebar
|
|
147
|
-
// - a random doc (if no docs are in any sidebar... edge case)
|
|
148
|
-
function getMainDoc() {
|
|
149
|
-
const versionHomeDoc = docs.find((doc) => doc.unversionedId === options.homePageId || doc.slug === '/');
|
|
150
|
-
const firstDocIdOfFirstSidebar = sidebarsUtils.getFirstDocIdOfFirstSidebar();
|
|
151
|
-
if (versionHomeDoc) {
|
|
152
|
-
return versionHomeDoc;
|
|
153
|
-
}
|
|
154
|
-
else if (firstDocIdOfFirstSidebar) {
|
|
155
|
-
return docs.find((doc) => doc.id === firstDocIdOfFirstSidebar);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
return docs[0];
|
|
159
|
-
}
|
|
160
|
-
}
|
|
105
|
+
const sidebarsUtils = (0, utils_2.createSidebarsUtils)(sidebars);
|
|
161
106
|
return {
|
|
162
107
|
...versionMetadata,
|
|
163
|
-
|
|
108
|
+
docs: (0, docs_1.addDocNavigation)(docs, sidebarsUtils, versionMetadata.sidebarFilePath),
|
|
109
|
+
drafts,
|
|
164
110
|
sidebars,
|
|
165
|
-
permalinkToSidebar,
|
|
166
|
-
docs: docs.map(addNavData),
|
|
167
111
|
};
|
|
168
112
|
}
|
|
169
113
|
async function loadVersion(versionMetadata) {
|
|
170
114
|
try {
|
|
171
115
|
return await doLoadVersion(versionMetadata);
|
|
172
116
|
}
|
|
173
|
-
catch (
|
|
174
|
-
|
|
175
|
-
throw
|
|
117
|
+
catch (err) {
|
|
118
|
+
logger_1.default.error `Loading of version failed for version name=${versionMetadata.versionName}`;
|
|
119
|
+
throw err;
|
|
176
120
|
}
|
|
177
121
|
}
|
|
178
122
|
return {
|
|
@@ -180,66 +124,88 @@ function pluginContentDocs(context, options) {
|
|
|
180
124
|
};
|
|
181
125
|
},
|
|
182
126
|
translateContent({ content, translationFiles }) {
|
|
183
|
-
return translations_1.translateLoadedContent(content, translationFiles);
|
|
127
|
+
return (0, translations_1.translateLoadedContent)(content, translationFiles);
|
|
184
128
|
},
|
|
185
129
|
async contentLoaded({ content, actions }) {
|
|
186
130
|
const { loadedVersions } = content;
|
|
187
|
-
const { docLayoutComponent, docItemComponent } = options;
|
|
131
|
+
const { docLayoutComponent, docItemComponent, docCategoryGeneratedIndexComponent, breadcrumbs, } = options;
|
|
188
132
|
const { addRoute, createData, setGlobalData } = actions;
|
|
189
|
-
const
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
133
|
+
const versions = loadedVersions.map((version) => {
|
|
134
|
+
const sidebarsUtils = (0, utils_2.createSidebarsUtils)(version.sidebars);
|
|
135
|
+
return {
|
|
136
|
+
...version,
|
|
137
|
+
sidebarsUtils,
|
|
138
|
+
categoryGeneratedIndices: (0, categoryGeneratedIndex_1.getCategoryGeneratedIndexMetadataList)({
|
|
139
|
+
docs: version.docs,
|
|
140
|
+
sidebarsUtils,
|
|
141
|
+
}),
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
async function createVersionTagsRoutes(version) {
|
|
145
|
+
const versionTags = (0, tags_1.getVersionTags)(version.docs);
|
|
146
|
+
// TODO tags should be a sub route of the version route
|
|
147
|
+
async function createTagsListPage() {
|
|
148
|
+
const tagsProp = Object.values(versionTags).map((tagValue) => ({
|
|
149
|
+
label: tagValue.label,
|
|
150
|
+
permalink: tagValue.permalink,
|
|
151
|
+
count: tagValue.docIds.length,
|
|
152
|
+
}));
|
|
153
|
+
// Only create /tags page if there are tags.
|
|
154
|
+
if (tagsProp.length > 0) {
|
|
155
|
+
const tagsPropPath = await createData(`${(0, utils_1.docuHash)(`tags-list-${version.versionName}-prop`)}.json`, JSON.stringify(tagsProp, null, 2));
|
|
156
|
+
addRoute({
|
|
157
|
+
path: version.tagsPath,
|
|
158
|
+
exact: true,
|
|
159
|
+
component: options.docTagsListComponent,
|
|
160
|
+
modules: {
|
|
161
|
+
tags: aliasedSource(tagsPropPath),
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// TODO tags should be a sub route of the version route
|
|
167
|
+
async function createTagDocListPage(tag) {
|
|
168
|
+
const tagProps = (0, props_1.toTagDocListProp)({
|
|
169
|
+
allTagsPath: version.tagsPath,
|
|
170
|
+
tag,
|
|
171
|
+
docs: version.docs,
|
|
172
|
+
});
|
|
173
|
+
const tagPropPath = await createData(`${(0, utils_1.docuHash)(`tag-${tag.permalink}`)}.json`, JSON.stringify(tagProps, null, 2));
|
|
174
|
+
addRoute({
|
|
175
|
+
path: tag.permalink,
|
|
176
|
+
component: options.docTagDocListComponent,
|
|
198
177
|
exact: true,
|
|
199
178
|
modules: {
|
|
200
|
-
|
|
179
|
+
tag: aliasedSource(tagPropPath),
|
|
201
180
|
},
|
|
202
|
-
};
|
|
203
|
-
}));
|
|
204
|
-
return routes.sort((a, b) => a.path.localeCompare(b.path));
|
|
205
|
-
};
|
|
206
|
-
async function doCreateVersionRoutes(loadedVersion) {
|
|
207
|
-
const versionMetadataPropPath = await createData(`${utils_1.docuHash(`version-${loadedVersion.versionName}-metadata-prop`)}.json`, JSON.stringify(props_1.toVersionMetadataProp(pluginId, loadedVersion), null, 2));
|
|
208
|
-
addRoute({
|
|
209
|
-
path: loadedVersion.versionPath,
|
|
210
|
-
// allow matching /docs/* as well
|
|
211
|
-
exact: false,
|
|
212
|
-
// main docs component (DocPage)
|
|
213
|
-
component: docLayoutComponent,
|
|
214
|
-
// sub-routes for each doc
|
|
215
|
-
routes: await createDocRoutes(loadedVersion.docs),
|
|
216
|
-
modules: {
|
|
217
|
-
versionMetadata: aliasedSource(versionMetadataPropPath),
|
|
218
|
-
},
|
|
219
|
-
priority: loadedVersion.routePriority,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
async function createVersionRoutes(loadedVersion) {
|
|
223
|
-
try {
|
|
224
|
-
return await doCreateVersionRoutes(loadedVersion);
|
|
225
|
-
}
|
|
226
|
-
catch (e) {
|
|
227
|
-
console.error(chalk_1.default.red(`Can't create version routes for version "${loadedVersion.versionName}"`));
|
|
228
|
-
throw e;
|
|
181
|
+
});
|
|
229
182
|
}
|
|
183
|
+
await createTagsListPage();
|
|
184
|
+
await Promise.all(Object.values(versionTags).map(createTagDocListPage));
|
|
230
185
|
}
|
|
231
|
-
await Promise.all(
|
|
186
|
+
await Promise.all(versions.map((version) => (0, routes_1.createVersionRoutes)({
|
|
187
|
+
version,
|
|
188
|
+
docItemComponent,
|
|
189
|
+
docLayoutComponent,
|
|
190
|
+
docCategoryGeneratedIndexComponent,
|
|
191
|
+
pluginId,
|
|
192
|
+
aliasedSource,
|
|
193
|
+
actions,
|
|
194
|
+
})));
|
|
195
|
+
// TODO tags should be a sub route of the version route
|
|
196
|
+
await Promise.all(versions.map(createVersionTagsRoutes));
|
|
232
197
|
setGlobalData({
|
|
233
|
-
path: utils_1.normalizeUrl([baseUrl, options.routeBasePath]),
|
|
234
|
-
versions:
|
|
198
|
+
path: (0, utils_1.normalizeUrl)([baseUrl, options.routeBasePath]),
|
|
199
|
+
versions: versions.map(globalData_1.toGlobalDataVersion),
|
|
200
|
+
breadcrumbs,
|
|
235
201
|
});
|
|
236
202
|
},
|
|
237
203
|
configureWebpack(_config, isServer, utils, content) {
|
|
238
204
|
const { getJSLoader } = utils;
|
|
239
205
|
const { rehypePlugins, remarkPlugins, beforeDefaultRehypePlugins, beforeDefaultRemarkPlugins, } = options;
|
|
240
206
|
function getSourceToPermalink() {
|
|
241
|
-
const allDocs =
|
|
242
|
-
return
|
|
207
|
+
const allDocs = content.loadedVersions.flatMap((v) => v.docs);
|
|
208
|
+
return Object.fromEntries(allDocs.map(({ source, permalink }) => [source, permalink]));
|
|
243
209
|
}
|
|
244
210
|
const docsMarkdownOptions = {
|
|
245
211
|
siteDir,
|
|
@@ -249,16 +215,17 @@ function pluginContentDocs(context, options) {
|
|
|
249
215
|
if (siteConfig.onBrokenMarkdownLinks === 'ignore') {
|
|
250
216
|
return;
|
|
251
217
|
}
|
|
252
|
-
utils_1.reportMessage(`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`, siteConfig.onBrokenMarkdownLinks);
|
|
218
|
+
(0, utils_1.reportMessage)(`Docs markdown link couldn't be resolved: (${brokenMarkdownLink.link}) in ${brokenMarkdownLink.filePath} for version ${brokenMarkdownLink.contentPaths.versionName}`, siteConfig.onBrokenMarkdownLinks);
|
|
253
219
|
},
|
|
254
220
|
};
|
|
255
221
|
function createMDXLoaderRule() {
|
|
222
|
+
const contentDirs = versionsMetadata.flatMap(utils_1.getContentPathList);
|
|
256
223
|
return {
|
|
257
|
-
test:
|
|
258
|
-
include:
|
|
224
|
+
test: /\.mdx?$/i,
|
|
225
|
+
include: contentDirs
|
|
259
226
|
// Trailing slash is important, see https://github.com/facebook/docusaurus/pull/3970
|
|
260
227
|
.map(utils_1.addTrailingPathSeparator),
|
|
261
|
-
use:
|
|
228
|
+
use: [
|
|
262
229
|
getJSLoader({ isServer }),
|
|
263
230
|
{
|
|
264
231
|
loader: require.resolve('@docusaurus/mdx-loader'),
|
|
@@ -267,27 +234,34 @@ function pluginContentDocs(context, options) {
|
|
|
267
234
|
rehypePlugins,
|
|
268
235
|
beforeDefaultRehypePlugins,
|
|
269
236
|
beforeDefaultRemarkPlugins,
|
|
270
|
-
|
|
237
|
+
staticDirs: siteConfig.staticDirectories.map((dir) => path_1.default.resolve(siteDir, dir)),
|
|
238
|
+
siteDir,
|
|
239
|
+
isMDXPartial: (0, utils_1.createAbsoluteFilePathMatcher)(options.exclude, contentDirs),
|
|
271
240
|
metadataPath: (mdxPath) => {
|
|
272
241
|
// Note that metadataPath must be the same/in-sync as
|
|
273
242
|
// the path from createData for each MDX.
|
|
274
|
-
const aliasedPath = utils_1.aliasedSitePath(mdxPath, siteDir);
|
|
275
|
-
return path_1.default.join(dataDir, `${utils_1.docuHash(aliasedPath)}.json`);
|
|
243
|
+
const aliasedPath = (0, utils_1.aliasedSitePath)(mdxPath, siteDir);
|
|
244
|
+
return path_1.default.join(dataDir, `${(0, utils_1.docuHash)(aliasedPath)}.json`);
|
|
276
245
|
},
|
|
246
|
+
// Assets allow to convert some relative images paths to
|
|
247
|
+
// require(...) calls
|
|
248
|
+
createAssets: ({ frontMatter, }) => ({
|
|
249
|
+
image: frontMatter.image,
|
|
250
|
+
}),
|
|
277
251
|
},
|
|
278
252
|
},
|
|
279
253
|
{
|
|
280
254
|
loader: path_1.default.resolve(__dirname, './markdown/index.js'),
|
|
281
255
|
options: docsMarkdownOptions,
|
|
282
256
|
},
|
|
283
|
-
]),
|
|
257
|
+
].filter(Boolean),
|
|
284
258
|
};
|
|
285
259
|
}
|
|
286
260
|
return {
|
|
287
261
|
ignoreWarnings: [
|
|
288
262
|
// Suppress warnings about non-existing of versions file.
|
|
289
263
|
(e) => e.message.includes("Can't resolve") &&
|
|
290
|
-
e.message.includes(
|
|
264
|
+
e.message.includes(constants_1.VERSIONS_JSON_FILE),
|
|
291
265
|
],
|
|
292
266
|
resolve: {
|
|
293
267
|
alias: {
|
package/lib/lastUpdate.d.ts
CHANGED
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
declare
|
|
8
|
-
timestamp
|
|
9
|
-
author
|
|
10
|
-
}
|
|
11
|
-
export declare function getFileLastUpdate(filePath?: string): Promise<FileLastUpdateData | null>;
|
|
12
|
-
export {};
|
|
7
|
+
export declare function getFileLastUpdate(filePath?: string): Promise<{
|
|
8
|
+
timestamp: number;
|
|
9
|
+
author: string;
|
|
10
|
+
} | null>;
|
package/lib/lastUpdate.js
CHANGED
|
@@ -8,44 +8,40 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.getFileLastUpdate = void 0;
|
|
10
10
|
const tslib_1 = require("tslib");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
14
|
-
const GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX = /^(\d+), (.+)$/;
|
|
11
|
+
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
12
|
+
const utils_1 = require("@docusaurus/utils");
|
|
15
13
|
let showedGitRequirementError = false;
|
|
14
|
+
let showedFileNotTrackedError = false;
|
|
16
15
|
async function getFileLastUpdate(filePath) {
|
|
17
16
|
if (!filePath) {
|
|
18
17
|
return null;
|
|
19
18
|
}
|
|
20
|
-
function getTimestampAndAuthor(str) {
|
|
21
|
-
if (!str) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const temp = str.match(GIT_COMMIT_TIMESTAMP_AUTHOR_REGEX);
|
|
25
|
-
return !temp || temp.length < 3
|
|
26
|
-
? null
|
|
27
|
-
: { timestamp: +temp[1], author: temp[2] };
|
|
28
|
-
}
|
|
29
19
|
// Wrap in try/catch in case the shell commands fail
|
|
30
20
|
// (e.g. project doesn't use Git, etc).
|
|
31
21
|
try {
|
|
32
|
-
|
|
22
|
+
const result = (0, utils_1.getFileCommitDate)(filePath, {
|
|
23
|
+
age: 'newest',
|
|
24
|
+
includeAuthor: true,
|
|
25
|
+
});
|
|
26
|
+
return { timestamp: result.timestamp, author: result.author };
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err instanceof utils_1.GitNotFoundError) {
|
|
33
30
|
if (!showedGitRequirementError) {
|
|
31
|
+
logger_1.default.warn('Sorry, the docs plugin last update options require Git.');
|
|
34
32
|
showedGitRequirementError = true;
|
|
35
|
-
console.warn('Sorry, the docs plugin last update options require Git.');
|
|
36
33
|
}
|
|
37
|
-
return null;
|
|
38
34
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
else if (err instanceof utils_1.FileNotTrackedError) {
|
|
36
|
+
if (!showedFileNotTrackedError) {
|
|
37
|
+
logger_1.default.warn('Cannot infer the update date for some files, as they are not tracked by git.');
|
|
38
|
+
showedFileNotTrackedError = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logger_1.default.warn(err);
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
48
45
|
}
|
|
49
|
-
return null;
|
|
50
46
|
}
|
|
51
47
|
exports.getFileLastUpdate = getFileLastUpdate;
|
package/lib/markdown/index.d.ts
CHANGED
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
declare const markdownLoader: Loader;
|
|
12
|
-
export default markdownLoader;
|
|
7
|
+
import type { DocsMarkdownOption } from '../types';
|
|
8
|
+
import type { LoaderContext } from 'webpack';
|
|
9
|
+
export default function markdownLoader(this: LoaderContext<DocsMarkdownOption>, source: string): void;
|
package/lib/markdown/index.js
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
const linkify_1 = require("./linkify");
|
|
10
|
-
|
|
10
|
+
function markdownLoader(source) {
|
|
11
11
|
const fileString = source;
|
|
12
12
|
const callback = this.async();
|
|
13
13
|
const options = this.getOptions();
|
|
14
|
-
return
|
|
15
|
-
}
|
|
14
|
+
return callback(null, (0, linkify_1.linkify)(fileString, this.resourcePath, options));
|
|
15
|
+
}
|
|
16
16
|
exports.default = markdownLoader;
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import { DocsMarkdownOption } from '../types';
|
|
7
|
+
import type { DocsMarkdownOption } from '../types';
|
|
8
8
|
export declare function linkify(fileString: string, filePath: string, options: DocsMarkdownOption): string;
|
package/lib/markdown/linkify.js
CHANGED
|
@@ -7,10 +7,13 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.linkify = void 0;
|
|
10
|
-
const versions_1 = require("../versions");
|
|
11
10
|
const utils_1 = require("@docusaurus/utils");
|
|
12
11
|
function getVersion(filePath, options) {
|
|
13
|
-
const versionFound = options.versionsMetadata.find((version) =>
|
|
12
|
+
const versionFound = options.versionsMetadata.find((version) => (0, utils_1.getContentPathList)(version).some((docsDirPath) => filePath.startsWith(docsDirPath)));
|
|
13
|
+
// At this point, this should never happen, because the MDX loaders' paths are
|
|
14
|
+
// literally using the version content paths; but if we allow sourcing content
|
|
15
|
+
// from outside the docs directory (through the `include` option, for example;
|
|
16
|
+
// is there a compelling use-case?), this would actually be testable
|
|
14
17
|
if (!versionFound) {
|
|
15
18
|
throw new Error(`Unexpected error: Markdown file at "${filePath}" does not belong to any docs version!`);
|
|
16
19
|
}
|
|
@@ -18,7 +21,7 @@ function getVersion(filePath, options) {
|
|
|
18
21
|
}
|
|
19
22
|
function linkify(fileString, filePath, options) {
|
|
20
23
|
const { siteDir, sourceToPermalink, onBrokenMarkdownLink } = options;
|
|
21
|
-
const { newContent, brokenMarkdownLinks } = utils_1.replaceMarkdownLinks({
|
|
24
|
+
const { newContent, brokenMarkdownLinks } = (0, utils_1.replaceMarkdownLinks)({
|
|
22
25
|
siteDir,
|
|
23
26
|
fileString,
|
|
24
27
|
filePath,
|
package/lib/numberPrefix.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import { NumberPrefixParser } from '
|
|
7
|
+
import type { NumberPrefixParser } from '@docusaurus/plugin-content-docs';
|
|
8
8
|
export declare const DefaultNumberPrefixParser: NumberPrefixParser;
|
|
9
9
|
export declare const DisabledNumberPrefixParser: NumberPrefixParser;
|
|
10
10
|
export declare function stripNumberPrefix(str: string, parser: NumberPrefixParser): string;
|
package/lib/numberPrefix.js
CHANGED
|
@@ -8,33 +8,28 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.stripPathNumberPrefixes = exports.stripNumberPrefix = exports.DisabledNumberPrefixParser = exports.DefaultNumberPrefixParser = void 0;
|
|
10
10
|
// Best-effort to avoid parsing some patterns as number prefix
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
})();
|
|
21
|
-
const NumberPrefixRegex = /^(?<numberPrefix>\d+)(?<separator>\s*[-_.]+\s*)(?<suffix>.*)$/;
|
|
11
|
+
// ignore common date-like patterns: https://github.com/facebook/docusaurus/issues/4640
|
|
12
|
+
// ignore common versioning patterns: https://github.com/facebook/docusaurus/issues/4653
|
|
13
|
+
// Both of them would look like 7.0-foo or 2021-11-foo
|
|
14
|
+
// note: we could try to parse float numbers in filenames, but that is probably
|
|
15
|
+
// not worth it, as a version such as "8.0" can be interpreted as either a
|
|
16
|
+
// version or a float. User can configure her own NumberPrefixParser if she
|
|
17
|
+
// wants 8.0 to be interpreted as a float
|
|
18
|
+
const ignoredPrefixPattern = /^\d+[-_.]\d+/;
|
|
19
|
+
const numberPrefixPattern = /^(?<numberPrefix>\d+)\s*[-_.]+\s*(?<suffix>[^-_.\s].*)$/;
|
|
22
20
|
// 0-myDoc => {filename: myDoc, numberPrefix: 0}
|
|
23
21
|
// 003 - myDoc => {filename: myDoc, numberPrefix: 3}
|
|
24
22
|
const DefaultNumberPrefixParser = (filename) => {
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
if (ignoredPrefixPattern.test(filename)) {
|
|
24
|
+
return { filename, numberPrefix: undefined };
|
|
25
|
+
}
|
|
26
|
+
const match = numberPrefixPattern.exec(filename);
|
|
27
|
+
if (!match) {
|
|
27
28
|
return { filename, numberPrefix: undefined };
|
|
28
29
|
}
|
|
29
|
-
const match = NumberPrefixRegex.exec(filename);
|
|
30
|
-
const cleanFileName = (_b = (_a = match === null || match === void 0 ? void 0 : match.groups) === null || _a === void 0 ? void 0 : _a.suffix) !== null && _b !== void 0 ? _b : filename;
|
|
31
|
-
const numberPrefixString = (_c = match === null || match === void 0 ? void 0 : match.groups) === null || _c === void 0 ? void 0 : _c.numberPrefix;
|
|
32
|
-
const numberPrefix = numberPrefixString
|
|
33
|
-
? parseInt(numberPrefixString, 10)
|
|
34
|
-
: undefined;
|
|
35
30
|
return {
|
|
36
|
-
filename:
|
|
37
|
-
numberPrefix,
|
|
31
|
+
filename: match.groups.suffix,
|
|
32
|
+
numberPrefix: parseInt(match.groups.numberPrefix, 10),
|
|
38
33
|
};
|
|
39
34
|
};
|
|
40
35
|
exports.DefaultNumberPrefixParser = DefaultNumberPrefixParser;
|
package/lib/options.d.ts
CHANGED
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { OptionValidationContext, ValidationResult } from '@docusaurus/types';
|
|
7
|
+
import type { OptionValidationContext } from '@docusaurus/types';
|
|
8
|
+
import type { PluginOptions, Options } from '@docusaurus/plugin-content-docs';
|
|
10
9
|
export declare const DEFAULT_OPTIONS: Omit<PluginOptions, 'id' | 'sidebarPath'>;
|
|
11
|
-
export declare
|
|
12
|
-
export declare function validateOptions({ validate, options, }: OptionValidationContext<PluginOptions>): ValidationResult<PluginOptions>;
|
|
10
|
+
export declare function validateOptions({ validate, options: userOptions, }: OptionValidationContext<Options, PluginOptions>): PluginOptions;
|