@graphprotocol/graph-cli 0.37.2 → 0.37.3-alpha-20230110163550-d64bef6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/babel.config.js +3 -0
  3. package/dist/bin.js +6 -0
  4. package/dist/cli.js +32 -0
  5. package/dist/codegen/schema.js +250 -0
  6. package/dist/codegen/schema.test.js +458 -0
  7. package/dist/codegen/template.js +65 -0
  8. package/dist/codegen/types/conversions.js +359 -0
  9. package/dist/codegen/types/index.js +71 -0
  10. package/dist/codegen/types/index.test.js +563 -0
  11. package/dist/codegen/typescript.js +200 -0
  12. package/dist/codegen/util.js +46 -0
  13. package/dist/codegen/util.test.js +93 -0
  14. package/dist/command-helpers/abi.js +78 -0
  15. package/dist/command-helpers/auth.js +77 -0
  16. package/dist/command-helpers/compiler.js +66 -0
  17. package/dist/command-helpers/data-sources.js +29 -0
  18. package/dist/command-helpers/fs.js +9 -0
  19. package/dist/command-helpers/gluegun.js +49 -0
  20. package/dist/command-helpers/ipfs.js +5 -0
  21. package/dist/command-helpers/jsonrpc.js +29 -0
  22. package/dist/command-helpers/network.js +93 -0
  23. package/dist/command-helpers/network.test.js +86 -0
  24. package/dist/command-helpers/node.js +40 -0
  25. package/dist/command-helpers/scaffold.js +112 -0
  26. package/dist/command-helpers/spinner.js +84 -0
  27. package/dist/command-helpers/studio.js +13 -0
  28. package/dist/command-helpers/studio.test.js +41 -0
  29. package/dist/command-helpers/subgraph.js +24 -0
  30. package/dist/command-helpers/version.js +74 -0
  31. package/dist/command-helpers/version.test.js +179 -0
  32. package/dist/commands/add.js +190 -0
  33. package/dist/commands/auth.js +127 -0
  34. package/dist/commands/build.js +140 -0
  35. package/dist/commands/codegen.js +135 -0
  36. package/dist/commands/create.js +86 -0
  37. package/dist/commands/deploy.js +334 -0
  38. package/dist/commands/init.js +788 -0
  39. package/dist/commands/local.js +387 -0
  40. package/dist/commands/remove.js +86 -0
  41. package/dist/commands/test.js +295 -0
  42. package/dist/compiler/asc.js +83 -0
  43. package/dist/compiler/index.js +474 -0
  44. package/dist/debug.js +16 -0
  45. package/dist/migrations/mapping_api_version_0_0_1.js +78 -0
  46. package/dist/migrations/mapping_api_version_0_0_2.js +76 -0
  47. package/dist/migrations/mapping_api_version_0_0_3.js +78 -0
  48. package/dist/migrations/mapping_api_version_0_0_4.js +80 -0
  49. package/dist/migrations/mapping_api_version_0_0_5.js +80 -0
  50. package/dist/migrations/spec_version_0_0_2.js +49 -0
  51. package/dist/migrations/spec_version_0_0_3.js +54 -0
  52. package/dist/migrations/util/load-manifest.js +18 -0
  53. package/dist/migrations/util/versions.js +29 -0
  54. package/dist/migrations.js +56 -0
  55. package/dist/protocols/arweave/manifest.graphql +57 -0
  56. package/dist/protocols/arweave/scaffold/manifest.js +18 -0
  57. package/dist/protocols/arweave/scaffold/mapping.js +52 -0
  58. package/dist/protocols/arweave/subgraph.js +23 -0
  59. package/dist/protocols/cosmos/manifest.graphql +76 -0
  60. package/dist/protocols/cosmos/scaffold/manifest.js +15 -0
  61. package/dist/protocols/cosmos/scaffold/mapping.js +38 -0
  62. package/dist/protocols/cosmos/subgraph.js +25 -0
  63. package/dist/protocols/ethereum/abi.js +140 -0
  64. package/dist/protocols/ethereum/codegen/abi.js +451 -0
  65. package/dist/protocols/ethereum/codegen/abi.test.js +328 -0
  66. package/dist/protocols/ethereum/codegen/template.js +50 -0
  67. package/dist/protocols/ethereum/contract.js +20 -0
  68. package/dist/protocols/ethereum/manifest.graphql +94 -0
  69. package/dist/protocols/ethereum/scaffold/manifest.js +32 -0
  70. package/dist/protocols/ethereum/scaffold/mapping.js +65 -0
  71. package/dist/protocols/ethereum/subgraph.js +171 -0
  72. package/dist/protocols/ethereum/type-generator.js +125 -0
  73. package/dist/protocols/index.js +268 -0
  74. package/dist/protocols/ipfs/codegen/file_template.js +50 -0
  75. package/dist/protocols/near/contract.js +41 -0
  76. package/dist/protocols/near/manifest.graphql +64 -0
  77. package/dist/protocols/near/scaffold/manifest.js +16 -0
  78. package/dist/protocols/near/scaffold/mapping.js +38 -0
  79. package/dist/protocols/near/subgraph.js +20 -0
  80. package/dist/protocols/subgraph.js +2 -0
  81. package/dist/protocols/substreams/manifest.graphql +45 -0
  82. package/dist/protocols/substreams/scaffold/manifest.js +12 -0
  83. package/dist/protocols/substreams/subgraph.js +23 -0
  84. package/dist/scaffold/cosmos.test.js +83 -0
  85. package/dist/scaffold/ethereum.test.js +505 -0
  86. package/dist/scaffold/index.js +128 -0
  87. package/dist/scaffold/mapping.js +61 -0
  88. package/dist/scaffold/near.test.js +86 -0
  89. package/dist/scaffold/schema.js +83 -0
  90. package/dist/scaffold/tests.js +175 -0
  91. package/dist/schema.js +54 -0
  92. package/dist/subgraph.js +249 -0
  93. package/dist/type-generator.js +224 -0
  94. package/dist/validation/contract.js +46 -0
  95. package/dist/validation/index.js +8 -0
  96. package/dist/validation/manifest.js +271 -0
  97. package/dist/validation/schema.js +796 -0
  98. package/dist/validation/schema.test.js +35 -0
  99. package/dist/watcher.js +79 -0
  100. package/jest.config.js +1 -1
  101. package/package.json +16 -9
  102. package/{bin/graph → src/bin.ts} +2 -1
  103. package/src/cli.ts +36 -0
  104. package/src/codegen/schema.js +23 -22
  105. package/src/codegen/schema.test.js +33 -27
  106. package/src/codegen/{template.js → template.ts} +8 -6
  107. package/src/codegen/types/conversions.ts +382 -0
  108. package/src/codegen/types/index.js +4 -7
  109. package/src/codegen/types/index.test.js +10 -4
  110. package/src/codegen/{typescript.js → typescript.ts} +44 -26
  111. package/src/codegen/util.js +1 -1
  112. package/src/codegen/util.test.js +5 -2
  113. package/src/command-helpers/abi.js +46 -30
  114. package/src/command-helpers/auth.js +6 -9
  115. package/src/command-helpers/compiler.js +4 -6
  116. package/src/command-helpers/data-sources.js +8 -11
  117. package/src/command-helpers/fs.ts +5 -0
  118. package/src/command-helpers/gluegun.js +2 -4
  119. package/src/command-helpers/ipfs.ts +3 -0
  120. package/src/command-helpers/{jsonrpc.js → jsonrpc.ts} +11 -16
  121. package/src/command-helpers/network.js +58 -44
  122. package/src/command-helpers/network.test.js +23 -19
  123. package/src/command-helpers/node.js +3 -7
  124. package/src/command-helpers/scaffold.js +34 -25
  125. package/src/command-helpers/{spinner.js → spinner.ts} +10 -10
  126. package/src/command-helpers/studio.test.js +61 -30
  127. package/src/command-helpers/studio.ts +20 -0
  128. package/src/command-helpers/{subgraph.js → subgraph.ts} +6 -6
  129. package/src/command-helpers/version.js +11 -16
  130. package/src/command-helpers/version.test.js +111 -82
  131. package/src/commands/add.js +49 -35
  132. package/src/commands/auth.js +13 -25
  133. package/src/commands/build.js +9 -9
  134. package/src/commands/codegen.js +12 -12
  135. package/src/commands/create.js +22 -22
  136. package/src/commands/deploy.js +39 -34
  137. package/src/commands/init.js +21 -24
  138. package/src/commands/local.js +15 -14
  139. package/src/commands/remove.js +22 -22
  140. package/src/commands/test.js +86 -70
  141. package/src/compiler/{asc.js → asc.ts} +29 -16
  142. package/src/compiler/index.js +18 -18
  143. package/src/{debug.js → debug.ts} +2 -2
  144. package/src/migrations/mapping_api_version_0_0_1.js +7 -7
  145. package/src/migrations/mapping_api_version_0_0_2.js +5 -5
  146. package/src/migrations/mapping_api_version_0_0_3.js +7 -7
  147. package/src/migrations/mapping_api_version_0_0_4.js +7 -7
  148. package/src/migrations/mapping_api_version_0_0_5.js +7 -7
  149. package/src/migrations/spec_version_0_0_2.js +5 -5
  150. package/src/migrations/spec_version_0_0_3.js +5 -5
  151. package/src/migrations/util/load-manifest.js +6 -9
  152. package/src/migrations/util/versions.js +5 -10
  153. package/src/{migrations.js → migrations.ts} +14 -15
  154. package/src/protocols/arweave/scaffold/manifest.js +1 -4
  155. package/src/protocols/arweave/scaffold/mapping.js +1 -3
  156. package/src/protocols/arweave/subgraph.ts +22 -0
  157. package/src/protocols/cosmos/scaffold/manifest.js +1 -4
  158. package/src/protocols/cosmos/scaffold/mapping.js +1 -3
  159. package/src/protocols/cosmos/subgraph.js +2 -2
  160. package/src/protocols/ethereum/abi.js +7 -13
  161. package/src/protocols/ethereum/codegen/abi.js +219 -222
  162. package/src/protocols/ethereum/codegen/abi.test.js +6 -6
  163. package/src/protocols/ethereum/codegen/template.js +3 -5
  164. package/src/protocols/ethereum/contract.js +3 -2
  165. package/src/protocols/ethereum/scaffold/manifest.js +4 -7
  166. package/src/protocols/ethereum/scaffold/mapping.js +4 -11
  167. package/src/protocols/ethereum/subgraph.js +21 -20
  168. package/src/protocols/ethereum/type-generator.js +24 -30
  169. package/src/protocols/{index.js → index.ts} +65 -46
  170. package/src/protocols/ipfs/codegen/file_template.js +2 -2
  171. package/src/protocols/near/{contract.js → contract.ts} +16 -12
  172. package/src/protocols/near/scaffold/manifest.js +2 -5
  173. package/src/protocols/near/scaffold/mapping.js +1 -3
  174. package/src/protocols/near/subgraph.js +3 -6
  175. package/src/protocols/subgraph.ts +12 -0
  176. package/src/protocols/substreams/scaffold/{manifest.js → manifest.ts} +2 -7
  177. package/src/protocols/substreams/subgraph.ts +22 -0
  178. package/src/scaffold/cosmos.test.js +3 -3
  179. package/src/scaffold/ethereum.test.js +4 -4
  180. package/src/scaffold/index.js +7 -7
  181. package/src/scaffold/mapping.js +3 -3
  182. package/src/scaffold/near.test.js +3 -3
  183. package/src/scaffold/schema.js +4 -4
  184. package/src/scaffold/tests.js +72 -58
  185. package/src/schema.ts +26 -0
  186. package/src/{subgraph.js → subgraph.ts} +80 -60
  187. package/src/type-generator.js +20 -20
  188. package/src/validation/contract.js +2 -6
  189. package/src/validation/index.js +1 -1
  190. package/src/validation/manifest.js +24 -22
  191. package/src/validation/schema.test.js +1 -1
  192. package/src/validation/{schema.js → schema.ts} +268 -221
  193. package/src/{watcher.js → watcher.ts} +23 -12
  194. package/tests/cli/globalSetup.js +2 -2
  195. package/tests/cli/globalTeardown.js +2 -2
  196. package/tests/cli/init.test.js +2 -2
  197. package/tests/cli/util.js +7 -13
  198. package/tsconfig.json +18 -0
  199. package/src/cli.js +0 -38
  200. package/src/codegen/types/conversions.js +0 -329
  201. package/src/command-helpers/fs.js +0 -8
  202. package/src/command-helpers/ipfs.js +0 -6
  203. package/src/command-helpers/studio.js +0 -15
  204. package/src/protocols/arweave/subgraph.js +0 -20
  205. package/src/protocols/substreams/subgraph.js +0 -17
  206. package/src/schema.js +0 -23
