@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,360 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import immutable from 'immutable';
4
- import yaml from 'js-yaml';
5
- import Protocol from '../protocols';
6
-
7
- const List = immutable.List;
8
- const Map = immutable.Map;
9
-
10
- /**
11
- * Returns a user-friendly type name for a value.
12
- */
13
- const typeName = (value: immutable.Collection<unknown, unknown>) =>
14
- List.isList(value) ? 'list' : Map.isMap(value) ? 'map' : typeof value;
15
-
16
- /**
17
- * Converts an immutable or plain JavaScript value to a YAML string.
18
- */
19
- const toYAML = (x: immutable.Collection<unknown, unknown>) =>
20
- yaml
21
- .safeDump(typeName(x) === 'list' || typeName(x) === 'map' ? x.toJS() : x, {
22
- indent: 2,
23
- })
24
- .trim();
25
-
26
- /**
27
- * Looks up the type of a field in a GraphQL object type.
28
- */
29
- const getFieldType = (type: immutable.Map<any, any>, fieldName: string) => {
30
- const fieldDef = type
31
- .get('fields')
32
- .find((field: any) => field.getIn(['name', 'value']) === fieldName);
33
-
34
- return fieldDef !== undefined ? fieldDef.get('type') : undefined;
35
- };
36
-
37
- /**
38
- * Resolves a type in the GraphQL schema.
39
- */
40
- const resolveType = (schema: immutable.Map<any, any>, type: immutable.Map<any, any>): any =>
41
- type.has('type')
42
- ? resolveType(schema, type.get('type'))
43
- : type.get('kind') === 'NamedType'
44
- ? schema
45
- .get('definitions')
46
- .find((def: any) => def.getIn(['name', 'value']) === type.getIn(['name', 'value']))
47
- : 'resolveType: unimplemented';
48
-
49
- /**
50
- * A map of supported validators.
51
- */
52
- const validators = immutable.fromJS({
53
- ScalarTypeDefinition: (value: any, ctx: immutable.Map<any, any>) =>
54
- (validators.get(ctx.getIn(['type', 'name', 'value'])) as any)(value, ctx),
55
-
56
- UnionTypeDefinition: (value: any, ctx: immutable.Map<any, any>) => {
57
- const unionVariants = ctx.getIn(['type', 'types']) as any[];
58
-
59
- let errors = List();
60
-
61
- for (const variantType of unionVariants) {
62
- const variantErrors = validateValue(value, ctx.set('type', variantType));
63
- // No errors found, union variant matched, early return
64
- if (variantErrors.isEmpty()) {
65
- return List();
66
- }
67
- errors = errors.push(variantErrors);
68
- }
69
-
70
- // Return errors from variant that matched the most
71
- return List(errors.minBy((variantErrors: any) => variantErrors.count()) as any);
72
- },
73
-
74
- NamedType: (value: any, ctx: immutable.Map<any, any>) =>
75
- validateValue(
76
- value,
77
- ctx.update('type', type => resolveType(ctx.get('schema'), type)),
78
- ),
79
-
80
- NonNullType: (value: any, ctx: immutable.Map<any, any>) =>
81
- value !== null && value !== undefined
82
- ? validateValue(
83
- value,
84
- ctx.update('type', type => type.get('type')),
85
- )
86
- : immutable.fromJS([
87
- {
88
- path: ctx.get('path'),
89
- message: `No value provided`,
90
- },
91
- ]),
92
-
93
- ListType: (value: any, ctx: immutable.Map<any, any>) =>
94
- List.isList(value)
95
- ? value.reduce(
96
- (errors, value, i) =>
97
- errors.concat(
98
- validateValue(
99
- value,
100
- ctx.update('path', path => path.push(i)).update('type', type => type.get('type')),
101
- ),
102
- ),
103
- List(),
104
- )
105
- : immutable.fromJS([
106
- {
107
- path: ctx.get('path'),
108
- message: `Expected list, found ${typeName(value)}:\n${toYAML(value)}`,
109
- },
110
- ]),
111
-
112
- ObjectTypeDefinition: (value: any, ctx: any) => {
113
- return Map.isMap(value)
114
- ? ctx
115
- .getIn(['type', 'fields'])
116
- .map((fieldDef: any) => fieldDef.getIn(['name', 'value']))
117
- .concat(value.keySeq())
118
- .toSet()
119
- .reduce(
120
- (errors: any[], key: string) =>
121
- getFieldType(ctx.get('type'), key)
122
- ? errors.concat(
123
- validateValue(
124
- value.get(key),
125
- ctx
126
- .update('path', (path: string[]) => path.push(key))
127
- .set('type', getFieldType(ctx.get('type'), key)),
128
- ),
129
- )
130
- : errors.push(
131
- key == 'templates' && ctx.get('protocol').hasTemplates()
132
- ? immutable.fromJS({
133
- path: ctx.get('path'),
134
- message:
135
- `The way to declare data source templates has changed, ` +
136
- `please move the templates from inside data sources to ` +
137
- `a \`templates:\` field at the top level of the manifest.`,
138
- })
139
- : immutable.fromJS({
140
- path: ctx.get('path'),
141
- message: `Unexpected key in map: ${key}`,
142
- }),
143
- ),
144
- List(),
145
- )
146
- : immutable.fromJS([
147
- {
148
- path: ctx.get('path'),
149
- message: `Expected map, found ${typeName(value)}:\n${toYAML(value)}`,
150
- },
151
- ]);
152
- },
153
-
154
- EnumTypeDefinition: (value: any, ctx: immutable.Map<any, any>) => {
155
- const enumValues = (ctx.getIn(['type', 'values']) as any).map((v: any) => {
156
- return v.getIn(['name', 'value']);
157
- });
158
-
159
- const allowedValues = enumValues.toArray().join(', ');
160
-
161
- return enumValues.includes(value)
162
- ? List()
163
- : immutable.fromJS([
164
- {
165
- path: ctx.get('path'),
166
- message: `Unexpected enum value: ${value}, allowed values: ${allowedValues}`,
167
- },
168
- ]);
169
- },
170
-
171
- String: (value: any, ctx: immutable.Map<any, any>) =>
172
- typeof value === 'string'
173
- ? List()
174
- : immutable.fromJS([
175
- {
176
- path: ctx.get('path'),
177
- message: `Expected string, found ${typeName(value)}:\n${toYAML(value)}`,
178
- },
179
- ]),
180
-
181
- BigInt: (value: any, ctx: immutable.Map<any, any>) =>
182
- typeof value === 'number'
183
- ? List()
184
- : immutable.fromJS([
185
- {
186
- path: ctx.get('path'),
187
- message: `Expected BigInt, found ${typeName(value)}:\n${toYAML(value)}`,
188
- },
189
- ]),
190
-
191
- File: (value: any, ctx: immutable.Map<any, any>) =>
192
- typeof value === 'string'
193
- ? fs.existsSync(ctx.get('resolveFile')(value))
194
- ? List()
195
- : immutable.fromJS([
196
- {
197
- path: ctx.get('path'),
198
- message: `File does not exist: ${path.relative(process.cwd(), value)}`,
199
- },
200
- ])
201
- : immutable.fromJS([
202
- {
203
- path: ctx.get('path'),
204
- message: `Expected filename, found ${typeName(value)}:\n${value}`,
205
- },
206
- ]),
207
-
208
- Boolean: (value: any, ctx: immutable.Map<any, any>) =>
209
- typeof value === 'boolean'
210
- ? List()
211
- : immutable.fromJS([
212
- {
213
- path: ctx.get('path'),
214
- message: `Expected true or false, found ${typeName(value)}:\n${toYAML(value)}`,
215
- },
216
- ]),
217
- });
218
-
219
- const validateValue = (value: any, ctx: immutable.Collection<any, any>) => {
220
- const kind = ctx.getIn(['type', 'kind']);
221
- const validator = validators.get(kind) as any;
222
-
223
- if (validator !== undefined) {
224
- // If the type is nullable, accept undefined and null; if the nullable
225
- // type is wrapped in a `NonNullType`, the validator for that `NonNullType`
226
- // will catch the missing/unset value
227
- if (kind !== 'NonNullType' && (value === undefined || value === null)) {
228
- return List();
229
- }
230
- return validator(value, ctx);
231
- }
232
- return immutable.fromJS([
233
- {
234
- path: ctx.get('path'),
235
- message: `No validator for unsupported schema type: ${kind}`,
236
- },
237
- ]);
238
- };
239
-
240
- // Transforms list of data sources like this:
241
- // [
242
- // { name: 'contract0', kind: 'ethereum/contract', network: 'mainnet' },
243
- // { name: 'contract1', kind: 'ethereum', network: 'mainnet' },
244
- // { name: 'contract2', kind: 'ethereum/contract', network: 'gnosis' },
245
- // { name: 'contract3', kind: 'near', network: 'near-mainnet' },
246
- // ]
247
- //
248
- // Into Immutable JS structure like this (protocol kind is normalized):
249
- // {
250
- // ethereum: {
251
- // mainnet: ['contract0', 'contract1'],
252
- // gnosis: ['contract2'],
253
- // },
254
- // near: {
255
- // 'near-mainnet': ['contract3'],
256
- // },
257
- // }
258
- const dataSourceListToMap = (dataSources: any[]) =>
259
- dataSources.reduce(
260
- (protocolKinds, dataSource) =>
261
- protocolKinds.update(Protocol.normalizeName(dataSource.kind), (networks: any) =>
262
- (networks || immutable.OrderedMap()).update(dataSource.network, (dataSourceNames: any) =>
263
- (dataSourceNames || immutable.OrderedSet()).add(dataSource.name),
264
- ),
265
- ),
266
- immutable.OrderedMap(),
267
- );
268
-
269
- const validateDataSourceProtocolAndNetworks = (value: any) => {
270
- const dataSources = [...value.dataSources, ...(value.templates || [])];
271
-
272
- const protocolNetworkMap = dataSourceListToMap(dataSources);
273
-
274
- if (protocolNetworkMap.size > 1) {
275
- return immutable.fromJS([
276
- {
277
- path: [],
278
- message: `Conflicting protocol kinds used in data sources and templates:
279
- ${protocolNetworkMap
280
- .map(
281
- (dataSourceNames: any, protocolKind: string | undefined) =>
282
- ` ${
283
- protocolKind === undefined
284
- ? 'Data sources and templates having no protocol kind set'
285
- : `Data sources and templates using '${protocolKind}'`
286
- }:\n${dataSourceNames
287
- .valueSeq()
288
- .flatten()
289
- .map((ds: string) => ` - ${ds}`)
290
- .join('\n')}`,
291
- )
292
- .join('\n')}
293
- Recommendation: Make all data sources and templates use the same protocol kind.`,
294
- },
295
- ]);
296
- }
297
-
298
- const networks = protocolNetworkMap.first();
299
-
300
- if (networks.size > 1) {
301
- return immutable.fromJS([
302
- {
303
- path: [],
304
- message: `Conflicting networks used in data sources and templates:
305
- ${networks
306
- .map(
307
- (dataSources: any, network: string | undefined) =>
308
- ` ${
309
- network === undefined
310
- ? 'Data sources and templates having no network set'
311
- : `Data sources and templates using '${network}'`
312
- }:\n${dataSources.map((ds: string) => ` - ${ds}`).join('\n')}`,
313
- )
314
- .join('\n')}
315
- Recommendation: Make all data sources and templates use the same network name.`,
316
- },
317
- ]);
318
- }
319
-
320
- return List();
321
- };
322
-
323
- export const validateManifest = (
324
- value: any,
325
- type: any,
326
- schema: any,
327
- protocol: Protocol,
328
- { resolveFile }: { resolveFile: (path: string) => string },
329
- ) => {
330
- // Validate manifest using the GraphQL schema that defines its structure
331
- const errors =
332
- value !== null && value !== undefined
333
- ? validateValue(
334
- immutable.fromJS(value),
335
- immutable.fromJS({
336
- schema,
337
- type,
338
- path: [],
339
- errors: [],
340
- resolveFile,
341
- protocol,
342
- }),
343
- )
344
- : immutable.fromJS([
345
- {
346
- path: [],
347
- message: `Expected non-empty value, found ${typeName(value)}:\n ${value}`,
348
- },
349
- ]);
350
-
351
- // Fail early because a broken manifest prevents us from performing
352
- // additional validation steps
353
- if (!errors.isEmpty()) {
354
- return errors;
355
- }
356
-
357
- // Validate that all data sources are for the same `network` and `protocol` (kind)
358
- // (this includes _no_ network/protocol at all)
359
- return validateDataSourceProtocolAndNetworks(value);
360
- };
@@ -1,38 +0,0 @@
1
- import { typeSuggestion } from './schema';
2
-
3
- describe('Schema validation', () => {
4
- test('Type suggestions', () => {
5
- expect(typeSuggestion('Address')).toEqual('Bytes');
6
- expect(typeSuggestion('address')).toEqual('Bytes');
7
- expect(typeSuggestion('bytes')).toEqual('Bytes');
8
- expect(typeSuggestion('string')).toEqual('String');
9
- expect(typeSuggestion('bool')).toEqual('Boolean');
10
- expect(typeSuggestion('boolean')).toEqual('Boolean');
11
- expect(typeSuggestion('float')).toEqual('BigDecimal');
12
- expect(typeSuggestion('Float')).toEqual('BigDecimal');
13
-
14
- expect(typeSuggestion(`int`)).toBe('Int');
15
- expect(typeSuggestion(`uint`)).toBe('BigInt');
16
- expect(typeSuggestion(`uint32`)).toBe('BigInt');
17
-
18
- // Test i8..i32, int8..int32
19
- for (let i = 8; i <= 32; i += 8) {
20
- expect(typeSuggestion(`i${i}`)).toBe('Int');
21
- expect(typeSuggestion(`int${i}`)).toBe('Int');
22
- }
23
-
24
- // Test u8..u24, uint8..uint24
25
- for (let i = 8; i <= 24; i += 8) {
26
- expect(typeSuggestion(`u${i}`)).toBe('Int');
27
- expect(typeSuggestion(`uint${i}`)).toBe('Int');
28
- }
29
-
30
- // Test i40..i256, int40..int256, u40..u256, uint40..uint256
31
- for (let i = 40; i <= 256; i += 8) {
32
- expect(typeSuggestion(`i${i}`)).toBe('BigInt');
33
- expect(typeSuggestion(`int${i}`)).toBe('BigInt');
34
- expect(typeSuggestion(`u${i}`)).toBe('BigInt');
35
- expect(typeSuggestion(`uint${i}`)).toBe('BigInt');
36
- }
37
- });
38
- });