UNPKG

hakojs

Version:

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

85 lines (83 loc) 2.89 kB
// src/etc/utils.ts class Utils { memory; exports; buildInfo = null; constructor(exports, memory) { this.exports = exports; this.memory = memory; } getBuildInfo() { if (this.buildInfo) { return this.buildInfo; } const buildPtr = this.exports.HAKO_BuildInfo(); const versionPtr = this.memory.readPointer(buildPtr); const version = this.memory.readString(versionPtr); const ptrSize = 4; const flags = this.memory.readUint32(buildPtr + ptrSize); const buildDatePtr = this.memory.readPointer(buildPtr + ptrSize * 2); const buildDate = this.memory.readString(buildDatePtr); const wasiSdkVersionPtr = this.memory.readPointer(buildPtr + ptrSize * 3); const wasiSdkVersion = this.memory.readString(wasiSdkVersionPtr); const wasiLibcPtr = this.memory.readPointer(buildPtr + ptrSize * 4); const wasiLibc = this.memory.readString(wasiLibcPtr); const llvmPtr = this.memory.readPointer(buildPtr + ptrSize * 5); const llvm = this.memory.readString(llvmPtr); const llvmVersionPtr = this.memory.readPointer(buildPtr + ptrSize * 6); const llvmVersion = this.memory.readString(llvmVersionPtr); const configPtr = this.memory.readPointer(buildPtr + ptrSize * 7); const config = this.memory.readString(configPtr); this.buildInfo = { version, flags, buildDate, wasiSdkVersion, wasiLibc, llvm, llvmVersion, config, isDebug: Boolean(flags & 1 << 0), hasSanitizer: Boolean(flags & 1 << 1), hasBignum: Boolean(flags & 1 << 2), hasLepusNG: Boolean(flags & 1 << 3), hasDebugger: Boolean(flags & 1 << 4), hasSnapshot: Boolean(flags & 1 << 5), hasCompatibleMM: Boolean(flags & 1 << 6), hasNanbox: Boolean(flags & 1 << 7), hasCodeCache: Boolean(flags & 1 << 8), hasCacheProfile: Boolean(flags & 1 << 9), hasMemDetection: Boolean(flags & 1 << 10), hasAtomics: Boolean(flags & 1 << 11), hasForceGC: Boolean(flags & 1 << 12), hasLynxSimplify: Boolean(flags & 1 << 13), hasBuiltinSerialize: Boolean(flags & 1 << 14), hasHakoProfiler: Boolean(flags & 1 << 15) }; return this.buildInfo; } getLength(ctx, ptr) { const lenPtrPtr = this.memory.allocateMemory(ctx, 4); try { const result = this.exports.HAKO_GetLength(ctx, lenPtrPtr, ptr); if (result !== 0) { return -1; } const view = new DataView(this.exports.memory.buffer); return view.getUint32(lenPtrPtr, true); } finally { this.memory.freeMemory(ctx, lenPtrPtr); } } isEqual(ctx, aPtr, bPtr, op = 0) { return this.exports.HAKO_IsEqual(ctx, aPtr, bPtr, op) === 1; } isDebugBuild() { return this.exports.HAKO_BuildIsDebug() === 1; } } export { Utils }; //# debugId=FE9274274149658964756E2164756E21 //# sourceMappingURL=utils.js.map