UNPKG

solidity-docgen

Version:

Documentation generator for Solidity smart contracts.

129 lines 4.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.types = exports.variables = exports.errors = exports.modifiers = exports.events = exports.functions = exports.items = exports.returns = exports.params = exports.signature = exports.fullName = exports.name = exports.natspec = exports.type = void 0; const utils_1 = require("solidity-ast/utils"); const natspec_1 = require("../utils/natspec"); const site_1 = require("../site"); const doc_item_1 = require("../doc-item"); const helpers_1 = require("./helpers"); const item_type_1 = require("../utils/item-type"); function type({ item }) { return (0, item_type_1.itemType)(item); } exports.type = type; function natspec({ item }) { return (0, natspec_1.parseNatspec)(item); } exports.natspec = natspec; function name({ item }, original) { if (item.nodeType === 'FunctionDefinition') { return typeof (original) === 'string' && original !== '' ? original : item.kind; } else { return original; } } exports.name = name; function fullName({ item, contract }) { if (contract) { return `${contract.name}.${item.name}`; } else { return `${item.name}`; } } exports.fullName = fullName; function signature({ item }) { switch (item.nodeType) { case 'ContractDefinition': return undefined; case 'FunctionDefinition': { const { kind, name } = item; const params = item.parameters.parameters; const returns = item.returnParameters.parameters; const head = (kind === 'function' || kind === 'freeFunction') ? `function ${name}` : kind; let res = [ `${head}(${params.map(helpers_1.formatVariable).join(', ')})`, item.visibility, ]; if (item.stateMutability !== 'nonpayable') { res.push(item.stateMutability); } if (item.virtual) { res.push('virtual'); } if (returns.length > 0) { res.push(`returns (${returns.map(helpers_1.formatVariable).join(', ')})`); } return res.join(' '); } case 'EventDefinition': { const params = item.parameters.parameters; return `event ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`; } case 'ErrorDefinition': { const params = item.parameters.parameters; return `error ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`; } case 'ModifierDefinition': { const params = item.parameters.parameters; return `modifier ${item.name}(${params.map(helpers_1.formatVariable).join(', ')})`; } case 'VariableDeclaration': return (0, helpers_1.formatVariable)(item); } } exports.signature = signature; ; function getParams(params, natspec) { return params.parameters.map((p, i) => ({ ...p, type: p.typeDescriptions.typeString, natspec: natspec?.find((q, j) => q.name === undefined ? i === j : p.name === q.name)?.description, })); } function params({ item }) { if ('parameters' in item) { return getParams(item.parameters, natspec(item[site_1.DOC_ITEM_CONTEXT]).params); } } exports.params = params; function returns({ item }) { if ('returnParameters' in item) { return getParams(item.returnParameters, natspec(item[site_1.DOC_ITEM_CONTEXT]).returns); } } exports.returns = returns; function items({ item }) { return (item.nodeType === 'ContractDefinition') ? item.nodes.filter((0, utils_1.isNodeType)(doc_item_1.docItemTypes)).filter(n => !('visibility' in n) || n.visibility !== 'private') : undefined; } exports.items = items; function functions({ item }) { return [...(0, utils_1.findAll)('FunctionDefinition', item)].filter(f => f.visibility !== 'private'); } exports.functions = functions; function events({ item }) { return [...(0, utils_1.findAll)('EventDefinition', item)]; } exports.events = events; function modifiers({ item }) { return [...(0, utils_1.findAll)('ModifierDefinition', item)]; } exports.modifiers = modifiers; function errors({ item }) { return [...(0, utils_1.findAll)('ErrorDefinition', item)]; } exports.errors = errors; function variables({ item }) { return (item.nodeType === 'ContractDefinition') ? item.nodes.filter((0, utils_1.isNodeType)('VariableDeclaration')).filter(v => v.stateVariable && v.visibility !== 'private') : undefined; } exports.variables = variables; function types({ item }) { return [...(0, utils_1.findAll)(['StructDefinition', 'EnumDefinition', 'UserDefinedValueTypeDefinition'], item)]; } exports.types = types; //# sourceMappingURL=properties.js.map