mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 12:51:57 +00:00
Found a behaviour mismatch: when an array is provided in exports field, enhanced-resolve will try to read the file and try the next one if it fails. But in the spec, the path is not read, it's only tested against "invalid package target". ``` For each item targetValue in target, do 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions), continuing the loop on any Invalid Package Target error. 2. If resolved is undefined, continue the loop. 3. Return resolved. ``` I tested against node.js and verifies node.js conforms to the spec. |
||
|---|---|---|
| .. | ||
| benches | ||
| examples | ||
| src | ||
| tests | ||
| Cargo.toml | ||
| README.md | ||
Oxc Resolver
TODO
- use
thiserrorfor better error messages
Resolver Options
| Done | Field | Default | Description |
|---|---|---|---|
| ✅ | alias | [] | A list of module alias configurations or an object which maps key to value |
| ✅ | aliasFields | [] | A list of alias fields in description files |
| ✅ | extensionAlias | {} | An object which maps extension to extension aliases |
| cachePredicate | function() { return true }; | A function which decides whether a request should be cached or not. An object is passed to the function with path and request properties. |
|
| cacheWithContext | true | If unsafe cache is enabled, includes request.context in the cache key |
|
| ✅ | conditionNames | [] | A list of exports field condition names |
| ✅ | descriptionFiles | ["package.json"] | A list of description files to read from |
| ✅ | enforceExtension | false | Enforce that a extension from extensions must be used |
| exportsFields | ["exports"] | A list of exports fields in description files | |
| ✅ | extensions | [".js", ".json", ".node"] | A list of extensions which should be tried for files |
| ✅ | fallback | [] | Same as alias, but only used if default resolving fails |
| ✅ | fileSystem | The file system which should be used | |
| fullySpecified | false | Request passed to resolve is already fully specified and extensions or main files are not resolved for it (they are still resolved for internal requests) | |
| mainFields | ["main"] | A list of main fields in description files | |
| ✅ | mainFiles | ["index"] | A list of main files in directories |
| ✅ | modules | ["node_modules"] | A list of directories to resolve modules from, can be absolute path or folder name |
| plugins | [] | A list of additional resolve plugins which should be applied | |
| resolver | undefined | A prepared Resolver to which the plugins are attached | |
| resolveToContext | false | Resolve to a context instead of a file | |
| ✅ | preferRelative | false | Prefer to resolve module requests as relative request and fallback to resolving as module |
| ✅ | preferAbsolute | false | Prefer to resolve server-relative urls as absolute paths before falling back to resolve in roots |
| restrictions | [] | A list of resolve restrictions | |
| ✅ | roots | [] | A list of root paths |
| ✅ | symlinks | true | Whether to resolve symlinks to their symlinked location |
| unsafeCache | false | Use this cache object to unsafely cache the successful requests |
Test
Tests ported from enhanced-resolve. Crossed out test files are irrelevant.
CachedInputFileSystem.test.jsSyncAsyncFileSystemDecorator.test.js- alias.test.js (need to fix a todo)
- browserField.test.js (reading the browser field is currently static - not read from the
browserFieldoption) - dependencies.test.js
- exportsField.test.js
- extension-alias.test.js
- extensions.test.js
- fallback.test.js (need to fix a todo)
forEachBail.test.js- fullSpecified.test.js
- getPaths.test.js
- identifier.test.js (see unit test in
crates/oxc_resolver/src/request.rs) - importsField.test.js
- incorrect-description-file.test.js (need to add ctx.fileDependencies)
- missing.test.js
- path.test.js
- plugins.test.js
- pnp.test.js
pr-53.test.js- resolve.test.js (need to add resolveToContext)
- restrictions.test.js
- roots.test.js (need to add resolveToContext)
- scoped-packages.test.js
- simple.test.js
- symlink.test.js
unsafe-cache.test.jsyield.test.js