@graphprotocol/graph-cli 0.37.3 → 0.37.4

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 (267) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +5 -1
  3. package/babel.config.js +0 -3
  4. package/jest.config.js +0 -175
  5. package/src/bin.ts +0 -6
  6. package/src/cli.ts +0 -30
  7. package/src/codegen/schema.test.ts +0 -460
  8. package/src/codegen/schema.ts +0 -299
  9. package/src/codegen/template.ts +0 -45
  10. package/src/codegen/types/conversions.ts +0 -358
  11. package/src/codegen/types/index.test.ts +0 -715
  12. package/src/codegen/types/index.ts +0 -111
  13. package/src/codegen/typescript.ts +0 -224
  14. package/src/codegen/util.test.ts +0 -112
  15. package/src/codegen/util.ts +0 -54
  16. package/src/command-helpers/abi.ts +0 -99
  17. package/src/command-helpers/auth.ts +0 -46
  18. package/src/command-helpers/compiler.ts +0 -60
  19. package/src/command-helpers/data-sources.ts +0 -36
  20. package/src/command-helpers/fs.ts +0 -5
  21. package/src/command-helpers/gluegun.ts +0 -52
  22. package/src/command-helpers/ipfs-http-client.d.ts +0 -1
  23. package/src/command-helpers/ipfs.ts +0 -3
  24. package/src/command-helpers/jsonrpc.ts +0 -22
  25. package/src/command-helpers/network.test.ts +0 -85
  26. package/src/command-helpers/network.ts +0 -133
  27. package/src/command-helpers/node.ts +0 -46
  28. package/src/command-helpers/scaffold.ts +0 -174
  29. package/src/command-helpers/spinner.ts +0 -60
  30. package/src/command-helpers/studio.test.ts +0 -84
  31. package/src/command-helpers/studio.ts +0 -25
  32. package/src/command-helpers/subgraph.ts +0 -21
  33. package/src/command-helpers/version.test.ts +0 -241
  34. package/src/command-helpers/version.ts +0 -53
  35. package/src/commands/add.ts +0 -220
  36. package/src/commands/auth.ts +0 -138
  37. package/src/commands/binary-install-raw.d.ts +0 -1
  38. package/src/commands/build.ts +0 -147
  39. package/src/commands/codegen.ts +0 -123
  40. package/src/commands/create.ts +0 -109
  41. package/src/commands/deploy.ts +0 -388
  42. package/src/commands/init.ts +0 -1060
  43. package/src/commands/local.ts +0 -539
  44. package/src/commands/remove.ts +0 -110
  45. package/src/commands/test.ts +0 -369
  46. package/src/compiler/asc.ts +0 -77
  47. package/src/compiler/index.ts +0 -677
  48. package/src/debug.ts +0 -15
  49. package/src/migrations/mapping_api_version_0_0_1.ts +0 -75
  50. package/src/migrations/mapping_api_version_0_0_2.ts +0 -75
  51. package/src/migrations/mapping_api_version_0_0_3.ts +0 -75
  52. package/src/migrations/mapping_api_version_0_0_4.ts +0 -77
  53. package/src/migrations/mapping_api_version_0_0_5.ts +0 -77
  54. package/src/migrations/spec_version_0_0_2.ts +0 -24
  55. package/src/migrations/spec_version_0_0_3.ts +0 -29
  56. package/src/migrations/util/load-manifest.ts +0 -10
  57. package/src/migrations/util/versions.ts +0 -27
  58. package/src/migrations.ts +0 -33
  59. package/src/protocols/arweave/manifest.graphql +0 -57
  60. package/src/protocols/arweave/scaffold/manifest.ts +0 -14
  61. package/src/protocols/arweave/scaffold/mapping.ts +0 -49
  62. package/src/protocols/arweave/subgraph.ts +0 -22
  63. package/src/protocols/contract.ts +0 -9
  64. package/src/protocols/cosmos/manifest.graphql +0 -76
  65. package/src/protocols/cosmos/scaffold/manifest.ts +0 -11
  66. package/src/protocols/cosmos/scaffold/mapping.ts +0 -35
  67. package/src/protocols/cosmos/subgraph.ts +0 -27
  68. package/src/protocols/ethereum/abi.ts +0 -153
  69. package/src/protocols/ethereum/codegen/abi.test.ts +0 -330
  70. package/src/protocols/ethereum/codegen/abi.ts +0 -719
  71. package/src/protocols/ethereum/codegen/template.ts +0 -41
  72. package/src/protocols/ethereum/contract.ts +0 -24
  73. package/src/protocols/ethereum/manifest.graphql +0 -94
  74. package/src/protocols/ethereum/scaffold/manifest.ts +0 -28
  75. package/src/protocols/ethereum/scaffold/mapping.ts +0 -76
  76. package/src/protocols/ethereum/subgraph.ts +0 -189
  77. package/src/protocols/ethereum/type-generator.ts +0 -191
  78. package/src/protocols/index.ts +0 -287
  79. package/src/protocols/ipfs/codegen/file_template.ts +0 -43
  80. package/src/protocols/near/contract.ts +0 -47
  81. package/src/protocols/near/manifest.graphql +0 -64
  82. package/src/protocols/near/scaffold/manifest.ts +0 -13
  83. package/src/protocols/near/scaffold/mapping.ts +0 -35
  84. package/src/protocols/near/subgraph.ts +0 -22
  85. package/src/protocols/subgraph.ts +0 -12
  86. package/src/protocols/substreams/manifest.graphql +0 -45
  87. package/src/protocols/substreams/scaffold/manifest.ts +0 -8
  88. package/src/protocols/substreams/subgraph.ts +0 -22
  89. package/src/scaffold/cosmos.test.ts +0 -83
  90. package/src/scaffold/ethereum.test.ts +0 -512
  91. package/src/scaffold/index.ts +0 -172
  92. package/src/scaffold/mapping.ts +0 -44
  93. package/src/scaffold/near.test.ts +0 -86
  94. package/src/scaffold/schema.ts +0 -89
  95. package/src/scaffold/tests.ts +0 -217
  96. package/src/schema.ts +0 -26
  97. package/src/subgraph.ts +0 -302
  98. package/src/type-generator.ts +0 -266
  99. package/src/validation/contract.ts +0 -51
  100. package/src/validation/index.ts +0 -5
  101. package/src/validation/manifest.ts +0 -360
  102. package/src/validation/schema.test.ts +0 -38
  103. package/src/validation/schema.ts +0 -957
  104. package/src/watcher.ts +0 -96
  105. package/tests/cli/globalSetup.ts +0 -8
  106. package/tests/cli/globalTeardown.ts +0 -8
  107. package/tests/cli/init/ethereum/abis/Marketplace.json +0 -408
  108. package/tests/cli/init/ethereum/abis/OverloadedElements.json +0 -91
  109. package/tests/cli/init/ethereum/abis/SoloMargin.json +0 -2729
  110. package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stderr +0 -14
  111. package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stdout +0 -12
  112. package/tests/cli/init/ethereum/from-contract-with-abi.stderr +0 -14
  113. package/tests/cli/init/ethereum/from-contract-with-abi.stdout +0 -12
  114. package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stderr +0 -14
  115. package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stdout +0 -12
  116. package/tests/cli/init/ethereum/from-contract.stderr +0 -16
  117. package/tests/cli/init/ethereum/from-contract.stdout +0 -12
  118. package/tests/cli/init/ethereum/from-example.stderr +0 -12
  119. package/tests/cli/init/ethereum/from-example.stdout +0 -12
  120. package/tests/cli/init/near/from-contract.stderr +0 -14
  121. package/tests/cli/init/near/from-contract.stdout +0 -12
  122. package/tests/cli/init.test.ts +0 -157
  123. package/tests/cli/spawn-command.d.ts +0 -7
  124. package/tests/cli/util.ts +0 -132
  125. package/tests/cli/validation/abi-not-found/Abi.json +0 -7
  126. package/tests/cli/validation/abi-not-found/mapping.ts +0 -0
  127. package/tests/cli/validation/abi-not-found/schema.graphql +0 -3
  128. package/tests/cli/validation/abi-not-found/subgraph.yaml +0 -42
  129. package/tests/cli/validation/abi-not-found copy.stderr +0 -13
  130. package/tests/cli/validation/big-decimal-is-valid/Abi.json +0 -7
  131. package/tests/cli/validation/big-decimal-is-valid/mapping.ts +0 -0
  132. package/tests/cli/validation/big-decimal-is-valid/schema.graphql +0 -4
  133. package/tests/cli/validation/big-decimal-is-valid/subgraph.yaml +0 -23
  134. package/tests/cli/validation/call-function-not-found/Abi.json +0 -57
  135. package/tests/cli/validation/call-function-not-found/mapping.ts +0 -0
  136. package/tests/cli/validation/call-function-not-found/schema.graphql +0 -3
  137. package/tests/cli/validation/call-function-not-found/subgraph.yaml +0 -22
  138. package/tests/cli/validation/call-function-not-found.stderr +0 -10
  139. package/tests/cli/validation/call-handler-with-tuple/Abi.json +0 -24
  140. package/tests/cli/validation/call-handler-with-tuple/generated/schema.ts +0 -44
  141. package/tests/cli/validation/call-handler-with-tuple/mapping.ts +0 -0
  142. package/tests/cli/validation/call-handler-with-tuple/schema.graphql +0 -3
  143. package/tests/cli/validation/call-handler-with-tuple/subgraph.yaml +0 -22
  144. package/tests/cli/validation/call-handler-with-tuple.stderr +0 -24
  145. package/tests/cli/validation/conflicting-network-names/Abi.json +0 -7
  146. package/tests/cli/validation/conflicting-network-names/mapping.ts +0 -0
  147. package/tests/cli/validation/conflicting-network-names/schema.graphql +0 -3
  148. package/tests/cli/validation/conflicting-network-names/subgraph.yaml +0 -41
  149. package/tests/cli/validation/conflicting-network-names.stderr +0 -10
  150. package/tests/cli/validation/conflicting-protocol-names/Abi.json +0 -7
  151. package/tests/cli/validation/conflicting-protocol-names/mapping.ts +0 -0
  152. package/tests/cli/validation/conflicting-protocol-names/schema.graphql +0 -3
  153. package/tests/cli/validation/conflicting-protocol-names/subgraph.yaml +0 -41
  154. package/tests/cli/validation/conflicting-protocol-names.stderr +0 -10
  155. package/tests/cli/validation/derived-from-target-type-missing/Abi.json +0 -6
  156. package/tests/cli/validation/derived-from-target-type-missing/mapping.ts +0 -0
  157. package/tests/cli/validation/derived-from-target-type-missing/schema.graphql +0 -4
  158. package/tests/cli/validation/derived-from-target-type-missing/subgraph.yaml +0 -22
  159. package/tests/cli/validation/derived-from-target-type-missing.stderr +0 -5
  160. package/tests/cli/validation/derived-from-with-interface/Gravity.json +0 -1
  161. package/tests/cli/validation/derived-from-with-interface/mapping.ts +0 -22
  162. package/tests/cli/validation/derived-from-with-interface/schema.graphql +0 -19
  163. package/tests/cli/validation/derived-from-with-interface/subgraph.yaml +0 -25
  164. package/tests/cli/validation/duplicate-data-source-name/Abi.json +0 -7
  165. package/tests/cli/validation/duplicate-data-source-name/mapping.ts +0 -0
  166. package/tests/cli/validation/duplicate-data-source-name/schema.graphql +0 -4
  167. package/tests/cli/validation/duplicate-data-source-name/subgraph.yaml +0 -40
  168. package/tests/cli/validation/duplicate-data-source-name.stderr +0 -5
  169. package/tests/cli/validation/duplicate-template-name/Abi.json +0 -7
  170. package/tests/cli/validation/duplicate-template-name/mapping.ts +0 -0
  171. package/tests/cli/validation/duplicate-template-name/schema.graphql +0 -4
  172. package/tests/cli/validation/duplicate-template-name/subgraph.yaml +0 -59
  173. package/tests/cli/validation/duplicate-template-name.stderr +0 -5
  174. package/tests/cli/validation/entity-field-args/Abi.json +0 -7
  175. package/tests/cli/validation/entity-field-args/mapping.ts +0 -0
  176. package/tests/cli/validation/entity-field-args/schema.graphql +0 -4
  177. package/tests/cli/validation/entity-field-args/subgraph.yaml +0 -22
  178. package/tests/cli/validation/entity-field-args.stderr +0 -5
  179. package/tests/cli/validation/ethereum-contract-without-handlers/Abi.json +0 -7
  180. package/tests/cli/validation/ethereum-contract-without-handlers/mapping.ts +0 -0
  181. package/tests/cli/validation/ethereum-contract-without-handlers/schema.graphql +0 -3
  182. package/tests/cli/validation/ethereum-contract-without-handlers/subgraph.yaml +0 -19
  183. package/tests/cli/validation/ethereum-contract-without-handlers.stderr +0 -6
  184. package/tests/cli/validation/event-not-found/Abi.json +0 -7
  185. package/tests/cli/validation/event-not-found/mapping.ts +0 -0
  186. package/tests/cli/validation/event-not-found/schema.graphql +0 -3
  187. package/tests/cli/validation/event-not-found/subgraph.yaml +0 -40
  188. package/tests/cli/validation/event-not-found.stderr +0 -12
  189. package/tests/cli/validation/example-values-found/Abi.json +0 -7
  190. package/tests/cli/validation/example-values-found/generated/ExampleSubgraph/ExampleContract.ts +0 -35
  191. package/tests/cli/validation/example-values-found/generated/schema.ts +0 -44
  192. package/tests/cli/validation/example-values-found/mapping.ts +0 -0
  193. package/tests/cli/validation/example-values-found/schema.graphql +0 -3
  194. package/tests/cli/validation/example-values-found/subgraph.yaml +0 -24
  195. package/tests/cli/validation/example-values-found.stderr +0 -34
  196. package/tests/cli/validation/invalid-abis/InvalidAbi.json +0 -1
  197. package/tests/cli/validation/invalid-abis/mapping.ts +0 -0
  198. package/tests/cli/validation/invalid-abis/schema.graphql +0 -3
  199. package/tests/cli/validation/invalid-abis/subgraph.yaml +0 -22
  200. package/tests/cli/validation/invalid-abis.stderr +0 -5
  201. package/tests/cli/validation/invalid-contract-addresses/Abi.json +0 -7
  202. package/tests/cli/validation/invalid-contract-addresses/mapping.ts +0 -0
  203. package/tests/cli/validation/invalid-contract-addresses/schema.graphql +0 -3
  204. package/tests/cli/validation/invalid-contract-addresses/subgraph.yaml +0 -58
  205. package/tests/cli/validation/invalid-contract-addresses.stderr +0 -14
  206. package/tests/cli/validation/invalid-data-source-template/mapping.ts +0 -0
  207. package/tests/cli/validation/invalid-data-source-template/schema.graphql +0 -3
  208. package/tests/cli/validation/invalid-data-source-template/subgraph.yaml +0 -32
  209. package/tests/cli/validation/invalid-data-source-template.stderr +0 -30
  210. package/tests/cli/validation/invalid-entity-field-types/Abi.json +0 -7
  211. package/tests/cli/validation/invalid-entity-field-types/mapping.ts +0 -0
  212. package/tests/cli/validation/invalid-entity-field-types/schema.graphql +0 -157
  213. package/tests/cli/validation/invalid-entity-field-types/subgraph.yaml +0 -22
  214. package/tests/cli/validation/invalid-entity-field-types.stderr +0 -148
  215. package/tests/cli/validation/invalid-fulltext-directive/Abi.json +0 -7
  216. package/tests/cli/validation/invalid-fulltext-directive/mapping.ts +0 -0
  217. package/tests/cli/validation/invalid-fulltext-directive/schema.graphql +0 -140
  218. package/tests/cli/validation/invalid-fulltext-directive/subgraph.yaml +0 -22
  219. package/tests/cli/validation/invalid-fulltext-directive.stderr +0 -32
  220. package/tests/cli/validation/invalid-graphql-schema/Abi.json +0 -7
  221. package/tests/cli/validation/invalid-graphql-schema/mapping.ts +0 -0
  222. package/tests/cli/validation/invalid-graphql-schema/schema.graphql +0 -8
  223. package/tests/cli/validation/invalid-graphql-schema/subgraph.yaml +0 -22
  224. package/tests/cli/validation/invalid-graphql-schema.stderr +0 -25
  225. package/tests/cli/validation/invalid-manifest/subgraph.yaml +0 -13
  226. package/tests/cli/validation/invalid-manifest-cannot-infer-protocol/subgraph.yaml +0 -12
  227. package/tests/cli/validation/invalid-manifest-cannot-infer-protocol.stderr +0 -5
  228. package/tests/cli/validation/invalid-manifest.stderr +0 -28
  229. package/tests/cli/validation/missing-entity-id/Abi.json +0 -7
  230. package/tests/cli/validation/missing-entity-id/mapping.ts +0 -0
  231. package/tests/cli/validation/missing-entity-id/schema.graphql +0 -3
  232. package/tests/cli/validation/missing-entity-id/subgraph.yaml +0 -22
  233. package/tests/cli/validation/missing-entity-id/types/ExampleSubgraph/ExampleContract.ts +0 -35
  234. package/tests/cli/validation/missing-entity-id/types/schema.ts +0 -27
  235. package/tests/cli/validation/missing-entity-id.stderr +0 -5
  236. package/tests/cli/validation/missing-or-invalid-derived-from-fields/Abi.json +0 -7
  237. package/tests/cli/validation/missing-or-invalid-derived-from-fields/mapping.ts +0 -0
  238. package/tests/cli/validation/missing-or-invalid-derived-from-fields/schema.graphql +0 -40
  239. package/tests/cli/validation/missing-or-invalid-derived-from-fields/subgraph.yaml +0 -22
  240. package/tests/cli/validation/missing-or-invalid-derived-from-fields.stderr +0 -10
  241. package/tests/cli/validation/missing-or-invalid-derived-from-fields.stdout +0 -0
  242. package/tests/cli/validation/near-is-valid/mapping.ts +0 -0
  243. package/tests/cli/validation/near-is-valid/schema.graphql +0 -8
  244. package/tests/cli/validation/near-is-valid/subgraph.yaml +0 -30
  245. package/tests/cli/validation/nested-template-nice-error/Abi.json +0 -7
  246. package/tests/cli/validation/nested-template-nice-error/mapping.ts +0 -0
  247. package/tests/cli/validation/nested-template-nice-error/schema.graphql +0 -3
  248. package/tests/cli/validation/nested-template-nice-error/subgraph.yaml +0 -35
  249. package/tests/cli/validation/nested-template-nice-error.stderr +0 -5
  250. package/tests/cli/validation/no-network-names/Abi.json +0 -7
  251. package/tests/cli/validation/no-network-names/mapping.ts +0 -0
  252. package/tests/cli/validation/no-network-names/schema.graphql +0 -3
  253. package/tests/cli/validation/no-network-names/subgraph.yaml +0 -40
  254. package/tests/cli/validation/no-network-names.stderr +0 -34
  255. package/tests/cli/validation/source-without-address-is-valid/Abi.json +0 -7
  256. package/tests/cli/validation/source-without-address-is-valid/generated/ExampleSubgraph/ExampleContract.ts +0 -35
  257. package/tests/cli/validation/source-without-address-is-valid/mapping.ts +0 -0
  258. package/tests/cli/validation/source-without-address-is-valid/schema.graphql +0 -3
  259. package/tests/cli/validation/source-without-address-is-valid/subgraph.yaml +0 -23
  260. package/tests/cli/validation/source-without-address-is-valid.stderr +0 -24
  261. package/tests/cli/validation/topic0-is-valid/Abi.json +0 -7
  262. package/tests/cli/validation/topic0-is-valid/mapping.ts +0 -0
  263. package/tests/cli/validation/topic0-is-valid/schema.graphql +0 -4
  264. package/tests/cli/validation/topic0-is-valid/subgraph.yaml +0 -24
  265. package/tests/cli/validation.test.ts +0 -226
  266. package/tsconfig.build.json +0 -4
  267. package/tsconfig.json +0 -19
