import { VersioningName } from "../../versioning-list.generated.js";
import { Options } from "execa";

//#region lib/util/exec/types.d.ts
interface ConstraintDefinition {
  name: string;
  description?: string;
}
/**
 * A `tool` that Containerbase supports.
 *
 * TODO #41849 replace with upstream types
 */
declare const toolDefinitions: [{
  readonly name: "bazelisk";
}, {
  readonly name: "bun";
}, {
  readonly name: "bundler";
}, {
  readonly name: "cocoapods";
}, {
  readonly name: "composer";
}, {
  readonly name: "conan";
}, {
  readonly name: "copier";
}, {
  readonly name: "corepack";
}, {
  readonly name: "deno";
}, {
  readonly name: "devbox";
}, {
  readonly name: "dotnet";
}, {
  readonly name: "erlang";
}, {
  readonly name: "elixir";
}, {
  readonly name: "flux";
}, {
  readonly name: "gleam";
}, {
  readonly name: "golang";
}, {
  readonly name: "gradle";
}, {
  readonly name: "hashin";
}, {
  readonly name: "helm";
}, {
  readonly name: "helmfile";
}, {
  readonly name: "java";
}, {
  readonly name: "java-maven";
}, {
  readonly name: "jb";
}, {
  readonly name: "kustomize";
}, {
  readonly name: "maven";
}, {
  readonly name: "mise";
}, {
  readonly name: "nix";
}, {
  readonly name: "node";
}, {
  readonly name: "npm";
}, {
  readonly name: "pdm";
}, {
  readonly name: "php";
}, {
  readonly name: "pip-tools";
}, {
  readonly name: "pipenv";
}, {
  readonly name: "pnpm";
}, {
  readonly name: "pixi";
}, {
  readonly name: "poetry";
}, {
  readonly name: "python";
}, {
  readonly name: "ruby";
  readonly description: "Also used in the `rubygems` Datasource";
}, {
  readonly name: "rust";
}, {
  readonly name: "uv";
}, {
  readonly name: "yarn";
}, {
  readonly name: "yarn-slim";
}, {
  readonly name: "dart";
}, {
  readonly name: "flutter";
}, {
  readonly name: "vendir";
}];
/**
 * A `tool` that Containerbase supports.
 */
type ToolName = (typeof toolDefinitions)[number]['name'];
/**
 * A `tool` that Containerbase supports.
 */
declare const toolNames: ToolName[];
declare function isToolName(value: unknown): value is ToolName;
/**
 * Additional constraints that can be specified for some Managers, but are **not** tools that Containerbase supports, with optional description.
 */
declare const additionalConstraintDefinitions: [{
  readonly name: "go";
  readonly description: "Used in the `gomod` manager to specify the version of the Go toolchain to use.\n\nIn precedence order:\n\n1. config: `constraints.go`\n1. `go.mod`: `toolchain` directive\n1. `go.mod`: `go` directive\n\nNOTE that the `constraints.golang` is not used (https://github.com/renovatebot/renovate/issues/42601)\n  ";
}, {
  readonly name: "gomodMod";
  readonly description: "Used in the `gomod` manager to specify a tag for [`github.com/marwan-at-work/mod`](https://github.com/marwan-at-work/mod).\n\nMust be prefixed with `v`.";
}, {
  readonly name: "jenkins";
  readonly description: "Used in the `jenkins-plugins` datasource to specify a minimum version of Jenkins that a plugin must support.";
}, {
  readonly name: "pipTools";
  readonly description: "Used in the `pip-compile` manager to specify a version of `pip-tools` to use. @deprecated TODO remove in #42599";
}, {
  readonly name: "platform";
  readonly description: "Used in the `rubygems` datasource to specify the `platform` that the Gem dependency supports.";
}, {
  readonly name: "rubygems";
  readonly description: "Used in the `rubygems` datasource to specify the version of the `rubygems` tool that is needed to use this Gem.";
}, {
  readonly name: "vscode";
  readonly description: "Used in the `npm` manager to track the version of VSCode that the package is compatible with.";
}, {
  readonly name: "dotnet-sdk";
  readonly description: "Used in the `nuget` manager to track .NET SDK version required.";
}, {
  readonly name: "perl";
  readonly description: "Used in the `cpanfile` manager to track Perl version required.";
}, {
  readonly name: "%goMod";
  readonly description: "Used in the `gomod` manager to determine the [minimum version of Go required to use this module](https://go.dev/ref/mod#go-mod-file-go).\n\nNote that this is prefixed with a `%` to explicilty note that this is not a tool that Containerbase knows.";
}];
/**
 * Additional constraints that can be specified for some Managers, but are **not** tools that Containerbase supports.
 */
