UNPKG

rspack-chain

Version:

<p> <a href="https://npmjs.com/package/rspack-chain?activeTab=readme"> <img src="https://img.shields.io/npm/v/rspack-chain?style=flat-square&colorA=564341&colorB=EDED91" alt="npm version" /> </a> <a href="https://nodejs.org/en/about/previous-rele

534 lines (489 loc) 20.2 kB
import { Configuration, Compiler, RuleSetRule, ResolveOptions, } from '@rspack/core'; import * as https from 'https'; export = Config; // The compiler type of Rspack / webpack are mismatch, // so we use a loose type here to allow using webpack plugins. interface PluginInstance { apply: (compiler: any) => void; [index: string]: any; } declare namespace __Config { class Chained<Parent> { batch(handler: (chained: this) => void): this; end(): Parent; } class TypedChainedMap<Parent, OptionsType> extends Chained<Parent> { clear(): this; delete(key: string): this; has(key: string): boolean; get<T extends keyof OptionsType>(key: T): OptionsType[T]; getOrCompute<T extends keyof OptionsType>( key: T, compute: () => OptionsType[T], ): OptionsType[T]; set<T extends keyof OptionsType>(key: T, value: OptionsType[T]): this; merge(obj: Partial<OptionsType>): this; entries(): OptionsType; values<T extends keyof OptionsType>(): OptionsType[T][]; when( condition: boolean, trueBrancher: (obj: this) => void, falseBrancher?: (obj: this) => void, ): this; } class ChainedMap<Parent> extends TypedChainedMap<Parent, any> {} class TypedChainedSet<Parent, Value> extends Chained<Parent> { add(value: Value): this; prepend(value: Value): this; clear(): this; delete(key: string): this; has(key: string): boolean; merge(arr: Value[]): this; values(): Value[]; when( condition: boolean, trueBrancher: (obj: this) => void, falseBrancher?: (obj: this) => void, ): this; } class ChainedSet<Parent> extends TypedChainedSet<Parent, any> {} } type RspackConfig = Required<Configuration>; declare class Config extends __Config.ChainedMap<void> { entryPoints: Config.TypedChainedMap< Config, { [key: string]: Config.EntryPoint } >; output: Config.Output; module: Config.Module; node: Config.ChainedMap<this> & ((value: boolean) => this); optimization: Config.Optimization; performance: Config.Performance & ((value: boolean) => this); plugins: Config.Plugins<this, PluginInstance>; resolve: Config.Resolve; resolveLoader: Config.ResolveLoader; devServer: Config.DevServer; context(value: RspackConfig['context']): this; mode(value: RspackConfig['mode']): this; devtool(value: Config.DevTool): this; target(value: RspackConfig['target']): this; watch(value: RspackConfig['watch']): this; watchOptions(value: RspackConfig['watchOptions']): this; externals(value: RspackConfig['externals']): this; externalsType(value: RspackConfig['externalsType']): this; externalsPresets(value: RspackConfig['externalsPresets']): this; stats(value: RspackConfig['stats']): this; experiments(value: RspackConfig['experiments']): this; amd(value: RspackConfig['amd']): this; bail(value: RspackConfig['bail']): this; // Rspack only supports boolean cache cache(value: any): this; dependencies(value: RspackConfig['dependencies']): this; ignoreWarnings(value: RspackConfig['ignoreWarnings']): this; loader(value: RspackConfig['loader']): this; // @ts-expect-error not supported by Rspack parallelism(value: RspackConfig['parallelism']): this; profile(value: RspackConfig['profile']): this; // @ts-expect-error not supported by Rspack recordsPath(value: RspackConfig['recordsPath']): this; // @ts-expect-error not supported by Rspack recordsInputPath(value: RspackConfig['recordsInputPath']): this; // @ts-expect-error not supported by Rspack recordsOutputPath(value: RspackConfig['recordsOutputPath']): this; name(value: RspackConfig['name']): this; infrastructureLogging(value: RspackConfig['infrastructureLogging']): this; snapshot(value: RspackConfig['snapshot']): this; entry(name: string): Config.EntryPoint; plugin(name: string): Config.Plugin<this, PluginInstance>; toConfig(): Configuration; } declare namespace Config { class Chained<Parent> extends __Config.Chained<Parent> {} class TypedChainedMap<Parent, OptionsType> extends __Config.TypedChainedMap< Parent, OptionsType > {} class ChainedMap<Parent> extends __Config.TypedChainedMap<Parent, any> {} class TypedChainedSet<Parent, Value> extends __Config.TypedChainedSet< Parent, Value > {} class ChainedSet<Parent> extends __Config.TypedChainedSet<Parent, any> {} class Plugins< Parent, PluginType extends PluginInstance, > extends TypedChainedMap< Parent, { [key: string]: Plugin<Parent, PluginType> } > {} class Plugin<Parent, PluginType extends PluginInstance | ResolvePlugin> extends ChainedMap<Parent> implements Orderable { init<P extends PluginType | PluginClass<PluginType>>( value: ( plugin: P, args: P extends PluginClass<PluginType> ? ConstructorParameters<P> : any[], ) => PluginType, ): this; use<P extends string | PluginType | PluginClass<PluginType>>( plugin: P, args?: P extends PluginClass<PluginType> ? ConstructorParameters<P> : any[], ): this; tap<P extends PluginClass<PluginType>>( f: (args: ConstructorParameters<P>) => ConstructorParameters<P>, ): this; // Orderable before(name: string): this; after(name: string): this; } type RspackEntry = NonNullable<Configuration['entry']>; type RspackEntryObject = Exclude< RspackEntry, string | string[] | Function >[string]; class EntryPoint extends TypedChainedSet<Config, RspackEntryObject> {} type RspackModule = Required<NonNullable<Configuration['module']>>; class Module extends ChainedMap<Config> { rules: TypedChainedMap<this, { [key: string]: Rule }>; generator: ChainedMap<this>; parser: ChainedMap<this>; rule(name: string): Rule; noParse(value: RspackModule['noParse']): this; // @ts-expect-error not supported by Rspack unsafeCache(value: RspackModule['unsafeCache']): this; // @ts-expect-error not supported by Rspack wrappedContextCritical(value: RspackModule['wrappedContextCritical']): this; // @ts-expect-error not supported by Rspack exprContextRegExp(value: RspackModule['exprContextRegExp']): this; wrappedContextRecursive( // @ts-expect-error not supported by Rspack value: RspackModule['wrappedContextRecursive'], ): this; // @ts-expect-error not supported by Rspack strictExportPresence(value: RspackModule['strictExportPresence']): this; // @ts-expect-error not supported by Rspack wrappedContextRegExp(value: RspackModule['wrappedContextRegExp']): this; } type RspackOutput = Required<NonNullable<Configuration['output']>>; class Output extends ChainedMap<Config> { auxiliaryComment(value: RspackOutput['auxiliaryComment']): this; charset(value: RspackOutput['charset']): this; chunkFilename(value: RspackOutput['chunkFilename']): this; chunkLoadTimeout(value: RspackOutput['chunkLoadTimeout']): this; chunkLoadingGlobal(value: RspackOutput['chunkLoadingGlobal']): this; chunkLoading(value: RspackOutput['chunkLoading']): this; chunkFormat(value: RspackOutput['chunkFormat']): this; enabledChunkLoadingTypes( value: RspackOutput['enabledChunkLoadingTypes'], ): this; crossOriginLoading(value: RspackOutput['crossOriginLoading']): this; devtoolFallbackModuleFilenameTemplate( value: RspackOutput['devtoolFallbackModuleFilenameTemplate'], ): this; devtoolModuleFilenameTemplate( value: RspackOutput['devtoolModuleFilenameTemplate'], ): this; devtoolNamespace(value: RspackOutput['devtoolNamespace']): this; filename(value: RspackOutput['filename']): this; assetModuleFilename(value: RspackOutput['assetModuleFilename']): this; globalObject(value: RspackOutput['globalObject']): this; uniqueName(value: RspackOutput['uniqueName']): this; hashDigest(value: RspackOutput['hashDigest']): this; hashDigestLength(value: RspackOutput['hashDigestLength']): this; hashFunction(value: RspackOutput['hashFunction']): this; hashSalt(value: RspackOutput['hashSalt']): this; hotUpdateChunkFilename(value: RspackOutput['hotUpdateChunkFilename']): this; hotUpdateGlobal(value: RspackOutput['hotUpdateGlobal']): this; hotUpdateMainFilename(value: RspackOutput['hotUpdateMainFilename']): this; library(value: RspackOutput['library']): this; libraryExport(value: RspackOutput['libraryExport']): this; libraryTarget(value: RspackOutput['libraryTarget']): this; importFunctionName(value: RspackOutput['importFunctionName']): this; path(value: RspackOutput['path']): this; pathinfo(value: RspackOutput['pathinfo']): this; publicPath(value: RspackOutput['publicPath']): this; scriptType(value: RspackOutput['scriptType']): this; sourceMapFilename(value: RspackOutput['sourceMapFilename']): this; // @ts-expect-error not supported by Rspack sourcePrefix(value: RspackOutput['sourcePrefix']): this; strictModuleErrorHandling( value: RspackOutput['strictModuleErrorHandling'], ): this; strictModuleExceptionHandling( value: RspackOutput['strictModuleExceptionHandling'], ): this; umdNamedDefine(value: RspackOutput['umdNamedDefine']): this; workerChunkLoading(value: RspackOutput['workerChunkLoading']): this; enabledLibraryTypes(value: RspackOutput['enabledLibraryTypes']): this; environment(value: RspackOutput['environment']): this; compareBeforeEmit(value: RspackOutput['compareBeforeEmit']): this; wasmLoading(value: RspackOutput['wasmLoading']): this; webassemblyModuleFilename( value: RspackOutput['webassemblyModuleFilename'], ): this; enabledWasmLoadingTypes( value: RspackOutput['enabledWasmLoadingTypes'], ): this; iife(value: RspackOutput['iife']): this; module(value: RspackOutput['module']): this; clean(value: RspackOutput['clean']): this; } // await for @types/webpack-dev-server update do v4 to remove all any class DevServer extends ChainedMap<Config> { allowedHosts: TypedChainedSet<this, string>; after(value: (app: any, server: any, compiler: Compiler) => void): this; before(value: (app: any, server: any, compiler: Compiler) => void): this; bonjour(value: boolean): this; clientLogLevel( value: | 'silent' | 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'none' | 'warning', ): this; compress(value: boolean): this; contentBase(value: boolean | string | string[]): this; contentBasePublicPath(value: string): this; disableHostCheck(value: boolean): this; filename(value: string): this; headers(value: { [header: string]: string }): this; historyApiFallback(value: boolean | any): this; host(value: string): this; hot(value: boolean): this; hotOnly(value: boolean): this; http2(value: boolean): this; https(value: boolean | https.ServerOptions): this; index(value: string): this; injectClient(value: boolean | ((compiler: Compiler) => boolean)): this; injectHot(value: boolean | ((compiler: Compiler) => boolean)): this; inline(value: boolean): this; lazy(value: boolean): this; liveReload(value: boolean): this; mimeTypes(value: Object): this; noInfo(value: boolean): this; onListening(value: (server: any) => void): this; open(value: boolean): this; openPage(value: string | string[]): this; overlay(value: boolean | { warnings?: boolean; errors?: boolean }): this; pfx(value: string): this; pfxPassphrase(value: string): this; port(value: number): this; progress(value: boolean): this; proxy(value: any): this; public(value: string): this; publicPath(publicPath: string): this; quiet(value: boolean): this; serveIndex(value: boolean): this; setup(value: (expressApp: any) => void): this; socket(value: string): this; sockHost(value: string): this; sockPath(value: string): this; sockPort(value: number): this; staticOptions(value: any): this; stats(value: Configuration['stats']): this; stdin(value: boolean): this; transportMode( value: | 'sockjs' | 'ws' | { server: 'ws'; client: object; } | { client: 'sockjs'; server: object; } | { client: object; server: object; }, ): this; useLocalIp(value: boolean): this; watchContentBase(value: boolean): this; watchOptions(value: Configuration['watchOptions']): this; writeToDisk(value: boolean): this; } type RspackPerformance = Exclude< Required<NonNullable<Configuration['performance']>>, false >; class Performance extends ChainedMap<Config> { hints(value: RspackPerformance['hints']): this; maxEntrypointSize(value: RspackPerformance['maxEntrypointSize']): this; maxAssetSize(value: RspackPerformance['maxAssetSize']): this; assetFilter(value: RspackPerformance['assetFilter']): this; } type RspackResolve = Required<NonNullable<Configuration['resolve']>>; type ResolvePlugin = Exclude< // @ts-expect-error Rspack does not supports resolve plugin NonNullable<ResolveOptions['plugins']>[number], '...' >; class Resolve<T = Config> extends ChainedMap<T> { alias: TypedChainedMap<this, { [key: string]: string | false | string[] }>; aliasFields: TypedChainedSet<this, RspackResolve['aliasFields'][number]>; conditionNames: TypedChainedSet< this, RspackResolve['conditionNames'][number] >; descriptionFiles: TypedChainedSet< this, RspackResolve['descriptionFiles'][number] >; extensions: TypedChainedSet<this, RspackResolve['extensions'][number]>; extensionAlias: TypedChainedMap<this, RspackResolve['extensionAlias']>; mainFields: TypedChainedSet<this, RspackResolve['mainFields'][number]>; mainFiles: TypedChainedSet<this, RspackResolve['mainFiles'][number]>; exportsFields: TypedChainedSet< this, RspackResolve['exportsFields'][number] >; importsFields: TypedChainedSet< this, RspackResolve['importsFields'][number] >; restrictions: TypedChainedSet<this, RspackResolve['restrictions'][number]>; roots: TypedChainedSet<this, RspackResolve['roots'][number]>; modules: TypedChainedSet<this, RspackResolve['modules'][number]>; plugins: TypedChainedMap< this, { [key: string]: Plugin<Resolve, ResolvePlugin> } >; fallback: TypedChainedMap< this, { [key: string]: string | false | string[] } >; byDependency: TypedChainedMap<this, RspackResolve['byDependency']>; // @ts-expect-error not supported by Rspack cachePredicate(value: RspackResolve['cachePredicate']): this; // @ts-expect-error not supported by Rspack cacheWithContext(value: RspackResolve['cacheWithContext']): this; enforceExtension(value: RspackResolve['enforceExtension']): this; symlinks(value: RspackResolve['symlinks']): this; // @ts-expect-error not supported by Rspack unsafeCache(value: RspackResolve['unsafeCache']): this; preferRelative(value: RspackResolve['preferRelative']): this; preferAbsolute(value: RspackResolve['preferAbsolute']): this; plugin(name: string): Plugin<this, ResolvePlugin>; tsConfig(value: RspackResolve['tsConfig']): this; } class RuleResolve<T = Config> extends Resolve<T> { fullySpecified(value: boolean): this; } class ResolveLoader extends Resolve { modules: ChainedSet<this>; moduleExtensions: ChainedSet<this>; packageMains: ChainedSet<this>; } type RspackRuleSet = Required<RuleSetRule>; class Rule<T = Module> extends ChainedMap<T> implements Orderable { uses: TypedChainedMap<this, { [key: string]: Use }>; include: TypedChainedSet<this, RspackRuleSet['include']>; exclude: TypedChainedSet<this, RspackRuleSet['exclude']>; rules: TypedChainedMap<this, { [key: string]: Rule<Rule> }>; oneOfs: TypedChainedMap<this, { [key: string]: Rule<Rule> }>; resolve: RuleResolve<Rule<T>>; dependency(value: RspackRuleSet['dependency']): this; enforce(value: RspackRuleSet['enforce']): this; issuer(value: RspackRuleSet['issuer']): this; issuerLayer(value: RspackRuleSet['issuerLayer']): this; layer(value: RspackRuleSet['layer']): this; mimetype(value: RspackRuleSet['mimetype']): this; parser(value: RspackRuleSet['parser']): this; generator(value: RspackRuleSet['generator']): this; resource(value: RspackRuleSet['resource']): this; resourceFragment(value: RspackRuleSet['resourceFragment']): this; resourceQuery(value: RspackRuleSet['resourceQuery']): this; sideEffects(value: RspackRuleSet['sideEffects']): this; with(value: RspackRuleSet['with']): this; test(value: RspackRuleSet['test']): this; type(value: RspackRuleSet['type']): this; use(name: string): Use<this>; rule(name: string): Rule<Rule>; oneOf(name: string): Rule<Rule>; pre(): this; post(): this; before(name: string): this; after(name: string): this; } type RspackOptimization = Required< NonNullable<Configuration['optimization']> >; type SplitChunksObject = Exclude<RspackOptimization['splitChunks'], false>; class Optimization extends ChainedMap<Config> { minimizer(name: string): Config.Plugin<this, PluginInstance>; minimizers: TypedChainedMap<this, Config.Plugin<this, PluginInstance>>; splitChunks: TypedChainedMap<this, SplitChunksObject> & ((value: SplitChunksObject | false) => this); minimize(value: RspackOptimization['minimize']): this; runtimeChunk(value: RspackOptimization['runtimeChunk']): this; emitOnErrors(value: RspackOptimization['emitOnErrors']): this; moduleIds(value: RspackOptimization['moduleIds']): this; chunkIds(value: RspackOptimization['chunkIds']): this; nodeEnv(value: RspackOptimization['nodeEnv']): this; // @ts-expect-error not supported by Rspack mangleWasmImports(value: RspackOptimization['mangleWasmImports']): this; removeAvailableModules( value: RspackOptimization['removeAvailableModules'], ): this; removeEmptyChunks(value: RspackOptimization['removeEmptyChunks']): this; mergeDuplicateChunks( value: RspackOptimization['mergeDuplicateChunks'], ): this; // @ts-expect-error not supported by Rspack flagIncludedChunks(value: RspackOptimization['flagIncludedChunks']): this; providedExports(value: RspackOptimization['providedExports']): this; usedExports(value: RspackOptimization['usedExports']): this; concatenateModules(value: RspackOptimization['concatenateModules']): this; sideEffects(value: RspackOptimization['sideEffects']): this; // @ts-expect-error not supported by Rspack portableRecords(value: RspackOptimization['portableRecords']): this; mangleExports(value: RspackOptimization['mangleExports']): this; innerGraph(value: RspackOptimization['innerGraph']): this; realContentHash(value: RspackOptimization['realContentHash']): this; avoidEntryIife(value: RspackOptimization['avoidEntryIife']): this; } interface RuntimeChunk { name: string | RuntimeChunkFunction; } type RuntimeChunkFunction = (entryPoint: EntryPoint) => string; interface SplitChunksOptions { [name: string]: any; } interface LoaderOptions { [name: string]: any; } class Use<Parent = Rule> extends ChainedMap<Parent> implements Orderable { loader(value: string): this; options(value: LoaderOptions): this; parallel(value: boolean): this; tap(f: (options: LoaderOptions) => LoaderOptions): this; // Orderable before(name: string): this; after(name: string): this; } // [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map[-debugids]. export type DevTool = RspackConfig['devtool']; interface PluginClass<PluginType extends PluginInstance | ResolvePlugin> { new (...opts: any[]): PluginType; } interface Orderable { before(name: string): this; after(name: string): this; } }