import * as conventional_changelog_storm_software_types_commit_types from 'conventional-changelog-storm-software/types/commit-types';
import { CommitScopesEnum, ReleaseGroupConfig, ReleaseConfig } from '../types.js';
import { ProjectGraph } from '@nx/devkit';
import { StormWorkspaceConfig } from '@storm-software/config/types';
import { NxReleaseConfig } from 'nx/src/command-line/release/config/config.js';
import 'conventional-changelog-storm-software/types/commitlint';
import 'nx/src/command-line/release/config/config';
import 'nx/src/config/nx-json';

declare const DEFAULT_CONVENTIONAL_COMMITS_CONFIG: {
    useCommitScope: boolean;
    questions: {
        readonly type: {
            readonly type: "select";
            readonly title: "Commit Type";
            readonly description: "Select the commit type that best describes your changes";
            readonly enum: conventional_changelog_storm_software_types_commit_types.CommitTypesEnum;
            readonly defaultValue: "chore";
            readonly maxLength: 20;
            readonly minLength: 3;
        };
        readonly scope: {
            readonly type: "select";
            readonly title: "Commit Scope";
            readonly description: "Select the project that's the most impacted by this change";
            readonly enum: CommitScopesEnum;
            readonly defaultValue: "monorepo";
            readonly maxLength: 50;
            readonly minLength: 1;
        };
        readonly subject: {
            readonly type: "input";
            readonly title: "Commit Subject";
            readonly description: "Write a short, imperative tense description of the change";
            readonly maxLength: 150;
            readonly minLength: 3;
        };
        readonly body: {
            readonly type: "input";
            readonly title: "Commit Body";
            readonly description: "Provide a longer description of the change";
            readonly maxLength: 600;
        };
        readonly isBreaking: {
            readonly type: "confirm";
            readonly title: "Breaking Changes";
            readonly description: "Are there any breaking changes as a result of this commit?";
            readonly defaultValue: false;
        };
        readonly breakingBody: {
            readonly type: "input";
            readonly title: "Breaking Changes (Details)";
            readonly description: "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself";
            readonly when: (answers: Record<string, any>) => boolean;
            readonly maxLength: 600;
            readonly minLength: 3;
        };
        readonly isIssueAffected: {
            readonly type: "confirm";
            readonly title: "Open Issue Affected";
            readonly description: "Does this change impact any open issues?";
            readonly defaultValue: false;
        };
        readonly issuesBody: {
            readonly type: "input";
            readonly title: "Open Issue Affected (Details)";
            readonly description: "If issues are closed, the commit requires a body. Please enter a longer description of the commit itself";
            readonly when: (answers: Record<string, any>) => boolean;
            readonly maxLength: 600;
            readonly minLength: 3;
        };
    };
    types: {
        readonly chore: {
            readonly description: "Other changes that don't modify src or test files";
            readonly title: "Chore";
            readonly emoji: "⚙️  ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Miscellaneous";
                readonly hidden: false;
            };
        };
        readonly fix: {
            readonly description: "A change that resolves an issue previously identified with the package";
            readonly title: "Bug Fix";
            readonly emoji: "🪲  ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Bug Fixes";
                readonly hidden: false;
            };
        };
        readonly feat: {
            readonly description: "A change that adds a new feature to the package";
            readonly title: "Feature";
            readonly emoji: "🔑 ";
            readonly semverBump: "minor";
            readonly changelog: {
                readonly title: "Features";
                readonly hidden: false;
            };
        };
        readonly ci: {
            readonly description: "Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)";
            readonly title: "Continuous Integration";
            readonly emoji: "🧰 ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Continuous Integration";
                readonly hidden: false;
            };
        };
        readonly refactor: {
            readonly description: "A code change that neither fixes a bug nor adds a feature";
            readonly title: "Code Refactoring";
            readonly emoji: "🧪 ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Source Code Improvements";
                readonly hidden: false;
            };
        };
        readonly style: {
            readonly description: "Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)";
            readonly title: "Style Improvements";
            readonly emoji: "💎 ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Style Improvements";
                readonly hidden: false;
            };
        };
        readonly perf: {
            readonly description: "A code change that improves performance";
            readonly title: "Performance Improvement";
            readonly emoji: "⏱️  ";
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Performance Improvements";
                readonly hidden: false;
            };
        };
        readonly docs: {
            readonly description: "A change that only includes documentation updates";
            readonly title: "Documentation";
            readonly emoji: "📜 ";
            readonly semverBump: "none";
            readonly changelog: {
                readonly title: "Documentation";
                readonly hidden: false;
            };
        };
        readonly test: {
            readonly description: "Adding missing tests or correcting existing tests";
            readonly title: "Testing";
            readonly emoji: "🚨 ";
            readonly semverBump: "none";
            readonly changelog: {
                readonly title: "Testing";
                readonly hidden: true;
            };
        };
        readonly deps: {
            readonly description: "Changes that add, update, or remove dependencies. This includes devDependencies and peerDependencies";
            readonly title: "Dependencies";
            readonly emoji: "📦 ";
            readonly hidden: true;
            readonly semverBump: "patch";
            readonly changelog: {
                readonly title: "Dependency Upgrades";
                readonly hidden: false;
            };
        };
        readonly build: {
            readonly description: "Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)";
            readonly title: "Build";
            readonly emoji: "🛠 ";
            readonly hidden: true;
            readonly semverBump: "none";
            readonly changelog: {
                readonly title: "Build";
                readonly hidden: true;
            };
        };
        readonly release: {
            readonly description: "Publishing a commit containing a newly released version";
            readonly title: "Publish Release";
            readonly emoji: "🚀 ";
            readonly hidden: true;
            readonly semverBump: "none";
            readonly changelog: {
                readonly title: "Publish Release";
                readonly hidden: true;
            };
        };
    };
};
declare const DEFAULT_INDEPENDENT_RELEASE_TAG_PATTERN = "{projectName}@{version}";
declare const DEFAULT_FIXED_RELEASE_TAG_PATTERN = "{releaseGroupName}@{version}";
declare const DEFAULT_COMMIT_MESSAGE = "release(monorepo): Publish release updates";
declare const DEFAULT_RELEASE_GROUP_GIT_CONFIG: {
    commit: boolean;
    commitMessage: string;
    commitArgs: string;
    tag: boolean;
    tagMessage: string;
    tagArgs: string;
    stageChanges: boolean;
    pushArgs: string;
};
declare const DEFAULT_VERSION_RELEASE_CONFIG: {
    readonly currentVersionResolver: "git-tag";
    readonly fallbackCurrentVersionResolver: "disk";
    readonly specifierSource: "conventional-commits";
    readonly groupPreVersionCommand: "pnpm build";
    readonly preserveLocalDependencyProtocols: true;
    readonly preserveMatchingDependencyRanges: true;
    readonly logUnchangedProjects: true;
    readonly updateDependents: "always";
    readonly git: {
        readonly stageChanges: true;
        readonly commit: boolean;
        readonly commitMessage: string;
        readonly commitArgs: string;
        readonly tag: boolean;
        readonly tagMessage: string;
        readonly tagArgs: string;
        readonly pushArgs: string;
    };
};
declare const DEFAULT_CHANGELOG_RELEASE_CONFIG: {
    readonly createRelease: "github";
    readonly renderOptions: {
        readonly authors: false;
        readonly commitReferences: true;
        readonly versionTitleDate: true;
    };
    readonly git: {
        readonly commit: true;
        readonly tag: true;
        readonly push: true;
        readonly commitMessage: string;
        readonly commitArgs: string;
        readonly tagMessage: string;
        readonly tagArgs: string;
        readonly stageChanges: boolean;
        readonly pushArgs: string;
    };
};
declare const DEFAULT_RELEASE_GROUP_CONFIG: {
    readonly changelog: {
        readonly createRelease: "github";
        readonly renderOptions: {
            readonly authors: false;
            readonly commitReferences: true;
            readonly versionTitleDate: true;
        };
        readonly git: {
            readonly commit: true;
            readonly tag: true;
            readonly push: true;
            readonly commitMessage: string;
            readonly commitArgs: string;
            readonly tagMessage: string;
            readonly tagArgs: string;
            readonly stageChanges: boolean;
            readonly pushArgs: string;
        };
    };
    readonly version: {
        readonly currentVersionResolver: "git-tag";
        readonly fallbackCurrentVersionResolver: "disk";
        readonly specifierSource: "conventional-commits";
        readonly groupPreVersionCommand: "pnpm build";
        readonly preserveLocalDependencyProtocols: true;
        readonly preserveMatchingDependencyRanges: true;
        readonly logUnchangedProjects: true;
        readonly updateDependents: "always";
        readonly git: {
            readonly stageChanges: true;
            readonly commit: boolean;
            readonly commitMessage: string;
            readonly commitArgs: string;
            readonly tag: boolean;
            readonly tagMessage: string;
            readonly tagArgs: string;
            readonly pushArgs: string;
        };
    };
    readonly versionPlans: false;
};
declare const DEFAULT_INDEPENDENT_RELEASE_GROUP_CONFIG: {
    readonly projectsRelationship: "independent";
    readonly releaseTag: {
        readonly pattern: "{projectName}@{version}";
    };
};
declare const DEFAULT_FIXED_RELEASE_GROUP_CONFIG: {
    readonly projectsRelationship: "fixed";
    readonly releaseTag: {
        readonly pattern: "{releaseGroupName}@{version}";
    };
};
declare const DEFAULT_JS_RELEASE_GROUP_CONFIG: Omit<ReleaseGroupConfig, "projects">;
declare const DEFAULT_RUST_RELEASE_GROUP_CONFIG: Omit<ReleaseGroupConfig, "projects">;
declare const DEFAULT_RELEASE_CONFIG: ReleaseConfig;
declare function mergeReleaseGroupConfig(config: Partial<ReleaseGroupConfig>, defaultConfig: Partial<ReleaseGroupConfig>, workspaceConfig: StormWorkspaceConfig): ReleaseGroupConfig;
/**
 * Get the release group configurations, applying defaults where necessary
 *
 * @param releaseConfig - The release configuration to use
 * @param workspaceConfig - The workspace configuration to use
 * @returns The release group configurations
 */
