webpack-cli
Version:
CLI for webpack & friends
140 lines (139 loc) • 5.18 kB
TypeScript
import { type Command as CommanderCommand, type CommandOptions as CommanderCommandOptions, type ParseOptions } from "commander";
import { type Colors as WebpackColors, type Compiler, type Configuration, type MultiCompiler, type MultiConfiguration, type MultiStats, type Stats, type WebpackError, default as webpack } from "webpack";
type RecordAny = Record<string, any>;
type PackageManager = "pnpm" | "yarn" | "npm";
type LogHandler = (value: any) => void;
interface Logger {
error: LogHandler;
warn: LogHandler;
info: LogHandler;
success: LogHandler;
log: LogHandler;
raw: LogHandler;
}
interface Colors extends WebpackColors {
isColorSupported: boolean;
}
type Context = RecordAny;
interface Command extends CommanderCommand {
pkg?: string;
forHelp?: boolean;
context: Context;
}
interface CommandOptions<A = void, O extends CommanderArgs = CommanderArgs, C extends Context = Context> extends CommanderCommandOptions {
rawName: string;
name: string;
alias: string | string[];
description?: string;
usage?: string;
dependencies?: string[];
pkg?: string;
preload?: () => Promise<C>;
options?: CommandOption[] | ((command: Command & {
context: C;
}) => CommandOption[]) | ((command: Command & {
context: C;
}) => Promise<CommandOption[]>);
action: A extends void ? (options: O, cmd: Command & {
context: C;
}) => void | Promise<void> : (args: A, options: O, cmd: Command & {
context: C;
}) => void | Promise<void>;
}
type CommanderArgs = Record<string, any>;
type BasicPrimitive = string | boolean | number;
type EnumValue = string | number | boolean | EnumValueObject | EnumValue[] | null;
interface EnumValueObject {
[key: string]: EnumValue;
}
interface ArgumentConfig {
description?: string;
negatedDescription?: string;
path?: string;
multiple?: boolean;
type: "enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset";
values?: EnumValue[];
}
interface CommandOption {
name: string;
alias?: string;
type?: (value: string, previous: Record<string, BasicPrimitive | object>) => Record<string, BasicPrimitive | object>;
configs?: ArgumentConfig[];
negative?: boolean;
multiple?: boolean;
valueName?: string;
description?: string;
describe?: string;
negatedDescription?: string;
defaultValue?: string;
hidden?: boolean;
negativeHidden?: boolean;
}
interface Env {
WEBPACK_BUNDLE?: boolean;
WEBPACK_BUILD?: boolean;
WEBPACK_WATCH?: boolean;
WEBPACK_SERVE?: boolean;
}
interface Argv extends RecordAny {
env: Env;
}
interface ConfigurationsAndPaths {
options: Configuration | MultiConfiguration;
path: WeakMap<object, string[]>;
}
declare interface WebpackCallback {
(err: null | Error, result?: Stats): void;
(err: null | Error, result?: MultiStats): void;
}
type Schema = Parameters<(typeof webpack)["cli"]["getArguments"]>[0];
interface KnownOptions {
config?: string[];
argv?: Argv;
env?: Env;
configNodeEnv?: string;
watchOptionsStdin?: boolean;
watch?: boolean;
failOnWarnings?: boolean;
isWatchingLikeCommand?: boolean;
progress?: boolean | "profile";
analyze?: boolean;
json?: boolean;
entry?: string | string[];
merge?: boolean;
configName?: string[];
disableInterpret?: boolean;
extends?: string[];
webpack: typeof webpack;
}
type Options = KnownOptions & RecordAny;
declare class WebpackCLI {
#private;
colors: Colors;
logger: Logger;
program: Command;
constructor();
isPromise<T>(value: Promise<T>): value is Promise<T>;
isFunction(value: unknown): value is CallableFunction;
capitalizeFirstLetter(str: string): string;
toKebabCase(str: string): string;
getLogger(): Logger;
getDefaultPackageManager(): Promise<PackageManager | undefined>;
isPackageInstalled(packageName: string): Promise<boolean>;
installPackage(packageName: string, options?: {
preMessage?: () => void;
}): Promise<string>;
makeCommand<A = void, O extends CommanderArgs = CommanderArgs, C extends Context = Context>(options: CommandOptions<A, O, C>): Promise<Command>;
makeOption(command: Command, option: CommandOption): void;
isMultipleConfiguration(config: Configuration | MultiConfiguration): config is MultiConfiguration;
isMultipleCompiler(compiler: Compiler | MultiCompiler): compiler is MultiCompiler;
isValidationError(error: unknown): error is WebpackError;
schemaToOptions(webpackMod: typeof webpack, schema?: Schema, additionalOptions?: CommandOption[], override?: Partial<CommandOption>): CommandOption[];
loadWebpack(): Promise<typeof webpack>;
loadWebpackDevServer(): Promise<typeof import("webpack-dev-server")>;
run(args: readonly string[], parseOptions: ParseOptions): Promise<void>;
loadConfig(options: Options): Promise<ConfigurationsAndPaths>;
createCompiler(options: Options, callback?: WebpackCallback): Promise<Compiler | MultiCompiler>;
runWebpack(options: Options, isWatchCommand: boolean): Promise<void>;
}
export default WebpackCLI;