Skip to content
On this page

API Reference ​

As ECMAScript module support grows, there are still several features missing from the Node.js ecosystem - some of which were available prior to the evolution of ESM.

mlly exposes several tools to bridge this gap.

CONDITIONS ​

Default export conditions.

ts
const CONDITIONS: Set<string> = new Set(['node', 'import'])

See Also ​

EXTENSION_FORMAT_MAP ​

Default file extension to module formats map.

ts
const EXTENSION_FORMAT_MAP: Map<Ext, Format> = new Map<Ext, Format>([
  ['.cjs', Format.COMMONJS],
  ['.cts', Format.COMMONJS],
  ['.d.cts', Format.COMMONJS],
  ['.d.mts', Format.MODULE],
  ['.d.ts', Format.MODULE],
  ['.js', Format.MODULE],
  ['.json', Format.JSON],
  ['.jsx', Format.MODULE],
  ['.mjs', Format.MODULE],
  ['.mts', Format.MODULE],
  ['.node', Format.COMMONJS],
  ['.ts', Format.MODULE],
  ['.tsx', Format.MODULE],
  ['.wasm', Format.WASM]
])

See Also ​

PATTERN_CHARACTER ​

Character representing a subpath pattern.

ts
const PATTERN_CHARACTER: string = '*'

RESOLVE_EXTENSIONS ​

Default resolvable file extensions.

ts
const RESOLVE_EXTENSIONS: Set<Ext> = new Set([
  '.mjs',
  '.mts',
  '.cjs',
  '.cts',
  '.js',
  '.ts',
  '.jsx',
  '.tsx',
  '.css',
  '.json',
  '.node',
  '.wasm',
  '.d.mts',
  '.d.cts',
  '.d.ts'
])

See Also ​

compareSubpaths ​

Returns a number indicating if a subpath pattern is equal to, greater than, or less than another subpath pattern.

  • -1: subpath2 is less than subpath1
  • 0: subpath2 is equal to subpath1
  • 1: subpath2 is greater than subpath1

Implements the PATTERN_KEY_COMPARE algorithm.

See Also ​

Params ​

string subpath1 Subpath to be compared
string subpath2 Subpath to compare subpath1 to

Returns ​

CompareResult   Comparsion result

THROWS NodeError<Error | TypeError> ​

If either either subpath contains more than pattern character ('*') or is not a string

detectSyntax ​

Detects if code contains CommonJS syntax, ESM syntax, or a mixture of both.

Ignores matches in comments.

See Also ​

Params ​

string code Code to evaluate

Returns ​

{ cjs: boolean; esm: boolean; mixed: boolean }   Detection result

extractStatements ​

Finds all export, import, and/or require statements in code.

Ignores matches in comments.

See Also ​

Params ​

string [code=''] Code to evaluate

Returns ​

Statement[]   Extracted statements

THROWS NodeError<TypeError> ​

If code is not a string

fillModules ​

Ensures all absolute and relative module specifiers in the given piece of source code are fully specified.

Ignores specifiers that already have file extensions.

See Also ​

Params ​

string code Code to evaluate
FillModuleOptions options Module fill options

Returns ​

Promise<string>   code with fully specified module specifiers

THROWS NodeError<TypeError> ​

findDynamicImports ​

Finds all dynamic import statements in code. Ignores matches in comments.

See Also ​

Params ​

string [code=''] Code to evaluate

Returns ​

DynamicImport[]   Dynamic import statement objects

THROWS NodeError<TypeError> ​

If code is not a string

findExports ​

Finds all export statements in code. Ignores matches in comments.

See Also ​

Params ​

string [code=''] Code to evaluate

Returns ​

ExportStatement[]   Export statement objects

THROWS NodeError<TypeError> ​

If code is not a string

findRequires ​

Finds all require statements in code. Ignores matches in comments.

See Also ​

Params ​

string [code=''] Code to evaluate

Returns ​

RequireStatement[]   Require statement objects

THROWS NodeError<TypeError> ​

If code is not a string

findStaticImports ​

Finds all static import statements in code. Ignores matches in comments.

See Also ​

Params ​

string [code=''] Code to evaluate

Returns ​

StaticImport[]   Static import statement objects

THROWS NodeError<TypeError> ​

If code is not a string

findSubpath ​

Finds the subpath defined in context, a package.json exports or imports field, that maps to the given package target.

Supports extensionless targets and targets without explicit '/index' usage. Returns null if a subpath is not found.

See Also ​

Params ​

string target Package target to find in context
Nilable<Exports | Imports> context Package context
FindSubpathOptions options Search options

Returns ​

Nullable<string>   Subpath defined in context or null

THROWS NodeError<Error | TypeError> ​

getFormat ​

Retrieves a module format for the given module id.

TIP

The given module id should be absolute (i.e. a file: URL or absolute specifier).

See Also ​

Params ​

ModuleId id Module id to evaluate
GetFormatOptions? [options={}] Format retrieval options

Returns ​

