import * as z from 'zod/v4';

/**
 * Storm Workspace config values used during various dev-ops processes. It represents the config of the entire monorepo.
 */
declare const stormWorkspaceConfigSchema: z.ZodObject<{
    $schema: z.ZodDefault<z.ZodString>;
    extends: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString>]>>;
    name: z.ZodOptional<z.ZodString>;
    namespace: z.ZodOptional<z.ZodString>;
    organization: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
        name: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        logo: z.ZodOptional<z.ZodString>;
        icon: z.ZodOptional<z.ZodString>;
        url: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>, z.ZodString]>>;
    repository: z.ZodOptional<z.ZodString>;
    license: z.ZodDefault<z.ZodString>;
    homepage: z.ZodOptional<z.ZodString>;
    docs: z.ZodOptional<z.ZodString>;
    portal: z.ZodOptional<z.ZodString>;
    licensing: z.ZodOptional<z.ZodString>;
    contact: z.ZodOptional<z.ZodString>;
    support: z.ZodOptional<z.ZodString>;
    branch: z.ZodDefault<z.ZodString>;
    preid: z.ZodOptional<z.ZodString>;
    owner: z.ZodDefault<z.ZodString>;
    bot: z.ZodObject<{
        name: z.ZodDefault<z.ZodString>;
        email: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>;
    release: z.ZodObject<{
        banner: z.ZodDefault<z.ZodString>;
        header: z.ZodOptional<z.ZodString>;
        footer: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>;
    account: z.ZodObject<{
        twitter: z.ZodDefault<z.ZodString>;
        discord: z.ZodDefault<z.ZodString>;
        telegram: z.ZodDefault<z.ZodString>;
        slack: z.ZodDefault<z.ZodString>;
        medium: z.ZodDefault<z.ZodString>;
        github: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>;
    error: z.ZodObject<{
        codesFile: z.ZodDefault<z.ZodString>;
        url: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>;
    mode: z.ZodDefault<z.ZodEnum<{
        development: "development";
        staging: "staging";
        production: "production";
    }>>;
    workspaceRoot: z.ZodString;
    externalPackagePatterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
    skipCache: z.ZodDefault<z.ZodBoolean>;
    directories: z.ZodObject<{
        cache: z.ZodOptional<z.ZodString>;
        data: z.ZodOptional<z.ZodString>;
        config: z.ZodOptional<z.ZodString>;
        temp: z.ZodOptional<z.ZodString>;
        log: z.ZodOptional<z.ZodString>;
        build: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>;
    packageManager: z.ZodDefault<z.ZodEnum<{
        npm: "npm";
        yarn: "yarn";
        pnpm: "pnpm";
        bun: "bun";
    }>>;
    timezone: z.ZodDefault<z.ZodString>;
    locale: z.ZodDefault<z.ZodString>;
    logLevel: z.ZodDefault<z.ZodEnum<{
        error: "error";
        success: "success";
        info: "info";
        fatal: "fatal";
        silent: "silent";
        warn: "warn";
        debug: "debug";
        trace: "trace";
        all: "all";
    }>>;
    skipConfigLogging: z.ZodOptional<z.ZodBoolean>;
    registry: z.ZodDefault<z.ZodObject<{
        github: z.ZodOptional<z.ZodString>;
        npm: z.ZodOptional<z.ZodString>;
        cargo: z.ZodOptional<z.ZodString>;
        cyclone: z.ZodOptional<z.ZodString>;
        container: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    configFile: z.ZodDefault<z.ZodNullable<z.ZodString>>;
    colors: z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
        dark: z.ZodDefault<z.ZodString>;
        light: z.ZodDefault<z.ZodString>;
        brand: z.ZodDefault<z.ZodString>;
        alternate: z.ZodOptional<z.ZodString>;
        accent: z.ZodOptional<z.ZodString>;
        link: z.ZodOptional<z.ZodString>;
        help: z.ZodDefault<z.ZodString>;
        success: z.ZodDefault<z.ZodString>;
        info: z.ZodDefault<z.ZodString>;
        warning: z.ZodDefault<z.ZodString>;
        danger: z.ZodDefault<z.ZodString>;
        fatal: z.ZodOptional<z.ZodString>;
        positive: z.ZodDefault<z.ZodString>;
        negative: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>, z.ZodObject<{
        dark: z.ZodObject<{
            foreground: z.ZodDefault<z.ZodString>;
            background: z.ZodDefault<z.ZodString>;
            brand: z.ZodDefault<z.ZodString>;
            alternate: z.ZodOptional<z.ZodString>;
            accent: z.ZodOptional<z.ZodString>;
            link: z.ZodOptional<z.ZodString>;
            help: z.ZodDefault<z.ZodString>;
            success: z.ZodDefault<z.ZodString>;
            info: z.ZodDefault<z.ZodString>;
            warning: z.ZodDefault<z.ZodString>;
            danger: z.ZodDefault<z.ZodString>;
            fatal: z.ZodOptional<z.ZodString>;
            positive: z.ZodDefault<z.ZodString>;
            negative: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>;
        light: z.ZodObject<{
            foreground: z.ZodDefault<z.ZodString>;
            background: z.ZodDefault<z.ZodString>;
            brand: z.ZodDefault<z.ZodString>;
            alternate: z.ZodOptional<z.ZodString>;
            accent: z.ZodOptional<z.ZodString>;
            link: z.ZodOptional<z.ZodString>;
            help: z.ZodDefault<z.ZodString>;
            success: z.ZodDefault<z.ZodString>;
            info: z.ZodDefault<z.ZodString>;
            warning: z.ZodDefault<z.ZodString>;
            danger: z.ZodDefault<z.ZodString>;
            fatal: z.ZodOptional<z.ZodString>;
            positive: z.ZodDefault<z.ZodString>;
            negative: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>;
    }, z.core.$strip>]>, z.ZodUnion<readonly [z.ZodObject<{
        base: z.ZodUnion<[z.ZodObject<{
            dark: z.ZodDefault<z.ZodString>;
            light: z.ZodDefault<z.ZodString>;
            brand: z.ZodDefault<z.ZodString>;
            alternate: z.ZodOptional<z.ZodString>;
            accent: z.ZodOptional<z.ZodString>;
            link: z.ZodOptional<z.ZodString>;
            help: z.ZodDefault<z.ZodString>;
            success: z.ZodDefault<z.ZodString>;
            info: z.ZodDefault<z.ZodString>;
            warning: z.ZodDefault<z.ZodString>;
            danger: z.ZodDefault<z.ZodString>;
            fatal: z.ZodOptional<z.ZodString>;
            positive: z.ZodDefault<z.ZodString>;
            negative: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>, z.ZodObject<{
            dark: z.ZodObject<{
                foreground: z.ZodDefault<z.ZodString>;
                background: z.ZodDefault<z.ZodString>;
                brand: z.ZodDefault<z.ZodString>;
                alternate: z.ZodOptional<z.ZodString>;
                accent: z.ZodOptional<z.ZodString>;
                link: z.ZodOptional<z.ZodString>;
                help: z.ZodDefault<z.ZodString>;
                success: z.ZodDefault<z.ZodString>;
                info: z.ZodDefault<z.ZodString>;
                warning: z.ZodDefault<z.ZodString>;
                danger: z.ZodDefault<z.ZodString>;
                fatal: z.ZodOptional<z.ZodString>;
                positive: z.ZodDefault<z.ZodString>;
                negative: z.ZodDefault<z.ZodString>;
            }, z.core.$strip>;
            light: z.ZodObject<{
                foreground: z.ZodDefault<z.ZodString>;
                background: z.ZodDefault<z.ZodString>;
                brand: z.ZodDefault<z.ZodString>;
                alternate: z.ZodOptional<z.ZodString>;
                accent: z.ZodOptional<z.ZodString>;
                link: z.ZodOptional<z.ZodString>;
                help: z.ZodDefault<z.ZodString>;
                success: z.ZodDefault<z.ZodString>;
                info: z.ZodDefault<z.ZodString>;
                warning: z.ZodDefault<z.ZodString>;
                danger: z.ZodDefault<z.ZodString>;
                fatal: z.ZodOptional<z.ZodString>;
                positive: z.ZodDefault<z.ZodString>;
                negative: z.ZodDefault<z.ZodString>;
            }, z.core.$strip>;
        }, z.core.$strip>]>;
    }, z.core.$strip>, z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
        dark: z.ZodDefault<z.ZodString>;
        light: z.ZodDefault<z.ZodString>;
        brand: z.ZodDefault<z.ZodString>;
        alternate: z.ZodOptional<z.ZodString>;
        accent: z.ZodOptional<z.ZodString>;
        link: z.ZodOptional<z.ZodString>;
        help: z.ZodDefault<z.ZodString>;
        success: z.ZodDefault<z.ZodString>;
        info: z.ZodDefault<z.ZodString>;
        warning: z.ZodDefault<z.ZodString>;
        danger: z.ZodDefault<z.ZodString>;
        fatal: z.ZodOptional<z.ZodString>;
        positive: z.ZodDefault<z.ZodString>;
        negative: z.ZodDefault<z.ZodString>;
    }, z.core.$strip>, z.ZodObject<{
        dark: z.ZodObject<{
            foreground: z.ZodDefault<z.ZodString>;
            background: z.ZodDefault<z.ZodString>;
            brand: z.ZodDefault<z.ZodString>;
            alternate: z.ZodOptional<z.ZodString>;
            accent: z.ZodOptional<z.ZodString>;
            link: z.ZodOptional<z.ZodString>;
            help: z.ZodDefault<z.ZodString>;
            success: z.ZodDefault<z.ZodString>;
            info: z.ZodDefault<z.ZodString>;
            warning: z.ZodDefault<z.ZodString>;
            danger: z.ZodDefault<z.ZodString>;
            fatal: z.ZodOptional<z.ZodString>;
            positive: z.ZodDefault<z.ZodString>;
            negative: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>;
        light: z.ZodObject<{
            foreground: z.ZodDefault<z.ZodString>;
            background: z.ZodDefault<z.ZodString>;
            brand: z.ZodDefault<z.ZodString>;
            alternate: z.ZodOptional<z.ZodString>;
            accent: z.ZodOptional<z.ZodString>;
            link: z.ZodOptional<z.ZodString>;
            help: z.ZodDefault<z.ZodString>;
            success: z.ZodDefault<z.ZodString>;
            info: z.ZodDefault<z.ZodString>;
            warning: z.ZodDefault<z.ZodString>;
            danger: z.ZodDefault<z.ZodString>;
            fatal: z.ZodOptional<z.ZodString>;
            positive: z.ZodDefault<z.ZodString>;
            negative: z.ZodDefault<z.ZodString>;
        }, z.core.$strip>;
    }, z.core.$strip>]>>]>]>;
    extensions: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>>;
}, z.core.$strip>;

type TStormWorkspaceConfig = z.infer<typeof stormWorkspaceConfigSchema>;
/**
 * The Storm workspace's configuration object
 *
 * @remarks
 * This type is used to define the configuration object for the entire Storm workspace/monorepo. The value is extracted from the `storm-workspace.json` file in the workspace root and the currently configuration environment variables. The value can be obtained by calling `getWorkspaceConfig()` in `@storm-software/config-tools`.
 *
 * @deprecated
 * This type is deprecated and will be removed in the next major version. Use {@link StormWorkspaceConfig} instead.
 */
type StormConfig<TExtensionName extends keyof TStormWorkspaceConfig["extensions"] = keyof TStormWorkspaceConfig["extensions"], TExtensionConfig extends TStormWorkspaceConfig["extensions"][TExtensionName] = TStormWorkspaceConfig["extensions"][TExtensionName]> = TStormWorkspaceConfig & {
    extensions: (TStormWorkspaceConfig["extensions"] & {
        [extensionName in TExtensionName]: TExtensionConfig;
    }) | NonNullable<Record<string, any>>;
};
/**
 * The Storm workspace's configuration object
 *
 * @remarks
 * This type is used to define the configuration object for the entire Storm workspace/monorepo. The value is extracted from the `storm-workspace.json` file in the workspace root and the currently configuration environment variables. The value can be obtained by calling `getWorkspaceConfig()` in `@storm-software/config-tools`.
 */
type StormWorkspaceConfig<TExtensionName extends keyof TStormWorkspaceConfig["extensions"] = keyof TStormWorkspaceConfig["extensions"], TExtensionConfig extends TStormWorkspaceConfig["extensions"][TExtensionName] = TStormWorkspaceConfig["extensions"][TExtensionName]> = StormConfig<TExtensionName, TExtensionConfig>;

export type { StormWorkspaceConfig as S };
