mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-24 16:46:06 -04:00
* feat(pacquet): port pnpm.overrides support to the install chain
Adds a new `pacquet-config-parse-overrides` crate (port of
`@pnpm/config.parse-overrides`), threads `overrides` through
`Config`/`WorkspaceSettings`, surfaces lockfile-side drift as
`StalenessReason::OverridesChanged` (matching upstream's
`getOutdatedLockfileSetting` overrides branch), and applies the parsed
overrides to a cloned root manifest before the frozen-lockfile
freshness check so post-override lockfile specifiers line up with the
on-disk manifest. The read-package-hook port (`VersionsOverrider`)
mirrors upstream's `createVersionsOverrider` minus the peer-arm
promotion, which is deferred until peer install lands. Catalog refs in
override values surface as `INVALID_OVERRIDES` until catalogs are
ported.
* chore(pacquet): satisfy Dylint Perfectionist lints and fix stale doc link
Renames single-letter closure / function / generic params introduced
by the overrides port to descriptive names, fixes trailing-comma
policy in test macro invocations, swaps the Windows path literal to
a raw string, and removes a stale `[`Self::root_dir`]` rustdoc link
left behind when the `root_dir` field was dropped from
`VersionsOverrider`.
* style(pacquet): apply rustfmt to install.rs overrides_map binding
* fix(pacquet/overrides): address review feedback
- `parse_overrides` doc no longer claims insertion-order behavior; it
accurately states that `HashMap` iteration is unordered and points
ordered-output callers at `parse_overrides_iter`.
- `WorkspaceSettings::apply_to` now collapses `overrides: {}` from a
later layer (env overlay, repeat `apply_to`) to `None` on `Config`,
so an explicit empty map clears an earlier non-empty assignment
instead of silently being skipped. Adds a regression test for the
env-overlay-clears-yaml shape.
- `sort_by_specificity` widens its comparator to a 3-way result so
Rust's `sort_by` total-order precondition holds. The strict
Less/Greater arms keep the sort outcome identical to upstream's
first-match choice; the `Equal` arm covers mutually-intersecting
ranges.
- `resolve_local_override_spec` routes the absolute-path and
diff-paths-fallback branches through `normalize_path` too, so
Windows `\` separators get rewritten to `/` for every `link:` /
`file:` shape (not just the diff-paths success branch).
163 lines
8.5 KiB
TOML
163 lines
8.5 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["pacquet/crates/*", "pacquet/tasks/*"]
|
|
|
|
[workspace.package]
|
|
authors = ["Yagiz Nizipli <yagiz@nizipli.com"]
|
|
description = "Pacquet"
|
|
edition = "2024"
|
|
homepage = "https://github.com/pnpm/pacquet"
|
|
keywords = ["nodejs", "package", "manager", "pnpm", "npm"]
|
|
license = "MIT"
|
|
repository = "https://github.com/pnpm/pacquet"
|
|
|
|
[workspace.dependencies]
|
|
# Crates
|
|
pacquet-catalogs-config = { path = "pacquet/crates/catalogs-config" }
|
|
pacquet-catalogs-protocol-parser = { path = "pacquet/crates/catalogs-protocol-parser" }
|
|
pacquet-catalogs-resolver = { path = "pacquet/crates/catalogs-resolver" }
|
|
pacquet-catalogs-types = { path = "pacquet/crates/catalogs-types" }
|
|
pacquet-cli = { path = "pacquet/crates/cli" }
|
|
pacquet-cmd-shim = { path = "pacquet/crates/cmd-shim" }
|
|
pacquet-crypto-hash = { path = "pacquet/crates/crypto-hash" }
|
|
pacquet-crypto-shasums-file = { path = "pacquet/crates/crypto-shasums-file" }
|
|
pacquet-engine-runtime-bun-resolver = { path = "pacquet/crates/engine-runtime-bun-resolver" }
|
|
pacquet-engine-runtime-deno-resolver = { path = "pacquet/crates/engine-runtime-deno-resolver" }
|
|
pacquet-engine-runtime-node-resolver = { path = "pacquet/crates/engine-runtime-node-resolver" }
|
|
pacquet-fs = { path = "pacquet/crates/fs" }
|
|
pacquet-registry = { path = "pacquet/crates/registry" }
|
|
pacquet-tarball = { path = "pacquet/crates/tarball" }
|
|
pacquet-testing-utils = { path = "pacquet/crates/testing-utils" }
|
|
pacquet-package-manifest = { path = "pacquet/crates/package-manifest" }
|
|
pacquet-package-manager = { path = "pacquet/crates/package-manager" }
|
|
pacquet-package-is-installable = { path = "pacquet/crates/package-is-installable" }
|
|
pacquet-lockfile = { path = "pacquet/crates/lockfile" }
|
|
pacquet-lockfile-preferred-versions = { path = "pacquet/crates/lockfile-preferred-versions" }
|
|
pacquet-lockfile-verification = { path = "pacquet/crates/lockfile-verification" }
|
|
pacquet-modules-yaml = { path = "pacquet/crates/modules-yaml" }
|
|
pacquet-network = { path = "pacquet/crates/network" }
|
|
pacquet-config = { path = "pacquet/crates/config" }
|
|
pacquet-config-parse-overrides = { path = "pacquet/crates/config-parse-overrides" }
|
|
pacquet-executor = { path = "pacquet/crates/executor" }
|
|
pacquet-exportable-manifest = { path = "pacquet/crates/exportable-manifest" }
|
|
pacquet-directory-fetcher = { path = "pacquet/crates/directory-fetcher" }
|
|
pacquet-git-fetcher = { path = "pacquet/crates/git-fetcher" }
|
|
pacquet-deps-path = { path = "pacquet/crates/deps-path" }
|
|
pacquet-diagnostics = { path = "pacquet/crates/diagnostics" }
|
|
pacquet-graph-hasher = { path = "pacquet/crates/graph-hasher" }
|
|
pacquet-store-dir = { path = "pacquet/crates/store-dir" }
|
|
pacquet-reporter = { path = "pacquet/crates/reporter" }
|
|
pacquet-patching = { path = "pacquet/crates/patching" }
|
|
pacquet-real-hoist = { path = "pacquet/crates/real-hoist" }
|
|
pacquet-resolving-default-resolver = { path = "pacquet/crates/resolving-default-resolver" }
|
|
pacquet-resolving-deps-resolver = { path = "pacquet/crates/resolving-deps-resolver" }
|
|
pacquet-resolving-git-resolver = { path = "pacquet/crates/resolving-git-resolver" }
|
|
pacquet-resolving-jsr-specifier-parser = { path = "pacquet/crates/resolving-jsr-specifier-parser" }
|
|
pacquet-resolving-local-resolver = { path = "pacquet/crates/resolving-local-resolver" }
|
|
pacquet-resolving-npm-resolver = { path = "pacquet/crates/resolving-npm-resolver" }
|
|
pacquet-resolving-parse-wanted-dependency = { path = "pacquet/crates/resolving-parse-wanted-dependency" }
|
|
pacquet-resolving-resolver-base = { path = "pacquet/crates/resolving-resolver-base" }
|
|
pacquet-resolving-tarball-resolver = { path = "pacquet/crates/resolving-tarball-resolver" }
|
|
pacquet-workspace = { path = "pacquet/crates/workspace" }
|
|
pacquet-workspace-range-resolver = { path = "pacquet/crates/workspace-range-resolver" }
|
|
pacquet-workspace-spec = { path = "pacquet/crates/workspace-spec" }
|
|
pacquet-workspace-state = { path = "pacquet/crates/workspace-state" }
|
|
|
|
# Tasks
|
|
pacquet-registry-mock = { path = "pacquet/tasks/registry-mock" }
|
|
|
|
# Dependencies
|
|
async-recursion = { version = "1.1.1" }
|
|
clap = { version = "4", features = ["derive", "string"] }
|
|
command-extra = { version = "1.0.0" }
|
|
base64 = { version = "0.22.1" }
|
|
chrono = { version = "0.4.44", default-features = false, features = ["clock"] }
|
|
dashmap = { version = "6.1.0" }
|
|
derive_more = { version = "2.1.1", features = ["full"] }
|
|
diffy = { version = "0.5.0" }
|
|
dunce = { version = "1.0.5" }
|
|
home = { version = "0.5.12" }
|
|
httpdate = { version = "1.0.3" }
|
|
ignore = { version = "0.4.25" }
|
|
indexmap = { version = "2.14.0", features = ["serde"] }
|
|
insta = { version = "1.47.2", features = ["yaml", "glob", "walkdir"] }
|
|
itertools = { version = "0.14.0" }
|
|
futures-util = { version = "0.3.32" }
|
|
gethostname = { version = "1" }
|
|
miette = { version = "7.6.0", features = ["fancy"] }
|
|
num_cpus = { version = "1.17.0" }
|
|
os_display = { version = "0.1.4" }
|
|
reflink-copy = { version = "0.1.29" }
|
|
junction = { version = "2.0.0" }
|
|
libc = { version = "0.2.186" }
|
|
reqwest = { version = "0.13", default-features = false, features = [
|
|
"hickory-dns",
|
|
"json",
|
|
"rustls",
|
|
"socks",
|
|
"stream",
|
|
] }
|
|
node-semver = { version = "2.2.0" }
|
|
pathdiff = { version = "0.2.3" }
|
|
pipe-trait = { version = "0.4.0" }
|
|
rayon = { version = "1.12.0" }
|
|
rmp-serde = { version = "1.3.0" }
|
|
rusqlite = { version = "0.39.0", features = ["bundled"] }
|
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
serde_json = { version = "1.0.149", features = ["preserve_order"] }
|
|
serde-saphyr = { version = "0.0.26" }
|
|
# 0.11 removes the LowerHex impl on Output; revisit after upstream/consumers catch up
|
|
sha2 = { version = "0.10.9" }
|
|
smart-default = { version = "0.7.1" }
|
|
split-first-char = { version = "2.0.1" }
|
|
ssri = { version = "9.2.0" }
|
|
strum = { version = "0.28.0", features = ["derive"] }
|
|
sysinfo = { version = "0.39.1" }
|
|
tar = { version = "0.4.45" }
|
|
text-block-macros = { version = "0.2.0" }
|
|
tracing = { version = "0.1.44" }
|
|
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
|
|
walkdir = { version = "2.5.0" }
|
|
wax = { version = "0.7.0" }
|
|
which = { version = "8.0.2" }
|
|
zip = { version = "8", default-features = false, features = ["deflate"] }
|
|
zune-inflate = { version = "0.2.54" }
|
|
|
|
# Dev dependencies
|
|
assert_cmd = { version = "2.2.1" }
|
|
criterion = { version = "0.8.2", features = ["async_tokio"] }
|
|
pretty_assertions = { version = "1.4.1" }
|
|
project-root = { version = "0.2.2" }
|
|
tempfile = { version = "3.27.0" }
|
|
mockito = { version = "1.7.2" }
|
|
|
|
[workspace.metadata.workspaces]
|
|
allow_branch = "main"
|
|
|
|
# Declares the `dylint_lib = "perfectionist"` cfg used by the
|
|
# `cfg_attr(dylint_lib = "perfectionist", feature(register_tool))` /
|
|
# `register_tool(perfectionist)` lines at each pacquet crate's root.
|
|
# Those `cfg_attr`s register the perfectionist tool name under dylint's
|
|
# nightly toolchain (so `#[expect(perfectionist::lint, reason = "...")]`
|
|
# at use sites compiles cleanly without a wrapper); this `check-cfg`
|
|
# entry tells stable `cargo check` that the cfg name is expected even
|
|
# though it's never set off-dylint.
|
|
[workspace.lints.rust]
|
|
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(dylint_lib, values("perfectionist"))'] }
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
strip = "symbols"
|
|
debug = false
|
|
panic = "abort" # Let it crash and force ourselves to write safe Rust.
|
|
|
|
# Use the `--profile release-debug` flag to show symbols in release mode.
|
|
# e.g. `cargo build --profile release-debug`
|
|
[profile.release-debug]
|
|
inherits = "release"
|
|
strip = false
|
|
debug = true
|