mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 15:06:54 -05:00
fix(node): Worker constructor doesn't check type: module of package.json (#19480)
This commit is contained in:
parent
f145cbfacc
commit
0c50c39c35
5 changed files with 31 additions and 1 deletions
3
cli/tests/unit_node/testdata/worker_module/index.js
vendored
Normal file
3
cli/tests/unit_node/testdata/worker_module/index.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import { myFunction } from "./other_file.js";
|
||||||
|
|
||||||
|
myFunction().then(() => {});
|
3
cli/tests/unit_node/testdata/worker_module/other_file.js
vendored
Normal file
3
cli/tests/unit_node/testdata/worker_module/other_file.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
export async function myFunction() {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||||
|
}
|
4
cli/tests/unit_node/testdata/worker_module/package.json
vendored
Normal file
4
cli/tests/unit_node/testdata/worker_module/package.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"name": "foo",
|
||||||
|
"type": "module"
|
||||||
|
}
|
|
@ -133,6 +133,16 @@ Deno.test({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Deno.test({
|
||||||
|
name: "[worker_threads] worker thread with type module",
|
||||||
|
fn() {
|
||||||
|
const worker = new workerThreads.Worker(
|
||||||
|
new URL("./testdata/worker_module/index.js", import.meta.url),
|
||||||
|
);
|
||||||
|
worker.terminate();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
Deno.test({
|
Deno.test({
|
||||||
name: "[worker_threads] inheritences",
|
name: "[worker_threads] inheritences",
|
||||||
async fn() {
|
async fn() {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { MessageChannel, MessagePort } from "ext:deno_web/13_message_port.js";
|
||||||
|
|
||||||
let environmentData = new Map();
|
let environmentData = new Map();
|
||||||
let threads = 0;
|
let threads = 0;
|
||||||
|
const { core } = globalThis.__bootstrap;
|
||||||
|
|
||||||
export interface WorkerOptions {
|
export interface WorkerOptions {
|
||||||
// only for typings
|
// only for typings
|
||||||
|
@ -53,7 +54,16 @@ class _Worker extends EventEmitter {
|
||||||
specifier = `data:text/javascript,${specifier}`;
|
specifier = `data:text/javascript,${specifier}`;
|
||||||
} else if (typeof specifier === "string") {
|
} else if (typeof specifier === "string") {
|
||||||
specifier = resolve(specifier);
|
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());
|
const cwdFileUrl = toFileUrl(Deno.cwd());
|
||||||
specifier =
|
specifier =
|
||||||
`data:text/javascript,(async function() {const { createRequire } = await import("node:module");const require = createRequire("${cwdFileUrl}");require("${specifier}");})();`;
|
`data:text/javascript,(async function() {const { createRequire } = await import("node:module");const require = createRequire("${cwdFileUrl}");require("${specifier}");})();`;
|
||||||
|
|
Loading…
Reference in a new issue