import { ProjectGraph, ProjectsConfigurations } from '@nx/devkit';
import { TypeScriptBuildOptions, TypeScriptBuildResolvedOptions, AdditionalCLIOptions } from '@storm-software/build-tools';
import { Options } from 'tsdown';

type ExternalTSDownOptions = Omit<Options, "config" | "outDir" | "entryPoints">;
type TSDownOptions = Omit<Omit<ExternalTSDownOptions, "dts" | "bundleDts">, "outbase" | "outfile" | "outExtension" | "banner"> & Omit<TypeScriptBuildOptions, "format"> & {
    emitTypes?: boolean;
    injectShims?: boolean;
};
type TSDownResolvedOptions = Omit<TypeScriptBuildResolvedOptions, "target" | "format" | "sourcemap" | "env"> & ExternalTSDownOptions & {
    injectShims: boolean;
    outdir: string;
    projectGraph: ProjectGraph;
    projectConfigurations: ProjectsConfigurations;
    entryPoints: string[];
};
type TSDownCLIOptions = AdditionalCLIOptions & Pick<TSDownOptions, "name" | "entry" | "outputPath" | "platform" | "format" | "bundle" | "target" | "watch" | "clean" | "debug" | "banner" | "footer" | "splitting" | "treeShaking" | "generatePackageJson" | "emitOnAll" | "metafile" | "minify" | "includeSrc" | "verbose" | "emitTypes" | "injectShims">;
type MaybePromise<T> = T | Promise<T>;

export type { MaybePromise, TSDownCLIOptions, TSDownOptions, TSDownResolvedOptions };
