getJavascriptRuntime function

JavascriptRuntime getJavascriptRuntime({
  1. bool forceJavascriptCoreOnAndroid = false,
  2. bool xhr = true,
  3. Map<String, dynamic>? extraArgs = const {},
  4. int stackSize = 1024 * 1024,
  5. int? timeout,
  6. int? memoryLimit = kDefaultJsMemoryLimit,
})

Creates a JavascriptRuntime backed by QuickJS.

Limits (also via extraArgs keys stackSize, timeout, memoryLimit):

  • stackSize: JS stack bytes (default 1 MiB)
  • timeout: interrupt after this many ms of wall-clock JS work (null / 0 = off). Prefer a positive value for untrusted scripts.
  • memoryLimit: heap limit bytes (default kDefaultJsMemoryLimit; 0 = unlimited; null and negative values use the default).

Each runtime is a separate QuickJS engine (own heap, channels, port). Prefer JsEnginePool when many short-lived scripts run in parallel.

forceJavascriptCoreOnAndroid and xhr are kept for flutter_js-compatible call sites but are ignored (always QuickJS; no built-in XHR).

Implementation

JavascriptRuntime getJavascriptRuntime({
  bool forceJavascriptCoreOnAndroid = false,
  bool xhr = true,
  Map<String, dynamic>? extraArgs = const {},
  int stackSize = 1024 * 1024,
  int? timeout,
  int? memoryLimit = kDefaultJsMemoryLimit,
}) {
  final resolvedStack = (extraArgs?['stackSize'] as int?) ?? stackSize;
  final resolvedTimeout = (extraArgs?['timeout'] as int?) ?? timeout;
  final resolvedMemory = (extraArgs?['memoryLimit'] as int?) ?? memoryLimit;

  final runtime = QuickJsRuntime2(
    stackSize: resolvedStack,
    timeout: resolvedTimeout,
    memoryLimit: resolvedMemory,
  );
  runtime.enableHandlePromises();
  return runtime;
}