UNPKG

webpack-cli

Version:
221 lines (220 loc) 8.75 kB
import type { EntryOptions, Stats, MultiStats, Configuration, WebpackError, WebpackOptionsNormalized, Compiler, MultiCompiler, Problem, Argument, AssetEmittedInfo, FileCacheOptions } from "webpack"; import type webpack from "webpack"; import type { ClientConfiguration, Configuration as DevServerConfig } from "webpack-dev-server"; import { type Colorette } from "colorette"; import { type Command, type CommandOptions, type Option, type ParseOptions } from "commander"; import { type prepare } from "rechoir"; import { type stringifyChunked } from "@discoveryjs/json-ext"; /** * Webpack CLI */ interface IWebpackCLI { colors: WebpackCLIColors; logger: WebpackCLILogger; isColorSupportChanged: boolean | undefined; webpack: typeof webpack; builtInOptionsCache: WebpackCLIBuiltInOption[] | undefined; program: WebpackCLICommand; isMultipleCompiler(compiler: WebpackCompiler): compiler is MultiCompiler; isPromise<T>(value: Promise<T>): value is Promise<T>; isFunction(value: unknown): value is CallableFunction; getLogger(): WebpackCLILogger; createColors(useColors?: boolean): WebpackCLIColors; toKebabCase: StringFormatter; capitalizeFirstLetter: StringFormatter; checkPackageExists(packageName: string): boolean; getAvailablePackageManagers(): PackageManager[]; getDefaultPackageManager(): PackageManager | undefined; doInstall(packageName: string, options?: PackageInstallOptions): Promise<string>; loadJSONFile<T = unknown>(path: Path, handleError: boolean): Promise<T>; tryRequireThenImport<T = unknown>(module: ModuleName, handleError: boolean): Promise<T>; getInfoOptions(): WebpackCLIBuiltInOption[]; getInfoOutput(options: { output: string; additionalPackage: string[]; }): Promise<string>; makeCommand(commandOptions: WebpackCLIOptions, options: WebpackCLICommandOptions, action: CommandAction): Promise<WebpackCLICommand | undefined>; makeOption(command: WebpackCLICommand, option: WebpackCLIBuiltInOption): void; run(args: Parameters<WebpackCLICommand["parseOptions"]>[0], parseOptions?: ParseOptions): Promise<void>; getBuiltInOptions(): WebpackCLIBuiltInOption[]; loadWebpack(handleError?: boolean): Promise<typeof webpack>; loadConfig(options: Partial<WebpackDevServerOptions>): Promise<WebpackCLIConfig>; buildConfig(config: WebpackCLIConfig, options: WebpackDevServerOptions): Promise<WebpackCLIConfig>; isValidationError(error: Error): error is WebpackError; createCompiler(options: Partial<WebpackDevServerOptions>, callback?: Callback<[Error | undefined, Stats | MultiStats | undefined]>): Promise<WebpackCompiler>; needWatchStdin(compiler: Compiler | MultiCompiler): boolean; runWebpack(options: WebpackRunOptions, isWatchCommand: boolean): Promise<void>; } interface WebpackCLIColors extends Colorette { isColorSupported: boolean; } interface WebpackCLILogger { error: LogHandler; warn: LogHandler; info: LogHandler; success: LogHandler; log: LogHandler; raw: LogHandler; } interface WebpackCLICommandOption extends CommanderOption { helpLevel?: "minimum" | "verbose"; } interface WebpackCLIConfig { options: WebpackConfiguration | WebpackConfiguration[]; path: WeakMap<object, string[]>; } interface WebpackCLICommand extends Command { pkg: string | undefined; forHelp: boolean | undefined; _args: WebpackCLICommandOption[]; } type WebpackCLIMainOption = Pick<WebpackCLIBuiltInOption, "valueName" | "description" | "defaultValue" | "multiple"> & { flags: string; type: Set<BooleanConstructor | StringConstructor | NumberConstructor>; }; interface WebpackCLIOptions extends CommandOptions { name: string; alias: string | string[]; description?: string; usage?: string; dependencies?: string[]; pkg?: string; argsDescription?: { [argName: string]: string; }; } type WebpackCLICommandOptions = WebpackCLIBuiltInOption[] | (() => Promise<WebpackCLIBuiltInOption[]>); interface WebpackCLIBuiltInFlag { name: string; alias?: string; type?: (value: string, previous: Record<string, BasicPrimitive | object>) => Record<string, BasicPrimitive | object>; configs?: Partial<FlagConfig>[]; negative?: boolean; multiple?: boolean; valueName?: string; description?: string; describe?: string; negatedDescription?: string; defaultValue?: string; helpLevel: "minimum" | "verbose"; } interface WebpackCLIBuiltInOption extends WebpackCLIBuiltInFlag { hidden?: boolean; group?: "core"; } type WebpackCLIExternalCommandInfo = Pick<WebpackCLIOptions, "name" | "alias" | "description"> & { pkg: string; }; /** * Webpack dev server */ type WebpackDevServerOptions = DevServerConfig & WebpackConfiguration & ClientConfiguration & AssetEmittedInfo & WebpackOptionsNormalized & FileCacheOptions & Argv & { nodeEnv?: "string"; watchOptionsStdin?: boolean; progress?: boolean | "profile" | undefined; analyze?: boolean; prefetch?: string; json?: boolean; entry: EntryOptions; merge?: boolean; config: string[]; configName?: string[]; disableInterpret?: boolean; extends?: string[]; argv: Argv; }; type Callback<T extends unknown[]> = (...args: T) => void; /** * Webpack */ type WebpackConfiguration = Configuration; type LoadableWebpackConfiguration = PotentialPromise<WebpackConfiguration | CallableWebpackConfiguration>; type CallableWebpackConfiguration = (env: Env | undefined, argv: Argv) => WebpackConfiguration; type WebpackCompiler = Compiler | MultiCompiler; type FlagType = boolean | "enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset"; type FlagConfig = { negatedDescription: string; type: FlagType; values: FlagType[]; }; type FileSystemCacheOptions = WebpackConfiguration & { cache: FileCacheOptions & { defaultConfig: string[]; }; }; type ProcessedArguments = Record<string, (BasicPrimitive | RegExp)[]>; type CommandAction = Parameters<WebpackCLICommand["action"]>[0]; interface WebpackRunOptions extends WebpackOptionsNormalized { progress?: boolean | "profile"; json?: boolean; argv?: Argv; env: Env; failOnWarnings?: boolean; isWatchingLikeCommand?: boolean; } /** * Package management */ type PackageManager = "pnpm" | "yarn" | "npm"; interface PackageInstallOptions { preMessage?: () => void; } /** * Plugins and util types */ interface CLIPluginOptions { isMultiCompiler?: boolean; configPath?: string[]; helpfulOutput: boolean; hot?: boolean | "only"; progress?: boolean | "profile"; prefetch?: string; analyze?: boolean; } type BasicPrimitive = string | boolean | number; type Instantiable<InstanceType = unknown, ConstructorParameters extends unknown[] = unknown[]> = { new (...args: ConstructorParameters): InstanceType; }; type PotentialPromise<T> = T | Promise<T>; type ModuleName = string; type Path = string; type LogHandler = (value: any) => void; type StringFormatter = (value: string) => string; interface Argv extends Record<string, any> { env?: Env; } interface Env { WEBPACK_BUNDLE?: boolean; WEBPACK_BUILD?: boolean; WEBPACK_WATCH?: boolean; WEBPACK_SERVE?: boolean; WEBPACK_PACKAGE?: string; WEBPACK_DEV_SERVER_PACKAGE?: string; } type DynamicImport<T> = (url: string) => Promise<{ default: T; }>; interface ImportLoaderError extends Error { code?: string; } /** * External libraries types */ type OptionConstructor = new (flags: string, description?: string) => Option; type CommanderOption = InstanceType<OptionConstructor>; interface Rechoir { prepare: typeof prepare; } interface JsonExt { stringifyChunked: typeof stringifyChunked; } interface RechoirError extends Error { failures: RechoirError[]; error: Error; } interface PromptOptions { message: string; defaultResponse: string; stream: NodeJS.WritableStream; } export { IWebpackCLI, WebpackCLICommandOption, WebpackCLIBuiltInOption, WebpackCLIBuiltInFlag, WebpackCLIColors, WebpackCLIConfig, WebpackCLIExternalCommandInfo, WebpackCLIOptions, WebpackCLICommand, WebpackCLICommandOptions, WebpackCLIMainOption, WebpackCLILogger, WebpackDevServerOptions, WebpackRunOptions, WebpackCompiler, WebpackConfiguration, Argv, Argument, BasicPrimitive, CallableWebpackConfiguration, Callback, CLIPluginOptions, CommandAction, CommanderOption, CommandOptions, LoadableWebpackConfiguration, DynamicImport, FileSystemCacheOptions, FlagConfig, ImportLoaderError, Instantiable, JsonExt, ModuleName, PackageInstallOptions, PackageManager, Path, ProcessedArguments, PromptOptions, Problem, PotentialPromise, Rechoir, RechoirError, };