import type { Compiler } from '@umijs/bundler-webpack'; import type Autoprefixer from '@umijs/bundler-webpack/compiled/autoprefixer'; import type WebpackChain from '@umijs/bundler-webpack/compiled/webpack-5-chain'; import type { IConfig as BundlerWebpackConfig } from '@umijs/bundler-webpack/dist/types'; import type { IAdd, IModify, IServicePluginAPI, PluginAPI } from '@umijs/core'; import type { TransformerItem } from './builder/bundless/loaders/javascript'; import type { BundleConfig, BundlessConfig } from './builder/config'; import type { DoctorReport } from './doctor'; import type { DoctorSourceParseResult } from './doctor/parser'; import type { PreBundleConfig } from './prebundler/config'; export type { BundlessLoader, JSTransformer, } from './builder/bundless/loaders/types'; export declare type Api = PluginAPI & Omit & { /** * add bundless js transformer */ addJSTransformer: (item: TransformerItem) => void; /** * checkup for doctor */ addRegularCheckup: IAdd<{ bundleConfigs: BundleConfig[]; bundlessConfigs: BundlessConfig[]; preBundleConfig: PreBundleConfig; }, DoctorReport | DoctorReport[0] | void>; addSourceCheckup: IAdd<{ file: string; content: string; }, DoctorReport | DoctorReport[0] | void>; addImportsCheckup: IAdd<{ file: string; imports: DoctorSourceParseResult['imports']; mergedAlias: Record; mergedExternals: Record; }, DoctorReport | DoctorReport[0] | void>; /** * config modify methods definition */ modifyConfig: IModify, null>; modifyDefaultConfig: IModify, null>; /** * config definition */ config: Omit; userConfig: RedbudConfig; }; export declare enum RedbudBuildTypes { BUNDLE = "bundle", BUNDLESS = "bundless" } export declare enum RedbudJSTransformerTypes { BABEL = "babel", ESBUILD = "esbuild", SWC = "swc" } export declare enum RedbudPlatformTypes { NODE = "node", BROWSER = "browser" } export declare enum RedbudBundlessTypes { ESM = "esm", CJS = "cjs" } export interface RedbudBaseConfig { /** * compile platform * @default browser */ platform?: `${RedbudPlatformTypes}`; /** * define global constants for source code, like webpack */ define?: Record; /** * configure module resolve alias, like webpack */ alias?: Record; /** * configure extra babel presets */ extraBabelPresets?: BundlerWebpackConfig['extraBabelPresets']; /** * configure extra babel plugins */ extraBabelPlugins?: BundlerWebpackConfig['extraBabelPlugins']; /** * output sourcemap */ sourcemap?: boolean; /** * compile targets */ targets?: Record; } export interface RedbudBundlessConfig extends RedbudBaseConfig { /** * source code directory * @default src */ input?: string; /** * output directory */ output?: string; /** * specific transformer * @note redbud will auto-select transformer by default (babel for browser files, esbuild for node files) */ transformer?: `${RedbudJSTransformerTypes}`; /** * override config for each sub-directory or file via key-value */ overrides?: Record & RedbudBaseConfig>; /** * ignore specific directories & files via ignore syntax */ ignores?: string[]; } export interface RedbudBundleConfig extends RedbudBaseConfig { /** * bundle entry config * @default src/index.{js,ts,jsx,tsx} * @note support to override config for each entry via key-value */ entry?: string | Record & RedbudBaseConfig>; /** * bundle output path * @default dist/umd */ output?: string; /** * extract CSS * @default true */ extractCSS?: boolean; /** * external dependencies * @note like umi externals */ externals?: Record; /** * modify webpack config via webpack-chain */ chainWebpack?: (memo: WebpackChain, args: { env: string; webpack: Compiler['webpack']; }) => WebpackChain; /** * configure postcss */ postcssOptions?: BundlerWebpackConfig['postcssLoader']; /** * configure autoprefixer */ autoprefixer?: Autoprefixer.Options; /** * output library name */ name?: string; /** * configure less variables */ theme?: BundlerWebpackConfig['theme']; } export interface RedbudPreBundleConfig { /** * output directory * @default compiled */ output?: string; /** * dependencies or entries need to be pre-bundled */ deps: string[] | Record; /** * extra dep declarations need to be pre-bundled */ extraDtsDeps?: string[]; /** * extra dependencies & declarations need to be externalized * @note all deps & package.json dependencies will be added to externals by default */ extraExternals?: Record; } export interface RedbudConfig extends RedbudBaseConfig { extends?: string; /** * bundler config (umd) */ umd?: RedbudBundleConfig; /** * transformer config (esm) */ esm?: RedbudBundlessConfig & { /** * output directory * @default dist/esm */ output?: string; }; /** * transformer config (cjs) */ cjs?: RedbudBundlessConfig & { /** * output directory * @default dist/cjs */ output?: string; }; /** * deps pre-bundle config */ prebundle?: RedbudPreBundleConfig; /** * extra plugins */ plugins?: string[]; /** * extra presets */ presets?: string[]; }