[package]
name = "brush-shell"
description = "Rust-implemented shell focused on POSIX and bash compatibility"
version = "0.4.0"
authors.workspace = true
categories.workspace = true
edition.workspace = true
keywords.workspace = true
license.workspace = true
readme.workspace = true
repository.workspace = true
rust-version.workspace = true

[package.metadata.binstall]
pkg-url = "{ repo }/releases/download/{ name }-v{ version }/brush-{ target }{ archive-suffix }"

[lib]
bench = false

[[bin]]
name = "brush"
path = "src/main.rs"
bench = false

[[test]]
name = "brush-compat-tests"
path = "tests/compat_tests.rs"
harness = false

[[test]]
name = "brush-integration-tests"
path = "tests/integration_tests.rs"
harness = false

[[test]]
name = "brush-version-tests"
path = "tests/version_tests.rs"

[[test]]
name = "brush-interactive-tests"
path = "tests/interactive_tests.rs"

[[test]]
name = "brush-completion-tests"
path = "tests/completion_tests.rs"

[[bench]]
name = "shell"
path = "benches/shell.rs"
harness = false

[features]
default = ["basic", "reedline", "minimal"]
basic = ["brush-interactive/basic"]
minimal = ["brush-interactive/minimal"]
reedline = ["brush-interactive/reedline"]
experimental = [
    "experimental-builtins",
    "experimental-bundled-coreutils",
    "experimental-load",
    "experimental-parser",
]
experimental-builtins = ["dep:brush-experimental-builtins"]
experimental-bundled-coreutils = [
    "dep:brush-coreutils-builtins",
    "brush-coreutils-builtins/coreutils.all",
]
experimental-load = ["dep:serde_json", "brush-core/serde"]
experimental-parser = [
    "brush-core/experimental-parser",
    "brush-parser/winnow-parser",
]
schema = ["dep:schemars"]

[lints]
workspace = true

[dependencies]
brush-core = { version = "^0.5.0", path = "../brush-core" }
brush-builtins = { version = "^0.2.0", path = "../brush-builtins" }
brush-coreutils-builtins = { version = "^0.1.0", path = "../brush-coreutils-builtins", optional = true }
brush-experimental-builtins = { version = "^0.1.0", path = "../brush-experimental-builtins", optional = true }
clap = { version = "4.6.0", features = ["derive", "env"] }
color-print = "0.3.7"
etcetera = "0.11.0"
schemars = { version = "1.2.1", optional = true }
serde = { version = "1.0", features = ["derive"] }
toml = "1.1.0"
const_format = "0.2.36"
git-version = "0.3.9"
serde_json = { version = "1.0.149", optional = true }
thiserror = "2.0.18"
tracing = "0.1.44"
tracing-subscriber = "0.3.23"
human-panic = "2.0.6"

[target.'cfg(not(any(unix, windows)))'.dependencies]
brush-interactive = { version = "^0.4.0", path = "../brush-interactive", features = [
    "minimal",
] }
tokio = { version = "1.52.1", features = ["rt", "sync"] }

[target.'cfg(any(unix, windows))'.dependencies]
brush-interactive = { version = "^0.4.0", path = "../brush-interactive", features = [
    "basic",
    "reedline",
] }
crossterm = "0.29.0"
tokio = { version = "1.50.0", features = ["rt", "rt-multi-thread", "sync"] }

[target.wasm32-unknown-unknown.dependencies]
getrandom = { version = "0.4.2", features = ["wasm_js"] }
uuid = { version = "1.23.1", features = ["js"] }

[dev-dependencies]
anyhow = "1.0.102"
tempfile = "3.27.0"
brush-parser = { version = "^0.4.0", path = "../brush-parser" }
brush-test-harness = { path = "../brush-test-harness", features = ["insta"] }
assert_cmd = "2.2.0"
assert_fs = "1.1.3"
colored = "3.1.1"
criterion = { version = "0.8.2", features = ["async_tokio", "html_reports"] }
descape = "3.0.0"
diff = "0.1.13"
expectrl = "0.8.0"
glob = "0.3.3"
indent = "0.1.1"
indexmap = "2.13.0"
junit-report = "0.9.0"
os-release = "0.1.0"
predicates = "3.1.4"
pretty_assertions = { version = "1.4.1", features = ["unstable"] }
regex = "1.12.3"
serde = { version = "1.0.228", features = ["derive"] }
serde_yaml = "0.9.34"
strip-ansi-escapes = "0.2.1"
test-with = { version = "0.16.0", default-features = false, features = [
    "executable",
] }
version-compare = "0.2.1"
walkdir = "2.5.0"
which = "8.0.2"

[target.'cfg(unix)'.dev-dependencies]
nix = { version = "0.31.2" }
