feat(v2): createData plugin API (#1400)

* feat(v2): createModule plugin api

* remove unused stuff

* address review, createModule -> createData

* link.link -> link.url

* remove youtube page

* update yarn.lock
This commit is contained in:
Endilie Yacop Sucipto 2019-04-27 14:13:53 +07:00 committed by GitHub
parent 195e934858
commit b3cf9c62d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 164 additions and 349 deletions

View file

@ -8,15 +8,18 @@
const globby = require('globby');
const importFresh = require('import-fresh');
const path = require('path');
const {getSubFolder, idx, normalizeUrl} = require('@docusaurus/utils');
const {
getSubFolder,
idx,
normalizeUrl,
docuHash,
} = require('@docusaurus/utils');
const createOrder = require('./order');
const loadSidebars = require('./sidebars');
const processMetadata = require('./metadata');
const DEFAULT_OPTIONS = {
metadataKey: 'docsMetadata',
metadataFileName: 'docsMetadata.json',
path: 'docs', // Path to data on filesystem, relative to site dir.
routeBasePath: 'docs', // URL Route.
include: ['**/*.md', '**/*.mdx'], // Extensions to include.
@ -182,21 +185,26 @@ class DocusaurusPluginContentDocs {
}
});
// Create source to metadata mapping.
const sourceToMetadata = {};
Object.values(docs).forEach(({source, version, permalink, language}) => {
sourceToMetadata[source] = {
version,
permalink,
language,
};
});
const permalinkToId = {};
Object.values(docs).forEach(
({id, source, version, permalink, language}) => {
sourceToMetadata[source] = {
version,
permalink,
language,
};
permalinkToId[permalink] = id;
},
);
this.content = {
docs,
docsDir,
docsSidebars,
sourceToMetadata,
permalinkToId,
translatedDir,
versionedDir,
};
@ -206,20 +214,38 @@ class DocusaurusPluginContentDocs {
async contentLoaded({content, actions}) {
const {docLayoutComponent, docItemComponent, routeBasePath} = this.options;
const {addRoute} = actions;
const {addRoute, createData} = actions;
const routes = await Promise.all(
Object.values(content.docs).map(async metadataItem => {
const metadataPath = await createData(
`${docuHash(metadataItem.permalink)}.json`,
JSON.stringify(metadataItem, null, 2),
);
return {
path: metadataItem.permalink,
component: docItemComponent,
exact: true,
modules: {
content: metadataItem.source,
metadata: metadataPath,
},
};
}),
);
const docsMetadataPath = await createData(
`docsMetadata.json`,
JSON.stringify(content, null, 2),
);
addRoute({
path: normalizeUrl([this.context.siteConfig.baseUrl, routeBasePath]),
component: docLayoutComponent,
routes: Object.values(content.docs).map(metadataItem => ({
path: metadataItem.permalink,
component: docItemComponent,
exact: true,
metadata: metadataItem,
modules: {
content: metadataItem.source,
},
})),
routes,
modules: {
docsMetadata: docsMetadataPath,
},
});
}