diff --git a/packages/docusaurus-plugin-content-blog/package.json b/packages/docusaurus-plugin-content-blog/package.json index 9c7a11714c..2aa38e1cbc 100644 --- a/packages/docusaurus-plugin-content-blog/package.json +++ b/packages/docusaurus-plugin-content-blog/package.json @@ -10,6 +10,9 @@ "access": "public" }, "license": "MIT", + "devDependencies": { + "@docusaurus/types": "^2.0.0-alpha.24" + }, "dependencies": { "@docusaurus/mdx-loader": "^2.0.0-alpha.24", "@docusaurus/utils": "^2.0.0-alpha.24", diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts index cf0945799a..756d2a5ebc 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -8,7 +8,7 @@ import fs from 'fs-extra'; import path from 'path'; import pluginContentBlog from '../index'; -import {DocusaurusConfig} from '../typesDocusaurus'; +import {DocusaurusConfig} from '@docusaurus/types'; describe('loadBlog', () => { test('simple website', async () => { diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index 3059c624ea..5ed86e0fa5 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -19,13 +19,13 @@ import { BlogContent, BlogItemsToModules, TagsModule, - ConfigureWebpackUtils, } from './types'; import { LoadContext, PluginContentLoadedActions, RouteModule, -} from './typesDocusaurus'; + ConfigureWebpackUtils, +} from '@docusaurus/types'; import {Configuration} from 'webpack'; // YYYY-MM-DD-{name}.mdx? @@ -57,7 +57,7 @@ export default function pluginContentBlog( context: LoadContext, opts: Partial, ) { - const options = {...DEFAULT_OPTIONS, ...opts}; + const options: PluginOptions = {...DEFAULT_OPTIONS, ...opts}; const contentPath = path.resolve(context.siteDir, options.path); return { @@ -79,7 +79,7 @@ export default function pluginContentBlog( return null; } - const {baseUrl} = siteConfig; + const {baseUrl = ''} = siteConfig; const blogFiles = await globby(include, { cwd: blogDir, }); diff --git a/packages/docusaurus-plugin-content-blog/src/types.ts b/packages/docusaurus-plugin-content-blog/src/types.ts index 5b011a5dd6..0c8076e9c7 100644 --- a/packages/docusaurus-plugin-content-blog/src/types.ts +++ b/packages/docusaurus-plugin-content-blog/src/types.ts @@ -1,5 +1,3 @@ -import {Loader} from 'webpack'; - export interface BlogContent { blogPosts: BlogPost[]; blogListPaginated: BlogPaginated[]; @@ -80,14 +78,3 @@ export interface TagModule { count: number; permalink: string; } - -export interface ConfigureWebpackUtils { - getStyleLoaders: ( - isServer: boolean, - cssOptions: { - [key: string]: any; - }, - ) => Loader[]; - getCacheLoader: (isServer: boolean, cacheOptions?: {}) => Loader | null; - getBabelLoader: (isServer: boolean, babelOptions?: {}) => Loader; -} diff --git a/packages/docusaurus-plugin-content-blog/src/typesDocusaurus.ts b/packages/docusaurus-plugin-content-blog/src/typesDocusaurus.ts deleted file mode 100644 index 383cde0e2c..0000000000 --- a/packages/docusaurus-plugin-content-blog/src/typesDocusaurus.ts +++ /dev/null @@ -1,63 +0,0 @@ -import {ParsedUrlQueryInput} from 'querystring'; - -export interface DocusaurusConfig { - baseUrl: string; - favicon?: string; - tagline?: string; - title: string; - url: string; - organizationName?: string; - projectName?: string; - githubHost?: string; - plugins?: PluginConfig[]; - themes?: PluginConfig[]; - presets?: PresetConfig[]; - themeConfig?: { - [key: string]: any; - }; - customFields?: { - [key: string]: any; - }; -} - -export type PluginConfig = [string, Object | undefined] | string; - -export type PresetConfig = [string, Object | undefined] | string; - -export interface CLIOptions { - [option: string]: any; -} - -export interface LoadContext { - siteDir: string; - generatedFilesDir?: string; - siteConfig: DocusaurusConfig; - cliOptions?: CLIOptions; - outDir?: string; - baseUrl?: string; -} - -export interface PluginContentLoadedActions { - addRoute(config: RouteConfig): void; - createData(name: string, data: Object): Promise; -} - -export type Module = - | { - path: string; - __import?: boolean; - query?: ParsedUrlQueryInput; - } - | string; - -export interface RouteModule { - [module: string]: Module | RouteModule | RouteModule[]; -} - -export interface RouteConfig { - path: string; - component: string; - modules?: RouteModule; - routes?: RouteConfig[]; - exact?: boolean; -} diff --git a/packages/docusaurus-types/package.json b/packages/docusaurus-types/package.json new file mode 100644 index 0000000000..60241aa859 --- /dev/null +++ b/packages/docusaurus-types/package.json @@ -0,0 +1,15 @@ +{ + "name": "@docusaurus/types", + "version": "2.0.0-alpha.24", + "description": "Common used typings for Docusaurus packages", + "main": "./src/index.js", + "types": "./src/index.d.ts", + "publishConfig": { + "access": "public" + }, + "license": "MIT", + "dependencies": { + "@types/webpack": "^4.32.0", + "querystring": "0.2.0" + } +} diff --git a/packages/docusaurus/src/server/types.ts b/packages/docusaurus-types/src/index.d.ts similarity index 75% rename from packages/docusaurus/src/server/types.ts rename to packages/docusaurus-types/src/index.d.ts index 893cedf735..3e864bdd20 100644 --- a/packages/docusaurus/src/server/types.ts +++ b/packages/docusaurus-types/src/index.d.ts @@ -1,5 +1,5 @@ +import {Loader, Configuration} from 'webpack'; import {ParsedUrlQueryInput} from 'querystring'; -import {Configuration} from 'webpack'; export interface DocusaurusConfig { baseUrl: string; @@ -21,12 +21,16 @@ export interface DocusaurusConfig { }; } +export interface DocusaurusContext { + siteConfig?: Partial; +} + export interface Preset { plugins?: PluginConfig[]; themes?: PluginConfig[]; } -export type PresetConfig = [string, Object | undefined] | string; +export type PresetConfig = [string, Object] | [string] | string; export interface CLIOptions { [option: string]: any; @@ -35,7 +39,7 @@ export interface CLIOptions { export interface LoadContext { siteDir: string; generatedFilesDir: string; - siteConfig: DocusaurusConfig; + siteConfig: Partial; cliOptions: CLIOptions; outDir: string; baseUrl: string; @@ -68,7 +72,8 @@ export interface Plugin { getPathsToWatch?(): string[]; getClientModules?(): string[]; } -export type PluginConfig = [string, Object | undefined] | string; + +export type PluginConfig = [string, Object] | [string] | string; export interface ChunkRegistry { importStatement: string; @@ -98,3 +103,14 @@ export interface RouteConfig { export interface ThemeAlias { [alias: string]: string; } + +export interface ConfigureWebpackUtils { + getStyleLoaders: ( + isServer: boolean, + cssOptions: { + [key: string]: any; + }, + ) => Loader[]; + getCacheLoader: (isServer: boolean, cacheOptions?: {}) => Loader | null; + getBabelLoader: (isServer: boolean, babelOptions?: {}) => Loader; +} diff --git a/packages/docusaurus-types/src/index.js b/packages/docusaurus-types/src/index.js new file mode 100644 index 0000000000..af4fc2ffc3 --- /dev/null +++ b/packages/docusaurus-types/src/index.js @@ -0,0 +1,3 @@ +/* eslint-disable */ +'use strict'; +Object.defineProperty(exports, '__esModule', {value: true}); diff --git a/packages/docusaurus/package.json b/packages/docusaurus/package.json index da1c48f7a0..4173d2fe93 100644 --- a/packages/docusaurus/package.json +++ b/packages/docusaurus/package.json @@ -28,6 +28,9 @@ "bugs": { "url": "https://github.com/facebook/Docusaurus/issues" }, + "devDependencies": { + "@docusaurus/types": "^2.0.0-alpha.24" + }, "dependencies": { "@babel/core": "^7.6.2", "@babel/plugin-syntax-dynamic-import": "^7.2.0", diff --git a/packages/docusaurus/src/client/exports/context.ts b/packages/docusaurus/src/client/exports/context.ts index c5150715ce..eb95258c39 100644 --- a/packages/docusaurus/src/client/exports/context.ts +++ b/packages/docusaurus/src/client/exports/context.ts @@ -6,6 +6,6 @@ */ import * as React from 'react'; -import {DocusaurusContext} from '../types'; +import {DocusaurusContext} from '@docusaurus/types'; export default React.createContext({}); diff --git a/packages/docusaurus/src/client/exports/useDocusaurusContext.ts b/packages/docusaurus/src/client/exports/useDocusaurusContext.ts index 096b868d97..953cb3ff98 100644 --- a/packages/docusaurus/src/client/exports/useDocusaurusContext.ts +++ b/packages/docusaurus/src/client/exports/useDocusaurusContext.ts @@ -7,7 +7,7 @@ import {useContext} from 'react'; import context from './context'; -import {DocusaurusContext} from '../types'; +import {DocusaurusContext} from '@docusaurus/types'; function useDocusaurusContext(): DocusaurusContext { return useContext(context); diff --git a/packages/docusaurus/src/client/types.ts b/packages/docusaurus/src/client/types.ts deleted file mode 100644 index 08344f12c4..0000000000 --- a/packages/docusaurus/src/client/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {DocusaurusConfig} from '../server/types'; - -export interface DocusaurusContext { - siteConfig?: DocusaurusConfig; -} diff --git a/packages/docusaurus/src/commands/build.ts b/packages/docusaurus/src/commands/build.ts index d6a302ab3d..de192fe2d3 100644 --- a/packages/docusaurus/src/commands/build.ts +++ b/packages/docusaurus/src/commands/build.ts @@ -16,7 +16,7 @@ import {BundleAnalyzerPlugin} from 'webpack-bundle-analyzer'; import merge from 'webpack-merge'; import {STATIC_DIR_NAME} from '../constants'; import {load} from '../server'; -import {CLIOptions, Props} from '../server/types'; +import {CLIOptions, Props} from '@docusaurus/types'; import {createClientConfig} from '../webpack/client'; import {createServerConfig} from '../webpack/server'; import {applyConfigureWebpack} from '../webpack/utils'; diff --git a/packages/docusaurus/src/commands/start.ts b/packages/docusaurus/src/commands/start.ts index cc352d5de4..7ac7364cd4 100644 --- a/packages/docusaurus/src/commands/start.ts +++ b/packages/docusaurus/src/commands/start.ts @@ -20,7 +20,7 @@ import WebpackDevServer from 'webpack-dev-server'; import merge from 'webpack-merge'; import HotModuleReplacementPlugin from 'webpack/lib/HotModuleReplacementPlugin'; import {load} from '../server'; -import {CLIOptions} from '../server/types'; +import {CLIOptions} from '@docusaurus/types'; import {CONFIG_FILE_NAME, STATIC_DIR_NAME, DEFAULT_PORT} from '../constants'; import {createClientConfig} from '../webpack/client'; import {applyConfigureWebpack} from '../webpack/utils'; diff --git a/packages/docusaurus/src/server/client-modules/__tests__/index.test.ts b/packages/docusaurus/src/server/client-modules/__tests__/index.test.ts index 21ef38902e..ac94a164ca 100644 --- a/packages/docusaurus/src/server/client-modules/__tests__/index.test.ts +++ b/packages/docusaurus/src/server/client-modules/__tests__/index.test.ts @@ -8,7 +8,6 @@ import path from 'path'; import {loadClientModules} from '../index'; -import {LoadContext} from '../../index'; const pluginEmpty = require('./__fixtures__/plugin-empty'); const pluginFooBar = require('./__fixtures__/plugin-foo-bar'); diff --git a/packages/docusaurus/src/server/client-modules/index.ts b/packages/docusaurus/src/server/client-modules/index.ts index 0996d2f638..c9fd730000 100644 --- a/packages/docusaurus/src/server/client-modules/index.ts +++ b/packages/docusaurus/src/server/client-modules/index.ts @@ -6,7 +6,7 @@ */ import _ from 'lodash'; -import {Plugin} from '../types'; +import {Plugin} from '@docusaurus/types'; export function loadClientModules(plugins: Plugin[]): string[] { return _.compact( diff --git a/packages/docusaurus/src/server/config.ts b/packages/docusaurus/src/server/config.ts index 3816d0edf8..5e0fe9a779 100644 --- a/packages/docusaurus/src/server/config.ts +++ b/packages/docusaurus/src/server/config.ts @@ -10,7 +10,7 @@ import importFresh from 'import-fresh'; import _ from 'lodash'; import path from 'path'; import {CONFIG_FILE_NAME} from '../constants'; -import {DocusaurusConfig, PluginConfig} from './types'; +import {DocusaurusConfig, PluginConfig} from '@docusaurus/types'; const REQUIRED_FIELDS = ['baseUrl', 'favicon', 'tagline', 'title', 'url']; diff --git a/packages/docusaurus/src/server/index.ts b/packages/docusaurus/src/server/index.ts index ef0ff85b4b..696ad9b4cc 100644 --- a/packages/docusaurus/src/server/index.ts +++ b/packages/docusaurus/src/server/index.ts @@ -26,7 +26,7 @@ import { LoadContext, PluginConfig, Props, -} from './types'; +} from '@docusaurus/types'; export async function load( siteDir: string, diff --git a/packages/docusaurus/src/server/loadSetup.ts b/packages/docusaurus/src/server/loadSetup.ts index 9cf9b2f554..f148c0c9c2 100644 --- a/packages/docusaurus/src/server/loadSetup.ts +++ b/packages/docusaurus/src/server/loadSetup.ts @@ -7,7 +7,7 @@ import path from 'path'; import {load} from './index'; -import {Props} from './types'; +import {Props} from '@docusaurus/types'; // Helper methods to setup dummy/fake projects export const loadSetup = async (name: string): Promise => { diff --git a/packages/docusaurus/src/server/plugins/index.ts b/packages/docusaurus/src/server/plugins/index.ts index 39aef6b5d2..87ac6cb1d9 100644 --- a/packages/docusaurus/src/server/plugins/index.ts +++ b/packages/docusaurus/src/server/plugins/index.ts @@ -16,7 +16,7 @@ import { PluginConfig, PluginContentLoadedActions, RouteConfig, -} from '../types'; +} from '@docusaurus/types'; export async function loadPlugins({ pluginConfigs, diff --git a/packages/docusaurus/src/server/presets/__tests__/index.test.ts b/packages/docusaurus/src/server/presets/__tests__/index.test.ts index 68820e17aa..972d7631f2 100644 --- a/packages/docusaurus/src/server/presets/__tests__/index.test.ts +++ b/packages/docusaurus/src/server/presets/__tests__/index.test.ts @@ -8,7 +8,7 @@ import path from 'path'; import {loadPresets} from '../index'; -import {LoadContext} from '../../index'; +import {DocusaurusConfig, LoadContext} from '@docusaurus/types'; describe('loadPresets', () => { test('no presets', () => { @@ -86,7 +86,7 @@ describe('loadPresets', () => { siteConfig: { presets: [[path.join(__dirname, '__fixtures__/preset-bar.js')]], }, - } as LoadContext; + } as Partial; const presets = loadPresets(context); expect(presets).toMatchInlineSnapshot(` Object { @@ -115,7 +115,7 @@ describe('loadPresets', () => { ], ], }, - } as LoadContext; + } as Partial; const presets = loadPresets(context); expect(presets).toMatchInlineSnapshot(` Object { @@ -150,7 +150,7 @@ describe('loadPresets', () => { ], ], }, - } as LoadContext; + } as Partial; const presets = loadPresets(context); expect(presets).toMatchInlineSnapshot(` Object { diff --git a/packages/docusaurus/src/server/presets/index.ts b/packages/docusaurus/src/server/presets/index.ts index d74d1a2da7..2c3693fe92 100644 --- a/packages/docusaurus/src/server/presets/index.ts +++ b/packages/docusaurus/src/server/presets/index.ts @@ -7,15 +7,20 @@ import importFresh from 'import-fresh'; import _ from 'lodash'; -import {LoadContext, PluginConfig, Preset, PresetConfig} from '../types'; +import { + LoadContext, + PluginConfig, + Preset, + PresetConfig, +} from '@docusaurus/types'; export function loadPresets( - context: LoadContext, + context: Partial, ): { plugins: PluginConfig[]; themes: PluginConfig[]; } { - const presets: PresetConfig[] = context.siteConfig.presets || []; + const presets: PresetConfig[] = (context.siteConfig || {}).presets || []; const unflatPlugins: (PluginConfig[])[] = []; const unflatThemes: (PluginConfig[])[] = []; diff --git a/packages/docusaurus/src/server/routes.ts b/packages/docusaurus/src/server/routes.ts index 98dd941459..f9bf0ce090 100644 --- a/packages/docusaurus/src/server/routes.ts +++ b/packages/docusaurus/src/server/routes.ts @@ -8,7 +8,12 @@ import {genChunkName} from '@docusaurus/utils'; import _ from 'lodash'; import {stringify} from 'querystring'; -import {ChunkRegistry, Module, RouteConfig, RouteModule} from './types'; +import { + ChunkRegistry, + Module, + RouteConfig, + RouteModule, +} from '@docusaurus/types'; function getModulePath(target: Module): string { if (typeof target === 'string') { diff --git a/packages/docusaurus/src/server/themes/alias.ts b/packages/docusaurus/src/server/themes/alias.ts index ade27a3a6f..c473d3dc5f 100644 --- a/packages/docusaurus/src/server/themes/alias.ts +++ b/packages/docusaurus/src/server/themes/alias.ts @@ -9,7 +9,7 @@ import globby from 'globby'; import fs from 'fs-extra'; import path from 'path'; import {fileToPath, posixPath, normalizeUrl} from '@docusaurus/utils'; -import {ThemeAlias} from '../types'; +import {ThemeAlias} from '@docusaurus/types'; export function themeAlias(themePath: string): ThemeAlias { if (!fs.pathExistsSync(themePath)) { diff --git a/packages/docusaurus/src/server/themes/index.ts b/packages/docusaurus/src/server/themes/index.ts index 4ff55d4965..4734a16679 100644 --- a/packages/docusaurus/src/server/themes/index.ts +++ b/packages/docusaurus/src/server/themes/index.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import {ThemeAlias} from '../types'; +import {ThemeAlias} from '@docusaurus/types'; import {themeAlias} from './alias'; export function loadThemeAlias(themePaths: string[]): ThemeAlias { diff --git a/packages/docusaurus/src/webpack/base.ts b/packages/docusaurus/src/webpack/base.ts index fa6c6450bc..43dd45d7ea 100644 --- a/packages/docusaurus/src/webpack/base.ts +++ b/packages/docusaurus/src/webpack/base.ts @@ -12,7 +12,7 @@ import path from 'path'; import TerserPlugin from 'terser-webpack-plugin'; import {Configuration, Loader} from 'webpack'; -import {Props} from '../server/types'; +import {Props} from '@docusaurus/types'; import {getBabelLoader, getCacheLoader, getStyleLoaders} from './utils'; const CSS_REGEX = /\.css$/; diff --git a/packages/docusaurus/src/webpack/client.ts b/packages/docusaurus/src/webpack/client.ts index dc2e5c6e37..4b937c2122 100644 --- a/packages/docusaurus/src/webpack/client.ts +++ b/packages/docusaurus/src/webpack/client.ts @@ -9,7 +9,7 @@ import {Configuration} from 'webpack'; import merge from 'webpack-merge'; import WebpackNiceLog from 'webpack-nicelog'; -import {Props} from '../server/types'; +import {Props} from '@docusaurus/types'; import {createBaseConfig} from './base'; import ChunkManifestPlugin from './plugins/ChunkManifestPlugin'; diff --git a/packages/docusaurus/src/webpack/server.ts b/packages/docusaurus/src/webpack/server.ts index cd7944330a..aa2c872cce 100644 --- a/packages/docusaurus/src/webpack/server.ts +++ b/packages/docusaurus/src/webpack/server.ts @@ -11,7 +11,7 @@ import {Configuration} from 'webpack'; import merge from 'webpack-merge'; import WebpackNiceLog from 'webpack-nicelog'; -import {Props} from '../server/types'; +import {Props} from '@docusaurus/types'; import {createBaseConfig} from './base'; import WaitPlugin from './plugins/WaitPlugin';