Files

35 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

1.12.2 - 2026-05-19

๐Ÿš€ Features

  • feat: add loongarch64 builds (by @wjh-la) - #198

๐Ÿ› Bug Fixes

  • gate statx dont-sync flag for loongarch64 musl (by @JounQin) - #209

Contributors

  • @JounQin
  • @wjh-la

1.12.1 - 2026-05-19

๐Ÿ’ผ Other

  • Revert "perf: do not canonicalize the entry path (#848)" (#204) (by @JounQin) - #204

Contributors

  • @JounQin

1.12.0 - 2026-05-18

๐Ÿš€ Features

  • add node_path option to disable NODE_PATH env var behavior (#1031) (by @Boshen) - #202
  • add DTS resolver matching TypeScript's bundler mode (#997) (by @Boshen) - #202
  • support NODE_PATH module lookup (#1020) (by @Boshen) - #202
  • allow access to inner data in error related types (#990) (by @sapphi-red) - #202
  • allow subpath imports that start with #/ (#907) (by @Boshen) - #202
  • [breaking] disallow manually passing a list of references to TsconfigOptions::references (#902) (by @Boshen) - #202
  • support tsconfig rootDirs (#885) (by @Boshen) - #202
  • (napi) expose resolve_file API as resolveFileSync and resolveFileAsync (#900) (by @Boshen)
  • add resolve_file API for tsconfig auto discovery to work (#860) (by @Boshen) - #202
  • port tsconfck (find tsconfig files) (#854) (by @Boshen) - #202
  • add many.rs example for profiling resolver with many packages (#836) (by @Boshen) - #202
  • improve error message for empty package.json files (#793) (by @Boshen) - #202
  • improve PackagePathNotExported error message with condition names (by @Boshen) - #202
  • add big-endian support for package.json parsing (#768) (by @Boshen) - #202
  • add tsconfig discovery (#758) (by @Boshen) - #202
  • add ESM file:// protocol support with comprehensive tests (#746) (by @Boshen) - #202
  • only resolve file:// protocol on windows (#737) (by @Boshen) - #202
  • add benchmark for package.json deserialization (#698) (by @Boshen) - #202
  • (tsconfig) support files / include / exclude (#659) (by @shulaoda)
  • feat(tsconfig) support allowJs in compilerOptions (#658) (by @shulaoda) - #202
  • (tsconfig) complete inheritance of compilerOptions fields (#657) (by @shulaoda)
  • support pass closure to restriction (#604) (by @JounQin) - #202

๐Ÿ› Bug Fixes

  • avoid panic in resolve_file for parentless paths (#1053) (by @Boshen) - #202
  • (dts) strip ./ prefix from package entry when matching typesVersions (#1051) (by @Boshen)
  • (dts) expand Declaration to TypeScript|Declaration for package entry resolution (#1050) (by @Boshen)
  • (dts) prefer declaration extensions over JS in exports-resolved paths (#1047) (by @Boshen)
  • avoid wasm/wasi dead-code lint in NodePath (#1043) (by @Boshen) - #202
  • resolve normalized path on Windows even for symlinks: false (#1036) (by @sapphi-red) - #202
  • skip unreadable tsconfig files during auto-discovery (#1033) (by @longlho) - #202
  • remove invalid debug_assert for symlink + package.json (#1032) (by @Boshen) - #202
  • resolve clippy unnecessary_unwrap warning (#980) (by @Boshen) - #202
  • prevent tsconfig cache pollution with separate raw and built caches (#970) (by @Boshen) - #202
  • use /fixtures path for WASI target (by @Boshen) - #202
  • only recreate the cache when yarn_pnp is toggled (#943) (by @Boshen) - #202
  • resolve absolute path to package with trailing slash (#942) (by @Boshen) - #202
  • show yarn pnp errors as-is instead of NotFound error (#939) (by @sapphi-red) - #202
  • resolve solution tsconfig for auto discovered tsconfig (#927) (by @Boshen) - #202
  • fix clone_with_options + yarn_pnp: true not working (#916) (by @sapphi-red) - #202
  • fix resolution when resolving non-relative specifier on tsconfig baseUrl (#903) (by @Boshen) - #202
  • add fallback for statx NOSYS error on old kernels (#901) (by @Boshen) - #202
  • correct grammatical errors in documentation and comments (#897) (by @Boshen) - #202
  • resolve node_modules/package/dir/foo.js if node_modules/package/dir/foo/ exists (#896) (by @Boshen) - #202
  • incorrect resolution when project reference extends a tsconfig without baseUrl (#882) (by @Boshen) - #202
  • store PathBuf with weak pointers to handle cache clearing (#879) (by @Boshen) - #202
  • apply conditionNames: ['node', 'import'] when resolving tsconfig extends (#869) (by @Boshen) - #202
  • do not resolve to node_modules/pacakge/index (#849) (by @Boshen) - #202
  • use std::fs::canonicalize as a fallback when canonicalize fails (#835) (by @Boshen) - #202
  • remove AT_STATX_DONT_SYNC from statx calls (#828) (by @Boshen) - #202
  • (package_json) re-read file for serde_json fallback in simd implementation (#808) (by @Boshen)
  • revert system file cache optimization on Linux (#810) (by @Brooooooklyn) - #202
  • skip loading tsconfig.json from virtual module paths (#809) (by @sapphi-red) - #202
  • don't drop canonicalized path by cache clear (#791) (by @sapphi-red) - #202
  • derive Error for JSONError (#779) (by @Boshen) - #202
  • tsconfig paths should not be applied to paths inside node_modules (#760) (by @Boshen) - #202
  • ensure canonicalized paths remain accessible via strong references (#733) (by @Boshen) - #202
  • use Weak references for CachedPath to enable proper drop (#727) (by @Boshen) - #202
  • (tsconfig) respect Yarn PnP when resolving extends paths (#656) (by @shulaoda)
  • allow resolving package?query#fragment for packages with exports field (#655) (by @sapphi-red) - #202
  • support for resolving empty tsconfig file (#602) (by @JounQin) - #202

๐Ÿšœ Refactor

  • remove clear_cache test that dynamically creates fixtures (by @Boshen) - #202
  • move resolve and misc fixtures into fixtures/integration (by @Boshen) - #202
  • replace ignored doctest with link to example (by @Boshen) - #202
  • consolidate fixture directories for better test file mapping (by @Boshen) - #202
  • replace url crate with percent-encoding (#1065) (by @Boshen) - #202
  • clean up commented-out code in parse_package_specifier (#1035) (by @Boshen) - #202
  • replace builtins.rs with nodejs-built-in-modules crate (#940) (by @Boshen) - #202
  • s/self.cache.as_ref()/&self.cache (#910) (by @Boshen) - #202
  • remove redundant PathBuf storage in CachedPath (#891) (by @Boshen) - #202
  • remove the redundant inner_resolver from load_pnp (#862) (by @Boshen) - #202
  • improve Debug and Display for CachedPath (#861) (by @Boshen) - #202
  • too_many_arguments = "allow" (#863) (by @Boshen) - #202
  • change Tsconfig::parse to accept owned string; add replace_bom_with_whitespace (#859) (by @Boshen) - #202
  • remove the useless getters and setters from CompilerOptions (#858) (by @Boshen) - #202
  • add Tsconfig:references_resolved (#856) (by @Boshen) - #202
  • move tsconfig resolution related code to its own file (#855) (by @Boshen) - #202
  • use RwLock<Vec<Arc> for package.json storage (#838) (by @Boshen) - #202
  • do not store is_symlink in CachedPathImpl (#850) (by @Boshen) - #202
  • remove CachedPathImpl::canonicaling (#834) (by @Boshen) - #202
  • (file_system) deduplicate read methods and use Vec (#816) (by @Boshen)
  • use cfg_if and rustix in read_to_string_bypass_system_cache (#802) (by @Boshen) - #202
  • remove normalize-path dependency, use internal PathUtil (#742) (by @Boshen) - #202
  • remove a redundant path clone from PackageJson::parse (#725) (by @Boshen) - #202
  • split src/cache.rs into logical modules (#714) (by @Boshen) - #202

๐Ÿ“š Documentation

  • map npm package links to npmx.dev (#1028) (by @Boshen) - #202
  • (README.md) update logo (#968) (by @sapphi-red)

โšก Performance

  • remove unnecessary String clone in PnP resolution (#1039) (by @Boshen) - #202
  • use byte operations instead of char iteration in specifier parser (#1038) (by @Boshen) - #202
  • (resolve) reuse dot-prefixed subpath in exports/imports (#1004) (by @Boshen)
  • (cache) remove package.json index arena indirection (#1003) (by @Boshen)
  • (tsconfig) precompile wildcard path alias matcher (#1001) (by @Boshen)
  • precompile alias match metadata in resolver hot path (#999) (by @Boshen) - #202
  • remove an allocation from CachedPath::module_directory (#880) (by @Boshen) - #202
  • skip searching for node_modules/@scope/package.json (#876) (by @Boshen) - #202
  • remove the redundant node_modules/package/index cache value (#875) (by @Boshen) - #202
  • cache all package.json resolutions for faster package.json lookup (#853) (by @Boshen) - #202
  • do not canonicalize the entry path (#848) (by @Boshen) - #202
  • remove Result from CachedPathImpl::canonicalized (#847) (by @Boshen) - #202
  • fast path for node_modules/package (#839) (by @Boshen) - #202
  • cache canonicalization results at every recursion level (#843) (by @Boshen) - #202
  • use IdentityHasher for visited set to avoid double hashing (#837) (by @Boshen) - #202
  • optimize FileSystem metadata operations with rustix (#800) (by @Boshen) - #202
  • use simd-json for package.json parsing (#761) (by @Boshen) - #202
  • make url crate optional for wasm32 targets (by @Boshen) - #202
  • mark error path functions as #[cold] for better optimization (#729) (by @Boshen) - #202
  • bypass file system read cache if memory cache is available (#707) (by @Brooooooklyn) - #202
  • use memmap to speed up file reading (#696) (by @Boshen) - #202
  • use GetFileAttributesExW for symlink metadata lookup on Windows (#691) (by @sapphi-red) - #202
  • improve pattern_key_compare (#639) (by @Boshen) - #202
  • most specifiers don't have escaped characters (#636) (by @Boshen) - #202

๐Ÿงช Testing

  • add 28 tests to improve coverage (92% โ†’ 93%) (#1082) (by @Boshen) - #202
  • use CARGO_MANIFEST_DIR instead env::current_dir (by @Boshen) - #202
  • Add a test to ensure NODEJS_BUILTINS is alphabetized. (#926) (by @connorshea) - #202
  • add test cases for package imports starting with # or #/ (#905) (by @Boshen) - #202
  • change all fixture directory names to dashed case (#884) (by @Boshen) - #202
  • add a tsconfig extend not found case (#763) (by @Boshen) - #202
  • improve test coverage for edge cases (#740) (by @Boshen) - #202
  • improve coverage for check_restrictions (#739) (by @Boshen) - #202
  • add memory leak test (#726) (by @Boshen) - #202
  • enable Windows global pnp case (#703) (by @JounQin) - #202
  • (tsconfig) tweak jsx extends tests (#666) (by @shulaoda)
  • make tests pass on Windows (#654) (by @sapphi-red) - #202

๐Ÿ’ผ Other

  • Merge remote-tracking branch 'upstream/main' into chore/merge_upstream (by @JounQin) - #202
  • add tsconfig paths alias scalability benchmark (#1002) (by @Boshen) - #202
  • Revert "perf: use memmap to speed up file reading" (#701) (by @Boshen) - #202
  • Add comprehensive tests for tsconfig extends functionality (#660) (by @Copilot) - #202
  • Expose the ExtendsField enum of TsConfig (#607) (by @ostenbom) - #202

Contributors

  • @JounQin
  • @renovate[bot]
  • @Boshen
  • @sapphi-red
  • @longlho
  • @leegeunhyeok
  • @connorshea
  • @Brooooooklyn
  • @oxc-bot
  • @shulaoda
  • @Copilot
  • @ostenbom

1.11.1 - 2025-07-09

๐Ÿ“š Documentation

  • add missing descriptionFiles option introduction (by @JounQin)

Contributors

  • @JounQin

1.11.0 - 2025-07-06

๐Ÿš€ Features

  • return proper errors when failed to find or read yarn pnp manifest (#590) (by @Boshen) - #178
  • add yarn_pnp logic to FileSystem (#589) (by @Boshen) - #178
  • (resolver) rework yarn manifest file look up (#586) (by @Boshen)

๐Ÿšœ Refactor

  • remove fs_cache feature flag (#588) (by @Boshen) - #178

๐Ÿ’ผ Other

  • Merge remote-tracking branch 'upstream/main' into chore/merge_upstream (by @JounQin) - #178

Contributors

  • @JounQin
  • @oxc-bot
  • @Boshen

1.10.1 - 2025-07-02

๐Ÿ› Bug Fixes

  • fix: incorrect package.json relative path (#176) (by @JounQin) - #176

Contributors

  • @JounQin

1.10.0 - 2025-07-02

๐Ÿ› Bug Fixes

  • support resolving abnormal relative paths with node_modules (#171) (by @JounQin) - #171
  • (deps) update all dependencies (#168) (by @renovate[bot])

๐Ÿ’ผ Other

  • Merge remote-tracking branch 'upstream/main' into chore/merge_upstream (by @JounQin) - #174

Contributors

  • @JounQin
  • @renovate[bot]

1.9.2 - 2025-06-24

Bug Fixes

  • requiring . or ./ should respect mainFiles option (#163) (by @JounQin) - #163

Documentation

  • update alias and fallback options type and description (#161) (by @JounQin) - #161

Chore

  • (deps) update all dependencies (#164) (by @renovate[bot])

Contributors

  • @renovate[bot]
  • @JounQin

1.9.1 - 2025-06-20

Bug Fixes

  • (deps) update all dependencies (#157) (by @renovate[bot])

Contributors

  • @renovate[bot]

1.9.0 - 2025-06-11

Features

  • add file: protocol path support (#151) (by @JounQin) - #151
  • add two last android targets (#154) (by @JounQin) - #154

Bug Fixes

  • try different approach to support web container out of box (#150) (by @JounQin) - #150

Contributors

  • @JounQin

1.8.1 - 2025-06-11

Bug Fixes

  • keep napi property in package.json for napi-postinstall (#148) (by @JounQin)

Contributors

  • @JounQin

1.8.0 - 2025-06-11

Features

  • support runtime fallback for webcontainer (#144) (by @JounQin) - #144
  • merge from upstream oxc-project/oxc-resolver - 6th (#146) (by @JounQin) - #146

Chore

  • (deps) update all dependencies (#141) (by @renovate[bot])

Contributors

  • @JounQin
  • @renovate[bot]

1.7.13 - 2025-06-10

Bug Fixes

  • support extends in referenced project (#142)

1.7.12 - 2025-06-09

Bug Fixes

  • npm protocol alias with pnp should be supported (#139)

1.7.11 - 2025-06-05

Bug Fixes

  • remove invalid file cache due to extension alias (#136)

1.7.10 - 2025-06-05

Bug Fixes

  • Revert "fix: custom condition_names should take higher priority than target in package.json (#115)" (#131)

Other

  • chore: bump napi v3.0.0-beta.7 (#133)

1.7.9 - 2025-06-03

Bug Fixes

1.7.8 - 2025-05-29

Bug Fixes

  • resolve symlink with nested node_modules (#125)

1.7.7 - 2025-05-29

Bug Fixes

  • resolve dir index with dot specifier correctly (#123)

1.7.6 - 2025-05-28

Bug Fixes

  • prefer index over current file for . and ./ (#121)

1.7.5 - 2025-05-28

Bug Fixes

  • should try package exports first per spec (#118)

1.7.4 - 2025-05-28

Bug Fixes

  • prefer file over package dir in node_modules (#116)

1.7.3 - 2025-05-28

Bug Fixes

  • custom condition_names should take higher priority than target in package.json (#115)

1.7.2 - 2025-04-27

Bug Fixes

  • bump napi-postinstall to fix yarn pnp compatibility issue (#106)

1.7.1 - 2025-04-26

Chore

  • bump napi-postinstall to support yarn/pnpm on webcontainer (#103)

Testing

  • add case for #65 (#100)

1.7.0 - 2025-04-24

Features

  • enable no_opt_arch flag for mimalloc-safe on linux-aarch64 (#98)

1.6.6 - 2025-04-23

Features

  • add new target riscv64gc-unknown-linux-musl (#96)

1.6.5 - 2025-04-23

Bug Fixes

  • rework on handling DOS device paths on Windows (#84)
  • handle package.json and tsconfig.json with BOM (#463)

Performance

  • avoid double call to parse_package_specifier (#465)

Documentation

  • add more details about the changes in this fork (#92)

1.6.4 - 2025-04-22

Bug Fixes

  • properly handle DOS device paths in strip_windows_prefix (#455)

1.6.3 - 2025-04-21

Bug Fixes

  • support load_as_directory for pnp mode (#75)

Testing

1.6.2 - 2025-04-21

Bug Fixes

  • resolve parent base url correctly by normalizing as absolute path (#72)

1.6.1 - 2025-04-20

Bug Fixes

  • disable mimalloc on linux with aarch64 (#69)

1.6.0 - 2025-04-20

Features

  • deserialize preserve_value_imports and imports_not_used_as_values from compilerOptions (#457)
  • deserialize target from compilerOptions (#456)

Bug Fixes

  • add napi-postinstall dep for workaround npm's bug (#66)

1.5.0 - 2025-04-11

Bug Fixes

  • resolve ${configDir} in tsconfig compilerOptions.baseUrl (#450)

1.4.1 - 2025-04-07

Refactor

  • remove unnecessary checks for query (#53)

1.4.0 - 2025-04-06

Features

  • handle query and fragment in pacakge.json exports and imports field (#443)
  • resolve emitDecoratorMetadata in tsconfig (#439)
  • (napi) add mimalloc (#423)
  • [breaking] Rust Edition 2024 (#402)
  • deserialize verbatim_module_syntax from compilerOptions (#411)
  • support wildcard * in alias plugin (#388)
  • merge options from extends tsconfig.json (#375)
  • add more fields in tsconfig#CompilerOptionsSerde (#374)
  • [breaking] generic fs cache type Resolver = ResolverGeneric<FsCache<FileSystemOs>> (#358)
  • [breaking] replace FileSystem::canonicalize with FileSystem::read_link (#331)
  • faster and stable path hash for the cache (#328)
  • add Resolver::resolve_tsconfig API (#312)
  • [breaking] add ResolveError::Builtin::prefixed_with_node_colon (#272)
  • [breaking] mark ResolveError #[non_exhaustive] (#252)
  • show tried extension aliases in ResolveError::ExtensionAlias (#251)
  • give a specific error for matched alias not found (#238)
  • Yarn PnP (#217)

Bug Fixes

  • handle query and fragment in package.json exports and imports field (#443)
  • fix bench
  • try browsers field and alias before resolving directory in node_modules (#349)
  • special case for aliasing @/ (#348)
  • normalize resolved result on Windows for root (#345)
  • don't panic when resolving / with roots (#310)
  • use same UNC path normalization logic with libuv (#306)
  • use fs::canonicalize to cover symlink edge cases (#284)
  • extensionAlias cannot resolve mathjs (#273)
  • resolve module ipaddr.js correctly when extensionAlias is provided (#228)
  • (napi) update buggy NAPI-RS versions (#225)
  • remove #[cfg(target_os = "windows")] logic in canonicalize (#221)

Performance

  • use papaya instead of dashmap (#356)
  • try directory first in node_modules (#340)
  • guard load_alias on hot path (#339)
  • use as_os_str for Hash and PartialEq operations (#338)
  • reduce hash while resolving package.json (#319)
  • reduce memory allocation while normalizing package path (#318)
  • reduce memory allocation while resolving package.json (#317)
  • use path.as_os_str().hash() instead of path.hash() (#316)
  • reduce memory allocation by using a thread_local path for path methods (#315)
  • bring back the symlink optimization (#298)
  • use simdutf8 to validate UTF-8 when reading files (#237)
  • use custom canonicalize impl to avoid useless syscall (#220)

Documentation

  • fix an incorrect comment on Context::missing_dependencies
  • mention extension must start with a . in with_extension (#313)
  • (README) should be new ResolverFactory

Refactor

  • remove papaya .collector(seize::Collector::new()) call (#393)
  • replace UnsafeCell with RefCell (#346)
  • run clippy with --all-targets (#333)
  • apply latest cargo +nightly fmt (#281)
  • add more clippy fixes (#279)
  • clean up elided lifetimes (#277)

Testing

  • fix warning on Windows
  • fix symlink test init on Windows (#307)

1.3.3 - 2025-03-29

Build

  • build: remove --strip flag (#44)

Testing

  • add nested package json case (#40)

1.3.2 - 2025-03-26

Bug Fixes

  • absolute path aliasing should not be skipped (#37)

1.3.1 - 2025-03-26

Other

  • bump all (dev) deps (#34)

1.3.0 - 2025-03-26

Features

  • enable more targets (#29 and #32)

1.2.2 - 2025-03-19

Bug Fixes

  • (pnp) support pnpapi core module and package deep link (#24)

1.2.0 - 2025-03-18

Features

  • (napi) add mimalloc (#423) (#18)
  • merge from upstream oxc-project/oxc-resolver (#15)

1.1.2 - 2025-03-16

Fixed

  • references should take higher priority (#13)
  • takes paths and references into account at the same time
  • should always try resolve_path_alias

1.1.1 - 2025-03-16

Other

  • bump all (dev) deps
  • bump to edition 2024

1.1.0 - 2025-03-15

Added

  • support resolving path with extra query (#7)

1.0.0 - 2025-03-15

Old Changelog for oxc-resolver

CHANGELOG_OLD