import webpack from 'webpack';
import merge from 'webpack-merge';
import { PresetOptions } from '@wpackio/babel-preset-base/lib/preset';
/**
 * Configuration shape for banner. Inserted in the generated files on production.
 */
export interface BannerConfig {
    name: string;
    author: string;
    version: string;
    link: string;
    license: string;
    copyrightText: string;
    credit: boolean;
}
/**
 * Shape of `entry` property under `files`.
 */
export interface EntryConfig {
    [x: string]: string[] | string;
}
/**
 * Shape of single object under `files` property(array).
 */
export interface FileConfig {
    name: string;
    entry: EntryConfig;
    typeWatchFiles?: string[];
    hasTypeScript?: boolean;
    webpackConfig?: webpack.Configuration | ((config: webpack.Configuration, api: merge, appDir: string, isDev: boolean) => webpack.Configuration);
}
export declare type webpackOptionsOverrideFunction = (defaults: string | {
    [x: string]: any;
}) => // tslint:disable-next-line:no-any
string | {
    [x: string]: any;
};
export declare type webpackLoaderOptionsOverride = webpackOptionsOverrideFunction | {
    [x: string]: any;
} | string | undefined;
/**
 * Main Project Config shape under `wpackio.project.js` file.
 */
export interface ProjectConfig {
    appName: string;
    type: 'theme' | 'plugin';
    slug: string;
    bannerConfig: BannerConfig;
    files: FileConfig[];
    /**
     * The relative path of the output directory, w.r.t the directory
     * from where the script has been called.
     *
     * It has to be relative, otherwise we possibly can not make
     * hot-reload work.
     *
     * The script should be called from the root of your project. Otherwise
     * we can not know how to create the URL of assets.
     */
    outputPath: string;
    hasReact: boolean;
    hasSass: boolean;
    hasLess?: boolean;
    hasFlow: boolean;
    useBabelConfig?: boolean;
    jsBabelPresetOptions?: PresetOptions;
    tsBabelPresetOptions?: PresetOptions;
    jsBabelOverride?: webpackLoaderOptionsOverride;
    tsBabelOverride?: webpackLoaderOptionsOverride;
    externals?: webpack.Configuration['externals'];
    alias?: webpack.Resolve['alias'];
    errorOverlay?: boolean;
    optimizeSplitChunks: boolean;
    watch?: string | string[];
    packageFiles: string[];
    packageDirPath: string;
    zlibLevel?: number;
}
/**
 * The default configuration object.
 */
export declare const projectConfigDefault: ProjectConfig;
