@graphprotocol/graph-cli 0.37.3 → 0.37.4-alpha-20230117095424-b5750b1

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 (352) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/bin.js +6 -0
  3. package/dist/cli.js +26 -0
  4. package/dist/codegen/schema.js +244 -0
  5. package/dist/codegen/schema.test.js +455 -0
  6. package/dist/codegen/template.js +66 -0
  7. package/dist/codegen/types/conversions.js +335 -0
  8. package/dist/codegen/types/index.js +71 -0
  9. package/dist/codegen/types/index.test.js +563 -0
  10. package/dist/codegen/typescript.js +200 -0
  11. package/dist/codegen/util.js +40 -0
  12. package/dist/codegen/util.test.js +93 -0
  13. package/dist/command-helpers/abi.js +76 -0
  14. package/dist/command-helpers/auth.js +76 -0
  15. package/dist/command-helpers/compiler.js +66 -0
  16. package/dist/command-helpers/data-sources.js +29 -0
  17. package/dist/command-helpers/fs.js +9 -0
  18. package/dist/command-helpers/gluegun.js +48 -0
  19. package/dist/command-helpers/ipfs.js +5 -0
  20. package/dist/command-helpers/jsonrpc.js +27 -0
  21. package/dist/command-helpers/network.js +90 -0
  22. package/dist/command-helpers/network.test.js +86 -0
  23. package/dist/command-helpers/node.js +40 -0
  24. package/dist/command-helpers/scaffold.js +110 -0
  25. package/dist/command-helpers/spinner.js +80 -0
  26. package/dist/command-helpers/studio.js +14 -0
  27. package/dist/command-helpers/studio.test.js +41 -0
  28. package/dist/command-helpers/subgraph.js +22 -0
  29. package/dist/command-helpers/version.js +66 -0
  30. package/dist/command-helpers/version.test.js +186 -0
  31. package/dist/commands/add.js +187 -0
  32. package/dist/commands/auth.js +122 -0
  33. package/dist/commands/build.js +136 -0
  34. package/dist/commands/codegen.js +128 -0
  35. package/dist/commands/create.js +94 -0
  36. package/dist/commands/deploy.js +335 -0
  37. package/dist/commands/init.js +800 -0
  38. package/dist/commands/local.js +380 -0
  39. package/dist/commands/remove.js +95 -0
  40. package/dist/commands/test.js +293 -0
  41. package/dist/compiler/asc.js +83 -0
  42. package/dist/compiler/index.js +466 -0
  43. package/dist/debug.js +16 -0
  44. package/dist/migrations/mapping_api_version_0_0_1.js +83 -0
  45. package/dist/migrations/mapping_api_version_0_0_2.js +83 -0
  46. package/dist/migrations/mapping_api_version_0_0_3.js +83 -0
  47. package/dist/migrations/mapping_api_version_0_0_4.js +85 -0
  48. package/dist/migrations/mapping_api_version_0_0_5.js +85 -0
  49. package/dist/migrations/spec_version_0_0_2.js +45 -0
  50. package/dist/migrations/spec_version_0_0_3.js +50 -0
  51. package/dist/migrations/util/load-manifest.js +16 -0
  52. package/dist/migrations/util/versions.js +28 -0
  53. package/dist/migrations.js +54 -0
  54. package/{src → dist}/protocols/arweave/manifest.graphql +0 -0
  55. package/{src/protocols/arweave/scaffold/manifest.ts → dist/protocols/arweave/scaffold/manifest.js} +7 -3
  56. package/{src/protocols/arweave/scaffold/mapping.ts → dist/protocols/arweave/scaffold/mapping.js} +5 -2
  57. package/dist/protocols/arweave/subgraph.js +23 -0
  58. package/dist/protocols/contract.js +2 -0
  59. package/{src → dist}/protocols/cosmos/manifest.graphql +0 -0
  60. package/dist/protocols/cosmos/scaffold/manifest.js +15 -0
  61. package/{src/protocols/cosmos/scaffold/mapping.ts → dist/protocols/cosmos/scaffold/mapping.js} +5 -2
  62. package/dist/protocols/cosmos/subgraph.js +28 -0
  63. package/dist/protocols/ethereum/abi.js +138 -0
  64. package/dist/protocols/ethereum/codegen/abi.js +474 -0
  65. package/dist/protocols/ethereum/codegen/abi.test.js +325 -0
  66. package/dist/protocols/ethereum/codegen/template.js +52 -0
  67. package/dist/protocols/ethereum/contract.js +22 -0
  68. package/{src → dist}/protocols/ethereum/manifest.graphql +0 -0
  69. package/dist/protocols/ethereum/scaffold/manifest.js +32 -0
  70. package/{src/protocols/ethereum/scaffold/mapping.ts → dist/protocols/ethereum/scaffold/mapping.js} +18 -29
  71. package/dist/protocols/ethereum/subgraph.js +172 -0
  72. package/dist/protocols/ethereum/type-generator.js +123 -0
  73. package/dist/protocols/index.js +266 -0
  74. package/dist/protocols/ipfs/codegen/file_template.js +53 -0
  75. package/dist/protocols/near/contract.js +41 -0
  76. package/{src → dist}/protocols/near/manifest.graphql +0 -0
  77. package/dist/protocols/near/scaffold/manifest.js +16 -0
  78. package/{src/protocols/near/scaffold/mapping.ts → dist/protocols/near/scaffold/mapping.js} +5 -2
  79. package/dist/protocols/near/subgraph.js +23 -0
  80. package/dist/protocols/subgraph.js +2 -0
  81. package/{src → dist}/protocols/substreams/manifest.graphql +0 -0
  82. package/dist/protocols/substreams/scaffold/manifest.js +12 -0
  83. package/dist/protocols/substreams/subgraph.js +23 -0
  84. package/{src/scaffold/cosmos.test.ts → dist/scaffold/cosmos.test.js} +21 -22
  85. package/{src/scaffold/ethereum.test.ts → dist/scaffold/ethereum.test.js} +85 -101
  86. package/dist/scaffold/index.js +133 -0
  87. package/dist/scaffold/mapping.js +57 -0
  88. package/{src/scaffold/near.test.ts → dist/scaffold/near.test.js} +22 -23
  89. package/dist/scaffold/schema.js +86 -0
  90. package/dist/scaffold/tests.js +179 -0
  91. package/dist/schema.js +54 -0
  92. package/dist/subgraph.js +243 -0
  93. package/dist/type-generator.js +225 -0
  94. package/dist/validation/contract.js +44 -0
  95. package/dist/validation/index.js +10 -0
  96. package/dist/validation/manifest.js +266 -0
  97. package/dist/validation/schema.js +768 -0
  98. package/dist/validation/schema.test.js +35 -0
  99. package/dist/watcher.js +79 -0
  100. package/package.json +5 -1
  101. package/babel.config.js +0 -3
  102. package/jest.config.js +0 -175
  103. package/src/bin.ts +0 -6
  104. package/src/cli.ts +0 -30
  105. package/src/codegen/schema.test.ts +0 -460
  106. package/src/codegen/schema.ts +0 -299
  107. package/src/codegen/template.ts +0 -45
  108. package/src/codegen/types/conversions.ts +0 -358
  109. package/src/codegen/types/index.test.ts +0 -715
  110. package/src/codegen/types/index.ts +0 -111
  111. package/src/codegen/typescript.ts +0 -224
  112. package/src/codegen/util.test.ts +0 -112
  113. package/src/codegen/util.ts +0 -54
  114. package/src/command-helpers/abi.ts +0 -99
  115. package/src/command-helpers/auth.ts +0 -46
  116. package/src/command-helpers/compiler.ts +0 -60
  117. package/src/command-helpers/data-sources.ts +0 -36
  118. package/src/command-helpers/fs.ts +0 -5
  119. package/src/command-helpers/gluegun.ts +0 -52
  120. package/src/command-helpers/ipfs-http-client.d.ts +0 -1
  121. package/src/command-helpers/ipfs.ts +0 -3
  122. package/src/command-helpers/jsonrpc.ts +0 -22
  123. package/src/command-helpers/network.test.ts +0 -85
  124. package/src/command-helpers/network.ts +0 -133
  125. package/src/command-helpers/node.ts +0 -46
  126. package/src/command-helpers/scaffold.ts +0 -174
  127. package/src/command-helpers/spinner.ts +0 -60
  128. package/src/command-helpers/studio.test.ts +0 -84
  129. package/src/command-helpers/studio.ts +0 -25
  130. package/src/command-helpers/subgraph.ts +0 -21
  131. package/src/command-helpers/version.test.ts +0 -241
  132. package/src/command-helpers/version.ts +0 -53
  133. package/src/commands/add.ts +0 -220
  134. package/src/commands/auth.ts +0 -138
  135. package/src/commands/binary-install-raw.d.ts +0 -1
  136. package/src/commands/build.ts +0 -147
  137. package/src/commands/codegen.ts +0 -123
  138. package/src/commands/create.ts +0 -109
  139. package/src/commands/deploy.ts +0 -388
  140. package/src/commands/init.ts +0 -1060
  141. package/src/commands/local.ts +0 -539
  142. package/src/commands/remove.ts +0 -110
  143. package/src/commands/test.ts +0 -369
  144. package/src/compiler/asc.ts +0 -77
  145. package/src/compiler/index.ts +0 -677
  146. package/src/debug.ts +0 -15
  147. package/src/migrations/mapping_api_version_0_0_1.ts +0 -75
  148. package/src/migrations/mapping_api_version_0_0_2.ts +0 -75
  149. package/src/migrations/mapping_api_version_0_0_3.ts +0 -75
  150. package/src/migrations/mapping_api_version_0_0_4.ts +0 -77
  151. package/src/migrations/mapping_api_version_0_0_5.ts +0 -77
  152. package/src/migrations/spec_version_0_0_2.ts +0 -24
  153. package/src/migrations/spec_version_0_0_3.ts +0 -29
  154. package/src/migrations/util/load-manifest.ts +0 -10
  155. package/src/migrations/util/versions.ts +0 -27
  156. package/src/migrations.ts +0 -33
  157. package/src/protocols/arweave/subgraph.ts +0 -22
  158. package/src/protocols/contract.ts +0 -9
  159. package/src/protocols/cosmos/scaffold/manifest.ts +0 -11
  160. package/src/protocols/cosmos/subgraph.ts +0 -27
  161. package/src/protocols/ethereum/abi.ts +0 -153
  162. package/src/protocols/ethereum/codegen/abi.test.ts +0 -330
  163. package/src/protocols/ethereum/codegen/abi.ts +0 -719
  164. package/src/protocols/ethereum/codegen/template.ts +0 -41
  165. package/src/protocols/ethereum/contract.ts +0 -24
  166. package/src/protocols/ethereum/scaffold/manifest.ts +0 -28
  167. package/src/protocols/ethereum/subgraph.ts +0 -189
  168. package/src/protocols/ethereum/type-generator.ts +0 -191
  169. package/src/protocols/index.ts +0 -287
  170. package/src/protocols/ipfs/codegen/file_template.ts +0 -43
  171. package/src/protocols/near/contract.ts +0 -47
  172. package/src/protocols/near/scaffold/manifest.ts +0 -13
  173. package/src/protocols/near/subgraph.ts +0 -22
  174. package/src/protocols/subgraph.ts +0 -12
  175. package/src/protocols/substreams/scaffold/manifest.ts +0 -8
  176. package/src/protocols/substreams/subgraph.ts +0 -22
  177. package/src/scaffold/index.ts +0 -172
  178. package/src/scaffold/mapping.ts +0 -44
  179. package/src/scaffold/schema.ts +0 -89
  180. package/src/scaffold/tests.ts +0 -217
  181. package/src/schema.ts +0 -26
  182. package/src/subgraph.ts +0 -302
  183. package/src/type-generator.ts +0 -266
  184. package/src/validation/contract.ts +0 -51
  185. package/src/validation/index.ts +0 -5
  186. package/src/validation/manifest.ts +0 -360
  187. package/src/validation/schema.test.ts +0 -38
  188. package/src/validation/schema.ts +0 -957
  189. package/src/watcher.ts +0 -96
  190. package/tests/cli/globalSetup.ts +0 -8
  191. package/tests/cli/globalTeardown.ts +0 -8
  192. package/tests/cli/init/ethereum/abis/Marketplace.json +0 -408
  193. package/tests/cli/init/ethereum/abis/OverloadedElements.json +0 -91
  194. package/tests/cli/init/ethereum/abis/SoloMargin.json +0 -2729
  195. package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stderr +0 -14
  196. package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stdout +0 -12
  197. package/tests/cli/init/ethereum/from-contract-with-abi.stderr +0 -14
  198. package/tests/cli/init/ethereum/from-contract-with-abi.stdout +0 -12
  199. package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stderr +0 -14
  200. package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stdout +0 -12
  201. package/tests/cli/init/ethereum/from-contract.stderr +0 -16
  202. package/tests/cli/init/ethereum/from-contract.stdout +0 -12
  203. package/tests/cli/init/ethereum/from-example.stderr +0 -12
  204. package/tests/cli/init/ethereum/from-example.stdout +0 -12
  205. package/tests/cli/init/near/from-contract.stderr +0 -14
  206. package/tests/cli/init/near/from-contract.stdout +0 -12
  207. package/tests/cli/init.test.ts +0 -157
  208. package/tests/cli/spawn-command.d.ts +0 -7
  209. package/tests/cli/util.ts +0 -132
  210. package/tests/cli/validation/abi-not-found/Abi.json +0 -7
  211. package/tests/cli/validation/abi-not-found/mapping.ts +0 -0
  212. package/tests/cli/validation/abi-not-found/schema.graphql +0 -3
  213. package/tests/cli/validation/abi-not-found/subgraph.yaml +0 -42
  214. package/tests/cli/validation/abi-not-found copy.stderr +0 -13
  215. package/tests/cli/validation/big-decimal-is-valid/Abi.json +0 -7
  216. package/tests/cli/validation/big-decimal-is-valid/mapping.ts +0 -0
  217. package/tests/cli/validation/big-decimal-is-valid/schema.graphql +0 -4
  218. package/tests/cli/validation/big-decimal-is-valid/subgraph.yaml +0 -23
  219. package/tests/cli/validation/call-function-not-found/Abi.json +0 -57
  220. package/tests/cli/validation/call-function-not-found/mapping.ts +0 -0
  221. package/tests/cli/validation/call-function-not-found/schema.graphql +0 -3
  222. package/tests/cli/validation/call-function-not-found/subgraph.yaml +0 -22
  223. package/tests/cli/validation/call-function-not-found.stderr +0 -10
  224. package/tests/cli/validation/call-handler-with-tuple/Abi.json +0 -24
  225. package/tests/cli/validation/call-handler-with-tuple/generated/schema.ts +0 -44
  226. package/tests/cli/validation/call-handler-with-tuple/mapping.ts +0 -0
  227. package/tests/cli/validation/call-handler-with-tuple/schema.graphql +0 -3
  228. package/tests/cli/validation/call-handler-with-tuple/subgraph.yaml +0 -22
  229. package/tests/cli/validation/call-handler-with-tuple.stderr +0 -24
  230. package/tests/cli/validation/conflicting-network-names/Abi.json +0 -7
  231. package/tests/cli/validation/conflicting-network-names/mapping.ts +0 -0
  232. package/tests/cli/validation/conflicting-network-names/schema.graphql +0 -3
  233. package/tests/cli/validation/conflicting-network-names/subgraph.yaml +0 -41
  234. package/tests/cli/validation/conflicting-network-names.stderr +0 -10
  235. package/tests/cli/validation/conflicting-protocol-names/Abi.json +0 -7
  236. package/tests/cli/validation/conflicting-protocol-names/mapping.ts +0 -0
  237. package/tests/cli/validation/conflicting-protocol-names/schema.graphql +0 -3
  238. package/tests/cli/validation/conflicting-protocol-names/subgraph.yaml +0 -41
  239. package/tests/cli/validation/conflicting-protocol-names.stderr +0 -10
  240. package/tests/cli/validation/derived-from-target-type-missing/Abi.json +0 -6
  241. package/tests/cli/validation/derived-from-target-type-missing/mapping.ts +0 -0
  242. package/tests/cli/validation/derived-from-target-type-missing/schema.graphql +0 -4
  243. package/tests/cli/validation/derived-from-target-type-missing/subgraph.yaml +0 -22
  244. package/tests/cli/validation/derived-from-target-type-missing.stderr +0 -5
  245. package/tests/cli/validation/derived-from-with-interface/Gravity.json +0 -1
  246. package/tests/cli/validation/derived-from-with-interface/mapping.ts +0 -22
  247. package/tests/cli/validation/derived-from-with-interface/schema.graphql +0 -19
  248. package/tests/cli/validation/derived-from-with-interface/subgraph.yaml +0 -25
  249. package/tests/cli/validation/duplicate-data-source-name/Abi.json +0 -7
  250. package/tests/cli/validation/duplicate-data-source-name/mapping.ts +0 -0
  251. package/tests/cli/validation/duplicate-data-source-name/schema.graphql +0 -4
  252. package/tests/cli/validation/duplicate-data-source-name/subgraph.yaml +0 -40
  253. package/tests/cli/validation/duplicate-data-source-name.stderr +0 -5
  254. package/tests/cli/validation/duplicate-template-name/Abi.json +0 -7
  255. package/tests/cli/validation/duplicate-template-name/mapping.ts +0 -0
  256. package/tests/cli/validation/duplicate-template-name/schema.graphql +0 -4
  257. package/tests/cli/validation/duplicate-template-name/subgraph.yaml +0 -59
  258. package/tests/cli/validation/duplicate-template-name.stderr +0 -5
  259. package/tests/cli/validation/entity-field-args/Abi.json +0 -7
  260. package/tests/cli/validation/entity-field-args/mapping.ts +0 -0
  261. package/tests/cli/validation/entity-field-args/schema.graphql +0 -4
  262. package/tests/cli/validation/entity-field-args/subgraph.yaml +0 -22
  263. package/tests/cli/validation/entity-field-args.stderr +0 -5
  264. package/tests/cli/validation/ethereum-contract-without-handlers/Abi.json +0 -7
  265. package/tests/cli/validation/ethereum-contract-without-handlers/mapping.ts +0 -0
  266. package/tests/cli/validation/ethereum-contract-without-handlers/schema.graphql +0 -3
  267. package/tests/cli/validation/ethereum-contract-without-handlers/subgraph.yaml +0 -19
  268. package/tests/cli/validation/ethereum-contract-without-handlers.stderr +0 -6
  269. package/tests/cli/validation/event-not-found/Abi.json +0 -7
  270. package/tests/cli/validation/event-not-found/mapping.ts +0 -0
  271. package/tests/cli/validation/event-not-found/schema.graphql +0 -3
  272. package/tests/cli/validation/event-not-found/subgraph.yaml +0 -40
  273. package/tests/cli/validation/event-not-found.stderr +0 -12
  274. package/tests/cli/validation/example-values-found/Abi.json +0 -7
  275. package/tests/cli/validation/example-values-found/generated/ExampleSubgraph/ExampleContract.ts +0 -35
  276. package/tests/cli/validation/example-values-found/generated/schema.ts +0 -44
  277. package/tests/cli/validation/example-values-found/mapping.ts +0 -0
  278. package/tests/cli/validation/example-values-found/schema.graphql +0 -3
  279. package/tests/cli/validation/example-values-found/subgraph.yaml +0 -24
  280. package/tests/cli/validation/example-values-found.stderr +0 -34
  281. package/tests/cli/validation/invalid-abis/InvalidAbi.json +0 -1
  282. package/tests/cli/validation/invalid-abis/mapping.ts +0 -0
  283. package/tests/cli/validation/invalid-abis/schema.graphql +0 -3
  284. package/tests/cli/validation/invalid-abis/subgraph.yaml +0 -22
  285. package/tests/cli/validation/invalid-abis.stderr +0 -5
  286. package/tests/cli/validation/invalid-contract-addresses/Abi.json +0 -7
  287. package/tests/cli/validation/invalid-contract-addresses/mapping.ts +0 -0
  288. package/tests/cli/validation/invalid-contract-addresses/schema.graphql +0 -3
  289. package/tests/cli/validation/invalid-contract-addresses/subgraph.yaml +0 -58
  290. package/tests/cli/validation/invalid-contract-addresses.stderr +0 -14
  291. package/tests/cli/validation/invalid-data-source-template/mapping.ts +0 -0
  292. package/tests/cli/validation/invalid-data-source-template/schema.graphql +0 -3
  293. package/tests/cli/validation/invalid-data-source-template/subgraph.yaml +0 -32
  294. package/tests/cli/validation/invalid-data-source-template.stderr +0 -30
  295. package/tests/cli/validation/invalid-entity-field-types/Abi.json +0 -7
  296. package/tests/cli/validation/invalid-entity-field-types/mapping.ts +0 -0
  297. package/tests/cli/validation/invalid-entity-field-types/schema.graphql +0 -157
  298. package/tests/cli/validation/invalid-entity-field-types/subgraph.yaml +0 -22
  299. package/tests/cli/validation/invalid-entity-field-types.stderr +0 -148
  300. package/tests/cli/validation/invalid-fulltext-directive/Abi.json +0 -7
  301. package/tests/cli/validation/invalid-fulltext-directive/mapping.ts +0 -0
  302. package/tests/cli/validation/invalid-fulltext-directive/schema.graphql +0 -140
  303. package/tests/cli/validation/invalid-fulltext-directive/subgraph.yaml +0 -22
  304. package/tests/cli/validation/invalid-fulltext-directive.stderr +0 -32
  305. package/tests/cli/validation/invalid-graphql-schema/Abi.json +0 -7
  306. package/tests/cli/validation/invalid-graphql-schema/mapping.ts +0 -0
  307. package/tests/cli/validation/invalid-graphql-schema/schema.graphql +0 -8
  308. package/tests/cli/validation/invalid-graphql-schema/subgraph.yaml +0 -22
  309. package/tests/cli/validation/invalid-graphql-schema.stderr +0 -25
  310. package/tests/cli/validation/invalid-manifest/subgraph.yaml +0 -13
  311. package/tests/cli/validation/invalid-manifest-cannot-infer-protocol/subgraph.yaml +0 -12
  312. package/tests/cli/validation/invalid-manifest-cannot-infer-protocol.stderr +0 -5
  313. package/tests/cli/validation/invalid-manifest.stderr +0 -28
  314. package/tests/cli/validation/missing-entity-id/Abi.json +0 -7
  315. package/tests/cli/validation/missing-entity-id/mapping.ts +0 -0
  316. package/tests/cli/validation/missing-entity-id/schema.graphql +0 -3
  317. package/tests/cli/validation/missing-entity-id/subgraph.yaml +0 -22
  318. package/tests/cli/validation/missing-entity-id/types/ExampleSubgraph/ExampleContract.ts +0 -35
  319. package/tests/cli/validation/missing-entity-id/types/schema.ts +0 -27
  320. package/tests/cli/validation/missing-entity-id.stderr +0 -5
  321. package/tests/cli/validation/missing-or-invalid-derived-from-fields/Abi.json +0 -7
  322. package/tests/cli/validation/missing-or-invalid-derived-from-fields/mapping.ts +0 -0
  323. package/tests/cli/validation/missing-or-invalid-derived-from-fields/schema.graphql +0 -40
  324. package/tests/cli/validation/missing-or-invalid-derived-from-fields/subgraph.yaml +0 -22
  325. package/tests/cli/validation/missing-or-invalid-derived-from-fields.stderr +0 -10
  326. package/tests/cli/validation/missing-or-invalid-derived-from-fields.stdout +0 -0
  327. package/tests/cli/validation/near-is-valid/mapping.ts +0 -0
  328. package/tests/cli/validation/near-is-valid/schema.graphql +0 -8
  329. package/tests/cli/validation/near-is-valid/subgraph.yaml +0 -30
  330. package/tests/cli/validation/nested-template-nice-error/Abi.json +0 -7
  331. package/tests/cli/validation/nested-template-nice-error/mapping.ts +0 -0
  332. package/tests/cli/validation/nested-template-nice-error/schema.graphql +0 -3
  333. package/tests/cli/validation/nested-template-nice-error/subgraph.yaml +0 -35
  334. package/tests/cli/validation/nested-template-nice-error.stderr +0 -5
  335. package/tests/cli/validation/no-network-names/Abi.json +0 -7
  336. package/tests/cli/validation/no-network-names/mapping.ts +0 -0
  337. package/tests/cli/validation/no-network-names/schema.graphql +0 -3
  338. package/tests/cli/validation/no-network-names/subgraph.yaml +0 -40
  339. package/tests/cli/validation/no-network-names.stderr +0 -34
  340. package/tests/cli/validation/source-without-address-is-valid/Abi.json +0 -7
  341. package/tests/cli/validation/source-without-address-is-valid/generated/ExampleSubgraph/ExampleContract.ts +0 -35
  342. package/tests/cli/validation/source-without-address-is-valid/mapping.ts +0 -0
  343. package/tests/cli/validation/source-without-address-is-valid/schema.graphql +0 -3
  344. package/tests/cli/validation/source-without-address-is-valid/subgraph.yaml +0 -23
  345. package/tests/cli/validation/source-without-address-is-valid.stderr +0 -24
  346. package/tests/cli/validation/topic0-is-valid/Abi.json +0 -7
  347. package/tests/cli/validation/topic0-is-valid/mapping.ts +0 -0
  348. package/tests/cli/validation/topic0-is-valid/schema.graphql +0 -4
  349. package/tests/cli/validation/topic0-is-valid/subgraph.yaml +0 -24
  350. package/tests/cli/validation.test.ts +0 -226
  351. package/tsconfig.build.json +0 -4
  352. package/tsconfig.json +0 -19
