diff --git a/packages/docz-bundler-webpack/src/index.ts b/packages/docz-bundler-webpack/src/index.ts index f8b73d4f4..deabef546 100644 --- a/packages/docz-bundler-webpack/src/index.ts +++ b/packages/docz-bundler-webpack/src/index.ts @@ -1,19 +1,22 @@ import { Configuration as CFG } from 'webpack' -import { ConfigArgs, createBundler, BundlerCreate } from 'docz' -import * as Server from 'webpack-dev-server' +import { ConfigArgs, createBundler, BundlerCreate, BundlerServer } from 'docz' +import * as WebpackDevServer from 'webpack-dev-server' import webpack from 'webpack' import { devServerConfig } from './devserver' import { createConfig as config } from './config' -export const server = (args: ConfigArgs) => (config: CFG): Server => { +export const server = (args: ConfigArgs) => (config: CFG): BundlerServer => { const compiler = webpack(config) const devserver = devServerConfig(args) + const server = new WebpackDevServer(compiler, devserver) - return new Server(compiler, devserver) + return { + start: () => server.listen(args.port), + } } -export const bundler: BundlerCreate = createBundler({ +export const bundler: BundlerCreate = createBundler({ config, server, id: 'webpack', diff --git a/packages/docz/src/Bundler.ts b/packages/docz/src/Bundler.ts index 58537f627..2996ac823 100644 --- a/packages/docz/src/Bundler.ts +++ b/packages/docz/src/Bundler.ts @@ -1,26 +1,30 @@ import { Plugin } from './Plugin' import { ConfigArgs } from './Server' -export type TConfigFn = () => C -export type TServerFn = (config: C) => S +export interface BundlerServer { + start(): any +} + +export type ConfigFn = () => C +export type ServerFn = (config: C) => BundlerServer export interface CompilerOpts { args: ConfigArgs } -export interface BundlerConstructor extends CompilerOpts { +export interface BundlerConstructor extends CompilerOpts { id: string - config: TConfigFn - server: TServerFn + config: ConfigFn + server: ServerFn } -export class Bundler { +export class Bundler { public readonly id: string private readonly args: ConfigArgs - private config: TConfigFn - private server: TServerFn + private config: ConfigFn + private server: ServerFn - constructor(params: BundlerConstructor) { + constructor(params: BundlerConstructor) { const { args, id, config, server } = params this.args = args @@ -33,7 +37,7 @@ export class Bundler { return this.mountConfig(this.config()) } - public async createServer(config: C): Promise { + public async createServer(config: C): Promise { const { plugins } = this.args const server = await this.server(config) @@ -61,22 +65,20 @@ export class Bundler { } } -export interface Factory { +export interface Factory { id: string - config: (args: ConfigArgs) => TConfigFn - server: (args: ConfigArgs) => TServerFn + config: (args: ConfigArgs) => ConfigFn + server: (args: ConfigArgs) => ServerFn } -export type BundlerCreate = (args: ConfigArgs) => Bundler +export type BundlerCreate = (args: ConfigArgs) => Bundler -export function createBundler( - factory: Factory -): BundlerCreate { - return (args: ConfigArgs): Bundler => +export function createBundler(factory: Factory): BundlerCreate { + return (args: ConfigArgs): Bundler => new Bundler({ args, - config: factory.config(args), id: factory.id, + config: factory.config(args), server: factory.server(args), }) } diff --git a/packages/docz/src/Server.ts b/packages/docz/src/Server.ts index 4f6fc75ad..5eaf797be 100644 --- a/packages/docz/src/Server.ts +++ b/packages/docz/src/Server.ts @@ -55,15 +55,13 @@ export class Server { } public async start(): Promise { - const { port } = this.config - del.sync(paths.docz) this.processEntries(this.config) const config = this.bundler.getConfig() const server = await this.bundler.createServer(config) - server.listen(port) + server.start() } private getBundler(bundler: string): any { diff --git a/packages/docz/src/index.ts b/packages/docz/src/index.ts index e69922aa2..a37343732 100644 --- a/packages/docz/src/index.ts +++ b/packages/docz/src/index.ts @@ -1,4 +1,4 @@ export { Entry } from './Entry' -export { createBundler, BundlerCreate } from './Bundler' +export { createBundler, BundlerCreate, BundlerServer } from './Bundler' export { createPlugin } from './Plugin' export { Server, ConfigArgs } from './Server'