UNPKG

hakojs

Version:

A secure, embeddable JavaScript engine that runs untrusted code inside WebAssembly sandboxes with fine-grained permissions and resource limits

79 lines (74 loc) 1.88 kB
// src/etc/errors.ts class HakoError extends Error { constructor(message, options) { super(message, options); this.name = "HakoError"; } } class PrimJSError extends Error { jsError; constructor(message, jsError) { super(message); this.jsError = jsError; this.name = "PrimJSError"; } } class PrimJSUseAfterFree extends Error { name = "PrimJSUseAfterFree"; } class ErrorManager { exports; memory; constructor(exports, memory) { this.exports = exports; this.memory = memory; } getLastErrorPointer(ctx, ptr) { return this.exports.HAKO_GetLastError(ctx, ptr ? ptr : 0); } newError(ctx) { return this.exports.HAKO_NewError(ctx); } throwError(ctx, errorPtr) { return this.exports.HAKO_Throw(ctx, errorPtr); } throwErrorMessage(ctx, message) { const msgPtr = this.memory.allocateString(ctx, message); this.exports.HAKO_RuntimeJSThrow(ctx, msgPtr); this.memory.freeMemory(ctx, msgPtr); } dumpException(ctx, ptr) { let errorStr = ""; const errorStrPtr = this.exports.HAKO_Dump(ctx, ptr); errorStr = this.memory.readString(errorStrPtr); this.memory.freeCString(ctx, errorStrPtr); try { const errorObj = JSON.parse(errorStr); return { message: errorObj.message || errorStr, stack: errorObj.stack, name: errorObj.name, cause: errorObj.cause }; } catch (_e) { return { message: errorStr }; } } getExceptionDetails(ctx, ptr) { const details = this.dumpException(ctx, ptr); const message = details.message; const error = new PrimJSError(message, details); if (details.stack) { error.stack = details.stack; } return error; } } export { PrimJSUseAfterFree, PrimJSError, HakoError, ErrorManager }; //# debugId=0B6B1B52E20A2FB864756E2164756E21 //# sourceMappingURL=errors.js.map