From 0c50c39c35f1c92bbb96bc3e101e2c446256cb7b Mon Sep 17 00:00:00 2001 From: Vedant Pandey Date: Thu, 15 Jun 2023 20:30:30 +0530 Subject: fix(node): Worker constructor doesn't check type: module of package.json (#19480) --- ext/node/polyfills/worker_threads.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'ext/node/polyfills/worker_threads.ts') diff --git a/ext/node/polyfills/worker_threads.ts b/ext/node/polyfills/worker_threads.ts index 8005506bb..32f9885af 100644 --- a/ext/node/polyfills/worker_threads.ts +++ b/ext/node/polyfills/worker_threads.ts @@ -9,6 +9,7 @@ import { MessageChannel, MessagePort } from "ext:deno_web/13_message_port.js"; let environmentData = new Map(); let threads = 0; +const { core } = globalThis.__bootstrap; export interface WorkerOptions { // only for typings @@ -53,7 +54,16 @@ class _Worker extends EventEmitter { specifier = `data:text/javascript,${specifier}`; } else if (typeof specifier === "string") { specifier = resolve(specifier); - if (!specifier.toString().endsWith(".mjs")) { + let pkg; + try { + pkg = core.ops.op_require_read_closest_package_json(specifier); + } catch (_) { + // empty catch block when package json might not be present + } + if ( + !(specifier.toString().endsWith(".mjs") || + (pkg && pkg.exists && pkg.typ == "module")) + ) { const cwdFileUrl = toFileUrl(Deno.cwd()); specifier = `data:text/javascript,(async function() {const { createRequire } = await import("node:module");const require = createRequire("${cwdFileUrl}");require("${specifier}");})();`; -- cgit v1.2.3