パッケージの詳細

unrs-resolver

unrs0MIT1.5.0

Oxc Resolver Node API with PNP support

readme

UnRS Resolver Napi Binding

See

  • index.d.ts for resolveSync and ResolverFactory API.
  • README.md for options.

API

resolve(directory, specifier) - resolve specifier at an absolute path to a directory.

directory

An absolute path to a directory where the specifier is resolved against.

For CommonJS modules, it is the __dirname variable that contains the absolute path to the folder containing current module.

For ECMAScript modules, it is the value of import.meta.url.

Behavior is undefined when given a path to a file.

specifier

The string passed to require or import, i.e. require("specifier") or import "specifier"

ESM Example

import assert from 'assert';
import path from 'path';
import resolve, { ResolverFactory } from './index.js';

// `resolve`
assert(resolve.sync(process.cwd(), './index.js').path, path.join(cwd, 'index.js'));

// `ResolverFactory`
const resolver = new ResolverFactory();
assert(resolver.sync(process.cwd(), './index.js').path, path.join(cwd, 'index.js'));

更新履歴

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.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

5.0.0 - 2025-03-07

Features

  • [breaking] Rust Edition 2024 (#402)
  • deserialize verbatim_module_syntax from compilerOptions (#411)

Refactor

  • remove papaya .collector(seize::Collector::new()) call (#393)

4.2.0 - 2025-02-19

Features

  • support wildcard * in alias plugin (#388)

4.1.0 - 2025-02-14

Features

  • merge options from extends tsconfig.json (#375)
  • add more fields in tsconfig#CompilerOptionsSerde (#374)

Bug Fixes

  • fix bench

4.0.0 - 2025-01-20

Features

  • [breaking] generic fs cache type Resolver = ResolverGeneric<FsCache<FileSystemOs>> (#358)
  • [breaking] PackageJson and TsConfig traits (#360)

Performance

  • use papaya instead of dashmap (#356)

3.0.3 - 2024-12-14

Bug Fixes

  • try browsers field and alias before resolving directory in node_modules (#349)

3.0.2 - 2024-12-13

Bug Fixes

  • special case for aliasing @/ (#348)
  • normalize resolved result on Windows for root (#345)

Refactor

  • replace UnsafeCell with RefCell (#346)

3.0.1 - 2024-12-12

Performance

  • try directory first in node_modules (#340)

3.0.0 - 2024-12-11

Added

  • [breaking] replace FileSystem::canonicalize with FileSystem::read_link (#331)

Other

  • guard load_alias on hot path (#339)

2.1.1 - 2024-11-22

Performance

  • 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)

Other

  • remove the deprecated simdutf8 aarch64_neon feature
  • mention extension must start with a . in with_extension (#313)

2.1.0 - 2024-11-20

Added

  • add Resolver::resolve_tsconfig API (#312)

Fixed

  • don't panic when resolving / with roots (#310)
  • use same UNC path normalization logic with libuv (#306)

Other

  • (deps) update rust crates to v1.0.215
  • fix symlink test init on windows (#307)

2.0.1 - 2024-11-08

Other

  • cargo upgrade && pnpm upgrade
  • bring back the symlink optimization (#298)
  • (deps) update rust crate criterion2 to v2

2.0.0 - 2024-10-22

Added

  • [breaking] add add ResolveError::Builtin::is_runtime_module (#272)

Fixed

  • use fs::canonicalize to cover symlink edge cases (#284)
  • extensionAlias cannot resolve mathjs (#273)

0.5.2 - 2025-02-28

Added

  • (pnp) support link (#49)

Other

  • bump pnp 0.9.1 (#50)

0.5.1 - 2025-02-11

Fixed

  • 🐛 pnp feat respect options.enable_pnp (#47)

0.4.0 - 2024-12-26

Feat

  • Implements the PnP manifest lookup within the resolver (#39)

0.3.6 - 2024-12-13

Fixed

  • alias match request end with slash (#35)

0.3.5 - 2024-10-21

Fixed

  • resolve mathjs error when using extensionAlias (#31)

0.3.4 - 2024-10-21

Added

  • rebase and refine extension-alias error format (#30)

1.12.0 - 2024-09-25

Added

  • [breaking] mark ResolveError #[non_exhaustive] (#252)
  • show tried extension aliases in ResolveError::ExtensionAlias (#251)
  • give a specific error for matched alias not found (#238)

1.11.0 - 2024-08-26

Added

  • use simdutf8 to validate UTF-8 when reading files (#237)
  • Yarn PnP (behind a feature flag) (#217)

1.10.2 - 2024-07-16

Chore

  • Release FreeBSD

1.10.1 - 2024-07-15

Fixed

  • resolve module ipaddr.js correctly when extensionAlias is provided (#228)

1.10.0 - 2024-07-11

Added

  • (napi) expose module type info in ResolveResult (#223)

Fixed

  • remove #[cfg(target_os = "windows")] logic in canonicalize (#221)

Other

  • update cargo deny (#222)
  • pin crate-ci/typos version

1.9.4 - 2024-07-10

Other

  • use custom canonicalize impl to avoid useless syscall (#220)
  • add symlink fixtures (#219)

1.9.3 - 2024-07-03

Fixed

  • tsconfig project reference it self should throw error (#211)

Other

  • (napi) make napi binary smaller with minimal tracing features (#213)
  • (napi) remove tokio (#212)
  • (deps) update rust crate dashmap to v6 (#209)

1.9.2 - 2024-06-30

Added

  • (napi) add tracing via OXC_LOG:DEBUG (#202)

Other

  • document directory is an absolute path for resolve(directory, specifier) (#206)
  • add a broken tsconfig test (#205)
  • improve code coverage for src/error.rs (#204)
  • skip resolving extension alias when options.extension_alias is empty (#203)
  • add npm badge to crates.io

1.9.1 - 2024-06-29

Added

  • strip symbols and enable LTO (#197)

Other

  • improve call to Path::ends_with (#199)
  • list [profile.release] explicitly (#198)

1.9.0 - 2024-06-28

Added

  • export package.json type and sideEffects field by default for bundlers (#196)

1.8.4 - 2024-06-27

Other

  • skip searching for package.json when alias_fields is not provided (#194)

1.8.3 - 2024-06-26

  • (napi) release wasi build

1.8.2 - 2024-06-24

Added

  • (napi) add async API (#191)

1.8.1 - 2024-05-31

Fixed

  • alias value should try fragment as path (#172)

1.8.0 - 2024-05-27

Added

  • [breaking] remove the constraint on packages exports default must be the last one (#171)
  • [breaking] return ResolveError:Builtin("node:{specifier}") from package imports and exports (#165)

Fixed

  • alias not found should return error (#168)

Other

  • add panic test for extensions without a leading dot (#150)
  • add test case for empty alias fields (#149)

1.7.0 - 2024-04-24

Added

  • add imports_fields option (#138)
  • substitute path that starts with ${configDir}/ in tsconfig.compilerOptions.paths (#136)

Fixed

  • RootsPlugin debug_assert on windows (#145)
  • RootsPlugin should fall through if it fails to resolve the roots (#144)
  • lazily read package.json.exports for shared resolvers (#137)

Other

  • remove PartialEq and Eq from Specifier (#148)
  • add test case for tsconfig paths alias fall through (#147)
  • use cargo shear
  • fix test not failing the jobs property (#146)
  • lazily read package.json.browser_fields for shared resolvers (#142)
  • avoid an extra allocation in load_extensions
  • ignore code coverage for Display on ResolveOptions (#140)
  • remove the browser field lookup in resolve_esm_match (#141)
  • remove the extra condition_names from package_exports_resolve

1.6.7 - 2024-04-22

Fixed

  • incorrect resolution when using shared resolvers with different main_fields (#134)

1.6.6 - 2024-04-22

Other

  • print resolve options while debug tracing (#133)

1.6.5 - 2024-04-10

Fixed

  • canonicalize is not supported on wasi target (#124)

Other

  • document feature flags

1.6.4 - 2024-03-29

Docs

  • improve terminology and clarify contexts