@xorddotcom/shield
Version:
p align="center" > <img src="https://xord.notion.site/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F283b98b7-fdae-4e5a-acaf-248242084e4a%2FICON.png?table=block&id=5306223c-a4f7-45d1-9f54-b9a5f4004cd6&spaceId=49976899-64a1-40f
162 lines • 6.49 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initFS = void 0;
const unionfs_1 = __importDefault(require("@phated/unionfs"));
const memfs_1 = require("memfs");
const nodefs = __importStar(require("fs"));
const shimmer_1 = __importDefault(require("shimmer"));
const initFS = () => {
const vol = memfs_1.Volume.fromJSON({
"/dev/stdin": "",
"/dev/stdout": "",
"/dev/stderr": "",
});
const memfs = (0, memfs_1.createFsFromVolume)(vol);
unionfs_1.default.use(nodefs).use(memfs);
const bufferSize = 10 * 1024 * 1024;
const writeBuffer = new Uint8Array(bufferSize);
let writeBufferFd = -1;
let writeBufferOffset = 0;
let writeBufferPos = 0;
const wasmFs = {
...unionfs_1.default,
writeSync(fd, buf, offset, len, pos) {
if (writeBufferFd === fd &&
writeBufferOffset + len < bufferSize &&
pos === writeBufferPos + writeBufferOffset) {
writeBuffer.set(buf, writeBufferOffset);
writeBufferOffset += len;
return len;
}
else {
if (writeBufferFd >= 0) {
unionfs_1.default.writeSync(writeBufferFd, writeBuffer, 0, writeBufferOffset, writeBufferPos);
}
writeBufferFd = fd;
writeBufferOffset = 0;
writeBuffer.set(buf, writeBufferOffset);
writeBufferOffset += len;
writeBufferPos = pos;
}
return len;
},
closeSync(fd) {
if (writeBufferFd >= 0) {
unionfs_1.default.writeSync(writeBufferFd, writeBuffer, 0, writeBufferOffset, writeBufferPos);
writeBufferFd = -1;
writeBufferOffset = 0;
writeBufferPos = 0;
}
if (fd >= 0) {
return unionfs_1.default.closeSync(fd);
}
},
getStdOut() {
const promise = new Promise((resolve) => {
resolve(unionfs_1.default.readFileSync("/dev/stdout", "utf8"));
});
return promise;
},
};
wasmFs.writeFileSync("/dev/stderr", "");
wasmFs.writeFileSync("/dev/stdout", "");
let stdout = "";
let stderr = "";
// We wrap the writeSync function because circom2 doesn't allow us to
// configure the logging and it doesn't exit with proper exit codes
shimmer_1.default.wrap(wasmFs, "writeSync", function (original) {
return function (fd, data, offsetOrPosition, lengthOrEncoding, position) {
if (fd === 1) {
if (typeof data === "string") {
stdout += data;
// This is a little fragile, but we assume the wasmer-js
// terminal character is a newline by itself
if (stdout.endsWith("\n")) {
stdout.trim();
stdout = "";
}
return data.length;
}
else {
stdout += new TextDecoder().decode(data);
if (stdout.endsWith("\n")) {
stdout.trim();
stdout = "";
}
return data.byteLength;
}
}
// If writing to stderr, we hijack and throw an error
if (fd === 2) {
if (typeof data === "string") {
stderr += data;
// This is a little fragile, but we assume that circom2
// ends the failed compile with "previous errors were found"
if (stderr.includes("previous errors were found")) {
const msg = stderr.trim();
stderr = "";
throw new Error(msg);
}
return data.length;
}
else {
stderr += new TextDecoder().decode(data);
// This is a little fragile, but we assume that circom2
// ends the failed compile with "previous errors were found"
if (stderr.includes("previous errors were found")) {
const msg = stderr.trim();
stderr = "";
throw new Error(msg);
}
return data.byteLength;
}
}
if (typeof data === "string") {
if (typeof lengthOrEncoding !== "number") {
// @ts-ignore
return original(fd, data, offsetOrPosition, lengthOrEncoding);
}
else {
throw Error("Invalid arguments");
}
}
else {
if (typeof lengthOrEncoding !== "string") {
return original(fd, data, offsetOrPosition, lengthOrEncoding, position);
}
else {
throw Error("Invalid arguments");
}
}
};
});
return wasmFs;
};
exports.initFS = initFS;
//# sourceMappingURL=wasm.js.map