UNPKG

@graphprotocol/graph-cli

Version:

CLI for building for and deploying to The Graph

55 lines (45 loc) 1.55 kB
const path = require('path') const util = require('../codegen/util') const generateFieldAssignment = path => `entity.${path.join('_')} = event.params.${path.join('.')}` const generateFieldAssignments = ({ index, input }) => input.type === 'tuple' ? util .unrollTuple({ value: input, index, path: [input.name || `param${index}`] }) .map(({ path }) => generateFieldAssignment(path)) : generateFieldAssignment([input.name || `param${index}`]) const generateEventFieldAssignments = event => event.inputs.reduce( (acc, input, index) => acc.concat(generateFieldAssignments({ input, index })), [], ) const generateEventIndexingHandlers = (events, contractName) => ` import { ${events.map( event => `${event._alias} as ${event._alias}Event`, )}} from '../generated/${contractName}/${contractName}' import { ${events.map(event => event._alias)} } from '../generated/schema' ${events .map( event => ` export function handle${event._alias}(event: ${event._alias}Event): void { let entity = new ${ event._alias }(event.transaction.hash.concatI32(event.logIndex.toI32())) ${generateEventFieldAssignments(event).join('\n')} entity.blockNumber = event.block.number entity.blockTimestamp = event.block.timestamp entity.transactionHash = event.transaction.hash entity.save() } `, ) .join('\n')} ` module.exports = { generateFieldAssignment, generateFieldAssignments, generateEventFieldAssignments, generateEventIndexingHandlers, }