type AdditionalConstraintName = (typeof additionalConstraintDefinitions)[number]['name'];
/**
 * Additional constraints that can be specified for some Managers, but are **not** tools that Containerbase supports.
 */
declare const additionalConstraintNames: AdditionalConstraintName[];
declare function isAdditionalConstraintName(value: unknown): value is AdditionalConstraintName;
/**
 * A name usable as a key in a `constraints` record, which may be tools that Containerbase supports.
 */
type ConstraintName = ToolName | AdditionalConstraintName;
declare function isConstraintName(value: unknown): value is ConstraintName;
interface ToolConstraint {
  toolName: ToolName;
  constraint?: string | null;
}
interface ToolConfig {
  datasource: string;
  extractVersion?: string;
  packageName: string;
  versioning: VersioningName;
}
type Opt<T> = T | null | undefined;
type VolumesPair = [string, string];
type VolumeOption = Opt<string | VolumesPair>;
interface DockerOptions {
  volumes?: Opt<VolumeOption[]>;
  envVars?: Opt<Opt<string>[]>;
  cwd?: Opt<string>;
}
type DataListener = (chunk: any) => void;
interface OutputListeners {
  stdout?: DataListener[];
  stderr?: DataListener[];
}
interface RawExecOptions extends Options {
  maxBuffer?: number | undefined;
  cwd?: string;
  outputListeners?: OutputListeners;
}
interface ExecResult {
  stdout: string;
  stderr: string;
  /**
   * The process' exit code in the case of a failure.
   *
   * This is only set if using `ignoreFailure` when executing a command
   *
   */
  exitCode?: number;
}
type ExtraEnv<T = unknown> = Record<string, T>;
interface ExecOptions {
  cwd?: string;
  cwdFile?: string;
  env?: Opt<ExtraEnv>;
  extraEnv?: Opt<ExtraEnv>;
  docker?: Opt<DockerOptions>;
  toolConstraints?: Opt<ToolConstraint[]>;
  preCommands?: Opt<string[]>;
  ignoreStdout?: boolean;
  maxBuffer?: number | undefined;
  timeout?: number | undefined;
  shell?: boolean | string | undefined;
}
/**
 * configuration that can be configured on a per-command basis, that doesn't make sense to be on the `RawExecOptions`
 */
interface CommandWithOptions {
  command: string[];
  /** do not throw errors when a command fails, but do log that an error occurred */
  ignoreFailure?: boolean;
  /**
   * Execute the `command` within a shell
   *
   * WARNING this can result in security issues if this includes user-controlled commands
   * **/
  shell?: boolean | string;
}
//#endregion
export { AdditionalConstraintName, CommandWithOptions, ConstraintDefinition, ConstraintName, DataListener, DockerOptions, ExecOptions, ExecResult, ExtraEnv, Opt, OutputListeners, RawExecOptions, ToolConfig, ToolConstraint, ToolName, VolumeOption, VolumesPair, additionalConstraintDefinitions, additionalConstraintNames, isAdditionalConstraintName, isConstraintName, isToolName, toolDefinitions, toolNames };
//# sourceMappingURL=types.d.ts.map