|
1 | 1 | import * as util from '../codegen/util.js'; |
2 | 2 |
|
3 | | -export const generateFieldAssignment = (key: string[], value: string[]) => |
4 | | - `entity.${key.join('_')} = event.params.${value.join('.')}`; |
| 3 | +/** |
| 4 | + * Map of value types that need to be changeType'd to their corresponding AssemblyScript type |
| 5 | + */ |
| 6 | +export const VALUE_TYPECAST_MAP: Record<string, string> = { |
| 7 | + 'address[]': 'Bytes[]', |
| 8 | + 'tuple[]': 'Bytes[]', |
| 9 | +}; |
| 10 | + |
| 11 | +export const generateFieldAssignment = (keyPath: string[], value: string[], type?: string) => { |
| 12 | + let rightSide = `event.params.${value.join('.')}`; |
| 13 | + if (type && VALUE_TYPECAST_MAP[type]) { |
| 14 | + rightSide = `changeType<${VALUE_TYPECAST_MAP[type]}>(${rightSide})`; |
| 15 | + } |
| 16 | + return `entity.${keyPath.join('_')} = ${rightSide}`; |
| 17 | +}; |
5 | 18 |
|
6 | 19 | export const generateFieldAssignments = ({ index, input }: { index: number; input: any }) => |
7 | 20 | input.type === 'tuple' |
8 | 21 | ? util |
9 | 22 | .unrollTuple({ value: input, index, path: [input.name || `param${index}`] }) |
10 | | - .map(({ path }: any) => generateFieldAssignment(path, path)) |
| 23 | + .map(({ path, type }: any) => generateFieldAssignment(path, path, type)) |
11 | 24 | : generateFieldAssignment( |
12 | 25 | [(input.mappedName ?? input.name) || `param${index}`], |
13 | 26 | [input.name || `param${index}`], |
| 27 | + input.type, |
14 | 28 | ); |
15 | 29 |
|
16 | 30 | /** |
@@ -39,6 +53,7 @@ export const generateEventIndexingHandlers = (events: any[], contractName: strin |
39 | 53 | event => `${event._alias} as ${event._alias}Event`, |
40 | 54 | )}} from '../generated/${contractName}/${contractName}' |
41 | 55 | import { ${events.map(event => event._alias)} } from '../generated/schema' |
| 56 | + import { Bytes } from '@graphprotocol/graph-ts' |
42 | 57 |
|
43 | 58 | ${events |
44 | 59 | .map( |
|
0 commit comments