From 7ab08130a06850f7d30bca8088799926f03e2a84 Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Sat, 19 Nov 2022 20:32:39 +0900 Subject: fix(ext/node): handle URL in createRequire (#16682) --- ext/node/02_require.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'ext') diff --git a/ext/node/02_require.js b/ext/node/02_require.js index ac34a5fca..372cc8471 100644 --- a/ext/node/02_require.js +++ b/ext/node/02_require.js @@ -819,8 +819,27 @@ } function createRequire(filenameOrUrl) { - // FIXME: handle URLs and validation - const filename = core.ops.op_require_as_file_path(filenameOrUrl); + let fileUrlStr; + if (filenameOrUrl instanceof URL) { + if (filenameOrUrl.protocol !== "file:") { + throw new Error( + `The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ${filenameOrUrl}`, + ); + } + fileUrlStr = filenameOrUrl.toString(); + } else if (typeof filenameOrUrl === "string") { + if (!filenameOrUrl.startsWith("file:")) { + throw new Error( + `The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ${filenameOrUrl}`, + ); + } + fileUrlStr = filenameOrUrl; + } else { + throw new Error( + `The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received ${filenameOrUrl}`, + ); + } + const filename = core.ops.op_require_as_file_path(fileUrlStr); return createRequireFromPath(filename); } -- cgit v1.2.3