const fs = require("fs"); const { dedent } = require("tslint/lib/utils"); const template = (name) => dedent` // @ts-ignore import { ${name}ABI } from "../../abis/${name}.abi"; import { Web3ContractProvider, Web3ProviderExtras } from "../web3.provider"; import { ${name}ContractEventType, ${name}ContractFunctions, // @ts-ignore } from "./aut-contract-functions"; const Web3${name}Provider = ( addressOrName: string, extras?: Partial> ) => { return Web3ContractProvider<${name}ContractEventType, ${name}ContractFunctions>( addressOrName, ${name}ABI, extras as Web3ProviderExtras<${name}ContractEventType> ); }; export { Web3${name}Provider, ${name}ContractEventType, ${name}ContractFunctions }; `; const updateImport = async (name) => { try { const dirName = `src/ProviderFactory/index.ts`; const fileData = fs.readFileSync(dirName); const fileAsStr = fileData.toString("utf8"); fs.writeFileSync( dirName, dedent`${fileAsStr}export * from "./${name}Provider";`, { encoding: "utf8" } ); } catch (err) { console.log(err); } }; export const createProviderFactoryDirs = (contractName) => { const dirName = `src/ProviderFactory/${contractName}Provider`; if (!fs.existsSync(dirName)) { fs.mkdirSync(dirName); fs.writeFileSync(`${dirName}/index.ts`, template(contractName), { encoding: "utf8", }); updateImport(contractName); } };