From 8e010b6844b339ab138b4d9e40148c60d44d197a Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Mon, 8 Nov 2021 16:02:40 +0900 Subject: [PATCH] feat(compat): add .code to dyn import error (#12633) --- cli/tests/integration/compat_tests.rs | 5 +++++ cli/tests/testdata/compat/dyn_import_reject.js | 4 ++++ cli/tests/testdata/compat/dyn_import_reject.out | 2 ++ core/bindings.rs | 5 +++++ 4 files changed, 16 insertions(+) create mode 100644 cli/tests/testdata/compat/dyn_import_reject.js create mode 100644 cli/tests/testdata/compat/dyn_import_reject.out diff --git a/cli/tests/integration/compat_tests.rs b/cli/tests/integration/compat_tests.rs index 81d2985b3b1f06..e15a19b8a31ae4 100644 --- a/cli/tests/integration/compat_tests.rs +++ b/cli/tests/integration/compat_tests.rs @@ -23,6 +23,11 @@ itest!(compat_with_import_map_and_https_imports { output: "compat/import_map_https_imports.out", }); +itest!(compat_dyn_import_rejects_with_node_compatible_error { + args: "run --quiet --compat --unstable -A compat/dyn_import_reject.js", + output: "compat/dyn_import_reject.out", +}); + #[test] fn globals_in_repl() { let (out, _err) = util::run_and_collect_output_with_args( diff --git a/cli/tests/testdata/compat/dyn_import_reject.js b/cli/tests/testdata/compat/dyn_import_reject.js new file mode 100644 index 00000000000000..f9a99f0dae90fc --- /dev/null +++ b/cli/tests/testdata/compat/dyn_import_reject.js @@ -0,0 +1,4 @@ +import("./foobar.js").catch((e) => { + console.log(e); + console.log(e.code); +}); diff --git a/cli/tests/testdata/compat/dyn_import_reject.out b/cli/tests/testdata/compat/dyn_import_reject.out new file mode 100644 index 00000000000000..6d78135b27f9c8 --- /dev/null +++ b/cli/tests/testdata/compat/dyn_import_reject.out @@ -0,0 +1,2 @@ +TypeError: Cannot load module "file:///[WILDCARD]/testdata/compat/foobar.js". +ERR_MODULE_NOT_FOUND diff --git a/core/bindings.rs b/core/bindings.rs index d1b01c2d99641d..10daee27ab93c3 100644 --- a/core/bindings.rs +++ b/core/bindings.rs @@ -244,6 +244,11 @@ pub extern "C" fn host_import_module_dynamically_callback( let message = arg.get(scope, message_key.into()).unwrap(); let exception = v8::Exception::type_error(scope, message.try_into().unwrap()); + let code_key = v8::String::new(scope, "code").unwrap(); + let code_value = + v8::String::new(scope, "ERR_MODULE_NOT_FOUND").unwrap(); + let exception_obj = exception.to_object(scope).unwrap(); + exception_obj.set(scope, code_key.into(), code_value.into()); scope.throw_exception(exception); return; }