@@ -1,16 +1,16 @@
1
- const immutable = require('immutable')
2
- const fs = require('fs')
3
- const yaml = require('yaml')
4
- const request = require('sync-request')
5
- const Web3EthAbi = require('web3-eth-abi');
1
+ import immutable from 'immutable'
2
+ import fs from 'fs'
3
+ import yaml from 'yaml'
4
+ import request from 'sync-request'
5
+ const Web3EthAbi = require('web3-eth-abi')
6
6
 
7
- const tsCodegen = require('../../../codegen/typescript')
8
- const typesCodegen = require('../../../codegen/types')
9
- const util = require('../../../codegen/util')
7
+ import * as tsCodegen from '../../../codegen/typescript'
8
+ import * as typesCodegen from '../../../codegen/types'
9
+ import * as util from '../../../codegen/util'
10
10
 
11
- const doFixtureCodegen = fs.existsSync('./fixtures.yaml');
11
+ const doFixtureCodegen = fs.existsSync('./fixtures.yaml')
12
12
 
13
- module.exports = class AbiCodeGenerator {
13
+ export default class AbiCodeGenerator {
14
14
  constructor(abi) {
15
15
  this.abi = abi
16
16
  }
@@ -33,17 +33,12 @@ module.exports = class AbiCodeGenerator {
33
33
  'BigInt',
34
34
  ],
35
35
  '@graphprotocol/graph-ts',
36
- )
36
+ ),
37
37
  ]
