near-typechain
Version:
49 lines (48 loc) • 2.47 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const path_1 = __importDefault(require("path"));
const abis_1 = require("../abis");
const utils_1 = require("../utils");
const definition_1 = require("./templates/definition");
const imports_1 = require("./templates/imports");
const readAbi = (abiPath) => {
return (0, abis_1.parseAbi)((0, utils_1.readFile)(abiPath));
};
const generateFromAbi = ({ abiPath, outputFolderPath }) => __awaiter(void 0, void 0, void 0, function* () {
const abi = readAbi(abiPath);
const res = (0, utils_1.prettifyCode)((0, definition_1.getFullDefinitionFromAbi)(abi));
return {
fileContent: res,
contractName: abi.contractName,
};
});
const generateFromAbis = ({ abisPath, outputFolderPath }) => __awaiter(void 0, void 0, void 0, function* () {
const files = yield (0, utils_1.getFilePathesByGlob)(abisPath);
const contracts = [];
for (const file of files) {
console.debug(`Generating From ${file} ABI`);
const { fileContent, contractName } = yield generateFromAbi({ abiPath: file, outputFolderPath });
const filePath = path_1.default.join(outputFolderPath, `${contractName}.ts`);
(0, utils_1.writeFile)(filePath, fileContent);
if (!contracts.includes(contractName))
contracts.push(contractName);
else
throw `Contract name is not unique: ${contractName}`;
}
if (contracts.length) {
const indexFileContent = (0, utils_1.prettifyCode)((0, imports_1.generateIndexFile)(contracts));
(0, utils_1.writeFile)(path_1.default.join(outputFolderPath, 'index.ts'), indexFileContent);
}
});
module.exports = generateFromAbis;