import { PublishOptions } from 'jsr';
import { NextRelease, VerifyConditionsContext, PrepareContext, PublishContext, SuccessContext, FailContext, VerifyReleaseContext } from 'semantic-release';

interface PluginConfig {
    /**
     * Working directory given to `jsr publish`.
     * Defaults to current directory.
     */
    cwd?: string;
    /**
     * Path to package.json.
     * Defaults to `cwd` + `/package.json` if it exists.
     */
    pkgJsonPath?: string;
    /**
     * Additional arguments to pass to `jsr publish`.
     */
    publishArgs?: string[];
    /**
     * Allow `--allow-dirty` to be passed to `jsr publish`.
     * Defaults to `true`, as usually the version is bumped before publishing.
     * Set to `false` to prevent `--allow-dirty` from being passed.
     */
    allowDirty?: boolean;
}
interface NormalizedPluginConfig {
    cwd: string;
    name: string;
    prepare: {
        versionJsonPaths: string[];
    };
    publish: PublishOptions;
}
interface PublishResponseContext {
    nextRelease?: NextRelease;
}
interface PublishResponse {
    name: string;
    url?: string;
    channel?: string;
}

declare function verifyConditions(pluginConfig: PluginConfig, context: VerifyConditionsContext): Promise<void>;
declare function prepare(pluginConfig: PluginConfig, context: PrepareContext): Promise<void>;
declare function publish$1(pluginConfig: PluginConfig, context: PublishContext): Promise<boolean | PublishResponse>;
declare function success(pluginConfig: PluginConfig, context: SuccessContext): Promise<void>;
declare function fail(pluginConfig: PluginConfig, context: FailContext): Promise<void>;

declare function parseConfig(config: PluginConfig): Promise<NormalizedPluginConfig>;
declare function getTemporaryBinFolder(): string;
declare function removeTemporaryBinFolder(): Promise<void>;
declare function updateVersionJson(file: string, context: VerifyReleaseContext): Promise<void>;
declare function publish(config: NormalizedPluginConfig, context: VerifyConditionsContext): Promise<void>;
declare function generatePublishResponse(config: NormalizedPluginConfig, context: PublishResponseContext): PublishResponse;

export { type NormalizedPluginConfig, type PluginConfig, type PublishResponse, type PublishResponseContext, fail, generatePublishResponse, getTemporaryBinFolder, publish as jsrPublish, parseConfig, prepare, publish$1 as publish, removeTemporaryBinFolder, success, updateVersionJson, verifyConditions };
