@modern-js/module-tools
Version:
Simple, powerful, high-performance modern npm package development solution.
194 lines (193 loc) • 6.34 kB
TypeScript
import type { TestConfig } from '@modern-js/types';
import type { CreateFilter } from '@rollup/pluginutils';
import type { BuildOptions } from 'esbuild';
import type { MinifyOptions as TerserMinifyOptions } from 'terser';
import type { Config } from '../../../compiled/@svgr/core';
import type { internalPreset, presetList } from '../../constants/preset';
import type { ICompiler } from '../esbuild';
import type { CopyConfig } from './copy';
import type { Dev } from './dev';
import type { Style, StyleConfig } from './style';
import type { ImportItem } from './transform-import';
export * from './style';
export * from './dev';
export * from './copy';
export type HookList = {
name: string;
apply: (compiler: ICompiler) => void;
applyAfterBuiltIn?: boolean;
}[];
export type EsbuildOptions = (options: BuildOptions) => BuildOptions;
export type BuildType = 'bundleless' | 'bundle';
export type Target = 'es5' | 'es6' | 'es2015' | 'es2016' | 'es2017' | 'es2018' | 'es2019' | 'es2020' | 'es2021' | 'es2022' | 'esnext';
export type Minify = 'esbuild' | 'terser' | false | TerserMinifyOptions;
export type Format = 'esm' | 'cjs' | 'umd' | 'iife';
export type Input = {
[name: string]: string;
} | string[];
export type Globals = Record<any, any>;
export type Define = Record<string, string>;
export type Externals = (string | RegExp)[];
export type Platform = 'node' | 'browser';
export type SideEffects = RegExp[] | boolean | ((id: string, external: boolean) => boolean);
/**
* @experimental
*/
export type Redirect = {
alias?: boolean;
style?: boolean;
asset?: boolean;
autoExtension?: boolean;
};
export type DTSOptions = {
abortOnError: boolean;
distPath: string;
/**
* Build one or more projects and their dependencies, if out of date
* The same as 'tsc --build'
* @default false
*/
enableTscBuild: boolean;
only: boolean;
/**
* @deprecated
* use buildConfig.tsconfig instead.
*/
tsconfigPath?: string;
/**
* Only for rollup-plugin-dts, see more in https://github.com/Swatinem/rollup-plugin-dts#what-to-expect.
* We hope you use external to prevent them(like @types) which come from node_modules from be bundled.
* However, some types from outside that we don't re-export are also checked by plugin.
* And a third-party package is uncontrollable, it may cause errors.
* You can overridden by setting it false to excluded all packages from node_modules.
* @default true
*/
respectExternal: boolean;
};
export type DTS = false | Partial<DTSOptions>;
export interface SvgrOptions extends Config {
include?: Parameters<CreateFilter>[0];
exclude?: Parameters<CreateFilter>[1];
}
export interface Asset {
/**
* @default [name].[hash].[ext]
*/
name?: string | ((assetPath: string) => string);
path?: string;
limit?: number;
publicPath?: string | ((filePath: string) => string);
svgr?: boolean | SvgrOptions;
}
export type AutoExternal = boolean | {
dependencies?: boolean;
peerDependencies?: boolean;
};
export type JSX = 'automatic' | 'transform' | 'preserve';
export type ExternalHelpers = boolean;
export type BannerAndFooter = {
js?: string;
css?: string;
dts?: string;
};
export type AliasOption = Record<string, string> | ((aliases: Record<string, string>) => Record<string, string> | void);
export type Resolve = {
mainFields?: string[];
jsExtensions?: string[];
alias?: AliasOption;
tsConfig?: Tsconfig;
};
type Tsconfig = {
configFile: string;
references?: string[] | undefined;
};
export type ResolveOptions = {
mainFields: string[];
jsExtensions: string[];
alias: Record<string, string>;
tsConfig: Tsconfig;
};
export type BaseBuildConfig = Omit<Required<PartialBaseBuildConfig>, 'dts' | 'style' | 'alias' | 'sideEffects' | 'asset' | 'resolve'> & {
sideEffects?: SideEffects;
dts: false | DTSOptions;
style: Style;
alias: Record<string, string>;
asset: Required<Asset>;
resolve: ResolveOptions;
};
export type PartialBaseBuildConfig = {
/**
* @experimental
*/
loader?: Record<string, string>;
shims?: boolean;
autoExtension?: boolean;
resolve?: Resolve;
footer?: BannerAndFooter;
banner?: BannerAndFooter;
buildType?: 'bundleless' | 'bundle';
format?: Format;
target?: Target;
dts?: DTS;
sourceMap?: boolean | 'inline' | 'external';
sourceDir?: string;
copy?: CopyConfig;
asset?: Asset;
jsx?: JSX;
outDir?: string;
alias?: AliasOption;
hooks?: HookList;
input?: Input;
tsconfig?: string;
metafile?: boolean;
platform?: Platform;
splitting?: boolean;
minify?: Minify;
externals?: Externals;
autoExternal?: AutoExternal;
umdGlobals?: Globals;
umdModuleName?: ((chunkName: string) => string) | string | undefined;
define?: Define;
style?: StyleConfig;
redirect?: Redirect;
sideEffects?: SideEffects;
esbuildOptions?: EsbuildOptions;
/**
* @internal
* cache transform result or not
*/
transformCache?: boolean;
externalHelpers?: ExternalHelpers;
transformImport?: ImportItem[];
transformLodash?: boolean;
/**
* @deprecated
* @internal
*/
disableSwcTransform?: boolean;
/**
* @deprecated
*/
sourceType?: 'commonjs' | 'module';
};
export type BuildConfig = BaseBuildConfig | BaseBuildConfig[];
export type PartialBuildConfig = PartialBaseBuildConfig | PartialBaseBuildConfig[];
export type BuildPreset = keyof typeof presetList | ((options: {
preset: typeof internalPreset;
extendPreset: (extendPresetName: keyof typeof internalPreset, extendBuildConfig: PartialBaseBuildConfig) => PartialBaseBuildConfig[];
}) => PartialBaseBuildConfig[] | Promise<PartialBaseBuildConfig[]>);
export interface RuntimeUserConfig {
[name: string]: any;
}
export interface ModuleExtraConfig {
/**
* @deprecated designSystem is no longer required.
* If you are using Tailwind CSS, you can now use the `theme` option of Tailwind CSS, they are the same.
*/
designSystem?: Record<string, any>;
buildConfig?: PartialBuildConfig;
buildPreset?: BuildPreset;
dev?: Dev;
testing?: TestConfig;
runtime?: RuntimeUserConfig;
}