import * as ts from "typescript";
import * as c from "@ts-std/codec";
import { NonEmptyOrSingle, Dict, UnboxArray } from "./utils";
export declare type ScriptTarget = Exclude<ts.ScriptTarget, ts.ScriptTarget.JSON>;
export declare const ScriptTarget: c.Decoder<ScriptTarget>;
export declare type CompilationEnvironment = {
    platform: "browser" | "webworker" | "node" | "anywhere";
    target: ScriptTarget;
};
export declare namespace CompilationEnvironment {
    const decoder: c.Decoder<any>;
    function key({ platform, target }: CompilationEnvironment): string;
    function options({ platform, target }: CompilationEnvironment): {
        module: ts.ModuleKind;
        lib: string[];
        types?: string[];
    };
}
declare const RawMacroTsConfigDecoder: c.Decoder<{
    macros: string | undefined;
    packages: {
        location: any;
        entry: any;
        exclude: any;
        environment: any;
        dev: any;
    }[];
}>;
declare type RawMacroTsConfig = c.TypeOf<typeof RawMacroTsConfigDecoder>;
export declare type MacroTsConfigPackage = UnboxArray<RawMacroTsConfig["packages"]>;
export declare type MacroTsConfig = Omit<RawMacroTsConfig, "packages"> & {
    packages: Dict<MacroTsConfigPackage>;
};
export declare namespace MacroTsConfig {
    const decoder: c.Decoder<MacroTsConfig>;
    function decode(obj: unknown): import("@ts-std/monads").Result<MacroTsConfig, string>;
    function selectPackageForPath(path: string, { packages }: MacroTsConfig): {
        location: string;
        entry: NonEmptyOrSingle<string>;
        exclude: NonEmptyOrSingle<string> | undefined;
        environment: any;
        dev: boolean | undefined;
    } | undefined;
}
export {};
