# Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.

[workspace]
resolver = "2"
members = [
  "bench_util",
  "cli",
  "cli/napi/sym",
  "ext/broadcast_channel",
  "ext/cache",
  "ext/canvas",
  "ext/console",
  "ext/cron",
  "ext/crypto",
  "ext/fetch",
  "ext/ffi",
  "ext/fs",
  "ext/http",
  "ext/io",
  "ext/kv",
  "ext/napi",
  "ext/net",
  "ext/node",
  "ext/url",
  "ext/web",
  "ext/webgpu",
  "ext/webidl",
  "ext/websocket",
  "ext/webstorage",
  "runtime",
  "test_ffi",
  "test_napi",
  "test_util",
]
exclude = ["test_util/std/hash/_wasm"]

[workspace.package]
authors = ["the Deno authors"]
edition = "2021"
license = "MIT"
repository = "https://github.com/denoland/deno"

[workspace.dependencies]
deno_ast = { version = "0.32.0", features = ["transpiling"] }
deno_core = { version = "0.260.0" }

deno_bench_util = { version = "0.130.0", path = "./bench_util" }
deno_lockfile = "0.18.0"
deno_media_type = { version = "0.1.1", features = ["module_specifier"] }
deno_runtime = { version = "0.144.0", path = "./runtime" }
deno_terminal = "0.1.0"
napi_sym = { version = "0.66.0", path = "./cli/napi/sym" }
test_util = { path = "./test_util" }

denokv_proto = "0.5.0"
denokv_remote = "0.5.0"
# denokv_sqlite brings in bundled sqlite if we don't disable the default features
denokv_sqlite = { default-features = false, version = "0.5.0" }

# exts
deno_broadcast_channel = { version = "0.130.0", path = "./ext/broadcast_channel" }
deno_cache = { version = "0.68.0", path = "./ext/cache" }
deno_canvas = { version = "0.5.0", path = "./ext/canvas" }
deno_console = { version = "0.136.0", path = "./ext/console" }
deno_cron = { version = "0.16.0", path = "./ext/cron" }
deno_crypto = { version = "0.150.0", path = "./ext/crypto" }
deno_fetch = { version = "0.160.0", path = "./ext/fetch" }
deno_ffi = { version = "0.123.0", path = "./ext/ffi" }
deno_fs = { version = "0.46.0", path = "./ext/fs" }
deno_http = { version = "0.133.0", path = "./ext/http" }
deno_io = { version = "0.46.0", path = "./ext/io" }
deno_kv = { version = "0.44.0", path = "./ext/kv" }
deno_napi = { version = "0.66.0", path = "./ext/napi" }
deno_net = { version = "0.128.0", path = "./ext/net" }
deno_node = { version = "0.73.0", path = "./ext/node" }
deno_tls = { version = "0.123.0", path = "./ext/tls" }
deno_url = { version = "0.136.0", path = "./ext/url" }
deno_web = { version = "0.167.0", path = "./ext/web" }
deno_webgpu = { version = "0.103.0", path = "./ext/webgpu" }
deno_webidl = { version = "0.136.0", path = "./ext/webidl" }
deno_websocket = { version = "0.141.0", path = "./ext/websocket" }
deno_webstorage = { version = "0.131.0", path = "./ext/webstorage" }