@@ -1,44 +0,0 @@
1
- import * as util from '../codegen/util';
2
-
3
- export const generateFieldAssignment = (path: string[]) =>
4
- `entity.${path.join('_')} = event.params.${path.join('.')}`;
5
-
6
- export const generateFieldAssignments = ({ index, input }: { index: number; input: any }) =>
7
- input.type === 'tuple'
8
- ? util
9
- .unrollTuple({ value: input, index, path: [input.name || `param${index}`] })
10
- .map(({ path }: any) => generateFieldAssignment(path))
11
- : generateFieldAssignment([input.name || `param${index}`]);
12
-
13
- export const generateEventFieldAssignments = (event: any) =>
14
- event.inputs.reduce(
15
- (acc: any[], input: any, index: number) =>
16
- acc.concat(generateFieldAssignments({ input, index })),
17
- [],
18
- );
19
-
20
- export const generateEventIndexingHandlers = (events: any[], contractName: string) =>
21
- `
22
- import { ${events.map(
23
- event => `${event._alias} as ${event._alias}Event`,
24
- )}} from '../generated/${contractName}/${contractName}'
25
- import { ${events.map(event => event._alias)} } from '../generated/schema'
26
-
27
- ${events
28
- .map(
29
- event =>
30
- `
31
- export function handle${event._alias}(event: ${event._alias}Event): void {
32
- let entity = new ${event._alias}(event.transaction.hash.concatI32(event.logIndex.toI32()))
33
- ${generateEventFieldAssignments(event).join('\n')}
34
-
35
- entity.blockNumber = event.block.number
36
- entity.blockTimestamp = event.block.timestamp
37
- entity.transactionHash = event.transaction.hash
38
-
39
- entity.save()
40
- }
41
- `,
42
- )
43
- .join('\n')}
44
- `;
@@ -1,86 +0,0 @@
1
- import Protocol from '../protocols';
2
- import Scaffold from './index';
3
-
4
- const protocol = new Protocol('near');
5
-
6
- const scaffoldOptions = {
7
- protocol,
8
- contract: 'abc.def.near',
9
- network: 'near-mainnet',
10
- contractName: 'Contract',
11
- };
12
-
13
- const scaffold = new Scaffold(scaffoldOptions);
14
-
15
- describe('NEAR subgraph scaffolding', () => {
16
- test('Manifest', () => {
17
- expect(scaffold.generateManifest()).toEqual(`\
18
- specVersion: 0.0.5
19
- schema:
20
- file: ./schema.graphql
21
- dataSources:
22
- - kind: near
23
- name: Contract
24
- network: near-mainnet
25
- source:
26
- account: "abc.def.near"
27
- mapping:
28
- apiVersion: 0.0.5
29
- language: wasm/assemblyscript
30
- entities:
31
- - ExampleEntity
32
- receiptHandlers:
33
- - handler: handleReceipt
34
- file: ./src/contract.ts
35
- `);
36
- });
37
-
38
- test('Schema (default)', () => {
39
- expect(scaffold.generateSchema()).toEqual(`\
40
- type ExampleEntity @entity {
41
- id: ID!
42
- block: Bytes!
43
- count: BigInt!
44
- }
45
- `);
46
- });
47
-
48
- test('Mapping (default)', () => {
49
- expect(scaffold.generateMapping()).toEqual(`\
50
- import { near, BigInt } from "@graphprotocol/graph-ts"
51
- import { ExampleEntity } from "../generated/schema"
52
-
53
- export function handleReceipt(
54
- receiptWithOutcome: near.ReceiptWithOutcome
55
- ): void {
56
- // Entities can be loaded from the store using a string ID; this ID
57
- // needs to be unique across all entities of the same type
58
- let entity = ExampleEntity.load(receiptWithOutcome.receipt.id.toHex())
59
-
60
- // Entities only exist after they have been saved to the store;
61
- // \`null\` checks allow to create entities on demand
62
- if (!entity) {
63
- entity = new ExampleEntity(receiptWithOutcome.receipt.id.toHex())
64
-
65
- // Entity fields can be set using simple assignments
66
- entity.count = BigInt.fromI32(0)
67
- }
68
-
69
- // BigInt and BigDecimal math are supported
70
- entity.count = entity.count + BigInt.fromI32(1)
71
-
72
- // Entity fields can be set based on receipt information
73
- entity.block = receiptWithOutcome.block.header.hash
74
-
75
- // Entities can be written to the store with \`.save()\`
76
- entity.save()
77
-
78
- // Note: If a handler doesn't require existing field values, it is faster
79
- // _not_ to load the entity from the store. Instead, create it fresh with
80
- // \`new Entity(...)\`, set the fields that should be updated and save the
81
- // entity back to the store. Fields that were not set or unset remain
82
- // unchanged, allowing for partial updates to be applied.
83
- }
84
- `);
85
- });
86
- });
@@ -1,89 +0,0 @@
1
- import immutable from 'immutable';
2
- import { ascTypeForProtocol, valueTypeForAsc } from '../codegen/types';
3
- import * as util from '../codegen/util';
4
- import Protocol from '../protocols';
5
-
6
- export function abiEvents(abi: { data: immutable.Collection<any, any> }) {
7
- return util.disambiguateNames({
8
- // @ts-expect-error improve typings of disambiguateNames to handle iterables
9
- values: abi.data.filter(item => item.get('type') === 'event'),
10
- // @ts-expect-error improve typings of disambiguateNames to handle iterables
11
- getName: event => event.get('name'),
12
- // @ts-expect-error improve typings of disambiguateNames to handle iterables
13
- setName: (event, name) => event.set('_alias', name),
14
- }) as unknown as immutable.List<any>;
15
- }
16
-
17
- export const protocolTypeToGraphQL = (protocol: string, name: string) => {
18
- const ascType = ascTypeForProtocol(protocol, name);
19
- return valueTypeForAsc(ascType);
20
- };
21
-
22
- export const generateField = ({
23
- name,
24
- type,
25
- protocolName,
26
- }: {
27
- name: string;
28
- type: string;
29
- protocolName: string;
30
- }) => `${name}: ${protocolTypeToGraphQL(protocolName, type)}! # ${type}`;
31
-
32
- export const generateEventFields = ({
33
- index,
34
- input,
35
- protocolName,
36
- }: {
37
- index: number;
38
- input: any;
39
- protocolName: string;
40
- }) =>
41
- input.type == 'tuple'
42
- ? util
43
- .unrollTuple({ value: input, path: [input.name || `param${index}`], index })
44
- .map(({ path, type }: any) => generateField({ name: path.join('_'), type, protocolName }))
45
- : [
46
- generateField({
47
- name: input.name || `param${index}`,
48
- type: input.type,
49
- protocolName,
50
- }),
51
- ];
52
-
53
- export const generateEventType = (event: any, protocolName: string) => `type ${
54
- event._alias
55
- } @entity(immutable: true) {
56
- id: Bytes!
57
- ${event.inputs
58
- .reduce(
59
- (acc: any[], input: any, index: number) =>
60
- acc.concat(generateEventFields({ input, index, protocolName })),
61
- [],
62
- )
63
- .join('\n')}
64
- blockNumber: BigInt!
65
- blockTimestamp: BigInt!
66
- transactionHash: Bytes!
67
- }`;
68
-
69
- export const generateExampleEntityType = (protocol: Protocol, events: any[]) => {
70
- if (protocol.hasABIs() && events.length > 0) {
71
- return `type ExampleEntity @entity {
72
- id: Bytes!
73
- count: BigInt!
74
- ${events[0].inputs
75
- .reduce(
76
- (acc: any[], input: any, index: number) =>
77
- acc.concat(generateEventFields({ input, index, protocolName: protocol.name })),
78
- [],
79
- )
80
- .slice(0, 2)
81
- .join('\n')}
82
- }`;
83
- }
84
- return `type ExampleEntity @entity {
85
- id: ID!
86
- block: Bytes!
87
- count: BigInt!
88
- }`;
89
- };
@@ -1,217 +0,0 @@
1
- import { strings } from 'gluegun';
2
- import prettier from 'prettier';
3
- import { ascTypeForEthereum, ethereumFromAsc } from '../codegen/types';
4
-
5
- const VARIABLES_VALUES = {
6
- i32: 123,
7
- BigInt: 234,
8
- Bytes: 1_234_567_890,
9
- Address: '0x0000000000000000000000000000000000000001',
10
- string: 'Example string value',
11
- bool: true,
12
- };
13
-
14
- export const generateTestsFiles = (contract: any, events: any[], indexEvents?: boolean) => {
15
- const eventsTypes = events
16
- .flatMap(event =>
17
- event.inputs.map((input: any) => {
18
- // If the asc type is Array<T> we need to check if T is a native type or a custom graph-ts type
19
- // If we don't do that we may miss a type that should be imported from graph-ts
20
- const ascType = ascTypeForEthereum(input.type);
21
- const inner = fetchArrayInnerType(String(ascType));
22
- return inner ? inner[1] : ascType;
23
- }),
24
- )
25
- .filter(type => !type.startsWith('ethereum.') && !isNativeType(type));
26
- const importTypes = [...new Set(eventsTypes)].join(', ');
27
-
28
- return {
29
- [`${strings.kebabCase(contract)}.test.ts`]: prettier.format(
30
- generateExampleTest(contract, events[0], indexEvents, importTypes),
31
- { parser: 'typescript', semi: false },
32
- ),
33
- [`${strings.kebabCase(contract)}-utils.ts`]: prettier.format(
34
- generateTestHelper(contract, events, importTypes),
35
- { parser: 'typescript', semi: false },
36
- ),
37
- };
38
- };
39
-
40
- /*
41
- Generates the arguments that will be passed to the mock event function from the event inputs. Example:
42
- let id = BigInt.fromI32(234)
43
- let owner = Address.fromString("0x0000000000000000000000000000000000000001")
44
- let displayName = "Example string value"
45
- let imageUrl = "Example string value"
46
- */
47
- const generateArguments = (eventInputs: any[]) => {
48
- return eventInputs
49
- .map((input, index) => {
50
- const ascType = ascTypeForEthereum(input.type);
51
- return `let ${input.name || `param${index}`} = ${assignValue(ascType)}`;
52
- })
53
- .join('\n');
54
- };
55
-
56
- // Generates the value that will be assigned to a variable in generateArguments()
57
- const assignValue = (type: string): string | number | boolean => {
58
- switch (type) {
59
- case 'string':
60
- return `"${VARIABLES_VALUES[type]}"`;
61
- case 'BigInt':
62
- return `BigInt.fromI32(${VARIABLES_VALUES[type]})`;
63
- case 'Address':
64
- return `Address.fromString("${VARIABLES_VALUES[type]}")`;
65
- case 'Bytes':
66
- return `Bytes.fromI32(${VARIABLES_VALUES[type]})`;
67
- case fetchArrayInnerType(type)?.input: {
68
- const innerType = fetchArrayInnerType(type)![1];
69
- return `[${assignValue(innerType)}]`;
70
- }
71
- default: {
72
- const value = VARIABLES_VALUES[type as keyof typeof VARIABLES_VALUES];
73
- return value ? value : `"${type} Not implemented"`;
74
- }
75
- }
76
- };
77
-
78
- /*
79
- Generates the assert.fieldEquals() for a given entity and event inputs. Example:
80
- assert.fieldEquals(
81
- "ExampleEntity",
82
- "0xa16081f360e3847006db660bae1c6d1b2e17ec2a",
83
- "owner",
84
- "0x0000000000000000000000000000000000000001"
85
- )
86
- */
87
- const generateFieldsAssertions = (entity: string, eventInputs: any[], indexEvents?: boolean) =>
88
- eventInputs
89
- .filter(input => input.name != 'id')
90
- .map(
91
- (input, index) =>
92
- `assert.fieldEquals(
93
- "${entity}",
94
- "0xa16081f360e3847006db660bae1c6d1b2e17ec2a${indexEvents ? '-1' : ''}",
95
- "${input.name || `param${index}`}",
96
- "${expectedValue(ascTypeForEthereum(input.type))}"
97
- )`,
98
- )
99
- .join('\n');
100
-
101
- // Returns the expected value for a given type in generateFieldsAssertions()
102
- const expectedValue = (type: string): string | number | boolean => {
103
- switch (type) {
104
- case fetchArrayInnerType(type)?.input: {
105
- const innerType = fetchArrayInnerType(type)![1];
106
- return `[${expectedValue(innerType)}]`;
107
- }
108
- default: {
109
- const value = VARIABLES_VALUES[type as keyof typeof VARIABLES_VALUES];
110
- return value ? value : `${type} Not implemented`;
111
- }
112
- }
113
- };
114
-
115
- // Checks if the type is a native AS type or should be imported from graph-ts
116
- const isNativeType = (type: string) => {
117
- const natives = [/i32/, /string/, /boolean/];
118
-
119
- return natives.some(rx => rx.test(type));
120
- };
121
-
122
- const fetchArrayInnerType = (type: string) => type.match(/Array<(.*?)>/);
123
-
124
- // Generates the example test.ts file
125
- const generateExampleTest = (
126
- contract: string,
127
- event: any,
128
- indexEvents?: boolean,
129
- importTypes?: string,
130
- ) => {
131
- const entity = indexEvents ? String(event._alias) : 'ExampleEntity';
132
- const eventInputs = event.inputs;
133
- const eventName = event._alias;
134
-
135
- return `
136
- import { assert, describe, test, clearStore, beforeAll, afterAll } from "matchstick-as/assembly/index"
137
- import { ${importTypes} } from "@graphprotocol/graph-ts"
138
- import { ${entity} } from "../generated/schema"
139
- import { ${
140
- indexEvents ? `${eventName} as ${eventName}Event` : eventName
141
- } } from "../generated/${contract}/${contract}"
142
- import { handle${eventName} } from "../src/${strings.kebabCase(contract)}"
143
- import { create${eventName}Event } from "./${strings.kebabCase(contract)}-utils"
144
-
145
-
146
- // Tests structure (matchstick-as >=0.5.0)
147
- // https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0
148
-
149
- describe("Describe entity assertions", () => {
150
- beforeAll(() => {
151
- ${generateArguments(eventInputs)}
152
- let new${eventName}Event = create${eventName}Event(${eventInputs
153
- .map((input: any, index: number) => input.name || `param${index}`)
154
- .join(', ')});
155
- handle${eventName}(new${eventName}Event)
156
- })
157
-
158
- afterAll(() => {
159
- clearStore()
160
- })
161
-
162
- // For more test scenarios, see:
163
- // https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test
164
-
165
- test("${entity} created and stored", () => {
166
- assert.entityCount('${entity}', 1)
167
-
168
- // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function
169
- ${generateFieldsAssertions(entity, eventInputs, indexEvents)}
170
-
171
- // More assert options:
172
- // https://thegraph.com/docs/en/developer/matchstick/#asserts
173
- })
174
- })
175
- `;
176
- };
177
-
178
- // Generates the utils helper file
179
- const generateTestHelper = (contract: string, events: any[], importTypes: string) => {
180
- const eventsNames = events.map(event => event._alias);
181
-
182
- return `
183
- import { newMockEvent } from 'matchstick-as';
184
- import { ethereum, ${importTypes} } from '@graphprotocol/graph-ts';
185
- import { ${eventsNames.join(', ')} } from '../generated/${contract}/${contract}';
186
-
187
- ${generateMockedEvents(events).join('\n')}`;
188
- };
189
-
190
- const generateMockedEvents = (events: any[]) =>
191
- events.reduce((acc, event) => acc.concat(generateMockedEvent(event)), []);
192
-
193
- const generateMockedEvent = (event: any) => {
194
- const varName = `${strings.camelCase(event._alias)}Event`;
195
- const fnArgs = event.inputs.map(
196
- (input: any, index: number) =>
197
- `${input.name || `param${index}`}: ${ascTypeForEthereum(input.type)}`,
198
- );
199
- const ascToEth = event.inputs.map(
200
- (input: any, index: number) =>
201
- `${varName}.parameters.push(new ethereum.EventParam("${
202
- input.name || `param${index}`
203
- }", ${ethereumFromAsc(input.name || `param${index}`, input.type)}))`,
204
- );
205
-
206
- return `
207
- export function create${event._alias}Event(${fnArgs.join(', ')}): ${event._alias} {
208
- let ${varName} = changetype<${event._alias}>(newMockEvent());
209
-
210
- ${varName}.parameters = new Array();
211
-
212
- ${ascToEth.join('\n')}
213
-
214
- return ${varName};
215
- }
216
- `;
217
- };
package/src/schema.ts DELETED
@@ -1,26 +0,0 @@
1
- import fs from 'fs-extra';
2
- import * as graphql from 'graphql/language';
3
- import immutable from 'immutable';
4
- import SchemaCodeGenerator from './codegen/schema';
5
-
6
- export default class Schema {
7
- constructor(
8
- public filename: string,
9
- public document: string,
10
- public ast: immutable.Collection<any, any>,
11
- ) {
12
- this.filename = filename;
13
- this.document = document;
14
- this.ast = ast;
15
- }
16
-
17
- codeGenerator() {
18
- return new SchemaCodeGenerator(this);
19
- }
20
-
21
- static async load(filename: string) {
22
- const document = await fs.readFile(filename, 'utf-8');
23
- const ast = graphql.parse(document);
24
- return new Schema(filename, document, immutable.fromJS(ast));
25
- }
26
- }