38
38
 
39
39
  if (doFixtureCodegen) {
40
40
  imports.push(
41
- tsCodegen.moduleImports(
42
- [
43
- 'newMockEvent',
44
- ],
45
- 'matchstick-as/assembly/index',
46
- )
41
+ tsCodegen.moduleImports(['newMockEvent'], 'matchstick-as/assembly/index'),
47
42
  )
48
43
  }
49
44
 
@@ -66,106 +61,104 @@ module.exports = class AbiCodeGenerator {
66
61
  setName: (fn, name) => fn.set('_alias', name),
67
62
  })
68
63
 
69
- callFunctions = callFunctions
70
- .map(fn => {
71
- let fnAlias = fn.get('_alias')
72
- let fnClassName = `${fnAlias.charAt(0).toUpperCase()}${fnAlias.slice(1)}Call`
73
- let tupleClasses = []
74
-
75
- // First, generate a class with the input getters
76
- let inputsClassName = fnClassName + '__Inputs'
77
- let inputsClass = tsCodegen.klass(inputsClassName, { export: true })
78
- inputsClass.addMember(tsCodegen.klassMember('_call', fnClassName))
79
- inputsClass.addMethod(
80
- tsCodegen.method(
81
- `constructor`,
82
- [tsCodegen.param(`call`, fnClassName)],
83
- null,
84
- `this._call = call`,
85
- ),
86
- )
64
+ callFunctions = callFunctions.map(fn => {
65
+ let fnAlias = fn.get('_alias')
66
+ let fnClassName = `${fnAlias.charAt(0).toUpperCase()}${fnAlias.slice(1)}Call`
67
+ let tupleClasses = []
87
68
 
88
- // Generate getters and classes for function inputs
89
- util
90
- .disambiguateNames({
91
- values: fn.get('inputs', immutable.List()),
92
- getName: (input, index) => input.get('name') || `value${index}`,
93
- setName: (input, name) => input.set('name', name),
94
- })
95
- .forEach((input, index) => {
96
- let callInput = this._generateInputOrOutput(
97
- input,
98
- index,
99
- fnClassName,
100
- `call`,
101
- `inputValues`,
102
- )
103
- inputsClass.addMethod(callInput.getter)
104
- tupleClasses.push(...callInput.classes)
105
- })
106
-
107
- // Second, generate a class with the output getters
108
- let outputsClassName = fnClassName + '__Outputs'
109
- let outputsClass = tsCodegen.klass(outputsClassName, { export: true })
110
- outputsClass.addMember(tsCodegen.klassMember('_call', fnClassName))
111
- outputsClass.addMethod(
112
- tsCodegen.method(
113
- `constructor`,
114
- [tsCodegen.param(`call`, fnClassName)],
115
- null,
116
- `this._call = call`,
117
- ),
118
- )
69
+ // First, generate a class with the input getters
70
+ let inputsClassName = fnClassName + '__Inputs'
71
+ let inputsClass = tsCodegen.klass(inputsClassName, { export: true })
72
+ inputsClass.addMember(tsCodegen.klassMember('_call', fnClassName))
73
+ inputsClass.addMethod(
74
+ tsCodegen.method(
75
+ `constructor`,
76
+ [tsCodegen.param(`call`, fnClassName)],
77
+ null,
78
+ `this._call = call`,
79
+ ),
80
+ )
119
81
 
120
- // Generate getters and classes for function outputs
121
- util
122
- .disambiguateNames({
123
- values: fn.get('outputs', immutable.List()),
124
- getName: (output, index) => output.get('name') || `value${index}`,
125
- setName: (output, name) => output.set('name', name),
126
- })
127
- .forEach((output, index) => {
128
- let callInput = this._generateInputOrOutput(
129
- output,
130
- index,
131
- fnClassName,
132
- `call`,
133
- `outputValues`,
134
- )
135
- outputsClass.addMethod(callInput.getter)
136
- tupleClasses.push(...callInput.classes)
137
- })
82
+ // Generate getters and classes for function inputs
83
+ util
84
+ .disambiguateNames({
85
+ values: fn.get('inputs', immutable.List()),
86
+ getName: (input, index) => input.get('name') || `value${index}`,
87
+ setName: (input, name) => input.set('name', name),
88
+ })
89
+ .forEach((input, index) => {
90
+ let callInput = this._generateInputOrOutput(
91
+ input,
92
+ index,
93
+ fnClassName,
94
+ `call`,
95
+ `inputValues`,
96
+ )
97
+ inputsClass.addMethod(callInput.getter)
98
+ tupleClasses.push(...callInput.classes)
99
+ })
138
100
 
139
- // Then, generate the event class itself
140
- let klass = tsCodegen.klass(fnClassName, {
141
- export: true,
142
- extends: 'ethereum.Call',
101
+ // Second, generate a class with the output getters
102
+ let outputsClassName = fnClassName + '__Outputs'
103
+ let outputsClass = tsCodegen.klass(outputsClassName, { export: true })
104
+ outputsClass.addMember(tsCodegen.klassMember('_call', fnClassName))
105
+ outputsClass.addMethod(
106
+ tsCodegen.method(
107
+ `constructor`,
108
+ [tsCodegen.param(`call`, fnClassName)],
109
+ null,
110
+ `this._call = call`,
111
+ ),
112
+ )
113
+
114
+ // Generate getters and classes for function outputs
115
+ util
116
+ .disambiguateNames({
117
+ values: fn.get('outputs', immutable.List()),
118
+ getName: (output, index) => output.get('name') || `value${index}`,
119
+ setName: (output, name) => output.set('name', name),
120
+ })
121
+ .forEach((output, index) => {
122
+ let callInput = this._generateInputOrOutput(
123
+ output,
124
+ index,
125
+ fnClassName,
126
+ `call`,
127
+ `outputValues`,
128
+ )
129
+ outputsClass.addMethod(callInput.getter)
130
+ tupleClasses.push(...callInput.classes)
143
131
  })
144
- klass.addMethod(
145
- tsCodegen.method(
146
- `get inputs`,
147
- [],
148
- tsCodegen.namedType(inputsClassName),
149
- `return new ${inputsClassName}(this)`,
150
- ),
151
- )
152
- klass.addMethod(
153
- tsCodegen.method(
154
- `get outputs`,
155
- [],
156
- tsCodegen.namedType(outputsClassName),
157
- `return new ${outputsClassName}(this)`,
158
- ),
159
- )
160
- return [klass, inputsClass, outputsClass, ...tupleClasses]
161
- })
162
132
 
163
- return callFunctions
164
- .reduce(
165
- // flatten the array
166
- (array, classes) => array.concat(classes),
167
- [],
133
+ // Then, generate the event class itself
134
+ let klass = tsCodegen.klass(fnClassName, {
135
+ export: true,
136
+ extends: 'ethereum.Call',
137
+ })
138
+ klass.addMethod(
139
+ tsCodegen.method(
140
+ `get inputs`,
141
+ [],
142
+ tsCodegen.namedType(inputsClassName),
143
+ `return new ${inputsClassName}(this)`,
144
+ ),
145
+ )
146
+ klass.addMethod(
147
+ tsCodegen.method(
148
+ `get outputs`,
149
+ [],
150
+ tsCodegen.namedType(outputsClassName),
151
+ `return new ${outputsClassName}(this)`,
152
+ ),
168
153
  )
154
+ return [klass, inputsClass, outputsClass, ...tupleClasses]
155
+ })
156
+
157
+ return callFunctions.reduce(
158
+ // flatten the array
159
+ (array, classes) => array.concat(classes),
160
+ [],
161
+ )
169
162
  }
170
163
 
171
164
  _generateEventTypes() {
@@ -176,122 +169,124 @@ module.exports = class AbiCodeGenerator {
176
169
  setName: (event, name) => event.set('_alias', name),
177
170
  })
178
171
 
179
- events = events
180
- .map(event => {
181
- let eventClassName = event.get('_alias')
182
- let tupleClasses = []
172
+ events = events.map(event => {
173
+ let eventClassName = event.get('_alias')
174
+ let tupleClasses = []
183
175
 
184
- // First, generate a class with the param getters
185
- let paramsClassName = eventClassName + '__Params'
186
- let paramsClass = tsCodegen.klass(paramsClassName, { export: true })
187
- paramsClass.addMember(tsCodegen.klassMember('_event', eventClassName))
188
- paramsClass.addMethod(
189
- tsCodegen.method(
190
- `constructor`,
191
- [tsCodegen.param(`event`, eventClassName)],
192
- null,
193
- `this._event = event`,
194
- ),
195
- )
196
-
197
- // Enumerate inputs with duplicate names
198
- let inputs = util.disambiguateNames({
199
- values: event.get('inputs'),
200
- getName: (input, index) => input.get('name') || `param${index}`,
201
- setName: (input, name) => input.set('name', name),
202
- })
203
-
204
- let namesAndTypes = []
205
- inputs.forEach((input, index) => {
206
- // Generate getters and classes for event params
207
- let paramObject = this._generateInputOrOutput(
208
- input,
209
- index,
210
- eventClassName,
211
- `event`,
212
- `parameters`,
213
- )
214
- paramsClass.addMethod(paramObject.getter)
215
-
216
- // Fixture generation
217
- if (doFixtureCodegen) {
218
- let ethType = typesCodegen.ethereumTypeForAsc(paramObject.getter.returnType)
219
- if (typeof ethType === typeof {} && (ethType.test("int256") || ethType.test("uint256"))) {
220
- ethType = "int32"
221
- }
222
- namesAndTypes.push({name: paramObject.getter.name.slice(4), type: ethType})
223
- }
176
+ // First, generate a class with the param getters
177
+ let paramsClassName = eventClassName + '__Params'
178
+ let paramsClass = tsCodegen.klass(paramsClassName, { export: true })
179
+ paramsClass.addMember(tsCodegen.klassMember('_event', eventClassName))
180
+ paramsClass.addMethod(
181
+ tsCodegen.method(
182
+ `constructor`,
183
+ [tsCodegen.param(`event`, eventClassName)],
184
+ null,
185
+ `this._event = event`,
186
+ ),
187
+ )
224
188
 
225
- tupleClasses.push(...paramObject.classes)
226
- })
189
+ // Enumerate inputs with duplicate names
190
+ let inputs = util.disambiguateNames({
191
+ values: event.get('inputs'),
192
+ getName: (input, index) => input.get('name') || `param${index}`,
193
+ setName: (input, name) => input.set('name', name),
194
+ })
227
195
 
228
- // Then, generate the event class itself
229
- let klass = tsCodegen.klass(eventClassName, {
230
- export: true,
231
- extends: 'ethereum.Event',
232
- })
233
- klass.addMethod(
234
- tsCodegen.method(
235
- `get params`,
236
- [],
237
- tsCodegen.namedType(paramsClassName),
238
- `return new ${paramsClassName}(this)`,
239
- ),
196
+ let namesAndTypes = []
197
+ inputs.forEach((input, index) => {
198
+ // Generate getters and classes for event params
199
+ let paramObject = this._generateInputOrOutput(
200
+ input,
201
+ index,
202
+ eventClassName,
203
+ `event`,
204
+ `parameters`,
240
205
  )
206
+ paramsClass.addMethod(paramObject.getter)
241
207
 
242
208
  // Fixture generation
243
209
  if (doFixtureCodegen) {
244
- const args = yaml.parse(fs.readFileSync('./fixtures.yaml', 'utf8'))
245
- const blockNumber = args['blockNumber']
246
- const contractAddr = args['contractAddr']
247
- const topic0 = args['topic0']
248
- const apiKey = args['apiKey']
249
- const url = `https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock=${blockNumber}&toBlock=${blockNumber}&address=${contractAddr}&${topic0}=topic0&apikey=${apiKey}`;
250
-
251
- let resp = request("GET", url)
252
- let body = JSON.parse(resp.getBody("utf8"))
253
- if (body.status === '0') {
254
- throw new Error(body.result)
210
+ let ethType = typesCodegen.ethereumTypeForAsc(paramObject.getter.returnType)
211
+ if (
212
+ typeof ethType === typeof {} &&
213
+ (ethType.test('int256') || ethType.test('uint256'))
214
+ ) {
215
+ ethType = 'int32'
255
216
  }
217
+ namesAndTypes.push({ name: paramObject.getter.name.slice(4), type: ethType })
218
+ }
219
+
220
+ tupleClasses.push(...paramObject.classes)
221
+ })
256
222
 
257
- let res = Web3EthAbi.decodeLog(
258
- namesAndTypes,
259
- body.result[0].data,
260
- []
261
- );
262
-
263
- let stmnts = ""
264
- for (let i = 0; i < namesAndTypes.length; i++) {
265
- let code = '"' + res[i] + '"'
266
- if (namesAndTypes[i].type.toString() == "address") {
267
- code = `Address.fromString(${code})`
268
- }
269
- stmnts = stmnts.concat(`event.parameters.push(new ethereum.EventParam(\"${namesAndTypes[i].name}\", ${typesCodegen.ethereumFromAsc(code, namesAndTypes[i].type)}));`, `\n`)
223
+ // Then, generate the event class itself
224
+ let klass = tsCodegen.klass(eventClassName, {
225
+ export: true,
226
+ extends: 'ethereum.Event',
227
+ })
228
+ klass.addMethod(
229
+ tsCodegen.method(
230
+ `get params`,
231
+ [],
232
+ tsCodegen.namedType(paramsClassName),
233
+ `return new ${paramsClassName}(this)`,
234
+ ),
235
+ )
236
+
237
+ // Fixture generation
238
+ if (doFixtureCodegen) {
239
+ const args = yaml.parse(fs.readFileSync('./fixtures.yaml', 'utf8'))
240
+ const blockNumber = args['blockNumber']
241
+ const contractAddr = args['contractAddr']
242
+ const topic0 = args['topic0']
243
+ const apiKey = args['apiKey']
244
+ const url = `https://api.etherscan.io/api?module=logs&action=getLogs&fromBlock=${blockNumber}&toBlock=${blockNumber}&address=${contractAddr}&${topic0}=topic0&apikey=${apiKey}`
245
+
246
+ let resp = request('GET', url)
247
+ let body = JSON.parse(resp.getBody('utf8'))
248
+ if (body.status === '0') {
249
+ throw new Error(body.result)
250
+ }
251
+
252
+ let res = Web3EthAbi.decodeLog(namesAndTypes, body.result[0].data, [])
253
+
254
+ let stmnts = ''
255
+ for (let i = 0; i < namesAndTypes.length; i++) {
256
+ let code = '"' + res[i] + '"'
257
+ if (namesAndTypes[i].type.toString() == 'address') {
258
+ code = `Address.fromString(${code})`
270
259
  }
260
+ stmnts = stmnts.concat(
261
+ `event.parameters.push(new ethereum.EventParam(\"${
262
+ namesAndTypes[i].name
263
+ }\", ${typesCodegen.ethereumFromAsc(code, namesAndTypes[i].type)}));`,
264
+ `\n`,
265
+ )
266
+ }
271
267
 
272
- klass.addMethod(
273
- tsCodegen.staticMethod(
274
- `mock${eventClassName}`,
275
- [],
276
- tsCodegen.namedType(eventClassName),
277
- `
268
+ klass.addMethod(
269
+ tsCodegen.staticMethod(
270
+ `mock${eventClassName}`,
271
+ [],
272
+ tsCodegen.namedType(eventClassName),
273
+ `
278
274
  let event = changetype<${eventClassName}>(newMockEvent());
279
275
  ${stmnts}
280
276
  return event;
281
277
  `,
282
- )
283
- )
284
- }
278
+ ),
279
+ )
280
+ }
285
281
 
286
- return [klass, paramsClass, ...tupleClasses]
287
- })
282
+ return [klass, paramsClass, ...tupleClasses]
283
+ })
288
284
 
289
- return events
290
- .reduce(
291
- // flatten the array
292
- (array, classes) => array.concat(classes),
293
- [],
294
- )
285
+ return events.reduce(
286
+ // flatten the array
287
+ (array, classes) => array.concat(classes),
288
+ [],
289
+ )
295
290
  }
296
291
 
297
292
  _generateInputOrOutput(inputOrOutput, index, parentClass, parentType, parentField) {
@@ -363,10 +358,10 @@ module.exports = class AbiCodeGenerator {
363
358
  `get ${name}`,
364
359
  [],
365
360
  util.isTupleMatrixType(type)
366
- ? `Array<Array<${tupleClassName}>>`
367
- : util.isTupleArrayType(type)
368
- ? `Array<${tupleClassName}>`
369
- : tupleClassName,
361
+ ? `Array<Array<${tupleClassName}>>`
362
+ : util.isTupleArrayType(type)
363
+ ? `Array<${tupleClassName}>`
364
+ : tupleClassName,
370
365
  `
371
366
  return ${
372
367
  isTupleType ? `changetype<${tupleClassName}>(${returnValue})` : `${returnValue}`
@@ -506,16 +501,18 @@ module.exports = class AbiCodeGenerator {
506
501
  ),
507
502
  )
508
503
  .forEach(member => returnType.addMember(member))
509
-
504
+
510
505
  // Add getters to the type
511
506
  outputs
512
- .map((output, index) =>
513
- !!output.get('name') && tsCodegen.method(
514
- `get${output.get('name')[0].toUpperCase()}${output.get('name').slice(1)}`,
515
- [],
516
- this._getTupleParamType(output, index, tupleResultParentType),
517
- `return this.value${index};`
518
- )
507
+ .map(
508
+ (output, index) =>
509
+ !!output.get('name') &&
510
+ tsCodegen.method(
511
+ `get${output.get('name')[0].toUpperCase()}${output.get('name').slice(1)}`,
512
+ [],
513
+ this._getTupleParamType(output, index, tupleResultParentType),
514
+ `return this.value${index};`,
515
+ ),
519
516
  )
520
517
  .forEach(method => !!method && returnType.addMethod(method))
521
518
 
@@ -1,10 +1,10 @@
1
- const fs = require('fs-extra')
2
- const path = require('path')
3
- const immutable = require('immutable')
1
+ import fs from 'fs-extra'
2
+ import path from 'path'
3
+ import immutable from 'immutable'
4
4
 
5
- const ABI = require('../abi')
6
- const ts = require('../../../codegen/typescript')
7
- const AbiCodeGenerator = require('./abi')
5
+ import ABI from '../abi'
6
+ import * as ts from '../../../codegen/typescript'
7
+ import AbiCodeGenerator from './abi'
8
8
 
9
9
  let tempdir
10
10
  let abi
@@ -1,14 +1,12 @@
1
- const tsCodegen = require('../../../codegen/typescript')
1
+ import * as tsCodegen from '../../../codegen/typescript'
2
2
 
3
- module.exports = class EthereumTemplateCodeGen {
3
+ export default class EthereumTemplateCodeGen {
4
4
  constructor(template) {
5
5
  this.template = template
6
6
  }
7
7
 
8
8
  generateModuleImports() {
9
- return [
10
- 'Address',
11
- ]
9
+ return ['Address']
12
10
  }
13
11
 
14
12
  generateCreateMethod() {
@@ -1,4 +1,4 @@
1
- module.exports = class EthereumContract {
1
+ export default class EthereumContract {
2
2
  static identifierName() {
3
3
  return 'address'
4
4
  }
@@ -10,7 +10,8 @@ module.exports = class EthereumContract {
10
10
  validate() {
11
11
  const pattern = /^(0x)?[0-9a-fA-F]{40}$/
12
12
 
13
- const errorMessage = "Must be 40 hexadecimal characters, with an optional '0x' prefix."
13
+ const errorMessage =
14
+ "Must be 40 hexadecimal characters, with an optional '0x' prefix."
14
15
 
15
16
  const valid = pattern.test(this.address)
16
17
 
@@ -1,6 +1,6 @@
1
- const { abiEvents } = require('../../../scaffold/schema')
2
- const { strings } = require('gluegun')
3
- const ABI = require('../abi')
1
+ import { abiEvents } from '../../../scaffold/schema'
2
+ import { strings } from 'gluegun'
3
+ import ABI from '../abi'
4
4
 
5
5
  const source = ({ contract, contractName }) => `
6
6
  address: '${contract}'
@@ -27,7 +27,4 @@ const mapping = ({ abi, contractName }) => `
27
27
  .join('')}
28
28
  file: ./src/${strings.kebabCase(contractName)}.ts`
29
29
 
30
- module.exports = {
31
- source,
32
- mapping,
33
- }
30
+ export { source, mapping }
@@ -1,4 +1,4 @@
1
- const { generateEventFieldAssignments } = require('../../../scaffold/mapping')
1
+ import { generateEventFieldAssignments } from '../../../scaffold/mapping'
2
2
 
3
3
  const generatePlaceholderHandlers = ({ abi, events, contractName }) =>
4
4
  `
@@ -29,9 +29,7 @@ const generatePlaceholderHandlers = ({ abi, events, contractName }) =>
29
29
  entity.count = entity.count + BigInt.fromI32(1)
30
30
 
31
31
  // Entity fields can be set based on event parameters
32
- ${generateEventFieldAssignments(event)
33
- .slice(0, 2)
34
- .join('\n')}
32
+ ${generateEventFieldAssignments(event).slice(0, 2).join('\n')}
35
33
 
36
34
  // Entities can be written to the store with \`.save()\`
37
35
  entity.save()
@@ -52,10 +50,7 @@ const generatePlaceholderHandlers = ({ abi, events, contractName }) =>
52
50
  // state variables and other data:
53
51
  //
54
52
  // ${
55
- abi
56
- .codeGenerator()
57
- .callableFunctions()
58
- .isEmpty()
53
+ abi.codeGenerator().callableFunctions().isEmpty()
59
54
  ? 'None'
60
55
  : abi
61
56
  .codeGenerator()
@@ -71,6 +66,4 @@ export function handle${event._alias}(event: ${event._alias}): void {}
71
66
  )
72
67
  .join('\n')}`
73
68
 
74
- module.exports = {
75
- generatePlaceholderHandlers,
76
- }
69
+ export { generatePlaceholderHandlers }