@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,111 +0,0 @@
1
- import immutable from 'immutable';
2
- import TYPE_CONVERSIONS from './conversions';
3
-
4
- // Conversion utilities
5
-
6
- const conversionsForTypeSystems = (fromTypeSystem: string, toTypeSystem: string) => {
7
- const conversions = TYPE_CONVERSIONS.getIn([fromTypeSystem, toTypeSystem]);
8
- if (conversions === undefined) {
9
- throw new Error(`Conversions from '${fromTypeSystem}' to '${toTypeSystem}' are not supported`);
10
- }
11
- return conversions as immutable.Collection<any, any>;
12
- };
13
-
14
- const objectifyConversion = (
15
- fromTypeSystem: string,
16
- toTypeSystem: string,
17
- conversion: immutable.Collection<any, any>,
18
- ) => {
19
- return immutable.fromJS({
20
- from: {
21
- typeSystem: fromTypeSystem,
22
- type: conversion.get(0),
23
- },
24
- to: {
25
- typeSystem: toTypeSystem,
26
- type: conversion.get(1),
27
- },
28
- convert: conversion.get(2),
29
- });
30
- };
31
-
32
- const findConversionFromType = (
33
- fromTypeSystem: string,
34
- toTypeSystem: string,
35
- fromType: string,
36
- ): immutable.Collection<any, any> => {
37
- const conversions = conversionsForTypeSystems(fromTypeSystem, toTypeSystem);
38
-
39
- const conversion = conversions.find(conversion =>
40
- typeof conversion.get(0) === 'string'
41
- ? conversion.get(0) === fromType
42
- : !!fromType.match(conversion.get(0)),
43
- );
44
-
45
- if (conversion === undefined) {
46
- throw new Error(
47
- `Conversion from '${fromTypeSystem}' to '${toTypeSystem}' for ` +
48
- `source type '${fromType}' is not supported`,
49
- );
50
- }
51
-
52
- return objectifyConversion(fromTypeSystem, toTypeSystem, conversion);
53
- };
54
-
55
- const findConversionToType = (
56
- fromTypeSystem: string,
57
- toTypeSystem: string,
58
- toType: string,
59
- ): immutable.Collection<any, any> => {
60
- const conversions = conversionsForTypeSystems(fromTypeSystem, toTypeSystem);
61
-
62
- const conversion = conversions.find(conversion =>
63
- typeof conversion.get(1) === 'string'
64
- ? conversion.get(1) === toType
65
- : !!toType.match(conversion.get(1)),
66
- );
67
-
68
- if (conversion === undefined) {
69
- throw new Error(
70
- `Conversion from '${fromTypeSystem}' to '${toTypeSystem}' for ` +
71
- `target type '${toType}' is not supported`,
72
- );
73
- }
74
-
75
- return objectifyConversion(fromTypeSystem, toTypeSystem, conversion);
76
- };
77
-
78
- // High-level type system API
79
-
80
- export const ascTypeForProtocol = (protocol: string, protocolType: string) =>
81
- findConversionFromType(protocol, 'AssemblyScript', protocolType).getIn(['to', 'type']) as string;
82
-
83
- // TODO: this can be removed/replaced by the function above
84
- export const ascTypeForEthereum = (ethereumType: string) =>
85
- ascTypeForProtocol('ethereum', ethereumType);
86
-
87
- export const ethereumTypeForAsc = (ascType: string) =>
88
- findConversionFromType('AssemblyScript', 'ethereum', ascType).getIn(['to', 'type']) as
89
- | string
90
- | RegExp;
91
-
92
- export const ethereumToAsc = (code: string, ethereumType: string, internalType?: string) =>
93
- findConversionFromType('ethereum', 'AssemblyScript', ethereumType).get('convert')(
94
- code,
95
- internalType,
96
- );
97
-
98
- export const ethereumFromAsc = (code: string, ethereumType: string) =>
99
- findConversionToType('AssemblyScript', 'ethereum', ethereumType).get('convert')(code);
100
-
101
- export const ascTypeForValue = (valueType: string) =>
102
- findConversionFromType('Value', 'AssemblyScript', valueType).getIn(['to', 'type']);
103
-
104
- export const valueTypeForAsc = (ascType: string) =>
105
- findConversionFromType('AssemblyScript', 'Value', ascType).getIn(['to', 'type']);
106
-
107
- export const valueToAsc = (code: string, valueType: string) =>
108
- findConversionFromType('Value', 'AssemblyScript', valueType).get('convert')(code);
109
-
110
- export const valueFromAsc = (code: string, valueType: string) =>
111
- findConversionToType('AssemblyScript', 'Value', valueType).get('convert')(code);
@@ -1,224 +0,0 @@
1
- class Param {
2
- constructor(public name: string, public type: string | NamedType | NullableType) {
3
- this.name = name;
4
- this.type = type;
5
- }
6
-
7
- toString() {
8
- return `${this.name}: ${this.type.toString()}`;
9
- }
10
- }
11
-
12
- class Method {
13
- constructor(
14
- public name: string,
15
- public params: Param[],
16
- public returnType: string | NamedType | null | undefined,
17
- public body: string,
18
- ) {
19
- this.name = name;
20
- this.params = params || [];
21
- this.returnType = returnType;
22
- this.body = body || '';
23
- }
24
-
25
- toString() {
26
- return `
27
- ${this.name}(${this.params.map(param => param.toString()).join(', ')})${
28
- this.returnType ? `: ${this.returnType.toString()}` : ''
29
- } {${this.body}
30
- }
31
- `;
32
- }
33
- }
34
-
35
- class StaticMethod {
36
- constructor(
37
- public name: string,
38
- public params: Param[],
39
- public returnType: NamedType | NullableType,
40
- public body: string,
41
- ) {
42
- this.name = name;
43
- this.params = params || [];
44
- this.returnType = returnType || 'void';
45
- this.body = body || '';
46
- }
47
-
48
- toString() {
49
- return `
50
- static ${this.name}(${this.params.map(param => param.toString()).join(', ')})${
51
- this.returnType ? `: ${this.returnType.toString()}` : ''
52
- } {${this.body}
53
- }
54
- `;
55
- }
56
- }
57
-
58
- interface ClassOptions {
59
- extends?: string;
60
- export?: boolean;
61
- }
62
-
63
- class Class {
64
- public extends: string | undefined;
65
- public methods: string[];
66
- public members: any[];
67
- public export: boolean;
68
-
69
- constructor(public name: string, options: ClassOptions) {
70
- this.name = name;
71
- this.extends = options.extends;
72
- this.methods = [];
73
- this.members = [];
74
- this.export = options.export || false;
75
- }
76
-
77
- addMember(member: any) {
78
- this.members.push(member);
79
- }
80
-
81
- addMethod(method: any) {
82
- this.methods.push(method);
83
- }
84
-
85
- toString() {
86
- return `
87
- ${this.export ? 'export' : ''} class ${this.name}${this.extends ? ` extends ${this.extends}` : ''} {
88
- ${this.members.map(member => member.toString()).join('\n')}
89
- ${this.methods.map(method => method.toString()).join('')}
90
- }
91
- `;
92
- }
93
- }
94
-
95
- class ClassMember {
96
- constructor(public name: string, public type: string) {
97
- this.name = name;
98
- this.type = type;
99
- }
100
-
101
- toString() {
102
- return ` ${this.name}: ${this.type.toString()}`;
103
- }
104
- }
105
-
106
- class NamedType {
107
- constructor(public name: string) {
108
- this.name = name;
109
- }
110
-
111
- toString() {
112
- return this.name;
113
- }
114
-
115
- capitalize() {
116
- this.name = this.name.charAt(0).toUpperCase() + this.name.slice(1);
117
- return this;
118
- }
119
-
120
- isPrimitive() {
121
- const primitives = [
122
- 'boolean',
123
- 'u8',
124
- 'i8',
125
- 'u16',
126
- 'i16',
127
- 'u32',
128
- 'i32',
129
- 'u64',
130
- 'i64',
131
- 'f32',
132
- 'f64',
133
- 'usize',
134
- 'isize',
135
- ];
136
- return primitives.includes(this.name);
137
- }
138
- }
139
-
140
- class ArrayType {
141
- public name: string;
142
-
143
- constructor(public inner: NamedType) {
144
- this.inner = inner;
145
- this.name = `Array<${inner.toString()}>`;
146
- }
147
-
148
- toString() {
149
- return this.name;
150
- }
151
- }
152
-
153
- class NullableType {
154
- constructor(public inner: NamedType | ArrayType) {
155
- this.inner = inner;
156
- }
157
-
158
- toString() {
159
- return `${this.inner.toString()} | null`;
160
- }
161
- }
162
-
163
- class ModuleImports {
164
- constructor(public nameOrNames: string | string[], public module: string) {
165
- this.nameOrNames = nameOrNames;
166
- this.module = module;
167
- }
168
-
169
- toString() {
170
- return `import { ${
171
- typeof this.nameOrNames === 'string' ? this.nameOrNames : this.nameOrNames.join(',')
172
- } } from "${this.module}"`;
173
- }
174
- }
175
-
176
- const namedType = (name: string) => new NamedType(name);
177
- const arrayType = (name: NamedType) => new ArrayType(name);
178
- const param = (name: string, type: string | NamedType) => new Param(name, type);
179
- const method = (
180
- name: string,
181
- params: Param[],
182
- returnType: string | NamedType | null | undefined,
183
- body: string,
184
- ) => new Method(name, params, returnType, body);
185
- const staticMethod = (
186
- name: string,
187
- params: Param[],
188
- returnType: NamedType | NullableType,
189
- body: string,
190
- ) => new StaticMethod(name, params, returnType, body);
191
- const klass = (name: string, options: ClassOptions) => new Class(name, options);
192
- const klassMember = (name: string, type: string) => new ClassMember(name, type);
193
- const nullableType = (type: NamedType | ArrayType) => new NullableType(type);
194
- const moduleImports = (nameOrNames: string | string[], module: string) =>
195
- new ModuleImports(nameOrNames, module);
196
-
197
- const GENERATED_FILE_NOTE = `
198
- // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
199
- `;
200
-
201
- export {
202
- ArrayType,
203
- arrayType,
204
- Class,
205
- ClassMember,
206
- // Utilities
207
- GENERATED_FILE_NOTE,
208
- klass,
209
- klassMember,
210
- Method,
211
- method,
212
- ModuleImports,
213
- moduleImports,
214
- NamedType,
215
- // Code generators
216
- namedType,
217
- NullableType,
218
- nullableType,
219
- // Types
220
- Param,
221
- param,
222
- StaticMethod,
223
- staticMethod,
224
- };
@@ -1,112 +0,0 @@
1
- import { disambiguateNames, unrollTuple } from './util';
2
-
3
- describe('Codegen utilities', () => {
4
- test('Name disambiguation', () => {
5
- expect(
6
- disambiguateNames({
7
- values: ['a', 'b', 'c'],
8
- getName: x => x,
9
- setName: (_x, name) => name,
10
- }),
11
- ).toEqual(['a', 'b', 'c']);
12
-
13
- expect(
14
- disambiguateNames({
15
- values: ['a', 'a', 'a'],
16
- getName: x => x,
17
- setName: (_x, name) => name,
18
- }),
19
- ).toEqual(['a', 'a1', 'a2']);
20
-
21
- expect(
22
- disambiguateNames({
23
- values: [
24
- { name: 'ExampleEvent', inputs: [] },
25
- { name: 'ExampleEvent', inputs: [{ type: 'uint256' }] },
26
- { name: 'ExampleEvent', inputs: [{ type: 'uint96' }] },
27
- ],
28
- getName: event => event.name,
29
- setName: (event, name) => {
30
- event.name = name;
31
- return event;
32
- },
33
- }),
34
- ).toEqual([
35
- { name: 'ExampleEvent', inputs: [] },
36
- { name: 'ExampleEvent1', inputs: [{ type: 'uint256' }] },
37
- { name: 'ExampleEvent2', inputs: [{ type: 'uint96' }] },
38
- ]);
39
- });
40
-
41
- test('Tuple unrolling', () => {
42
- expect(
43
- unrollTuple({
44
- value: { type: 'tuple', name: 'value', components: [] },
45
- path: ['value'],
46
- index: 0,
47
- }),
48
- ).toEqual([]);
49
-
50
- expect(
51
- unrollTuple({
52
- value: {
53
- type: 'tuple',
54
- name: 'value',
55
- components: [{ name: 'a', type: 'string' }],
56
- },
57
- path: ['value'],
58
- index: 0,
59
- }),
60
- ).toEqual([{ path: ['value', 'a'], type: 'string' }]);
61
-
62
- expect(
63
- unrollTuple({
64
- value: {
65
- type: 'tuple',
66
- name: 'value',
67
- components: [
68
- { name: 'a', type: 'string' },
69
- { name: 'b', type: 'uint256' },
70
- ],
71
- },
72
- path: ['value'],
73
- index: 0,
74
- }),
75
- ).toEqual([
76
- { path: ['value', 'a'], type: 'string' },
77
- { path: ['value', 'b'], type: 'uint256' },
78
- ]);
79
-
80
- expect(
81
- unrollTuple({
82
- value: {
83
- type: 'tuple',
84
- name: 'value',
85
- components: [
86
- { name: 'a', type: 'string' },
87
- { name: 'b', type: 'uint256' },
88
- {
89
- name: 'c',
90
- type: 'tuple',
91
- components: [
92
- { type: 'bytes32' },
93
- {
94
- name: 'd',
95
- type: 'tuple',
96
- components: [{ name: 'd1', type: 'uint72' }],
97
- },
98
- ],
99
- },
100
- ],
101
- },
102
- path: ['value'],
103
- index: 1,
104
- }),
105
- ).toEqual([
106
- { path: ['value', 'a'], type: 'string' },
107
- { path: ['value', 'b'], type: 'uint256' },
108
- { path: ['value', 'c', 'value0'], type: 'bytes32' },
109
- { path: ['value', 'c', 'd', 'd1'], type: 'uint72' },
110
- ]);
111
- });
112
- });
@@ -1,54 +0,0 @@
1
- export function disambiguateNames<T>({
2
- values,
3
- getName,
4
- setName,
5
- }: {
6
- values: T[];
7
- getName: (value: T, index: number) => string;
8
- setName: (value: T, name: string) => void;
9
- }) {
10
- const collisionCounter = new Map();
11
- return values.map((value, index) => {
12
- const name = getName(value, index);
13
- const counter = collisionCounter.get(name);
14
- if (counter === undefined) {
15
- collisionCounter.set(name, 1);
16
- return setName(value, name);
17
- }
18
- collisionCounter.set(name, counter + 1);
19
- return setName(value, `${name}${counter}`);
20
- });
21
- }
22
-
23
- export function isTupleType(t: string) {
24
- return t === 'tuple';
25
- }
26
-
27
- export function containsTupleType(t: string) {
28
- return isTupleType(t) || isTupleArrayType(t) || isTupleMatrixType(t);
29
- }
30
-
31
- export function isTupleArrayType(t: string) {
32
- return t.match(/^tuple\[([0-9]+)?\]$/);
33
- }
34
-
35
- export function isTupleMatrixType(t: string) {
36
- return t.match(/^tuple\[([0-9]+)?\]\[([0-9]+)?\]$/);
37
- }
38
-
39
- export const unrollTuple = ({
40
- path,
41
- value,
42
- }: {
43
- path: string[];
44
- index: number; // TODO: index is unused, do we really need it?
45
- value: any;
46
- }) =>
47
- value.components.reduce((acc: any[], component: any, index: number) => {
48
- const name = component.name || `value${index}`;
49
- return acc.concat(
50
- component.type === 'tuple'
51
- ? unrollTuple({ path: [...path, name], index, value: component })
52
- : [{ path: [...path, name], type: component.type }],
53
- );
54
- }, []);
@@ -1,99 +0,0 @@
1
- import immutable from 'immutable';
2
- import fetch from 'node-fetch';
3
- import ABI from '../protocols/ethereum/abi';
4
- import { withSpinner } from './spinner';
5
-
6
- export const loadAbiFromEtherscan = async (
7
- ABICtor: typeof ABI,
8
- network: string,
9
- address: string,
10
- ): Promise<ABI> =>
11
- await withSpinner(
12
- `Fetching ABI from Etherscan`,
13
- `Failed to fetch ABI from Etherscan`,
14
- `Warnings while fetching ABI from Etherscan`,
15
- async () => {
16
- const scanApiUrl = getEtherscanLikeAPIUrl(network);
17
- const result = await fetch(`${scanApiUrl}?module=contract&action=getabi&address=${address}`);
18
- const json = await result.json();
19
-
20
- // Etherscan returns a JSON object that has a `status`, a `message` and
21
- // a `result` field. The `status` is '0' in case of errors and '1' in
22
- // case of success
23
- if (json.status === '1') {
24
- return new ABICtor('Contract', undefined, immutable.fromJS(JSON.parse(json.result)));
25
- }
26
- throw new Error('ABI not found, try loading it from a local file');
27
- },
28
- );
29
-
30
- export const loadAbiFromBlockScout = async (
31
- ABICtor: typeof ABI,
32
- network: string,
33
- address: string,
34
- ) =>
35
- await withSpinner(
36
- `Fetching ABI from BlockScout`,
37
- `Failed to fetch ABI from BlockScout`,
38
- `Warnings while fetching ABI from BlockScout`,
39
- async () => {
40
- const result = await fetch(
41
- `https://blockscout.com/${network.replace(
42
- '-',
43
- '/',
44
- )}/api?module=contract&action=getabi&address=${address}`,
45
- );
46
- const json = await result.json();
47
-
48
- // BlockScout returns a JSON object that has a `status`, a `message` and
49
- // a `result` field. The `status` is '0' in case of errors and '1' in
50
- // case of success
51
- if (json.status === '1') {
52
- return new ABICtor('Contract', undefined, immutable.fromJS(JSON.parse(json.result)));
53
- }
54
- throw new Error('ABI not found, try loading it from a local file');
55
- },
56
- );
57
-
58
- const getEtherscanLikeAPIUrl = (network: string) => {
59
- switch (network) {
60
- case 'mainnet':
61
- return `https://api.etherscan.io/api`;
62
- case 'arbitrum-one':
63
- return `https://api.arbiscan.io/api`;
64
- case 'bsc':
65
- return `https://api.bscscan.com/api`;
66
- case 'chapel':
67
- return `https://api-testnet.bscscan.com/api`;
68
- case 'matic':
69
- return `https://api.polygonscan.com/api`;
70
- case 'mumbai':
71
- return `https://api-testnet.polygonscan.com/api`;
72
- case 'aurora':
73
- return `https://api.aurorascan.dev/api`;
74
- case 'aurora-testnet':
75
- return `https://api-testnet.aurorascan.dev/api`;
76
- case 'optimism-kovan':
77
- return `https://api-kovan-optimistic.etherscan.io/api`;
78
- case 'optimism':
79
- return `https://api-optimistic.etherscan.io/api`;
80
- case 'moonbeam':
81
- return `https://api-moonbeam.moonscan.io/api`;
82
- case 'moonriver':
83
- return `https://api-moonriver.moonscan.io/api`;
84
- case 'mbase':
85
- return `https://api-moonbase.moonscan.io/api`;
86
- case 'avalanche':
87
- return `https://api.snowtrace.io/api`;
88
- case 'fuji':
89
- return `https://api-testnet.snowtrace.io/api`;
90
- case 'gnosis':
91
- return `https://api.gnosisscan.io/api`;
92
- case 'fantom':
93
- return `https://api.ftmscan.com/api`;
94
- case 'fantom-testnet':
95
- return `https://api-testnet.ftmscan.com/api`;
96
- default:
97
- return `https://api-${network}.etherscan.io/api`;
98
- }
99
- };
@@ -1,46 +0,0 @@
1
- import fs from 'fs';
2
- import os from 'os';
3
- import path from 'path';
4
- import * as toolbox from 'gluegun';
5
- import { normalizeNodeUrl } from './node';
6
-
7
- const homedir = os.homedir();
8
-
9
- const CONFIG_PATH = path.join(homedir, '/.graph-cli.json');
10
- const getConfig = () => {
11
- let config;
12
- try {
13
- config = JSON.parse(fs.readFileSync(CONFIG_PATH).toString());
14
- } catch {
15
- config = {};
16
- }
17
- return config;
18
- };
19
-
20
- export const identifyDeployKey = async (node: string, deployKey: string) => {
21
- // Determine the deploy key to use, if any:
22
- // - First try using --deploy-key, if provided
23
- // - Then see if we have a deploy key set for the Graph node
24
- if (deployKey !== undefined) {
25
- return deployKey;
26
- }
27
- try {
28
- node = normalizeNodeUrl(node);
29
- const config = getConfig();
30
- return config[node];
31
- } catch (e) {
32
- toolbox.print.warning(`Could not get deploy key: ${e.message}`);
33
- toolbox.print.info(`Continuing without a deploy key\n`);
34
- }
35
- };
36
-
37
- export const saveDeployKey = async (node: string, deployKey: string) => {
38
- try {
39
- node = normalizeNodeUrl(node);
40
- const config = getConfig();
41
- config[node] = deployKey;
42
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config));
43
- } catch (e) {
44
- throw new Error(`Error storing deploy key: ${e.message}`);
45
- }
46
- };
@@ -1,60 +0,0 @@
1
- import { URL } from 'url';
2
- import * as toolbox from 'gluegun';
3
- import ipfsHttpClient from 'ipfs-http-client';
4
- import Compiler from '../compiler';
5
- import Protocol from '../protocols';
6
-
7
- interface CreateCompilerOptions {
8
- ipfs: any;
9
- headers?: any;
10
- outputDir: string;
11
- outputFormat: string;
12
- skipMigrations: boolean;
13
- blockIpfsMethods?: boolean;
14
- protocol: Protocol;
15
- }
16
-
17
- // Helper function to construct a subgraph compiler
18
- export function createCompiler(
19
- manifest: string,
20
- {
21
- ipfs,
22
- headers,
23
- outputDir,
24
- outputFormat,
25
- skipMigrations,
26
- blockIpfsMethods,
27
- protocol,
28
- }: CreateCompilerOptions,
29
- ) {
30
- // Parse the IPFS URL
31
- let url;
32
- try {
33
- url = ipfs ? new URL(ipfs) : undefined;
34
- } catch (e) {
35
- toolbox.print.error(`Invalid IPFS URL: ${ipfs}
36
- The IPFS URL must be of the following format: http(s)://host[:port]/[path]`);
37
- return null;
38
- }
39
-
40
- // Connect to the IPFS node (if a node address was provided)
41
- ipfs = ipfs
42
- ? ipfsHttpClient({
43
- protocol: url?.protocol.replace(/[:]+$/, ''),
44
- host: url?.hostname,
45
- port: url?.port,
46
- 'api-path': url?.pathname.replace(/\/$/, '') + '/api/v0/',
47
- headers,
48
- })
49
- : undefined;
50
-
51
- return new Compiler({
52
- ipfs,
53
- subgraphManifest: manifest,
54
- outputDir,
55
- outputFormat,
56
- skipMigrations,
57
- blockIpfsMethods,
58
- protocol,
59
- });
60
- }