Skip to content

Commit

Permalink
Re-throw any outer error on module promise rejection
Browse files Browse the repository at this point in the history
  • Loading branch information
kasperisager committed Mar 19, 2024
1 parent c546091 commit 4e464a4
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 10 deletions.
18 changes: 9 additions & 9 deletions binding.c
Original file line number Diff line number Diff line change
Expand Up @@ -461,22 +461,22 @@ bare_module_run_module (js_env_t *env, js_callback_info_t *info) {
err = js_instantiate_module(env, module, on_static_import, (void *) context);
if (err < 0) return NULL;

js_value_t *result;
err = js_run_module(env, module, &result);
js_value_t *promise;
err = js_run_module(env, module, &promise);
if (err < 0) return NULL;

bool is_promise;
err = js_is_promise(env, result, &is_promise);
err = js_is_promise(env, promise, &is_promise);
assert(err == 0);

if (is_promise) {
js_promise_state_t state;
err = js_get_promise_state(env, result, &state);
err = js_get_promise_state(env, promise, &state);
assert(err == 0);

if (state == js_promise_rejected) {
js_value_t *error;
err = js_get_promise_result(env, result, &error);
js_value_t *reason;
err = js_get_promise_result(env, promise, &reason);
if (err < 0) return NULL;

js_value_t *exception;
Expand All @@ -487,15 +487,15 @@ bare_module_run_module (js_env_t *env, js_callback_info_t *info) {
err = js_get_reference_value(env, context->ctx, &ctx);
assert(err == 0);

js_value_t *args[2] = {result, error};
js_value_t *args[3] = {reason, promise, exception};

js_call_function(env, ctx, argv[2], 2, args, NULL);
js_call_function(env, ctx, argv[2], 3, args, NULL);

return NULL;
}
}

return result;
return promise;
}

static js_value_t *
Expand Down
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ const Module = module.exports = exports = class Module {
}
}

static _onrejection (promise, err) {
static _onrejection (reason, promise, err = reason) {
promise.catch(() => {}) // Don't leak the rejection

throw err
Expand Down
2 changes: 2 additions & 0 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2065,6 +2065,7 @@ test('type error in .cjs imported from .mjs with type error', (t) => {
t.fail()
} catch (err) {
t.comment(err.message)
t.ok(/reading 'bar'/i.test(err.message))
}
})

Expand Down Expand Up @@ -2172,6 +2173,7 @@ test('type error in .mjs imported from .mjs with type error', (t) => {
t.fail()
} catch (err) {
t.comment(err.message)
t.ok(/reading 'bar'/i.test(err.message))
}
})

Expand Down

0 comments on commit 4e464a4

Please sign in to comment.