summaryrefslogtreecommitdiff
path: root/ext/node
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node')
-rw-r--r--ext/node/02_require.js11
-rw-r--r--ext/node/lib.rs11
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()
+}