hardhat-scilla-plugin
Version:
Hardhat TypeScript plugin for scilla testing
128 lines • 5.12 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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__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.getFileHash = exports.loadScillaContractsInfo = exports.updateContractsInfo = void 0;
const cli_color_1 = __importDefault(require("cli-color"));
const crypto_1 = require("crypto");
const fs_1 = __importDefault(require("fs"));
const glob_1 = require("glob");
const path_1 = __importStar(require("path"));
const ScillaParser_1 = require("./ScillaParser");
// For some reason, hardhat deletes json files in artifacts, so it couldn't be scilla.json
const CONTRACTS_INFO_CACHE_FILE = "artifacts/scilla.cache";
const updateContractsInfo = async () => {
let contractsInfo = {};
const files = glob_1.glob.sync("contracts/**/*(*.scilla|*.scillib)");
if (files.length === 0) {
console.log(cli_color_1.default.yellowBright("No scilla contracts were found in contracts directory."));
return;
}
contractsInfo = loadContractsInfo();
let somethingChanged = false;
for (const file of files) {
if (file in contractsInfo &&
contractsInfo[file].hash === (0, exports.getFileHash)(file)) {
continue;
}
// Either the file is new or has been changed
const contract = await parseScillaFile(file);
console.log(`Parsing ${file}...`);
if (contract) {
somethingChanged = true;
contractsInfo[file] = contract;
}
else {
console.log(cli_color_1.default.redBright(" Failed!"));
}
}
if (somethingChanged) {
console.log("Cache updated.");
saveContractsInfo(contractsInfo);
}
else {
console.log("Nothing changed since last compile.");
}
};
exports.updateContractsInfo = updateContractsInfo;
const loadScillaContractsInfo = () => {
const contractsInfo = loadContractsInfo();
return convertToMapByName(contractsInfo);
};
exports.loadScillaContractsInfo = loadScillaContractsInfo;
const convertToMapByName = (contracts) => {
const contractsByName = {};
for (const key in contracts) {
const elem = contracts[key];
const contractName = elem.parsedContract.name;
contractsByName[contractName] = elem;
}
return contractsByName;
};
const loadContractsInfo = () => {
if (!fs_1.default.existsSync(CONTRACTS_INFO_CACHE_FILE)) {
console.log("Cache file doesn't exist, creating a new one");
return {};
}
const contents = fs_1.default.readFileSync(CONTRACTS_INFO_CACHE_FILE, "utf8");
return JSON.parse(contents);
};
const saveContractsInfo = (contracts) => {
fs_1.default.mkdirSync((0, path_1.dirname)(CONTRACTS_INFO_CACHE_FILE), { recursive: true });
fs_1.default.writeFileSync(CONTRACTS_INFO_CACHE_FILE, JSON.stringify(contracts));
};
const getFileHash = (fileName) => {
const contents = fs_1.default.readFileSync(fileName, "utf8");
const hashSum = (0, crypto_1.createHash)("md5");
hashSum.update(contents);
return hashSum.digest("hex");
};
exports.getFileHash = getFileHash;
const parseScillaFile = async (fileName) => {
const contents = fs_1.default.readFileSync(fileName, "utf8");
const hashSum = (0, crypto_1.createHash)("md5");
hashSum.update(contents);
let parsedContract;
if (path_1.default.extname(fileName) === ".scillib") {
parsedContract = await (0, ScillaParser_1.parseScillaLibrary)(fileName);
}
else {
parsedContract = (0, ScillaParser_1.parseScilla)(fileName);
}
return { hash: hashSum.digest("hex"), path: fileName, parsedContract };
};
//# sourceMappingURL=ScillaContractsInfoUpdater.js.map