mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-29 02:08:36 +02:00
refactor(v2): add typing for pages plugin (#1813)
* refactor(v2): add typing for pages plugin * misc: new lines
This commit is contained in:
parent
95f0552bad
commit
c4cc7f881b
13 changed files with 70 additions and 22 deletions
|
@ -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
1
.gitignore
vendored
|
@ -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/
|
||||||
|
|
|
@ -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/
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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({
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"tsBuildInfoFile": "./lib/.tsbuildinfo",
|
"tsBuildInfoFile": "./lib/.tsbuildinfo",
|
||||||
"rootDir": "src",
|
"rootDir": "src",
|
||||||
"outDir": "lib",
|
"outDir": "lib"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
},
|
},
|
||||||
|
|
|
@ -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'),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
|
@ -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) {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
};
|
}
|
19
packages/docusaurus-plugin-content-pages/src/types.ts
Normal file
19
packages/docusaurus-plugin-content-pages/src/types.ts
Normal 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[];
|
9
packages/docusaurus-plugin-content-pages/tsconfig.json
Normal file
9
packages/docusaurus-plugin-content-pages/tsconfig.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"incremental": true,
|
||||||
|
"tsBuildInfoFile": "./lib/.tsbuildinfo",
|
||||||
|
"rootDir": "src",
|
||||||
|
"outDir": "lib"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue