From 1ecc406b77ba7573ed0b982a7e6654514c71a7a2 Mon Sep 17 00:00:00 2001 From: Denis Zavershinskiy Date: Fri, 30 Aug 2019 10:09:08 +0700 Subject: [PATCH 1/2] 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 Reviewed-By: David Carlier Reviewed-By: Luigi Pinca --- doc/api/esm.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/doc/api/esm.md b/doc/api/esm.md index 20f4330acc96c7..75547159d3a0ae 100644 --- a/doc/api/esm.md +++ b/doc/api/esm.md @@ -573,8 +573,14 @@ The resolve hook returns the resolved file URL and module format for a given module specifier and parent file URL: ```js -const baseURL = new URL(`${process.cwd()}/`, 'file://'); - +import { URL, pathToFileURL } from 'url'; +const baseURL = pathToFileURL(process.cwd()).href; + +/** + * @param {string} specifier + * @param {string} parentModuleURL + * @param {function} defaultResolver + */ export async function resolve(specifier, parentModuleURL = baseURL, defaultResolver) { @@ -612,13 +618,21 @@ be written: import path from 'path'; import process from 'process'; import Module from 'module'; +import { URL, pathToFileURL } from 'url'; const builtins = Module.builtinModules; const JS_EXTENSIONS = new Set(['.js', '.mjs']); -const baseURL = new URL(`${process.cwd()}/`, 'file://'); +const baseURL = pathToFileURL(process.cwd()).href; -export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) { +/** + * @param {string} specifier + * @param {string} parentModuleURL + * @param {function} defaultResolver + */ +export async function resolve(specifier, + parentModuleURL = baseURL, + defaultResolver) { if (builtins.includes(specifier)) { return { url: specifier, @@ -627,7 +641,7 @@ export function resolve(specifier, parentModuleURL = baseURL, defaultResolve) { } if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) { // For node_modules support: - // return defaultResolve(specifier, parentModuleURL); + // return defaultResolver(specifier, parentModuleURL); throw new Error( `imports must begin with '/', './', or '../'; '${specifier}' does not`); } From b1314e03f156b7a570ff34d7949f48e86b393204 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 17 Sep 2019 13:50:04 +0200 Subject: [PATCH 2/2] test: fix flaky test-inspector-connect-main-thread Using `console.log()` likely interferes with the functionality of the test, which also checks the interaction between inspector and `console.log()` as part of the test. Using `process._rawDebug()` solves that issue. Refs: https://github.com/nodejs/node/pull/28870 Refs: https://github.com/nodejs/node/pull/29582 --- test/parallel/test-inspector-connect-main-thread.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-inspector-connect-main-thread.js b/test/parallel/test-inspector-connect-main-thread.js index 0b072ecf598c32..7f354fb76f9393 100644 --- a/test/parallel/test-inspector-connect-main-thread.js +++ b/test/parallel/test-inspector-connect-main-thread.js @@ -27,10 +27,10 @@ async function post(session, method, params) { session.post(method, params, (error, success) => { messagesSent.push(method); if (error) { - console.log(`Message ${method} produced an error`); + process._rawDebug(`Message ${method} produced an error`); reject(error); } else { - console.log(`Message ${method} was sent`); + process._rawDebug(`Message ${method} was sent`); resolve(success); } });