Spaces:
Sleeping
Sleeping
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.QuickJSAsyncContext = void 0; | |
| const context_1 = require("./context"); | |
| const debug_1 = require("./debug"); | |
| const types_1 = require("./types"); | |
| /** | |
| * Asyncified version of [[QuickJSContext]]. | |
| * | |
| * *Asyncify* allows normally synchronous code to wait for asynchronous Promises | |
| * or callbacks. The asyncified version of QuickJSContext can wait for async | |
| * host functions as though they were synchronous. | |
| */ | |
| class QuickJSAsyncContext extends context_1.QuickJSContext { | |
| /** | |
| * Asyncified version of [[evalCode]]. | |
| */ | |
| async evalCodeAsync(code, filename = "eval.js", | |
| /** See [[EvalFlags]] for number semantics */ | |
| options) { | |
| const detectModule = (options === undefined ? 1 : 0); | |
| const flags = (0, types_1.evalOptionsToFlags)(options); | |
| let resultPtr = 0; | |
| try { | |
| resultPtr = await this.memory | |
| .newHeapCharPointer(code) | |
| .consume((charHandle) => this.ffi.QTS_Eval_MaybeAsync(this.ctx.value, charHandle.value, filename, detectModule, flags)); | |
| } | |
| catch (error) { | |
| (0, debug_1.debugLog)("QTS_Eval_MaybeAsync threw", error); | |
| throw error; | |
| } | |
| const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr); | |
| if (errorPtr) { | |
| this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr); | |
| return { error: this.memory.heapValueHandle(errorPtr) }; | |
| } | |
| return { value: this.memory.heapValueHandle(resultPtr) }; | |
| } | |
| /** | |
| * Similar to [[newFunction]]. | |
| * Convert an async host Javascript function into a synchronous QuickJS function value. | |
| * | |
| * Whenever QuickJS calls this function, the VM's stack will be unwound while | |
| * waiting the async function to complete, and then restored when the returned | |
| * promise resolves. | |
| * | |
| * Asyncified functions must never call other asyncified functions or | |
| * `import`, even indirectly, because the stack cannot be unwound twice. | |
| * | |
| * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html). | |
| */ | |
| newAsyncifiedFunction(name, fn) { | |
| return this.newFunction(name, fn); | |
| } | |
| } | |
| exports.QuickJSAsyncContext = QuickJSAsyncContext; | |
| //# sourceMappingURL=context-asyncify.js.map |