webpack-atoms
Version:
Small atomic bits for crafting webpack configs
119 lines (118 loc) • 4.31 kB
TypeScript
import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import { RuleSetRule, RuleSetUseItem } from 'webpack';
import builtinPlugins from './plugins';
import { StatsOptions } from './stats';
import type { FaviconWebpackPlugionOptions } from 'favicons-webpack-plugin/src/options';
export type { FaviconWebpackPlugionOptions, HtmlWebpackPlugin };
export declare type Env = 'production' | 'test' | 'development';
export declare type LoaderResolver<T extends {}> = (options?: T) => RuleSetUseItem;
declare type Rule = RuleSetRule;
export declare type RuleFactory<T extends {} = {}> = (options?: T) => Rule;
export declare type ContextualRuleFactory<T = {}> = RuleFactory<T> & {
internal: RuleFactory<T>;
external: RuleFactory<T>;
};
export interface AstroTurfOptions {
getFileName?(path: string, opts: AstroTurfOptions, id: string): string;
allowGlobal?: boolean;
extension?: string;
tagName?: string;
styleTag?: string;
useAltLoader?: boolean;
enableCssProp?: boolean;
}
export declare type AstroturfRuleFactory = RuleFactory<AstroTurfOptions> & {
sass: RuleFactory<AstroTurfOptions>;
less: RuleFactory<AstroTurfOptions>;
};
declare type PluginInstance = any;
declare type PluginFactory = (...args: any) => PluginInstance;
declare type BuiltinPlugins = typeof builtinPlugins;
declare type StatAtoms = {
none: StatsOptions;
minimal: StatsOptions;
};
export declare type WebpackAtomsOptions = {
babelConfig?: {};
browsers?: string[];
vendorRegex?: RegExp;
env?: Env | null;
assetRelativeRoot?: string;
disableMiniExtractInDev?: boolean;
ignoreBrowserslistConfig?: boolean;
};
export declare type LoaderAtoms = {
json: LoaderResolver<any>;
yaml: LoaderResolver<any>;
null: LoaderResolver<any>;
raw: LoaderResolver<any>;
style: LoaderResolver<any>;
css: LoaderResolver<any>;
miniCssExtract: LoaderResolver<{
disable?: boolean;
fallback?: RuleSetUseItem;
} & MiniCssExtractPlugin.PluginOptions>;
astroturf: LoaderResolver<any>;
postcss: LoaderResolver<{
browsers?: string[];
postcssOptions?: Record<string, any> | ((...args: any[]) => Record<string, any>);
}>;
less: LoaderResolver<any>;
sass: LoaderResolver<any>;
file: LoaderResolver<any>;
url: LoaderResolver<any>;
js: LoaderResolver<any>;
imports: LoaderResolver<any>;
exports: LoaderResolver<any>;
};
declare type JsRule = RuleFactory<any> & {
inlineCss: RuleFactory<any>;
};
export declare type RuleAtoms = {
js: JsRule;
yaml: RuleFactory<any>;
fonts: RuleFactory<any>;
images: RuleFactory<any>;
audioVideo: RuleFactory<any>;
files: RuleFactory<any>;
css: ContextualRuleFactory;
postcss: ContextualRuleFactory;
less: ContextualRuleFactory;
sass: ContextualRuleFactory;
astroturf: AstroturfRuleFactory;
};
export declare type PluginAtoms = BuiltinPlugins & {
define: PluginFactory;
extractCss: PluginFactory;
html: PluginFactory;
loaderOptions: PluginFactory;
moment: PluginFactory;
minifyJs: PluginFactory;
minifyCss: PluginFactory;
unusedFiles: PluginFactory;
favicons: PluginFactory;
copy: PluginFactory;
};
export declare type WebpackAtoms = {
loaders: LoaderAtoms;
rules: RuleAtoms;
plugins: PluginAtoms;
stats: StatAtoms;
makeExternalOnly: (original: RuleFactory<any>) => RuleFactory<any>;
makeInternalOnly: (original: RuleFactory<any>) => RuleFactory<any>;
makeExtractLoaders: (options: {
extract?: boolean;
}, config: {
fallback: RuleSetUseItem;
use: RuleSetUseItem[];
}) => RuleSetUseItem[];
};
declare function createAtoms(options?: WebpackAtomsOptions): WebpackAtoms;
declare const makeExternalOnly: (original: RuleFactory<any>) => RuleFactory<any>, makeInternalOnly: (original: RuleFactory<any>) => RuleFactory<any>, makeExtractLoaders: (options: {
extract?: boolean;
}, config: {
fallback: RuleSetUseItem;
use: RuleSetUseItem[];
}) => RuleSetUseItem[], stats: StatAtoms, loaders: LoaderAtoms, rules: RuleAtoms, plugins: PluginAtoms;
export { makeExternalOnly, makeInternalOnly, makeExtractLoaders, loaders, rules, plugins, stats, createAtoms, };