@luban-cli/cli-plugin-service
Version:
A development runtime environment dependency
143 lines (142 loc) • 5.46 kB
TypeScript
/// <reference types="react" />
import Config = require("webpack-chain");
import webpack = require("webpack");
import WebpackDevServer from "webpack-dev-server";
import { StaticRouterContext } from "react-router";
import { RematchStore } from "@rematch/core";
import { RootOptions as rootOptions, RawPlugin as rawPlugin, Preset as preset, BasePkgFields as basePkgFields } from "@luban-cli/cli-shared-types/dist/shared";
import { CommandPluginAPI, ConfigPluginAPI } from "./lib/PluginAPI";
import { ProjectConfig } from "./main";
export declare type builtinServiceCommandName = "serve" | "build" | "inspect" | "help";
export declare type RootOptions = rootOptions;
export declare type RawPlugin = rawPlugin;
/**
* @description package.json fields, name and version must required
*
* @see https://docs.npmjs.com/creating-a-package-json-file
*/
export declare type BasePkgFields = basePkgFields;
export declare type CommonFields<Args extends CliArgs> = {
projectConfig: ProjectConfig;
options: rootOptions;
mode: string;
commandName: builtinServiceCommandName;
args: ParsedArgs<Args>;
rawArgv: string[];
};
export declare type CommandPluginApplyCallbackArgs<Args extends CliArgs> = {
api: CommandPluginAPI;
} & CommonFields<Args>;
export declare type CommandPluginApplyCallback<Args extends CliArgs> = (options: CommandPluginApplyCallbackArgs<Args>) => void;
export declare type CommandPluginAddWebpackConfigCallbackArgs = {
api: CommandPluginAPI;
projectConfig: ProjectConfig;
};
export interface CommandPluginInstance<Args extends CliArgs> {
apply: CommandPluginApplyCallback<Args>;
addWebpackConfig?: (options: CommandPluginAddWebpackConfigCallbackArgs) => void;
}
export declare type CommandPlugin<Args extends CliArgs> = {
id: string;
instance: CommandPluginInstance<Args>;
};
export declare type ConfigPluginApplyCallbackArgs<Args extends CliArgs = CliArgs> = {
api: ConfigPluginAPI;
} & CommonFields<Args>;
export declare type ConfigPluginApplyCallback<Args extends CliArgs = CliArgs> = (options: ConfigPluginApplyCallbackArgs<Args>) => void;
export interface ConfigPluginInstance<Args extends CliArgs = CliArgs> {
apply: ConfigPluginApplyCallback<Args>;
}
export declare type ConfigPlugin<Args extends CliArgs = CliArgs> = {
id: string;
instance: ConfigPluginInstance<Args>;
};
export declare type WebpackConfiguration = webpack.Configuration & {
devServer?: WebpackDevServer.Configuration;
};
export declare class UserConfig extends Config.ChainedMap<void> {
externals(value: webpack.ExternalsElement | webpack.ExternalsElement[]): this;
module: Config.Module;
plugins: Config.Plugins<this, webpack.Plugin>;
}
export declare type WebpackChainCallback = (config: Config, id: WebpackConfigName) => void;
export declare type WebpackRawConfigCallbackConfiguration = {
module?: webpack.Module;
plugins?: webpack.Plugin[];
externals?: webpack.ExternalsElement[] | webpack.ExternalsElement;
};
export declare type WebpackRawConfigCallback = ((config: WebpackRawConfigCallbackConfiguration, id: WebpackConfigName) => WebpackRawConfigCallbackConfiguration | void) | WebpackRawConfigCallbackConfiguration;
export declare type CommandCallback = () => void | Promise<void>;
export declare type CommandList = Record<builtinServiceCommandName, {
commandCallback: CommandCallback;
opts: Record<string, unknown> | CommandCallback;
}>;
export declare type BuiltinWebpackConfigName = "public";
export declare type WebpackConfigName = "client" | "server";
export declare type WebpackConfigItem = {
id: WebpackConfigName | BuiltinWebpackConfigName;
config: Config;
chainCallback: WebpackChainCallback[];
rawCallback: WebpackRawConfigCallback[];
};
export declare type WebpackConfigQueue = Map<WebpackConfigName | BuiltinWebpackConfigName, WebpackConfigItem>;
export declare type ServeCliArgs = Partial<{
entry: string;
config: string;
open: boolean;
mode: string;
host: string;
port: string | number;
https: boolean;
public: string;
help: boolean;
}>;
export declare type BuildCliArgs = Partial<{
entry: string;
config: string;
mode: string;
dest: string;
report: boolean;
help: boolean;
}>;
export declare type InspectCliArgs = Partial<{
name: WebpackConfigName;
mode: string;
config: string;
rule: string;
plugin: string;
rules: string[];
plugins: string[];
verbose: boolean;
help: boolean;
}>;
export declare type Preset = preset;
export declare type PLUGIN_IDS = keyof RawPlugin;
export declare type CliArgs = ServeCliArgs | BuildCliArgs | InspectCliArgs;
export declare type ParsedArgs<T extends Record<string | number, unknown> = CliArgs> = {
[K in keyof T]: T[K];
} & {
"--"?: string[];
_: string[];
};
export declare type UrlLoaderOptions = {
limit: number;
fallback: {
loader: string;
options: {
name: string;
};
};
};
export declare type Context = {
url: string;
path: string;
query: {};
initProps: {};
initState: {};
};
export declare type ServerEntry = (req: Context, staticRouterContext: StaticRouterContext, store: RematchStore | null, shared: Record<PropertyKey, unknown>) => null | Promise<JSX.Element>;
export declare type ServerBundle = {
default: ServerEntry;
createStore?: (initState: Record<PropertyKey, unknown>) => RematchStore | null;
};