use import.meta.resolve
to support relative and bare specifiers
#177
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request fixes our handling of import declarations.
Currently only absolute specifiers such as
import util from 'node:util'
are interpreted correctly:import foo from './foo.js'
attempts to import[[doctest]]/lib/foo.js
; andimport bar from 'bar'
attempts to load the main entry point of[[doctest]]/node_modules/bar
.This bug does not just affect import declarations within doctests: top-level import declarations are also affected.
The fix involves using
import.meta.resolve
to resolve the module specifier. We provide an argument for the non-standardparent
parameter Node.js supports when the--experimental-import-meta-resolve
flag is specified. This makes module resolution relative to the module in which the import declaration appears, as expected.The
parent
parameter is available in Node.js v16.0.0, the oldest version we currently support, but needs a string argument. Node.js v16.2.0 added support for providing aURL
object instead. As this is more convenient, and since we already have a breaking change onmain
(#176), I decided to increase our Node.js version requirement.