ESM Loader Typings
Type definitions for Node.js custom ESM loaders
Node.js custom ESM loaders need to be in JS as they're passed directly to Node.js on startup, but that doesn't mean we can't have types on them.
Install
npm i -D typings-esm-loader
Usage
At the top of your loader's JS file:
/// @ts-check
/// <reference types="typings-esm-loader" />
The /// @ts-check
line is not needed for TS files and optional for JS files, it can be removed if you only want type hints with no strict type checking on JS.
Using JavaScript
You can now use JSDoc comments to typecast your hooks to their respective types as such:
/** @type {resolve} */
export async function resolve(specifier, context, nextResolve) { ... }
/** @type {load} */
export async function load(url, context, nextLoad) { ... }
/** @type {globalPreload} */
export function globalPreload(context) { ... }
Using TypeScript
export async function resolve(...[specifier, context, nextResolve]: Parameters<resolve>): ReturnType<resolve> { ... }
export async function load(...[url, context, nextLoad]: Parameters<load>): ReturnType<load> { ... }
export function globalPreload(...[context]: Parameters<globalPreload>): ReturnType<globalPreload> { ... }
Other types provided
-
Loader
: aninterface
representing an ESM loader when imported as a module, useful when using multiple loaders. -
ModuleFormat
: a union type representing all valid module formats to pass to theload
hooks return valueformat
field. -
getBuiltin
: a type declaration for the function of same name provided in the global scope ofglobalPreload
hooks scripts. -
namespace
Resolve
-
Context
: theinterface
representing the import context object passed toresolve
hooks. -
Return
: theinterface
representing the required return type ofresolve
hooks. -
Function
: the type of thenextResolve
parameter.
-
-
namespace
Load
-
Context
: theinterface
representing the import context object passed toload
hooks. -
Return
: theinterface
representing the required return type ofload
hooks. -
Function
: the type of thenextLoad
parameter.
-