Spaces:
Sleeping
Sleeping
| import { QuickJSContext } from "./context"; | |
| import { Asyncify, AsyncifySleepResult, EitherModule, EmscriptenModuleCallbacks } from "./emscripten-types"; | |
| import { JSContextPointer, JSRuntimePointer } from "./types-ffi"; | |
| import { InterruptHandler, QuickJSRuntime } from "./runtime"; | |
| import { ContextOptions, EitherFFI, JSModuleLoader, RuntimeOptions, RuntimeOptionsBase } from "./types"; | |
| type EmscriptenCallback<BaseArgs extends any[], Result> = (...args: [Asyncify | undefined, ...BaseArgs]) => Result | AsyncifySleepResult<Result>; | |
| type MaybeAsyncEmscriptenCallback<T extends EmscriptenCallback<any, any>> = T extends EmscriptenCallback<infer Args, infer Result> ? (...args: Args) => Result | Promise<Result> : never; | |
| type MaybeAsyncEmscriptenCallbacks = { | |
| [K in keyof EmscriptenModuleCallbacks]: MaybeAsyncEmscriptenCallback<EmscriptenModuleCallbacks[K]>; | |
| }; | |
| /** | |
| * @private | |
| */ | |
| export interface ContextCallbacks { | |
| callFunction: MaybeAsyncEmscriptenCallbacks["callFunction"]; | |
| } | |
| /** | |
| * @private | |
| */ | |
| export interface RuntimeCallbacks { | |
| shouldInterrupt: MaybeAsyncEmscriptenCallbacks["shouldInterrupt"]; | |
| loadModuleSource: MaybeAsyncEmscriptenCallbacks["loadModuleSource"]; | |
| normalizeModule: MaybeAsyncEmscriptenCallbacks["normalizeModule"]; | |
| } | |
| /** | |
| * Options for [[QuickJSWASMModule.evalCode]]. | |
| */ | |
| export interface ModuleEvalOptions { | |
| /** | |
| * Interrupt evaluation if `shouldInterrupt` returns `true`. | |
| * See [[shouldInterruptAfterDeadline]]. | |
| */ | |
| shouldInterrupt?: InterruptHandler; | |
| /** | |
| * Memory limit, in bytes, of WebAssembly heap memory used by the QuickJS VM. | |
| */ | |
| memoryLimitBytes?: number; | |
| /** | |
| * Stack size limit for this vm, in bytes | |
| * To remove the limit, set to `0`. | |
| */ | |
| maxStackSizeBytes?: number; | |
| /** | |
| * Module loader for any `import` statements or expressions. | |
| */ | |
| moduleLoader?: JSModuleLoader; | |
| } | |
| /** | |
| * We use static functions per module to dispatch runtime or context calls from | |
| * C to the host. This class manages the indirection from a specific runtime or | |
| * context pointer to the appropriate callback handler. | |
| * | |
| * @private | |
| */ | |
| export declare class QuickJSModuleCallbacks { | |
| private module; | |
| private contextCallbacks; | |
| private runtimeCallbacks; | |
| constructor(module: EitherModule); | |
| setRuntimeCallbacks(rt: JSRuntimePointer, callbacks: RuntimeCallbacks): void; | |
| deleteRuntime(rt: JSRuntimePointer): void; | |
| setContextCallbacks(ctx: JSContextPointer, callbacks: ContextCallbacks): void; | |
| deleteContext(ctx: JSContextPointer): void; | |
| private suspendedCount; | |
| private suspended; | |
| private handleAsyncify; | |
| private cToHostCallbacks; | |
| } | |
| /** | |
| * Process RuntimeOptions and apply them to a QuickJSRuntime. | |
| * @private | |
| */ | |
| export declare function applyBaseRuntimeOptions(runtime: QuickJSRuntime, options: RuntimeOptionsBase): void; | |
| /** | |
| * Process ModuleEvalOptions and apply them to a QuickJSRuntime. | |
| * @private | |
| */ | |
| export declare function applyModuleEvalRuntimeOptions<T extends QuickJSRuntime>(runtime: T, options: ModuleEvalOptions): void; | |
| /** | |
| * This class presents a Javascript interface to QuickJS, a Javascript interpreter | |
| * that supports EcmaScript 2020 (ES2020). | |
| * | |
| * It wraps a single WebAssembly module containing the QuickJS library and | |
| * associated helper C code. WebAssembly modules are completely isolated from | |
| * each other by the host's WebAssembly runtime. Separate WebAssembly modules | |
| * have the most isolation guarantees possible with this library. | |
| * | |
| * The simplest way to start running code is {@link evalCode}. This shortcut | |
| * method will evaluate Javascript safely and return the result as a native | |
| * Javascript value. | |
| * | |
| * For more control over the execution environment, or to interact with values | |
| * inside QuickJS, create a context with {@link newContext} or a runtime with | |
| * {@link newRuntime}. | |
| */ | |
| export declare class QuickJSWASMModule { | |
| /** @private */ | |
| protected ffi: EitherFFI; | |
| /** @private */ | |
| protected callbacks: QuickJSModuleCallbacks; | |
| /** @private */ | |
| protected module: EitherModule; | |
| /** @private */ | |
| constructor(module: EitherModule, ffi: EitherFFI); | |
| /** | |
| * Create a runtime. | |
| * Use the runtime to set limits on CPU and memory usage and configure module | |
| * loading for one or more [[QuickJSContext]]s inside the runtime. | |
| */ | |
| newRuntime(options?: RuntimeOptions): QuickJSRuntime; | |
| /** | |
| * A simplified API to create a new [[QuickJSRuntime]] and a | |
| * [[QuickJSContext]] inside that runtime at the same time. The runtime will | |
| * be disposed when the context is disposed. | |
| */ | |
| newContext(options?: ContextOptions): QuickJSContext; | |
| /** | |
| * One-off evaluate code without needing to create a [[QuickJSRuntime]] or | |
| * [[QuickJSContext]] explicitly. | |
| * | |
| * To protect against infinite loops, use the `shouldInterrupt` option. The | |
| * [[shouldInterruptAfterDeadline]] function will create a time-based deadline. | |
| * | |
| * If you need more control over how the code executes, create a | |
| * [[QuickJSRuntime]] (with [[newRuntime]]) or a [[QuickJSContext]] (with | |
| * [[newContext]] or [[QuickJSRuntime.newContext]]), and use its | |
| * [[QuickJSContext.evalCode]] method. | |
| * | |
| * Asynchronous callbacks may not run during the first call to `evalCode`. If | |
| * you need to work with async code inside QuickJS, create a runtime and use | |
| * [[QuickJSRuntime.executePendingJobs]]. | |
| * | |
| * @returns The result is coerced to a native Javascript value using JSON | |
| * serialization, so properties and values unsupported by JSON will be dropped. | |
| * | |
| * @throws If `code` throws during evaluation, the exception will be | |
| * converted into a native Javascript value and thrown. | |
| * | |
| * @throws if `options.shouldInterrupt` interrupted execution, will throw a Error | |
| * with name `"InternalError"` and message `"interrupted"`. | |
| */ | |
| evalCode(code: string, options?: ModuleEvalOptions): unknown; | |
| /** | |
| * Get a low-level interface to the QuickJS functions in this WebAssembly | |
| * module. | |
| * @experimental | |
| * @unstable No warranty is provided with this API. It could change at any time. | |
| * @private | |
| */ | |
| getFFI(): EitherFFI; | |
| } | |
| export {}; | |