Files
revive/js/run_revive.mjs
T
Sebastian Miasojed 5ac67bdc0d Initial wasm support
2024-08-29 17:28:31 +02:00

50 lines
1.4 KiB
JavaScript

import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import path from 'path';
import vm from 'vm';
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
// Import the Emscripten module
import ModuleFactory from './resolc.mjs';
async function initializeSolc() {
// Load soljson.js
const soljsonPath = path.join('./', 'soljson.js');
const soljsonCode = readFileSync(soljsonPath, 'utf8');
// Create a new VM context and run soljson.js in it
const soljsonContext = { Module: {} };
vm.createContext(soljsonContext); // Create a new context
vm.runInContext(soljsonCode, soljsonContext); // Execute soljson.js in the new context
// Return the initialized soljson module
return soljsonContext.Module;
}
async function runCompiler() {
const soljson = await initializeSolc();
const Module = await ModuleFactory();
// Expose soljson in the Module context
Module.soljson = soljson;
// Create input Solidity source code
const input = `
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
contract Baseline {
function baseline() public payable {}
}`;
// Write the input Solidity code to the Emscripten file system
Module.FS.writeFile('./input.sol', input);
// Compile the Solidity source code
Module.callMain(['./input.sol', '-O3','--bin']);
}
runCompiler().catch(err => {
console.error('Error:', err);
});