Crates.io

ES Resolve

JavaScript/TypeScript module resolution in Rust

Installation

bash cargo add es_resolve

Get Started

```rust use std::path::{Path, PathBuf}; use es_resolve::*;

// Provide an exact path to the file from which we resolve let source = PathBuf::from("tests/fixtures/relative/js.js"); // Construct an es_resolve::EsResolver, then call resolve to get the result. // Also check es_resolve::EsResolverError for a list of errors that might occur! let target = EsResolver::new("./ts", &source, TargetEnv::Browser).resolve().unwrap(); let expectedtargetpath = Path::new("tests/fixtures/relative/ts.ts").canonicalize().unwrap(); let expectedtarget = expectedtargetpath.tostring_lossy();

// We expect to get the absolute path to the resolved target module! asserteq!(target, expectedtarget); ```

Features

General Features

| Feature | Status | Since | Note | |---|---|---|---| | Relative Module Import | 👌 | 0.1.0 | import './App' when there is an ./App.ts ./App.tsx ./App.js etc. | Non-relative Module Import | 👌 | 0.1.0 | import '@angular/core'. See also Package.json Supports. | TypeScript Path Mapping | 👌 | 0.1.0 | import '@/App' when you define baseUrl and paths in a parent tsconfig.json. | Node Built-in Modules | 👌 | 0.1.0 | Resolve node built-in modules like "http" as-is instead of throwing an error.

Package.json Supports

| Feature | Status | Since | Note | |---|---|---|---| | Main Fields | 👌 | 0.1.0 | Try fields like "main", "browser", "module" in package.json by default. | Subpath Exports | 👌 | 0.1.0 | { "exports": { "import": "./index.mjs", "require": "./index.cjs" } } in package.json is gaining popularity. | Subpath Imports | 👷 | |