Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Handle the case where one cannot execute JavaScript #37446

Copy link
Copy link

Description

@gabrielschulhof
Issue body actions

Re #30327 #37236

One (somewhat elaborate?) API for semver-minorly handling the inability to execute JS would be the following (somewhat introspective) API:

typedef enum {
  node_api_reason_call_function,
  node_api_reason_throw_exception,
  node_api_reason_open_handle_scope,
  node_api_reason_open_escapable_handle_scope,
  node_api_reason_open_callback_scope,
  ...   // etc.
} node_api_js_exec_failure_reason;

typedef napi_status (*node_api_js_exec_failure_callback)(
    napi_env env,
    node_api_js_exec_failure_reason reason,
    void* reason_data,
    void* user_data);

NAPI_EXTERN napi_status
node_api_handle_js_execution_failure(
    napi_env env,
    node_api_js_exec_failure_callback exec_fail_cb,
    void* user_data);

The add-on maintainer would attach a callback similarly to the napi_set_instance_data finalizer, which would get called whenever we would otherwise return napi_cannot_call_into_js. The callback would analyze the reason and the associated reason_data (which would be a pointer to a stack-allocated structure the type of which depends on reason – a little bit like ioctl(2)) and would return a napi_status that would then be passed as the return value to the original Node-API call.

This could be used to correct a return value of napi_pending_exception from a call to, say, napi_call_function into a return value of napi_ok.

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    node-apiIssues and PRs related to the Node-API.Issues and PRs related to the Node-API.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.