Promise<Nilable<Format>>   Module format, null, or undefined

THROWS NodeError<TypeError> ​

getSource ​

Retrieves source code for the given module id.

TIP

The given module id should be absolute (i.e. a file: URL or absolute specifier).

See Also ​

Params ​

ModuleId id Module id to evaluate
GetSourceOptions? [options={}] Source code retrieval options

Returns ​

Promise<Optional<Uint8Array | string>>   Source code for id

THROWS NodeError ​

If unsupported URL scheme is encountered

hasCJSSyntax ​

Detects if code contains CommonJS syntax. Ignores matches in comments.

Syntax patterns:

  • __dirname
  • __filename
  • await import
  • exports
  • module.exports
  • require
  • require.*

See Also ​

Params ​

string code Code to evaluate

Returns ​

boolean   true if code contains cjs syntax, false otherwise

THROWS NodeError<TypeError> ​

If code is not a string

hasESMSyntax ​

Detects if code contains ESM syntax. Ignores matches in comments.

Syntax patterns:

  • export (declaration, default, named, star)
  • import (default, dynamic, named, star)
  • import.meta.(env|resolve|url)

See Also ​

Params ​

string code Code to evaluate

Returns ​

boolean   true if code contains esm syntax, false otherwise

THROWS NodeError<TypeError> ​

If code is not a string

isAbsoluteSpecifier ​

Checks if the given specifier is an absolute specifier.

WARNING

Only checks specifier syntax. Does not guarantee the specifier references a file that exists.

See Also ​

Params ​

string specifier Specifier to evaluate

Returns ​

boolean   true if specifier is absolute specifier

THROWS NodeError<TypeError> ​

If specifier is not a string

isBareSpecifier ​

Checks if the given specifier is a bare specifier.

WARNING

Only checks specifier syntax. Does not guarantee the specifier references a file that exists.

See Also ​

Params ​

string specifier Specifier to evaluate

Returns ​

boolean   true if specifier is bare specifier

THROWS NodeError<TypeError> ​

If specifier is not a string

isDirectory ​

Checks if a directory exists at the given module id.

Params ​

ModuleId id Module id to evaluate

Returns ​

boolean   true if directory exists at id

isExportsSugar ​

Checks if the given package exports value is using exports sugar.

See Also ​

Params ​

Nilable<Exports> exports Package exports
ModuleId pkg URL of relevant package.json file
ModuleId parent URL of module to resolve from

Returns ​

boolean   true if exports is using exports sugar

THROWS NodeError<Error | TypeError> ​

If either pkg or parent is not an instance of URL or a string, or if exports configuration or schema is invalid

isFile ​

Checks if a file exists at the given module id.

Params ​

ModuleId id Module id to evaluate

Returns ​

boolean   true if file exists at id

isRelativeSpecifier ​

Checks if the given specifier is a relative specifier.

WARNING

Only checks specifier syntax. Does not guarantee the specifier references a file that exists.

See Also ​

Params ​

string specifier Specifier to evaluate

Returns ​

boolean   true if specifier is relative specifier

lookupPackageScope ​

Finds a package.json file for the given module id. Ends the search at the given end point after checking for a package.json file.

Returns null if a package.json file is not found.

See Also ​

Params ​

ModuleId id Id of module to get package scope for
ModuleId? [stopdir=pathe.sep] Directory to end search
string? [specifier] Module specifier passed by user
ModuleId? [parent] Id of module to resolve from

Returns ​

?PackageScope   Package scope result or null

THROWS NodeError<TypeError> ​

If either id or stopdir is not an instance of URL or a string

parseDataURL ​

Parses a data: URL.

If valid, returns an object representing the given url.

Note: A MIME type string is required.

See Also ​

Params ​

URL | string url URL to evaluate

Returns ​

ParsedDataUrl   Object representing url

THROWS ErrInvalidUrl | NodeError<TypeError> ​

If url is not a string or instance of URL, or if url not a valid data: URL

parseModuleId ​

Creates an object representation the given module id.

See Also ​

Params ​

ModuleId id Module id to parse
ParseModuleIdOptions? [options={}] Parsing options

Returns ​

ParsedModuleId   Object representing id

THROWS NodeError<TypeError> ​

parseSubpath ​

Creates an object representation of a subpath export or import from the given module specifier after ensuring the subpath defined in specifier is also defined in the given package context, a package.json exports or imports field.

WARNING

Does not guarantee specifier resolves to an existing module.

See Also ​

Params ​

string specifier Module specifier to evaluate
Optional<Exports | Imports> context Package context
ParseSubpathOptions options Parsing options

Returns ​

ParsedSubpath   Object representing package subpath

THROWS NodeError<Error | TypeError> ​

readPackageJson ​

Reads a package.json file from the given directory.

Returns null if a file is not found.

See Also ​

Params ​

ModuleId [dir='.'] Id of directory containing package.json file
string? [specifier] Module specifier passed by user to initiate
ModuleId? [parent] Id of module to resolve from