aes = "=0.8.3"
anyhow = "1.0.57"
async-trait = "0.1.73"
base64 = "0.21.4"
bencher = "0.1"
brotli = "3.3.4"
bytes = "1.4.0"
cache_control = "=0.2.0"
cbc = { version = "=0.1.2", features = ["alloc"] }
# Note: Do not use the "clock" feature of chrono, as it links us to CoreFoundation on macOS.
#       Instead use util::time::utc_now()
chrono = { version = "0.4", default-features = false, features = ["std", "serde"] }
console_static_text = "=0.8.1"
data-encoding = "2.3.3"
data-url = "=0.3.0"
dlopen2 = "0.6.1"
ecb = "=0.1.2"
elliptic-curve = { version = "0.13.4", features = ["alloc", "arithmetic", "ecdh", "std", "pem"] }
encoding_rs = "=0.8.33"
fastwebsockets = { version = "0.6", features = ["upgrade", "unstable-split"] }
filetime = "0.2.16"
flate2 = { version = "1.0.26", default-features = false }
fs3 = "0.5.0"
futures = "0.3.21"
glob = "0.3.1"
h2 = "0.4"
hex = "0.4"
http = "1.0"
http-body-util = "0.1"
http_v02 = { package = "http", version = "0.2.9" }
httparse = "1.8.0"
hyper = { version = "=1.1.0", features = ["full"] }
hyper-util = { version = "=0.1.2", features = ["tokio", "server", "server-auto"] }
hyper_v014 = { package = "hyper", version = "0.14.26", features = ["runtime", "http1"] }
indexmap = { version = "2", features = ["serde"] }
lazy-regex = "3"
libc = "0.2.126"
libz-sys = { version = "1.1", default-features = false }
log = "=0.4.20"
lsp-types = "=0.94.1" # used by tower-lsp and "proposed" feature is unstable in patch releases
memmem = "0.1.1"
monch = "=0.5.0"
notify = "=5.0.0"
num-bigint = { version = "0.4", features = ["rand"] }
once_cell = "1.17.1"
os_pipe = "=1.1.4"
p224 = { version = "0.13.0", features = ["ecdh"] }
p256 = { version = "0.13.2", features = ["ecdh"] }
p384 = { version = "0.13.0", features = ["ecdh"] }
parking_lot = "0.12.0"
percent-encoding = "=2.3.0"
phf = { version = "0.11", features = ["macros"] }
pin-project = "1.0.11" # don't pin because they yank crates from cargo
pretty_assertions = "=1.4.0"
prost = "0.11"
prost-build = "0.11"
rand = "=0.8.5"
regex = "^1.7.0"
reqwest = { version = "=0.11.20", default-features = false, features = ["rustls-tls", "stream", "gzip", "brotli", "socks", "json"] } # pinned because of https://github.com/seanmonstar/reqwest/pull/1955
ring = "^0.17.0"
rusqlite = { version = "=0.29.0", features = ["unlock_notify", "bundled"] }
rustls = "0.21.8"
rustls-pemfile = "1.0.0"
rustls-tokio-stream = "=0.2.17"
rustls-webpki = "0.101.4"
rustyline = "=13.0.0"
saffron = "=0.1.0"
scopeguard = "1.2.0"
serde = { version = "1.0.149", features = ["derive"] }
serde_bytes = "0.11"
serde_json = "1.0.85"
serde_repr = "=0.1.16"
sha2 = { version = "0.10.8", features = ["oid"] }
signature = "2.1"
slab = "0.4"
smallvec = "1.8"
socket2 = { version = "0.5.3", features = ["all"] }
tar = "=0.4.40"
tempfile = "3.4.0"
termcolor = "1.1.3"
thiserror = "1.0.40"
tokio = { version = "1.28.1", features = ["full"] }
tokio-metrics = { version = "0.3.0", features = ["rt"] }
tokio-util = "0.7.4"
tower-lsp = { version = "=0.20.0", features = ["proposed"] }
url = { version = "2.3.1", features = ["serde", "expose_internals"] }
uuid = { version = "1.3.0", features = ["v4"] }
webpki-roots = "0.25.2"
zstd = "=0.12.4"

# crypto
hkdf = "0.12.3"
rsa = { version = "0.9.3", default-features = false, features = ["std", "pem", "hazmat"] } # hazmat needed for PrehashSigner in ext/node

# webgpu
raw-window-handle = "0.5.0"
wgpu-core = { version = "=0.18", features = ["raw-window-handle"] }
wgpu-hal = "=0.18"
wgpu-types = "=0.18"

# macros
proc-macro2 = "1"
quote = "1"
syn = { version = "2", features = ["full", "extra-traits"] }

# unix
nix = "=0.26.2"

# windows deps
fwdansi = "=1.1.0"
winapi = "=0.3.9"
windows-sys = { version = "0.48.0", features = ["Win32_Media"] }
winres = "=0.1.12"

# NB: the `bench` and `release` profiles must remain EXACTLY the same.
[profile.release]
codegen-units = 1
incremental = true
lto = true
opt-level = 'z' # Optimize for size

# Build release with debug symbols: cargo build --profile=release-with-debug
[profile.release-with-debug]
inherits = "release"
debug = true