@@ -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
- }
package/src/subgraph.ts DELETED
@@ -1,302 +0,0 @@
1
- import path from 'path';
2
- import fs from 'fs-extra';
3
- import * as graphql from 'graphql/language';
4
- import immutable from 'immutable';
5
- import yaml from 'yaml';
6
- import { strOptions } from 'yaml/types';
7
- import debug from './debug';
8
- import { Subgraph as ISubgraph } from './protocols/subgraph';
9
- import * as validation from './validation';
10
-
11
- const subgraphDebug = debug('graph-cli:subgraph');
12
-
13
- const throwCombinedError = (filename: string, errors: immutable.List<any>) => {
14
- throw new Error(
15
- errors.reduce(
16
- (msg, e) =>
17
- `${msg}
18
-
19
- Path: ${e.get('path').size === 0 ? '/' : e.get('path').join(' > ')}
20
- ${e.get('message').split('\n').join('\n ')}`,
21
- `Error in ${path.relative(process.cwd(), filename)}:`,
22
- ),
23
- );
24
- };
25
-
26
- const buildCombinedWarning = (filename: string, warnings: immutable.List<any>) =>
27
- warnings.size > 0
28
- ? warnings.reduce(
29
- (msg, w) =>
30
- `${msg}
31
-
32
- Path: ${w.get('path').size === 0 ? '/' : w.get('path').join(' > ')}
33
- ${w.get('message').split('\n').join('\n ')}`,
34
- `Warnings in ${path.relative(process.cwd(), filename)}:`,
35
- ) + '\n'
36
- : null;
37
-
38
- type ResolveFile = (path: string) => string;
39
-
40
- export default class Subgraph {
41
- static async validate(data: any, protocol: any, { resolveFile }: { resolveFile: ResolveFile }) {
42
- subgraphDebug(`Validating Subgraph with protocol "%s"`, protocol);
43
- if (protocol.name == null) {
44
- return immutable.fromJS([
45
- {
46
- path: [],
47
- message: `Unable to determine for which protocol manifest file is built for. Ensure you have at least one 'dataSources' and/or 'templates' elements defined in your subgraph.`,
48
- },
49
- ]);
50
- }
51
-
52
- // Parse the default subgraph schema
53
- const schema = graphql.parse(
54
- await fs.readFile(
55
- path.join(__dirname, 'protocols', protocol.name, `manifest.graphql`),
56
- 'utf-8',
57
- ),
58
- );
59
-
60
- // Obtain the root `SubgraphManifest` type from the schema
61
- const rootType = schema.definitions.find(definition => {
62
- // @ts-expect-error TODO: name field does not exist on definition, really?
63
- return definition.name.value === 'SubgraphManifest';
64
- });
65
-
66
- // Validate the subgraph manifest using this schema
67
- return validation.validateManifest(data, rootType, schema, protocol, { resolveFile });
68
- }
69
-
70
- static validateSchema(manifest: any, { resolveFile }: { resolveFile: ResolveFile }) {
71
- const filename = resolveFile(manifest.getIn(['schema', 'file']));
72
- const validationErrors = validation.validateSchema(filename);
73
- let errors: immutable.Collection<any, any>;
74
-
75
- if (validationErrors.size > 0) {
76
- errors = validationErrors.groupBy(error => error.get('entity')).sort();
77
- const msg = errors.reduce((msg, errors, entity) => {
78
- errors = errors.groupBy((error: any) => error.get('directive'));
79
- const inner_msgs = errors.reduce((msg: string, errors: any[], directive: string) => {
80
- return `${msg}${
81
- directive
82
- ? `
83
- ${directive}:`
84
- : ''
85
- }
86
- ${errors
87
- .map(error => error.get('message').split('\n').join('\n '))
88
- .map(msg => `${directive ? ' ' : ''}- ${msg}`)
89
- .join('\n ')}`;
90
- }, ``);
91
- return `${msg}
92
-
93
- ${entity}:${inner_msgs}`;
94
- }, `Error in ${path.relative(process.cwd(), filename)}:`);
95
-
96
- throw new Error(msg);
97
- }
98
- }
99
-
100
- static validateRepository(manifest: immutable.Collection<any, any>) {
101
- const repository = manifest.get('repository');
102
-
103
- return /^https:\/\/github\.com\/graphprotocol\/example-subgraphs?$/.test(repository)
104
- ? immutable.List().push(
105
- immutable.fromJS({
106
- path: ['repository'],
107
- message: `\
108
- The repository is still set to ${repository}.
109
- Please replace it with a link to your subgraph source code.`,
110
- }),
111
- )
112
- : immutable.List();
113
- }
114
-
115
- static validateDescription(manifest: immutable.Collection<any, any>) {
116
- // TODO: Maybe implement this in the future for each protocol example description
117
- return manifest.get('description', '').startsWith('Gravatar for ')
118
- ? immutable.List().push(
119
- immutable.fromJS({
120
- path: ['description'],
121
- message: `\
122
- The description is still the one from the example subgraph.
123
- Please update it to tell users more about your subgraph.`,
124
- }),
125
- )
126
- : immutable.List();
127
- }
128
-
129
- static validateHandlers(
130
- manifest: immutable.Collection<any, any>,
131
- protocol: any,
132
- protocolSubgraph: ISubgraph,
133
- ) {
134
- return manifest
135
- .get('dataSources')
136
- .filter((dataSource: any) => protocol.isValidKindName(dataSource.get('kind')))
137
- .reduce((errors: any, dataSource: any, dataSourceIndex: any) => {
138
- const path = ['dataSources', dataSourceIndex, 'mapping'];
139
- const mapping = dataSource.get('mapping');
140
- const handlerTypes = protocolSubgraph.handlerTypes();
141
-
142
- subgraphDebug(
143
- 'Validating dataSource "%s" handlers with %d handlers types defined for protocol',
144
- dataSource.get('name'),
145
- handlerTypes.size,
146
- );
147
-
148
- if (handlerTypes.size == 0) {
149
- return errors;
150
- }
151
-
152
- const areAllHandlersEmpty = handlerTypes
153
- .map((handlerType: any) => mapping.get(handlerType, immutable.List()))
154
- .every((handlers: immutable.List<any>) => handlers.isEmpty());
155
-
156
- const handlerNamesWithoutLast = handlerTypes.pop().join(', ');
157
-
158
- return areAllHandlersEmpty
159
- ? errors.push(
160
- immutable.fromJS({
161
- path,
162
- message: `\
163
- Mapping has no ${handlerNamesWithoutLast} or ${handlerTypes.get(-1)}.
164
- At least one such handler must be defined.`,
165
- }),
166
- )
167
- : errors;
168
- }, immutable.List());
169
- }
170
-
171
- static validateContractValues(manifest: any, protocol: any) {
172
- if (!protocol.hasContract()) {
173
- return immutable.List();
174
- }
175
-
176
- return validation.validateContractValues(manifest, protocol);
177
- }
178
-
179
- // Validate that data source names are unique, so they don't overwrite each other.
180
- static validateUniqueDataSourceNames(manifest: any) {
181
- const names: any[] = [];
182
- return manifest
183
- .get('dataSources')
184
- .reduce((errors: immutable.List<any>, dataSource: any, dataSourceIndex: number) => {
185
- const path = ['dataSources', dataSourceIndex, 'name'];
186
- const name = dataSource.get('name');
187
- if (names.includes(name)) {
188
- errors = errors.push(
189
- immutable.fromJS({
190
- path,
191
- message: `\
192
- More than one data source named '${name}', data source names must be unique.`,
193
- }),
194
- );
195
- }
196
- names.push(name);
197
- return errors;
198
- }, immutable.List());
199
- }
200
-
201
- static validateUniqueTemplateNames(manifest: any) {
202
- const names: any[] = [];
203
- return manifest
204
- .get('templates', immutable.List())
205
- .reduce((errors: immutable.List<any>, template: any, templateIndex: number) => {
206
- const path = ['templates', templateIndex, 'name'];
207
- const name = template.get('name');
208
- if (names.includes(name)) {
209
- errors = errors.push(
210
- immutable.fromJS({
211
- path,
212
- message: `\
213
- More than one template named '${name}', template names must be unique.`,
214
- }),
215
- );
216
- }
217
- names.push(name);
218
- return errors;
219
- }, immutable.List());
220
- }
221
-
222
- static dump(manifest: any) {
223
- strOptions.fold.lineWidth = 90;
224
- // @ts-expect-error TODO: plain is the value behind the TS constant
225
- strOptions.defaultType = 'PLAIN';
226
-
227
- return yaml.stringify(manifest.toJS());
228
- }
229
-
230
- static async load(
231
- filename: string,
232
- { protocol, skipValidation }: { protocol?: any; skipValidation?: boolean } = {
233
- skipValidation: false,
234
- },
235
- ) {
236
- // Load and validate the manifest
237
- let data = null;
238
- let has_file_data_sources = false;
239
-
240
- if (filename.match(/.js$/)) {
241
- data = require(path.resolve(filename));
242
- } else {
243
- const raw_data = await fs.readFile(filename, 'utf-8');
244
- has_file_data_sources = raw_data.includes('kind: file');
245
- data = yaml.parse(raw_data);
246
- }
247
-
248
- // Helper to resolve files relative to the subgraph manifest
249
- const resolveFile: ResolveFile = maybeRelativeFile =>
250
- path.resolve(path.dirname(filename), maybeRelativeFile);
251
-
252
- // TODO: Validation for file data sources
253
- if (!has_file_data_sources) {
254
- const manifestErrors = await Subgraph.validate(data, protocol, { resolveFile });
255
- if (manifestErrors.size > 0) {
256
- throwCombinedError(filename, manifestErrors);
257
- }
258
- }
259
-
260
- const manifest = immutable.fromJS(data) as immutable.Map<any, any>;
261
-
262
- // Validate the schema
263
- Subgraph.validateSchema(manifest, { resolveFile });
264
-
265
- // Perform other validations
266
- const protocolSubgraph = protocol.getSubgraph({
267
- manifest,
268
- resolveFile,
269
- });
270
-
271
- const errors = skipValidation
272
- ? immutable.List()
273
- : immutable.List.of(
274
- ...protocolSubgraph.validateManifest(),
275
- ...Subgraph.validateContractValues(manifest, protocol),
276
- ...Subgraph.validateUniqueDataSourceNames(manifest),
277
- ...Subgraph.validateUniqueTemplateNames(manifest),
278
- ...Subgraph.validateHandlers(manifest, protocol, protocolSubgraph),
279
- );
280
-
281
- if (errors.size > 0) {
282
- throwCombinedError(filename, errors);
283
- }
284
-
285
- // Perform warning validations
286
- const warnings = skipValidation
287
- ? immutable.List()
288
- : immutable.List.of(
289
- ...Subgraph.validateRepository(manifest),
290
- ...Subgraph.validateDescription(manifest),
291
- );
292
-
293
- return {
294
- result: manifest,
295
- warning: warnings.size > 0 ? buildCombinedWarning(filename, warnings) : null,
296
- };
297
- }
298
-
299
- static async write(manifest: any, filename: string) {
300
- await fs.writeFile(filename, Subgraph.dump(manifest));
301
- }
302
- }