Skip to content

Commit f2217cd

Browse files
zaverdenBridgeAR
authored andcommitted
doc: update experimental loader hooks example code
It fix 2 issues in provided Loader hooks examples: 1. Original ``new URL(`${process.cwd()}/`, 'file://');`` is not cross-platform, it gives wrong URL on windows 2. Based on `CHECK` in ModuleWrap::Resolve (node 12.9.1, https://github.com/nodejs/node/blob/v12.9.1/src/module_wrap.cc#L1132) the 2nd parameter should be a `string`, not an `URL` object PR-URL: #29373 Reviewed-By: James M Snell <[email protected]> Reviewed-By: David Carlier <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent bf08c08 commit f2217cd

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

doc/api/esm.md

+19-5
Original file line numberDiff line numberDiff line change
@@ -573,8 +573,14 @@ The resolve hook returns the resolved file URL and module format for a
573573
given module specifier and parent file URL:
574574
575575
```js
576-
const baseURL = new URL(`${process.cwd()}/`, 'file://');
577-
576+
import { URL, pathToFileURL } from 'url';
577+
const baseURL = pathToFileURL(process.cwd()).href;
578+
579+
/**
580+
* @param {string} specifier
581+
* @param {string} parentModuleURL
582+
* @param {function} defaultResolver
583+
*/
578584
export async function resolve(specifier,
579585
parentModuleURL = baseURL,
580586
defaultResolver) {
@@ -612,13 +618,21 @@ be written:
612618
import path from 'path';
613619
import process from 'process';
614620
import Module from 'module';
621+
import { URL, pathToFileURL } from 'url';
615622

616623
const builtins = Module.builtinModules;
617624
const JS_EXTENSIONS = new Set(['.js', '.mjs']);
618625

619-
const baseURL = new URL(`${process.cwd()}/`, 'file://');
626+
const baseURL = pathToFileURL(process.cwd()).href;
620627

621-
export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
628+
/**
629+
* @param {string} specifier
630+
* @param {string} parentModuleURL
631+
* @param {function} defaultResolver
632+
*/
633+
export async function resolve(specifier,
634+
parentModuleURL = baseURL,
635+
defaultResolver) {
622636
if (builtins.includes(specifier)) {
623637
return {
624638
url: specifier,
@@ -627,7 +641,7 @@ export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) {
627641
}
628642
if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) {
629643
// For node_modules support:
630-
// return defaultResolve(specifier, parentModuleURL);
644+
// return defaultResolver(specifier, parentModuleURL);
631645
throw new Error(
632646
`imports must begin with '/', './', or '../'; '${specifier}' does not`);
633647
}

0 commit comments

Comments
 (0)