diff options
Diffstat (limited to 'ext/node/lib.rs')
-rw-r--r-- | ext/node/lib.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/ext/node/lib.rs b/ext/node/lib.rs index 96c9aff63..149efe6f4 100644 --- a/ext/node/lib.rs +++ b/ext/node/lib.rs @@ -14,6 +14,7 @@ use deno_core::v8; use deno_core::v8::ExternalReference; use deno_core::JsRuntime; use deno_core::ModuleSpecifier; +use deno_core::OpState; use deno_fs::sync::MaybeSend; use deno_fs::sync::MaybeSync; use once_cell::sync::Lazy; @@ -75,6 +76,16 @@ impl NodePermissions for AllowAllNodePermissions { pub type NpmResolverRc = deno_fs::sync::MaybeArc<dyn NpmResolver>; pub trait NpmResolver: std::fmt::Debug + MaybeSend + MaybeSync { + /// Gets a string containing the serialized npm state of the process. + /// + /// This will be set on the `DENO_DONT_USE_INTERNAL_NODE_COMPAT_STATE` environment + /// variable when doing a `child_process.fork`. The implementor can then check this environment + /// variable on startup to repopulate the internal npm state. + fn get_npm_process_state(&self) -> String { + // This method is only used in the CLI. + String::new() + } + /// Resolves an npm package folder path from an npm package referrer. fn resolve_package_folder_from_package( &self, @@ -139,6 +150,13 @@ fn op_node_is_promise_rejected(value: v8::Local<v8::Value>) -> bool { promise.state() == v8::PromiseState::Rejected } +#[op2] +#[string] +fn op_npm_process_state(state: &mut OpState) -> Result<String, AnyError> { + let npm_resolver = state.borrow_mut::<NpmResolverRc>(); + Ok(npm_resolver.get_npm_process_state()) +} + deno_core::extension!(deno_node, deps = [ deno_io, deno_fs ], parameters = [P: NodePermissions], @@ -254,6 +272,7 @@ deno_core::extension!(deno_node, op_node_build_os, op_is_any_arraybuffer, op_node_is_promise_rejected, + op_npm_process_state, ops::require::op_require_init_paths, ops::require::op_require_node_module_paths<P>, ops::require::op_require_proxy_path, |