Struct deno_core::JsRuntime

source ·
pub struct JsRuntime { /* private fields */ }
Expand description

A single execution context of JavaScript. Corresponds roughly to the “Web Worker” concept in the DOM.

The JsRuntime future completes when there is an error or when all pending ops have completed.

Use JsRuntimeForSnapshot to be able to create a snapshot.

Note: since V8 11.6, all runtimes must have a common parent thread that initalized the V8 platform. This can be done by calling JsRuntime::init_platform explicitly, or it will be done automatically on the calling thread when the first runtime is created.

Implementations§

source§

impl JsRuntime

source

pub fn init_platform(v8_platform: Option<SharedRef<Platform>>)

Explicitly initalizes the V8 platform using the passed platform. This should only be called once per process. Further calls will be silently ignored.

source

pub fn new(options: RuntimeOptions) -> JsRuntime

Only constructor, configuration is done through options.

source

pub fn op_state_from(isolate: &Isolate) -> Rc<RefCell<OpState>>

Returns the OpState associated with the passed Isolate.

source

pub fn op_metadata(&self, name: &str) -> Option<OpMetadata>

Returns the OpMetadata associated with the op name. Note this is linear with respect to the number of ops registered.

source

pub fn main_context(&self) -> Global<Context>

source

pub fn v8_isolate(&mut self) -> &mut OwnedIsolate

source

pub fn inspector(&mut self) -> Rc<RefCell<JsRuntimeInspector>>

source

pub fn wait_for_inspector_disconnect(&mut self)

source

pub fn runtime_activity_stats_factory(&self) -> RuntimeActivityStatsFactory

source

pub fn handle_scope(&mut self) -> HandleScope<'_>

source

pub fn eval<'s, T>( scope: &mut HandleScope<'s>, code: &str ) -> Option<Local<'s, T>>
where Local<'s, T>: TryFrom<Local<'s, Value>, Error = DataError>,

source

pub fn op_state(&mut self) -> Rc<RefCell<OpState>>

Returns the runtime’s op state, which can be used to maintain ops and access resources between op calls.

source

pub fn op_names(&self) -> Vec<&'static str>

Returns the runtime’s op names, ordered by OpId.

source