# NB: the `bench` and `release` profiles must remain EXACTLY the same.
[profile.bench]
codegen-units = 1
incremental = true
lto = true
opt-level = 'z' # Optimize for size

# Key generation is too slow on `debug`
[profile.dev.package.num-bigint-dig]
opt-level = 3

# Optimize these packages for performance.
# NB: the `bench` and `release` profiles must remain EXACTLY the same.
[profile.bench.package.rand]
opt-level = 3
[profile.bench.package.flate2]
opt-level = 3
[profile.bench.package.brotli]
opt-level = 3
[profile.bench.package.miniz_oxide]
opt-level = 3
[profile.bench.package.async-compression]
opt-level = 3
[profile.bench.package.brotli-decompressor]
opt-level = 3
[profile.bench.package.deno_bench_util]
opt-level = 3
[profile.bench.package.deno_core]
opt-level = 3
[profile.bench.package.deno_runtime]
opt-level = 3
[profile.bench.package.deno_http]
opt-level = 3
[profile.bench.package.deno_web]
opt-level = 3
[profile.bench.package.deno_broadcast_channel]
opt-level = 3
[profile.bench.package.deno_fetch]
opt-level = 3
[profile.bench.package.deno_ffi]
opt-level = 3
[profile.bench.package.deno_tls]
opt-level = 3
[profile.bench.package.deno_websocket]
opt-level = 3
[profile.bench.package.deno_net]
opt-level = 3
[profile.bench.package.deno_crypto]
opt-level = 3
[profile.bench.package.deno_node]
opt-level = 3
[profile.bench.package.num-bigint-dig]
opt-level = 3
[profile.bench.package.v8]
opt-level = 3
[profile.bench.package.serde_v8]
opt-level = 3
[profile.bench.package.serde]
opt-level = 3
[profile.bench.package.deno_url]
opt-level = 3
[profile.bench.package.url]
opt-level = 3
[profile.bench.package.bytes]
opt-level = 3
[profile.bench.package.futures-util]
opt-level = 3
[profile.bench.package.fastwebsockets]
opt-level = 3
[profile.bench.package.hyper]
opt-level = 3
[profile.bench.package.tokio]
opt-level = 3
[profile.bench.package.zstd]
opt-level = 3
[profile.bench.package.zstd-sys]
opt-level = 3
[profile.bench.package.base64-simd]
opt-level = 3

# NB: the `bench` and `release` profiles must remain EXACTLY the same.
[profile.release.package.rand]
opt-level = 3
[profile.release.package.flate2]
opt-level = 3
[profile.release.package.brotli]
opt-level = 3
[profile.release.package.miniz_oxide]
opt-level = 3
[profile.release.package.async-compression]
opt-level = 3
[profile.release.package.brotli-decompressor]
opt-level = 3
[profile.release.package.deno_bench_util]
opt-level = 3
[profile.release.package.deno_core]
opt-level = 3
[profile.release.package.deno_runtime]
opt-level = 3
[profile.release.package.deno_http]
opt-level = 3
[profile.release.package.deno_net]
opt-level = 3
[profile.release.package.deno_web]
opt-level = 3
[profile.release.package.deno_crypto]
opt-level = 3
[profile.release.package.deno_node]
opt-level = 3
[profile.release.package.deno_broadcast_channel]
opt-level = 3
[profile.release.package.deno_fetch]
opt-level = 3
[profile.release.package.deno_ffi]
opt-level = 3
[profile.release.package.deno_tls]
opt-level = 3
[profile.release.package.deno_websocket]
opt-level = 3
[profile.release.package.deno_napi]
opt-level = 3
[profile.release.package.test_napi]
opt-level = 3
[profile.release.package.num-bigint-dig]
opt-level = 3
[profile.release.package.v8]
opt-level = 3
[profile.release.package.serde_v8]
opt-level = 3
[profile.release.package.serde]
opt-level = 3
[profile.release.package.deno_url]
opt-level = 3
[profile.release.package.url]
opt-level = 3
[profile.release.package.bytes]
opt-level = 3
[profile.release.package.futures-util]
opt-level = 3
[profile.release.package.hyper]
opt-level = 3
[profile.release.package.tokio]
opt-level = 3
[profile.release.package.zstd]
opt-level = 3
[profile.release.package.zstd-sys]
opt-level = 3
[profile.release.package.base64-simd]
opt-level = 3