Returns ​

?PackageJson   package.json object or null if file is not found

THROWS NodeError<Error | TypeError> ​

If dir is not a string or instance of URL, if specifier is not a string, if parent is not a string, or if a package.json is file found and does not contain valid JSON

resolveAlias ​

Resolves a path alias in the given module specifier; does nothing if a path match isn't found.

See Also ​

Params ​

string specifier Module specifier to evaluate
ResolveAliasOptions [options={}] Resolution options

Returns ​

Promise<string>   Resolved specifier or original module specifier

THROWS NodeError ​

resolveAliases ​

Resolves path aliases in the given piece of source code.

See Also ​

Params ​

string code Code to evaluate
ResolveAliasOptions [options={}] Resolve alias options

Returns ​

Promise<string>   code unmodified or with path aliases resolved

resolveModule ​

Resolves specifier according to the ESM Resolver algorithm, mostly 😉.

Adds support for:

  • Extensionless file and directory index resolution
  • Replacing file extensions

Other differences between Node.js:

See Also ​

Params ​

string specifier Module specifier to resolve
ResolveModuleOptions [options={}] Module resolution options

Returns ​

Promise<URL>   Resolved module URL

THROWS NodeError ​

resolveModules ​

Converts all module specifiers in code to absolute specifiers.

INFO

Useful for converting code to data: URLs.

See Also ​

Params ​

string code Code to evaluate
ResolveModuleOptions [options={}] Module resolution options

Returns ​

Promise<string>   code with module specifiers fully resolved

toAbsoluteSpecifier ​

Converts specifier into an absolute specifier.

INFO

The absolute specifier will only include a file extension if specifier includes a file extension.

See Also ​

Params ​

ModuleId specifier Module specifier to convert
ModuleId [cwd=pathToFileURL('./')] Current working directory

Returns ​

string   specifier as absolute specifier (file url)

toBareSpecifier ​

Converts the given module specifier into a bare specifier.

The new specifier is not guaranteed to resolve to an existing module, nor is it guaranteed to have a file extension, but it is guaranteed to be a package path containing a valid subpath export if the specifier's parent package uses package exports. If the parent package does not use exports, the new specifier is only guaranteed to begin with a valid NPM package name or Node.js builtin module name.

The given module specifier should be absolute, syntactically bare (i.e. not begin with '/' or '.'), or relative to the current working directory (e.g. './dist/index.mjs').

WARNING

Internal specifier (i.e. subpath import; '#src', '#src/utils') conversion is not supported. Converting to an internal specifier will be supported in the future.

See Also ​

Params ​

ModuleId specifier Module specifier to convert
ModuleId parent URL of module to resolve from
Set<string>? [conditions=CONDITIONS] Export conditions

Returns ​

string   specifier as bare specifier

THROWS NodeError ​

toDataURL ​

Converts code into a data: URL using base64 encoding.

TIP

data: URLs only resolve bare specifiers for builtin modules and absolute specifiers.

Call await resolveModules(code) to ensure all specifiers are absolute or bare.

See Also ​

Params ​

string code Code to convert
MimeType [mime='text/javascript'] MIME type

Returns ​

string   code as data: URL

THROWS NodeError<TypeError> ​

If code or mime is not a string

toNodeURL ​

Converts the given module specifier to a node: URL.

WARNING

Does not guarantee the new specifier is an existing Node.js builtin module.

See Also ​

Params ​

string specifier Module specifier to convert

Returns ​

string   specifier as node: URL

THROWS NodeError<TypeError> ​

If specifier is not a string

toRelativeSpecifier ​

Converts specifier into a relative specifier.

INFO

The relative specifier will only include a file extension if specifier includes a file extension.

See Also ​

Params ​

ModuleId specifier Module specifier to convert
ModuleId parent Parent module URL or path to resolve from

Returns ​

string   specifier as relative specifier

THROWS NodeError<TypeError> ​

If either specifier or parent is not a string or an instance of URL

toURL ​

Converts the given module id to an instance of URL.

See Also ​

Params ​

ModuleId id Module id to evaluate
ModuleId? [base=pathToFileURL('./')] Base URL to resolve against

Returns ​

URL   id as instance of URL

THROWS NodeError<TypeError> ​

If either id or base is not a string or an instance of URL

validateAssertions ​

Test a module's import assertions.

See Also ​

Params ​

ModuleId url Module URL of imported module (for error reporting)
LiteralUnion<Format, string> format Module format
ImportAssertions [assertions={}] import assertions

Returns ​

true   true if assertions are valid

THROWS NodeError<TypeError> ​

validateExports ​

Validates the given package exports configuration and schema.

See Also ​

Params ​

Optional<Exports> exports Package exports
ModuleId pkg URL of relevant package.json file
ModuleId parent URL of module to resolve from

Returns ​

true   true if exports configuration and schema are valid

THROWS NodeError<Error | TypeError> ​

If either pkg or parent is not a string or an instance of URL, or if exports configuration or schema is invalid