refactor(v2): add typing for pages plugin (#1813)

* refactor(v2): add typing for pages plugin

* misc: new lines
This commit is contained in:
Yangshun Tay 2019-10-07 22:35:58 -07:00 committed by GitHub
parent 95f0552bad
commit c4cc7f881b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 70 additions and 22 deletions

View file

@ -15,3 +15,4 @@ packages/docusaurus/lib/
packages/docusaurus-init/lib/ packages/docusaurus-init/lib/
packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-blog/lib/
packages/docusaurus-plugin-content-docs-legacy/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/
packages/docusaurus-plugin-content-pages/lib/

1
.gitignore vendored
View file

@ -17,3 +17,4 @@ packages/docusaurus/lib/
packages/docusaurus-init/lib/ packages/docusaurus-init/lib/
packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-blog/lib/
packages/docusaurus-plugin-content-docs-legacy/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/
packages/docusaurus-plugin-content-pages/lib/

View file

@ -7,3 +7,4 @@ packages/docusaurus/lib/
packages/docusaurus-init/lib/ packages/docusaurus-init/lib/
packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-blog/lib/
packages/docusaurus-plugin-content-docs-legacy/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/
packages/docusaurus-plugin-content-pages/lib/

View file

@ -19,6 +19,7 @@ module.exports = {
'/packages/docusaurus-utils/lib', '/packages/docusaurus-utils/lib',
'/packages/docusaurus-plugin-content-blog/lib', '/packages/docusaurus-plugin-content-blog/lib',
'/packages/docusaurus-plugin-content-docs-legacy/lib', '/packages/docusaurus-plugin-content-docs-legacy/lib',
'/packages/docusaurus-plugin-content-pages/lib',
], ],
transform: { transform: {
'^.+\\.[jt]sx?$': 'babel-jest', '^.+\\.[jt]sx?$': 'babel-jest',

View file

@ -6,6 +6,7 @@
*/ */
import path from 'path'; import path from 'path';
import pluginContentDocs from '../index'; import pluginContentDocs from '../index';
import {LoadContext} from '@docusaurus/types'; import {LoadContext} from '@docusaurus/types';
@ -24,7 +25,7 @@ describe('loadDocs', () => {
const sidebarPath = path.join(siteDir, 'sidebars.json'); const sidebarPath = path.join(siteDir, 'sidebars.json');
const pluginPath = 'docs'; const pluginPath = 'docs';
const plugin = pluginContentDocs(context, { const plugin = pluginContentDocs(context, {
path: 'docs', path: pluginPath,
sidebarPath, sidebarPath,
}); });
const {docs: docsMetadata} = await plugin.loadContent(); const {docs: docsMetadata} = await plugin.loadContent();
@ -38,7 +39,7 @@ describe('loadDocs', () => {
sidebar: 'docs', sidebar: 'docs',
source: path.join('@site', pluginPath, 'hello.md'), source: path.join('@site', pluginPath, 'hello.md'),
title: 'Hello, World !', title: 'Hello, World !',
description: `Hi, Endilie here :)`, description: 'Hi, Endilie here :)',
}); });
expect(docsMetadata['foo/bar']).toEqual({ expect(docsMetadata['foo/bar']).toEqual({

View file

@ -9,11 +9,11 @@ import globby from 'globby';
import fs from 'fs-extra'; import fs from 'fs-extra';
import path from 'path'; import path from 'path';
import {idx, normalizeUrl, docuHash} from '@docusaurus/utils'; import {idx, normalizeUrl, docuHash} from '@docusaurus/utils';
import {LoadContext, Plugin, DocusaurusConfig} from '@docusaurus/types';
import createOrder from './order'; import createOrder from './order';
import loadSidebars from './sidebars'; import loadSidebars from './sidebars';
import processMetadata from './metadata'; import processMetadata from './metadata';
import {LoadContext, Plugin, DocusaurusConfig} from '@docusaurus/types';
import { import {
PluginOptions, PluginOptions,
Sidebar, Sidebar,
@ -46,7 +46,7 @@ export default function pluginContentDocs(
let sourceToPermalink: SourceToPermalink = {}; let sourceToPermalink: SourceToPermalink = {};
return { return {
name: 'docusaurus-plugin-content-docs', name: 'docusaurus-plugin-content-docs-legacy',
getPathsToWatch() { getPathsToWatch() {
const {include = []} = options; const {include = []} = options;
@ -66,7 +66,7 @@ export default function pluginContentDocs(
const docsSidebars: Sidebar = loadSidebars(sidebarPath); const docsSidebars: Sidebar = loadSidebars(sidebarPath);
// Build the docs ordering such as next, previous, category and sidebar // Build the docs ordering such as next, previous, category and sidebar.
const order: Order = createOrder(docsSidebars); const order: Order = createOrder(docsSidebars);
// Prepare metadata container. // Prepare metadata container.

View file

@ -4,6 +4,7 @@
* This source code is licensed under the MIT license found in the * This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
export interface PluginOptions { export interface PluginOptions {
path: string; path: string;
routeBasePath: string; routeBasePath: string;
@ -42,6 +43,7 @@ export type SidebarItem =
| SidebarItemDoc | SidebarItemDoc
| SidebarItemLink | SidebarItemLink
| SidebarItemCategory; | SidebarItemCategory;
export type SidebarItemRaw = export type SidebarItemRaw =
| string | string
| SidebarItemDoc | SidebarItemDoc

View file

@ -4,6 +4,6 @@
"incremental": true, "incremental": true,
"tsBuildInfoFile": "./lib/.tsbuildinfo", "tsBuildInfoFile": "./lib/.tsbuildinfo",
"rootDir": "src", "rootDir": "src",
"outDir": "lib", "outDir": "lib"
} }
} }

View file

@ -2,12 +2,16 @@
"name": "@docusaurus/plugin-content-pages", "name": "@docusaurus/plugin-content-pages",
"version": "2.0.0-alpha.25", "version": "2.0.0-alpha.25",
"description": "Pages content plugin for Docusaurus", "description": "Pages content plugin for Docusaurus",
"main": "src/index.js", "main": "lib/index.js",
"scripts": {
"tsc": "tsc"
},
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@docusaurus/types": "^2.0.0-alpha.25",
"@docusaurus/utils": "^2.0.0-alpha.25", "@docusaurus/utils": "^2.0.0-alpha.25",
"globby": "^10.0.1" "globby": "^10.0.1"
}, },

View file

@ -8,29 +8,34 @@
import path from 'path'; import path from 'path';
import pluginContentPages from '../index'; import pluginContentPages from '../index';
import {LoadContext} from '@docusaurus/types';
describe('docusaurus-plugin-content-pages', () => { describe('docusaurus-plugin-content-pages', () => {
test('simple pages', async () => { test('simple pages', async () => {
const siteDir = path.join(__dirname, '__fixtures__', 'website');
const siteConfig = { const siteConfig = {
title: 'Hello', title: 'Hello',
baseUrl: '/', baseUrl: '/',
url: 'https://docusaurus.io', url: 'https://docusaurus.io',
}; };
const siteDir = path.join(__dirname, '__fixtures__', 'website'); const context = {
const plugin = pluginContentPages({
siteDir, siteDir,
siteConfig, siteConfig,
} as LoadContext;
const pluginPath = 'src/pages';
const plugin = pluginContentPages(context, {
path: pluginPath,
}); });
const pagesMetadatas = await plugin.loadContent(); const pagesMetadatas = await plugin.loadContent();
const pagesPath = path.relative(siteDir, plugin.contentPath);
expect(pagesMetadatas).toEqual([ expect(pagesMetadatas).toEqual([
{ {
permalink: '/', permalink: '/',
source: path.join('@site', pagesPath, 'index.js'), source: path.join('@site', pluginPath, 'index.js'),
}, },
{ {
permalink: '/hello/world', permalink: '/hello/world',
source: path.join('@site', pagesPath, 'hello', 'world.js'), source: path.join('@site', pluginPath, 'hello', 'world.js'),
}, },
]); ]);
}); });

View file

@ -5,26 +5,30 @@
* LICENSE file in the root directory of this source tree. * LICENSE file in the root directory of this source tree.
*/ */
const globby = require('globby'); import globby from 'globby';
const path = require('path'); import fs from 'fs';
const fs = require('fs'); import path from 'path';
const {encodePath, fileToPath} = require('@docusaurus/utils'); import {encodePath, fileToPath} from '@docusaurus/utils';
import {LoadContext, Plugin} from '@docusaurus/types';
const DEFAULT_OPTIONS = { import {PluginOptions, LoadedContent} from './types';
const DEFAULT_OPTIONS: PluginOptions = {
path: 'src/pages', // Path to data on filesystem, relative to site dir. path: 'src/pages', // Path to data on filesystem, relative to site dir.
routeBasePath: '', // URL Route. routeBasePath: '', // URL Route.
include: ['**/*.{js,jsx}'], // Extensions to include. include: ['**/*.{js,jsx}'], // Extensions to include.
}; };
module.exports = function(context, opts) { export default function pluginContentPages(
context: LoadContext,
opts: Partial<PluginOptions>,
): Plugin<LoadedContent | null> {
const options = {...DEFAULT_OPTIONS, ...opts}; const options = {...DEFAULT_OPTIONS, ...opts};
const contentPath = path.resolve(context.siteDir, options.path); const contentPath = path.resolve(context.siteDir, options.path);
return { return {
name: 'docusaurus-plugin-content-pages', name: 'docusaurus-plugin-content-pages',
contentPath,
getPathsToWatch() { getPathsToWatch() {
const {include = []} = options; const {include = []} = options;
const globPattern = include.map(pattern => `${contentPath}/${pattern}`); const globPattern = include.map(pattern => `${contentPath}/${pattern}`);
@ -52,7 +56,7 @@ module.exports = function(context, opts) {
const pathName = encodePath(fileToPath(relativeSource)); const pathName = encodePath(fileToPath(relativeSource));
// Default Language. // Default Language.
return { return {
permalink: pathName.replace(/^\//, baseUrl), permalink: pathName.replace(/^\//, baseUrl || ''),
source: aliasedSource, source: aliasedSource,
}; };
}); });
@ -77,4 +81,4 @@ module.exports = function(context, opts) {
); );
}, },
}; };
}; }

View file

@ -0,0 +1,19 @@
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
export interface PluginOptions {
path: string;
routeBasePath: string;
include: string[];
}
export interface Metadata {
permalink: string;
source: string;
}
export type LoadedContent = Metadata[];

View file

@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"incremental": true,
"tsBuildInfoFile": "./lib/.tsbuildinfo",
"rootDir": "src",
"outDir": "lib"
}
}