UNPKG

@primitivefi/hardhat-dodoc

Version:

Zero-config Hardhat plugin to generate documentation for all your Solidity contracts

129 lines (126 loc) 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeAbi = exports.getCodeFromAbi = void 0; function getCodeFromAbi(element) { let code; if (element.type === 'constructor') { code = 'constructor('; } else { code = `${element.type} ${element.name}(`; } if (element.inputs) { for (let i = 0; i < element.inputs.length; i += 1) { if (element.inputs[i].internalType.includes('struct')) { code += element.inputs[i].internalType.substr(7); } else { code += element.inputs[i].internalType; } if (element.inputs[i].name) code += ' '; if (element.type === 'event' && element.inputs[i].indexed) { code += 'indexed '; } code += element.inputs[i].name; if (i + 1 < element.inputs.length) code += ', '; } } code += ')'; if (element.type === 'function') { code += ` external ${element.stateMutability}`; } if (element.outputs && element.outputs.length > 0) { code += ' returns ('; for (let i = 0; i < element.outputs.length; i += 1) { code += element.outputs[i].internalType; if (element.outputs[i].name) code += ' '; code += element.outputs[i].name; if (i + 1 < element.outputs.length) code += ', '; } code += ')'; } return code; } exports.getCodeFromAbi = getCodeFromAbi; function decodeAbi(abi) { const doc = { methods: {}, events: {}, errors: {}, }; for (let i = 0; i < abi.length; i += 1) { const el = abi[i]; /* if (el.type === 'constructor') { const func: Method = { stateMutability: el.stateMutability, code: getCodeFromAbi(el), inputs: {}, outputs: {}, }; el.inputs.forEach((input, index) => { const name = input.name.length !== 0 ? input.name : `_${index}`; func.inputs[name] = { type: input.internalType.includes('struct') ? input.internalType.substr(7) : input.internalType, }; }); doc.methods['constructor'] = func; } */ if (el.type === 'function') { const func = { stateMutability: el.stateMutability, code: getCodeFromAbi(el), inputs: {}, outputs: {}, }; el.inputs.forEach((input, index) => { const name = input.name.length !== 0 ? input.name : `_${index}`; func.inputs[name] = { type: input.internalType.includes('struct') ? input.internalType.substr(7) : input.internalType, }; }); el.outputs.forEach((output, index) => { const name = output.name.length !== 0 ? output.name : `_${index}`; func.outputs[name] = { type: output.internalType.includes('struct') ? output.internalType.substr(7) : output.internalType, }; }); doc.methods[`${el.name}(${el.inputs ? el.inputs.map((inp) => inp.type).join(',') : ''})`] = func; } if (el.type === 'event') { const event = { code: getCodeFromAbi(el), inputs: {}, }; el.inputs.forEach((input, index) => { const name = input.name.length !== 0 ? input.name : `_${index}`; event.inputs[name] = { type: input.internalType.includes('struct') ? input.internalType.substr(7) : input.internalType, indexed: input.indexed, }; }); doc.events[el.name] = event; } if (el.type === 'error') { const error = { code: getCodeFromAbi(el), inputs: {}, }; el.inputs.forEach((input, index) => { const name = input.name.length !== 0 ? input.name : `_${index}`; error.inputs[name] = { type: input.internalType.includes('struct') ? input.internalType.substr(7) : input.internalType, }; }); doc.errors[el.name] = error; } } return doc; } exports.decodeAbi = decodeAbi; //# sourceMappingURL=abiDecoder.js.map