pub fn execute_script( &mut self, name: &'static str, source_code: impl IntoModuleCodeString ) -> Result<Global<Value>, Error>

Executes traditional, non-ECMAScript-module JavaScript code, This code executes in the global scope by default, and it is possible to maintain local JS state and invoke this method multiple times.

name can be a filepath or any other string, but it is required to be 7-bit ASCII, eg.

  • “/some/file/path.js”
  • “[native code]”

The same name value can be used for multiple executions.

The source may be any type that implements the internal [IntoModuleCodeString] trait, but it is highly recommended that embedders use the ascii_str! to generate the fastest version of strings for v8 to handle. If the strings are not static, you may also pass a String generated by the format! macro.

Error can usually be downcast to JsError.

source

pub fn call( &mut self, function: &Global<Function> ) -> impl Future<Output = Result<Global<Value>, Error>>

Call a function and return a future resolving with the return value of the function. If the function returns a promise, the future will resolve only once the event loop resolves the underlying promise. If the future rejects, the future will resolve with the underlying error.

The event loop must be polled seperately for this future to resolve. If the event loop is not polled, the future will never make progress.

source

pub fn scoped_call( scope: &mut HandleScope<'_>, function: &Global<Function> ) -> impl Future<Output = Result<Global<Value>, Error>>

Call a function and returns a future resolving with the return value of the function. If the function returns a promise, the future will resolve only once the event loop resolves the underlying promise. If the future rejects, the future will resolve with the underlying error.

The event loop must be polled seperately for this future to resolve. If the event loop is not polled, the future will never make progress.

source

pub fn call_with_args( &mut self, function: &Global<Function>, args: &[Global<Value>] ) -> impl Future<Output = Result<Global<Value>, Error>>

Call a function and returns a future resolving with the return value of the function. If the function returns a promise, the future will resolve only once the event loop resolves the underlying promise. If the future rejects, the future will resolve with the underlying error.

The event loop must be polled seperately for this future to resolve. If the event loop is not polled, the future will never make progress.

source

pub fn scoped_call_with_args( scope: &mut HandleScope<'_>, function: &Global<Function>, args: &[Global<Value>] ) -> impl Future<Output = Result<Global<Value>, Error>>

Call a function and returns a future resolving with the return value of the function. If the function returns a promise, the future will resolve only once the event loop resolves the underlying promise. If the future rejects, the future will resolve with the underlying error.

The event loop must be polled seperately for this future to resolve. If the event loop is not polled, the future will never make progress.

source

pub async fn call_and_await( &mut self, function: &Global<Function> ) -> Result<Global<Value>, Error>

👎Deprecated: Use call

Call a function. If it returns a promise, run the event loop until that promise is settled. If the promise rejects or there is an uncaught error in the event loop, return Err(error). Or return Ok(<await returned>).

source

pub async fn call_with_args_and_await( &mut self, function: &Global<Function>, args: &[Global<Value>] ) -> Result<Global<Value>, Error>

👎Deprecated: Use call_with_args

Call a function with args. If it returns a promise, run the event loop until that promise is settled. If the promise rejects or there is an uncaught error in the event loop, return Err(error). Or return Ok(<await returned>).

source

pub fn get_module_namespace( &mut self, module_id: ModuleId ) -> Result<Global<Object>, Error>

Returns the namespace object of a module.

This is only available after module evaluation has completed. This function panics if module has not been instantiated.

source

pub fn add_near_heap_limit_callback<C>(&mut self, cb: C)
where C: FnMut(usize, usize) -> usize + 'static,

Registers a callback on the isolate when the memory limits are approached. Use this to prevent V8 from crashing the process when reaching the limit.

Calls the closure with the current heap limit and the initial heap limit. The return value of the closure is set as the new limit.

source

pub fn remove_near_heap_limit_callback(&mut self, heap_limit: usize)

source

pub fn maybe_init_inspector(&mut self)

source

pub fn resolve( &mut self, promise: Global<Value> ) -> impl Future<Output = Result<Global<Value>, Error>>

Waits for the given value to resolve while polling the event loop.

This future resolves when either the value is resolved or the event loop runs to completion.

source

pub fn scoped_resolve( scope: &mut HandleScope<'_>, promise: Global<Value> ) -> impl Future<Output = Result<Global<Value>, Error>>

Waits for the given value to resolve while polling the event loop.

This future resolves when either the value is resolved or the event loop runs to completion.

source

pub async fn resolve_value( &mut self, global: Global<Value> ) -> Result<Global<Value>, Error>

👎Deprecated: Use resolve

Waits for the given value to resolve while polling the event loop.

This future resolves when either the value is resolved or the event loop runs to completion.

source

pub async fn run_event_loop( &mut self, poll_options: PollEventLoopOptions ) -> Result<(), Error>

Runs event loop to completion

This future resolves when:

  • there are no more pending dynamic imports
  • there are no more pending ops
  • there are no more active inspector sessions (only if PollEventLoopOptions.wait_for_inspector is set to true)
source

pub async fn with_event_loop_promise<'fut, T, E>( &mut self, fut: impl Future<Output = Result<T, E>> + Unpin + 'fut, poll_options: PollEventLoopOptions ) -> Result<T, AnyError>
where AnyError: From<E>,

A utility function that run provided future concurrently with the event loop.

If the event loop resolves while polling the future, it return an error with the text Promise resolution is still pending but the event loop has already resolved.

source

pub async fn with_event_loop_future<'fut, T, E>( &mut self, fut: impl Future<Output = Result<T, E>> + Unpin + 'fut, poll_options: PollEventLoopOptions ) -> Result<T, AnyError>
where AnyError: From<E>,

A utility function that run provided future concurrently with the event loop.

If the event loop resolves while polling the future, it will continue to be polled, regardless of whether it returned an error or success.

Useful for interacting with local inspector session.

source

pub fn poll_event_loop( &mut self, cx: &mut Context<'_>, poll_options: PollEventLoopOptions ) -> Poll<Result<(), Error>>

Runs a single tick of event loop

If PollEventLoopOptions.wait_for_inspector is set to true, the event loop will return Poll::Pending if there are active inspector sessions.

source§

impl JsRuntime

source

pub fn mod_evaluate( &mut self, id: ModuleId ) -> impl Future<Output = Result<(), Error>>

Evaluates an already instantiated ES module.

Returns a future that resolves when module promise resolves. Implementors must manually call JsRuntime::run_event_loop to drive module evaluation future.

Modules with top-level await are treated like promises, so a throw in the top-level block of a module is treated as an unhandled rejection. These rejections are provided to the unhandled promise rejection handler, which has the opportunity to pass them off to error-handling code. If those rejections are not handled (indicated by a false return from that unhandled promise rejection handler), then the runtime will terminate.

The future provided by mod_evaluate will only return errors in the case where the runtime is shutdown and no longer available to provide unhandled rejection information.

This function panics if module has not been instantiated.

source

pub async fn load_main_es_module_from_code( &mut self, specifier: &ModuleSpecifier, code: impl IntoModuleCodeString ) -> Result<ModuleId, Error>

Asynchronously load specified module and all of its dependencies.

The module will be marked as “main”, and because of that “import.meta.main” will return true when checked inside that module.

The source may be any type that implements the internal [IntoModuleCodeString] trait, but it is highly recommended that embedders use the ascii_str! to generate the fastest version of strings for v8 to handle. If the strings are not static, you may also pass a String generated by the format! macro.

User must call JsRuntime::mod_evaluate with returned ModuleId manually after load is finished.

source

pub async fn load_main_es_module( &mut self, specifier: &ModuleSpecifier ) -> Result<ModuleId, Error>

Asynchronously load specified module and all of its dependencies, retrieving the module from the supplied ModuleLoader.

The module will be marked as “main”, and because of that “import.meta.main” will return true when checked inside that module.

User must call JsRuntime::mod_evaluate with returned ModuleId manually after load is finished.

source

pub async fn load_side_es_module_from_code( &mut self, specifier: &ModuleSpecifier, code: impl IntoModuleCodeString ) -> Result<ModuleId, Error>

Asynchronously load specified ES module and all of its dependencies from the provided source.

This method is meant to be used when loading some utility code that might be later imported by the main module (ie. an entry point module).

The source may be any type that implements the internal [IntoModuleCodeString] trait, but it is highly recommended that embedders use the ascii_str! to generate the fastest version of strings for v8 to handle. If the strings are not static, you may also pass a String generated by the format! macro.

User must call JsRuntime::mod_evaluate with returned ModuleId manually after load is finished.

source

pub async fn load_side_es_module( &mut self, specifier: &ModuleSpecifier ) -> Result<ModuleId, Error>

Asynchronously load specified ES module and all of its dependencies, retrieving the module from the supplied ModuleLoader.

This method is meant to be used when loading some utility code that might be later imported by the main module (ie. an entry point module).

User must call JsRuntime::mod_evaluate with returned ModuleId manually after load is finished.

source

pub fn lazy_load_es_module_with_code( &mut self, specifier: impl IntoModuleName, code: impl IntoModuleCodeString ) -> Result<Global<Value>, Error>

Load and evaluate an ES module provided the specifier and source code.

The module should not have Top-Level Await (that is, it should be possible to evaluate it synchronously).

It is caller’s responsibility to ensure that not duplicate specifiers are passed to this method.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.