diff options
Diffstat (limited to 'ext/node')
-rw-r--r-- | ext/node/02_require.js | 11 | ||||
-rw-r--r-- | ext/node/lib.rs | 11 |
2 files changed, 22 insertions, 0 deletions
diff --git a/ext/node/02_require.js b/ext/node/02_require.js index 372cc8471..db4329911 100644 --- a/ext/node/02_require.js +++ b/ext/node/02_require.js @@ -69,6 +69,8 @@ let statCache = null; let isPreloading = false; let mainModule = null; + let hasBrokenOnInspectBrk = false; + let hasInspectBrk = false; function stat(filename) { // TODO: required only on windows @@ -723,6 +725,12 @@ if (requireDepth === 0) { statCache = new SafeMap(); } + + if (hasInspectBrk && !hasBrokenOnInspectBrk) { + hasBrokenOnInspectBrk = true; + core.ops.op_require_break_on_next_statement(); + } + const result = compiledWrapper.call( thisValue, exports, @@ -896,6 +904,9 @@ window.__bootstrap.internals = { ...window.__bootstrap.internals ?? {}, require: { + setInspectBrk() { + hasInspectBrk = true; + }, Module, wrapSafe, toRealPath, diff --git a/ext/node/lib.rs b/ext/node/lib.rs index d69d3b6fe..0e84cea7b 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -7,6 +7,7 @@ use deno_core::normalize_path; use deno_core::op; use deno_core::url::Url; use deno_core::Extension; +use deno_core::JsRuntimeInspector; use deno_core::OpState; use once_cell::sync::Lazy; use std::collections::HashSet; @@ -31,6 +32,7 @@ pub use resolution::path_to_declaration_path; pub use resolution::NodeModuleKind; pub use resolution::DEFAULT_CONDITIONS; pub use resolution::TYPES_CONDITIONS; +use std::cell::RefCell; pub trait NodePermissions { fn check_read(&mut self, path: &Path) -> Result<(), AnyError>; @@ -106,6 +108,7 @@ pub fn init<P: NodePermissions + 'static>( op_require_read_closest_package_json::decl::<P>(), op_require_read_package_scope::decl(), op_require_package_imports_resolve::decl::<P>(), + op_require_break_on_next_statement::decl(), ]) .state(move |state| { if let Some(npm_resolver) = maybe_npm_resolver.clone() { @@ -630,3 +633,11 @@ where Ok(None) } } + +#[op] +fn op_require_break_on_next_statement(state: &mut OpState) { + let inspector = state.borrow::<Rc<RefCell<JsRuntimeInspector>>>(); + inspector + .borrow_mut() + .wait_for_session_and_break_on_next_statement() +} |