declare function getReleaseGroupConfig(projectGraph: ProjectGraph, releaseConfig: Partial<ReleaseConfig>, workspaceConfig: StormWorkspaceConfig): {
    [k: string]: ReleaseGroupConfig;
};
declare function getReleaseConfig(projectGraph: ProjectGraph, releaseConfig: Partial<ReleaseConfig>, workspaceConfig: StormWorkspaceConfig, ignoreNxJsonConfig?: boolean): NxReleaseConfig;
/**
 * Format the release configuration for logging, sorting keys and omitting the workspaceConfig for readability
 *
 * @param config - The release configuration to format
 * @returns The formatted release configuration log message
 */
declare function formatConfigLog(config: NxReleaseConfig | Partial<ReleaseConfig>): string;

export { DEFAULT_CHANGELOG_RELEASE_CONFIG, DEFAULT_COMMIT_MESSAGE, DEFAULT_CONVENTIONAL_COMMITS_CONFIG, DEFAULT_FIXED_RELEASE_GROUP_CONFIG, DEFAULT_FIXED_RELEASE_TAG_PATTERN, DEFAULT_INDEPENDENT_RELEASE_GROUP_CONFIG, DEFAULT_INDEPENDENT_RELEASE_TAG_PATTERN, DEFAULT_JS_RELEASE_GROUP_CONFIG, DEFAULT_RELEASE_CONFIG, DEFAULT_RELEASE_GROUP_CONFIG, DEFAULT_RELEASE_GROUP_GIT_CONFIG, DEFAULT_RUST_RELEASE_GROUP_CONFIG, DEFAULT_VERSION_RELEASE_CONFIG, formatConfigLog, getReleaseConfig, getReleaseGroupConfig, mergeReleaseGroupConfig };
