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
JavaScript
// 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