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