From c4cc7f881beab81740b0496490034dfcc725ff0c Mon Sep 17 00:00:00 2001 From: Yangshun Tay Date: Mon, 7 Oct 2019 22:35:58 -0700 Subject: [PATCH] refactor(v2): add typing for pages plugin (#1813) * refactor(v2): add typing for pages plugin * misc: new lines --- .eslintignore | 1 + .gitignore | 1 + .prettierignore | 1 + jest.config.js | 1 + .../src/__tests__/index.test.ts | 5 ++-- .../src/index.ts | 6 ++--- .../src/types.ts | 2 ++ .../tsconfig.json | 2 +- .../package.json | 6 ++++- .../{index.test.js => index.test.ts} | 15 ++++++++---- .../src/{index.js => index.ts} | 24 +++++++++++-------- .../src/types.ts | 19 +++++++++++++++ .../tsconfig.json | 9 +++++++ 13 files changed, 70 insertions(+), 22 deletions(-) rename packages/docusaurus-plugin-content-pages/src/__tests__/{index.test.js => index.test.ts} (69%) rename packages/docusaurus-plugin-content-pages/src/{index.js => index.ts} (79%) create mode 100644 packages/docusaurus-plugin-content-pages/src/types.ts create mode 100644 packages/docusaurus-plugin-content-pages/tsconfig.json diff --git a/.eslintignore b/.eslintignore index a865cb8a8d..c47f508ac6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -15,3 +15,4 @@ packages/docusaurus/lib/ packages/docusaurus-init/lib/ packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/ +packages/docusaurus-plugin-content-pages/lib/ diff --git a/.gitignore b/.gitignore index a73afd9dbd..633f1d470f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ packages/docusaurus/lib/ packages/docusaurus-init/lib/ packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/ +packages/docusaurus-plugin-content-pages/lib/ diff --git a/.prettierignore b/.prettierignore index 6955bdf14d..99d0e4c1f5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,3 +7,4 @@ packages/docusaurus/lib/ packages/docusaurus-init/lib/ packages/docusaurus-plugin-content-blog/lib/ packages/docusaurus-plugin-content-docs-legacy/lib/ +packages/docusaurus-plugin-content-pages/lib/ diff --git a/jest.config.js b/jest.config.js index 39d87d3eef..07bf8d64ec 100644 --- a/jest.config.js +++ b/jest.config.js @@ -19,6 +19,7 @@ module.exports = { '/packages/docusaurus-utils/lib', '/packages/docusaurus-plugin-content-blog/lib', '/packages/docusaurus-plugin-content-docs-legacy/lib', + '/packages/docusaurus-plugin-content-pages/lib', ], transform: { '^.+\\.[jt]sx?$': 'babel-jest', diff --git a/packages/docusaurus-plugin-content-docs-legacy/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-docs-legacy/src/__tests__/index.test.ts index b6ab9419ca..58ab78b388 100644 --- a/packages/docusaurus-plugin-content-docs-legacy/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-docs-legacy/src/__tests__/index.test.ts @@ -6,6 +6,7 @@ */ import path from 'path'; + import pluginContentDocs from '../index'; import {LoadContext} from '@docusaurus/types'; @@ -24,7 +25,7 @@ describe('loadDocs', () => { const sidebarPath = path.join(siteDir, 'sidebars.json'); const pluginPath = 'docs'; const plugin = pluginContentDocs(context, { - path: 'docs', + path: pluginPath, sidebarPath, }); const {docs: docsMetadata} = await plugin.loadContent(); @@ -38,7 +39,7 @@ describe('loadDocs', () => { sidebar: 'docs', source: path.join('@site', pluginPath, 'hello.md'), title: 'Hello, World !', - description: `Hi, Endilie here :)`, + description: 'Hi, Endilie here :)', }); expect(docsMetadata['foo/bar']).toEqual({ diff --git a/packages/docusaurus-plugin-content-docs-legacy/src/index.ts b/packages/docusaurus-plugin-content-docs-legacy/src/index.ts index d42b436d7d..a3c0b6d467 100644 --- a/packages/docusaurus-plugin-content-docs-legacy/src/index.ts +++ b/packages/docusaurus-plugin-content-docs-legacy/src/index.ts @@ -9,11 +9,11 @@ import globby from 'globby'; import fs from 'fs-extra'; import path from 'path'; import {idx, normalizeUrl, docuHash} from '@docusaurus/utils'; +import {LoadContext, Plugin, DocusaurusConfig} from '@docusaurus/types'; import createOrder from './order'; import loadSidebars from './sidebars'; import processMetadata from './metadata'; -import {LoadContext, Plugin, DocusaurusConfig} from '@docusaurus/types'; import { PluginOptions, Sidebar, @@ -46,7 +46,7 @@ export default function pluginContentDocs( let sourceToPermalink: SourceToPermalink = {}; return { - name: 'docusaurus-plugin-content-docs', + name: 'docusaurus-plugin-content-docs-legacy', getPathsToWatch() { const {include = []} = options; @@ -66,7 +66,7 @@ export default function pluginContentDocs( 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); // Prepare metadata container. diff --git a/packages/docusaurus-plugin-content-docs-legacy/src/types.ts b/packages/docusaurus-plugin-content-docs-legacy/src/types.ts index 8b8c77b7fa..b322108f85 100644 --- a/packages/docusaurus-plugin-content-docs-legacy/src/types.ts +++ b/packages/docusaurus-plugin-content-docs-legacy/src/types.ts @@ -4,6 +4,7 @@ * 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; @@ -42,6 +43,7 @@ export type SidebarItem = | SidebarItemDoc | SidebarItemLink | SidebarItemCategory; + export type SidebarItemRaw = | string | SidebarItemDoc diff --git a/packages/docusaurus-plugin-content-docs-legacy/tsconfig.json b/packages/docusaurus-plugin-content-docs-legacy/tsconfig.json index f50aa9ee6d..f5902ba108 100644 --- a/packages/docusaurus-plugin-content-docs-legacy/tsconfig.json +++ b/packages/docusaurus-plugin-content-docs-legacy/tsconfig.json @@ -4,6 +4,6 @@ "incremental": true, "tsBuildInfoFile": "./lib/.tsbuildinfo", "rootDir": "src", - "outDir": "lib", + "outDir": "lib" } } diff --git a/packages/docusaurus-plugin-content-pages/package.json b/packages/docusaurus-plugin-content-pages/package.json index 561ab93ef5..20460774d3 100644 --- a/packages/docusaurus-plugin-content-pages/package.json +++ b/packages/docusaurus-plugin-content-pages/package.json @@ -2,12 +2,16 @@ "name": "@docusaurus/plugin-content-pages", "version": "2.0.0-alpha.25", "description": "Pages content plugin for Docusaurus", - "main": "src/index.js", + "main": "lib/index.js", + "scripts": { + "tsc": "tsc" + }, "publishConfig": { "access": "public" }, "license": "MIT", "dependencies": { + "@docusaurus/types": "^2.0.0-alpha.25", "@docusaurus/utils": "^2.0.0-alpha.25", "globby": "^10.0.1" }, diff --git a/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.js b/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts similarity index 69% rename from packages/docusaurus-plugin-content-pages/src/__tests__/index.test.js rename to packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts index 4c4e2e7dd8..b19472fea9 100644 --- a/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.js +++ b/packages/docusaurus-plugin-content-pages/src/__tests__/index.test.ts @@ -8,29 +8,34 @@ import path from 'path'; import pluginContentPages from '../index'; +import {LoadContext} from '@docusaurus/types'; describe('docusaurus-plugin-content-pages', () => { test('simple pages', async () => { + const siteDir = path.join(__dirname, '__fixtures__', 'website'); const siteConfig = { title: 'Hello', baseUrl: '/', url: 'https://docusaurus.io', }; - const siteDir = path.join(__dirname, '__fixtures__', 'website'); - const plugin = pluginContentPages({ + const context = { siteDir, siteConfig, + } as LoadContext; + const pluginPath = 'src/pages'; + const plugin = pluginContentPages(context, { + path: pluginPath, }); const pagesMetadatas = await plugin.loadContent(); - const pagesPath = path.relative(siteDir, plugin.contentPath); + expect(pagesMetadatas).toEqual([ { permalink: '/', - source: path.join('@site', pagesPath, 'index.js'), + source: path.join('@site', pluginPath, 'index.js'), }, { permalink: '/hello/world', - source: path.join('@site', pagesPath, 'hello', 'world.js'), + source: path.join('@site', pluginPath, 'hello', 'world.js'), }, ]); }); diff --git a/packages/docusaurus-plugin-content-pages/src/index.js b/packages/docusaurus-plugin-content-pages/src/index.ts similarity index 79% rename from packages/docusaurus-plugin-content-pages/src/index.js rename to packages/docusaurus-plugin-content-pages/src/index.ts index 58f108a926..b860dd401b 100644 --- a/packages/docusaurus-plugin-content-pages/src/index.js +++ b/packages/docusaurus-plugin-content-pages/src/index.ts @@ -5,26 +5,30 @@ * LICENSE file in the root directory of this source tree. */ -const globby = require('globby'); -const path = require('path'); -const fs = require('fs'); -const {encodePath, fileToPath} = require('@docusaurus/utils'); +import globby from 'globby'; +import fs from 'fs'; +import path from 'path'; +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. routeBasePath: '', // URL Route. include: ['**/*.{js,jsx}'], // Extensions to include. }; -module.exports = function(context, opts) { +export default function pluginContentPages( + context: LoadContext, + opts: Partial, +): Plugin { const options = {...DEFAULT_OPTIONS, ...opts}; const contentPath = path.resolve(context.siteDir, options.path); return { name: 'docusaurus-plugin-content-pages', - contentPath, - getPathsToWatch() { const {include = []} = options; const globPattern = include.map(pattern => `${contentPath}/${pattern}`); @@ -52,7 +56,7 @@ module.exports = function(context, opts) { const pathName = encodePath(fileToPath(relativeSource)); // Default Language. return { - permalink: pathName.replace(/^\//, baseUrl), + permalink: pathName.replace(/^\//, baseUrl || ''), source: aliasedSource, }; }); @@ -77,4 +81,4 @@ module.exports = function(context, opts) { ); }, }; -}; +} diff --git a/packages/docusaurus-plugin-content-pages/src/types.ts b/packages/docusaurus-plugin-content-pages/src/types.ts new file mode 100644 index 0000000000..5af52c0297 --- /dev/null +++ b/packages/docusaurus-plugin-content-pages/src/types.ts @@ -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[]; diff --git a/packages/docusaurus-plugin-content-pages/tsconfig.json b/packages/docusaurus-plugin-content-pages/tsconfig.json new file mode 100644 index 0000000000..f5902ba108 --- /dev/null +++ b/packages/docusaurus-plugin-content-pages/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "./lib/.tsbuildinfo", + "rootDir": "src", + "outDir": "lib" + } +}