@graphprotocol/graph-cli
Version:
CLI for building for and deploying to The Graph
55 lines (45 loc) • 1.55 kB
JavaScript
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,
}