pub struct QuickJsRuntimeBuilder { /* private fields */ }
Expand description

the EsRuntimeBuilder is used to init an EsRuntime

Example

use quickjs_runtime::builder::QuickJsRuntimeBuilder;
// init a rt which may use 16MB of memory
let rt = QuickJsRuntimeBuilder::new()
.memory_limit(1024*1024*16)
.build();

Implementations

build an EsRuntime

init a new EsRuntimeBuilder

add a script loaders which will be used to load modules when they are imported from script

Example
use hirofa_utils::js_utils::Script;
use quickjs_runtime::builder::QuickJsRuntimeBuilder;
use quickjs_runtime::quickjsrealmadapter::QuickJsRealmAdapter;
use hirofa_utils::js_utils::modules::ScriptModuleLoader;
struct MyModuleLoader {}
impl ScriptModuleLoader<QuickJsRealmAdapter> for MyModuleLoader {
    fn normalize_path(&self, realm: &QuickJsRealmAdapter ,ref_path: &str,path: &str) -> Option<String> {
        Some(path.to_string())
    }

    fn load_module(&self, realm: &QuickJsRealmAdapter, absolute_path: &str) -> String {
        "export const foo = 12;".to_string()
    }
}

let rt = QuickJsRuntimeBuilder::new()
    .script_module_loader(Box::new(MyModuleLoader{}))
    .build();
rt.eval_module_sync(Script::new("test_module.es", "import {foo} from 'some_module.mes';\nconsole.log('foo = %s', foo);")).ok().unwrap();

add a ScriptPreProcessor which will be called for all scripts which are evaluated and compiled

add a module loader which can load native functions and proxy classes

Example
use quickjs_runtime::builder::QuickJsRuntimeBuilder;
use quickjs_runtime::valueref::JSValueRef;
use quickjs_runtime::quickjsrealmadapter::QuickJsRealmAdapter;
use quickjs_runtime::quickjs_utils::functions;
use quickjs_runtime::quickjs_utils::primitives::{from_bool, from_i32};
use quickjs_runtime::reflection::Proxy;
use hirofa_utils::js_utils::Script;
use hirofa_utils::js_utils::modules::NativeModuleLoader;

struct MyModuleLoader{}
impl NativeModuleLoader<QuickJsRealmAdapter> for MyModuleLoader {
    fn has_module(&self, _q_ctx: &QuickJsRealmAdapter,module_name: &str) -> bool {
        module_name.eq("my_module")
    }

    fn get_module_export_names(&self, _q_ctx: &QuickJsRealmAdapter, _module_name: &str) -> Vec<&str> {
        vec!["someVal", "someFunc", "SomeClass"]
    }

    fn get_module_exports(&self, q_ctx: &QuickJsRealmAdapter, _module_name: &str) -> Vec<(&str, JSValueRef)> {
         
        let js_val = from_i32(1470);
        let js_func = functions::new_function_q(
            q_ctx,
            "someFunc", |_q_ctx, _this, _args| {
                return Ok(from_i32(432));
            }, 0)
            .ok().unwrap();
        let js_class = Proxy::new()
            .name("SomeClass")
            .static_method("doIt", |_q_ctx, _args|{
                return Ok(from_i32(185));
            })
            .install(q_ctx, false)
            .ok().unwrap();

        vec![("someVal", js_val), ("someFunc", js_func), ("SomeClass", js_class)]
    }
}

let rt = QuickJsRuntimeBuilder::new()
.native_module_loader(Box::new(MyModuleLoader{}))
.build();

rt.eval_module_sync(Script::new("test_native_mod.es", "import {someVal, someFunc, SomeClass} from 'my_module';\nlet i = (someVal + someFunc() + SomeClass.doIt());\nif (i !== 2087){throw Error('i was not 2087');}")).ok().expect("script failed");

set max memory the runtime may use

number of allocations before gc is run

set a max stack size

set a Garbage Collection interval, this will start a timer thread which will trigger a full GC every set interval

add an interrupt handler, this will be called several times during script execution and may be used to cancel a running script

Trait Implementations

Returns the “default value” for a type. Read more

construct a JsRuntimeFacade based on this builders options

add a runtime init hook, this closure will be invoked when a JsRuntimeFacade is constructed (e.g. builder.build is called)

add a realm adapter init hook, this will be called every time a realm is initialized

add a script preprocessor

add a module loader

add a compiled_module loader

add a native module loader (e.g. with proxy classes instead of a script)

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.