import { StormWorkspaceConfig } from '@storm-software/config/types';
import { Options, Context } from './types/build.js';
import { LogFn } from './types/config.js';
import '@deepkit/type';
import '@storm-stack/types/shared/log';
import '@stryke/env/get-env-paths';
import '@stryke/env/types';
import '@stryke/types/base';
import '@stryke/types/configuration';
import '@stryke/types/package-json';
import '@stryke/types/tsconfig';
import 'hookable';
import 'jiti';
import 'magic-string';
import 'typescript';
import 'unimport';
import '@storm-software/config-tools/types';

/**
 * The Storm Stack Engine class
 *
 * @remarks
 * This class is responsible for managing the Storm Stack project lifecycle, including initialization, building, and finalization.
 *
 * @public
 */
declare class Engine<TOptions extends Options = Options> {
    #private;
    /**
     * The options provided to Storm Stack
     */
    protected options: TOptions;
    /**
     * The resolved options provided to Storm Stack
     */
    protected context: Context<TOptions>;
    /**
     * The logger for the plugin
     */
    protected log: LogFn;
    constructor(options: TOptions, workspaceConfig?: StormWorkspaceConfig);
    /**
     * Initialize the engine
     */
    init(): Promise<Context<TOptions>>;
    /**
     * Clean any previously prepared artifacts
     */
    clean(): Promise<void>;
    /**
     * Prepare the Storm Stack project prior to building
     *
     * @remarks
     * This method will create the necessary directories, and write the artifacts files to the project.
     *
     * @param autoClean - Whether to automatically clean the previous build artifacts before preparing the project
     */
    prepare(autoClean?: boolean): Promise<void>;
    /**
     * Lint the project
     *
     * @param autoPrepare - Whether to automatically prepare the project if it has not been prepared
     * @param autoClean - Whether to automatically clean the previous build artifacts before preparing the project
     */
    lint(autoPrepare?: boolean, autoClean?: boolean): Promise<void>;
    /**
     * Build the project
     *
     * @param autoPrepare - Whether to automatically prepare the project if it has not been prepared
     * @param autoClean - Whether to automatically clean the previous build artifacts before preparing the project
     */
    build(autoPrepare?: boolean, autoClean?: boolean): Promise<void>;
    /**
     * Generate the documentation for the project
     *
     * @param autoPrepare - Whether to automatically prepare the project if it has not been prepared
     * @param autoClean - Whether to automatically clean the previous build artifacts before preparing the project
     */
    docs(autoPrepare?: boolean, autoClean?: boolean): Promise<void>;
    /**
     * Finalization process
     *
     * @remarks
     * This step includes any final processes or clean up required by Storm Stack. It will be run after each Storm Stack command.
     */
    finalize(): Promise<void>;
    /**
     * Add a Storm Stack plugin or preset to the build process
     *
     * @param config - The import path of the plugin or preset to add
     * @param isPreset - Whether the plugin is a preset
     */
    private addPlugin;
    /**
     * Initialize a Storm Stack plugin
     *
     * @param plugin - The import path of the plugin to add
     */
    private initPlugin;
}

export { Engine };
