oxc-project
oxc-resolver
Blog
Docs
Changelog
Blog
Docs
Changelog
Overview
Branches
Benchmarks
Runs
Performance History
Latest Results
feat: record tsconfig files loaded through the `extends` chain
shulaoda:07-14-feat_record_tsconfig_files_loaded_through_the_extends_chain
3 hours ago
chore(deps): update dependency @napi-rs/cli to v3.7.3
renovate/napi
20 hours ago
chore(deps): update napi (#1307) This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---|---|---| | [@napi-rs/cli](https://napi.rs/) ([source](https://redirect.github.com/napi-rs/napi-rs)) | [`3.7.2` → `3.7.3`](https://renovatebot.com/diffs/npm/@napi-rs%2fcli/3.7.2/3.7.3) |  |  |  |  | devDependencies | patch | | [napi](https://redirect.github.com/napi-rs/napi-rs) | `3.10.4` → `3.10.5` |  |  |  |  | dependencies | patch | --- ### Release Notes <details> <summary>napi-rs/napi-rs (@​napi-rs/cli)</summary> ### [`v3.7.3`](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.2...@napi-rs/cli@3.7.3) [Compare Source](https://redirect.github.com/napi-rs/napi-rs/compare/@napi-rs/cli@3.7.2...@napi-rs/cli@3.7.3) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc-resolver). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
main
1 day ago
chore(deps): update napi
renovate/napi
1 day ago
perf: store canonicalization state only where it differs from the path Canonicalization cached a `(Weak, Box<Path>)` result on every path level and interned the whole canonical-side chain alongside the logical one. For a single pnpm package both `node_modules/pkg/*` and `node_modules/.pnpm/pkg@x/node_modules/pkg/*` were fully interned, and every node of both chains stored a canonical mapping — on a path that is its own canonical form (the large majority) that is a self-referential `Weak` plus a byte-copy of the node's own spelling. Keep canonicalization state only where it is not redundant: - A path that is its own canonical form (no ancestor is a symlink — the large majority) carries a one-bit `canonical_is_self` flag and no heap. - A symlink stores its resolved target (live `Weak`, used by `followed_metadata`); a path below a symlink caches its derived canonical form so re-resolving it stays O(1). `Cache::canonicalize` scans the cached parent chain bottom-up to the nearest node whose canonical form is known, verifies via the cached `lstat` bits that the suffix contains no symlink, then folds the suffix onto the prefix in one allocation. Measured over the bench-pm workload (16 requests, 8 layouts): - Cache entries carrying a canonical mapping: 50-71 -> 5-21 per combo. - Path key + mapping heap bytes: -40% per combo. - Cold allocations: -6 to -9% (npm-flat 1086->1020, pnpm-isolated 1211->1127). - Filesystem syscalls: byte-identical (per-op-type and total). - Warm resolution: at parity (allocations identical; wall time within noise on resolver_memory / resolver_real single-thread and resolve-from-symlinks). Adds tests pinning that self-canonical paths store no mapping and that dirty spellings inside node_modules canonicalize correctly. Closes #852
perf/canonicalize-symlink-mappings
2 days ago
perf: store canonicalization state only where it differs from the path Canonicalization cached a `(Weak, Box<Path>)` result on every path level and interned the whole canonical-side chain alongside the logical one. For a single pnpm package both `node_modules/pkg/*` and `node_modules/.pnpm/pkg@x/node_modules/pkg/*` were fully interned, and every node of both chains stored a canonical mapping — on a path that is its own canonical form (the large majority) that is a self-referential `Weak` plus a byte-copy of the node's own spelling. Keep canonicalization state only where it is not redundant: - A path that is its own canonical form (no ancestor is a symlink) carries a one-bit `canonical_is_self` flag and no heap. - A symlink stores its resolved target (live `Weak`, used by `followed_metadata`); a path below a symlink caches its derived canonical form (dangling `Weak`) so re-resolving it stays O(1). `Cache::canonicalize` scans the cached parent chain bottom-up to the nearest node whose canonical form is known, verifying via the cached `lstat` bits that the suffix contains no symlink, then folds the suffix onto the prefix in one allocation. Measured over the bench-pm workload (16 requests, 8 layouts): - Cache entries carrying a canonical mapping: 50-71 -> 5-21 per combo. - Path key + mapping heap bytes: -40% per combo. - Cold allocations: -6 to -9% (npm-flat 1086->1016, pnpm-isolated 1211->1113). - Filesystem syscalls: byte-identical (per-op-type and total). - Warm resolution: at parity (allocations identical; wall time within noise on resolver_memory / resolver_real single-thread and resolve-from-symlinks). Adds a `pm-dense` benchmark (one cold resolver over every top-level `lodash-es/<file>.js`, serial) covering the dense regime the 16-request workload dilutes, and tests pinning that self-canonical paths store no mapping and that dirty spellings inside node_modules canonicalize correctly. Closes #852
perf/canonicalize-symlink-mappings
2 days ago
perf: store canonicalization state only where it differs from the path Canonicalization cached a `(Weak, Box<Path>)` result on every path level and interned the whole canonical-side chain alongside the logical one. For a single pnpm package both `node_modules/pkg/*` and `node_modules/.pnpm/pkg@x/node_modules/pkg/*` were fully interned, and every node of both chains stored a canonical mapping — on a path that is its own canonical form (the large majority) that is a self-referential `Weak` plus a byte-copy of the node's own spelling. Keep canonicalization state only where it is not redundant: - A path that is its own canonical form (no ancestor is a symlink) carries a one-bit `canonical_is_self` flag and no heap. - A symlink stores its resolved target (live `Weak`, used by `followed_metadata`); a path below a symlink caches its derived canonical form (dangling `Weak`) so re-resolving it stays O(1). `Cache::canonicalize` scans the cached parent chain bottom-up to the nearest node whose canonical form is known, verifying via the cached `lstat` bits that the suffix contains no symlink, then folds the suffix onto the prefix in one allocation. Measured over the bench-pm workload (16 requests, 8 layouts): - Cache entries carrying a canonical mapping: 50-71 -> 5-21 per combo. - Path key + mapping heap bytes: -40% per combo. - Cold allocations: -6 to -9% (npm-flat 1086->1016, pnpm-isolated 1211->1113). - Filesystem syscalls: byte-identical (per-op-type and total). - Warm resolution: at parity (allocations identical; wall time within noise on resolver_memory / resolver_real single-thread and resolve-from-symlinks). Adds a `pm-dense` benchmark (one cold resolver over every top-level `lodash-es/<file>.js`, serial) covering the dense regime the 16-request workload dilutes, and tests pinning that self-canonical paths store no mapping and that dirty spellings inside node_modules canonicalize correctly. Closes #852
perf/canonicalize-symlink-mappings
2 days ago
chore(deps): update rust crates (#1306) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [memchr](https://redirect.github.com/BurntSushi/memchr) | dependencies | patch | `2.8.2` → `2.8.3` | | [simd-json](https://crates.io/crates/simd-json) | dependencies | patch | `0.17.0` → `0.17.3` | --- ### Release Notes <details> <summary>BurntSushi/memchr (memchr)</summary> ### [`v2.8.3`](https://redirect.github.com/BurntSushi/memchr/compare/2.8.2...2.8.3) [Compare Source](https://redirect.github.com/BurntSushi/memchr/compare/2.8.2...2.8.3) </details> --- ### Configuration 📅 **Schedule**: (in timezone Asia/Shanghai) - Branch creation - "before 10am on monday" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/oxc-project/oxc-resolver). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
main
2 days ago
Latest Branches
CodSpeed Performance Gauge
+2%
feat: record tsconfig files loaded through the `extends` chain
#1309
3 hours ago
8a987ca
shulaoda:07-14-feat_record_tsconfig_files_loaded_through_the_extends_chain
CodSpeed Performance Gauge
+5%
chore(deps): update dependency @napi-rs/cli to v3.7.3
#1308
20 hours ago
f02df2f
renovate/napi
CodSpeed Performance Gauge
+7%
perf: store canonicalization state only where it differs from the path
#1298
2 days ago
a372fb0
perf/canonicalize-symlink-mappings
© 2026 CodSpeed Technology
Home
Terms
Privacy
Docs