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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/babel.config.js +3 -0
  3. package/dist/bin.js +6 -0
  4. package/dist/cli.js +32 -0
  5. package/dist/codegen/schema.js +250 -0
  6. package/dist/codegen/schema.test.js +458 -0
  7. package/dist/codegen/template.js +65 -0
  8. package/dist/codegen/types/conversions.js +359 -0
  9. package/dist/codegen/types/index.js +71 -0
  10. package/dist/codegen/types/index.test.js +563 -0
  11. package/dist/codegen/typescript.js +200 -0
  12. package/dist/codegen/util.js +46 -0
  13. package/dist/codegen/util.test.js +93 -0
  14. package/dist/command-helpers/abi.js +78 -0
  15. package/dist/command-helpers/auth.js +77 -0
  16. package/dist/command-helpers/compiler.js +66 -0
  17. package/dist/command-helpers/data-sources.js +29 -0
  18. package/dist/command-helpers/fs.js +9 -0
  19. package/dist/command-helpers/gluegun.js +49 -0
  20. package/dist/command-helpers/ipfs.js +5 -0
  21. package/dist/command-helpers/jsonrpc.js +29 -0
  22. package/dist/command-helpers/network.js +93 -0
  23. package/dist/command-helpers/network.test.js +86 -0
  24. package/dist/command-helpers/node.js +40 -0
  25. package/dist/command-helpers/scaffold.js +112 -0
  26. package/dist/command-helpers/spinner.js +84 -0
  27. package/dist/command-helpers/studio.js +13 -0
  28. package/dist/command-helpers/studio.test.js +41 -0
  29. package/dist/command-helpers/subgraph.js +24 -0
  30. package/dist/command-helpers/version.js +74 -0
  31. package/dist/command-helpers/version.test.js +179 -0
  32. package/dist/commands/add.js +190 -0
  33. package/dist/commands/auth.js +127 -0
  34. package/dist/commands/build.js +140 -0
  35. package/dist/commands/codegen.js +135 -0
  36. package/dist/commands/create.js +86 -0
  37. package/dist/commands/deploy.js +334 -0
  38. package/dist/commands/init.js +788 -0
  39. package/dist/commands/local.js +387 -0
  40. package/dist/commands/remove.js +86 -0
  41. package/dist/commands/test.js +295 -0
  42. package/dist/compiler/asc.js +83 -0
  43. package/dist/compiler/index.js +474 -0
  44. package/dist/debug.js +16 -0
  45. package/dist/migrations/mapping_api_version_0_0_1.js +78 -0
  46. package/dist/migrations/mapping_api_version_0_0_2.js +76 -0
  47. package/dist/migrations/mapping_api_version_0_0_3.js +78 -0
  48. package/dist/migrations/mapping_api_version_0_0_4.js +80 -0
  49. package/dist/migrations/mapping_api_version_0_0_5.js +80 -0
  50. package/dist/migrations/spec_version_0_0_2.js +49 -0
  51. package/dist/migrations/spec_version_0_0_3.js +54 -0
  52. package/dist/migrations/util/load-manifest.js +18 -0
  53. package/dist/migrations/util/versions.js +29 -0
  54. package/dist/migrations.js +56 -0
  55. package/dist/protocols/arweave/manifest.graphql +57 -0
  56. package/dist/protocols/arweave/scaffold/manifest.js +18 -0
  57. package/dist/protocols/arweave/scaffold/mapping.js +52 -0
  58. package/dist/protocols/arweave/subgraph.js +23 -0
  59. package/dist/protocols/cosmos/manifest.graphql +76 -0
  60. package/dist/protocols/cosmos/scaffold/manifest.js +15 -0
  61. package/dist/protocols/cosmos/scaffold/mapping.js +38 -0
  62. package/dist/protocols/cosmos/subgraph.js +25 -0
  63. package/dist/protocols/ethereum/abi.js +140 -0
  64. package/dist/protocols/ethereum/codegen/abi.js +451 -0
  65. package/dist/protocols/ethereum/codegen/abi.test.js +328 -0
  66. package/dist/protocols/ethereum/codegen/template.js +50 -0
  67. package/dist/protocols/ethereum/contract.js +20 -0
  68. package/dist/protocols/ethereum/manifest.graphql +94 -0
  69. package/dist/protocols/ethereum/scaffold/manifest.js +32 -0
  70. package/dist/protocols/ethereum/scaffold/mapping.js +65 -0
  71. package/dist/protocols/ethereum/subgraph.js +171 -0
  72. package/dist/protocols/ethereum/type-generator.js +125 -0
  73. package/dist/protocols/index.js +268 -0
  74. package/dist/protocols/ipfs/codegen/file_template.js +50 -0
  75. package/dist/protocols/near/contract.js +41 -0
  76. package/dist/protocols/near/manifest.graphql +64 -0
  77. package/dist/protocols/near/scaffold/manifest.js +16 -0
  78. package/dist/protocols/near/scaffold/mapping.js +38 -0
  79. package/dist/protocols/near/subgraph.js +20 -0
  80. package/dist/protocols/subgraph.js +2 -0
  81. package/dist/protocols/substreams/manifest.graphql +45 -0
  82. package/dist/protocols/substreams/scaffold/manifest.js +12 -0
  83. package/dist/protocols/substreams/subgraph.js +23 -0
  84. package/dist/scaffold/cosmos.test.js +83 -0
  85. package/dist/scaffold/ethereum.test.js +505 -0
  86. package/dist/scaffold/index.js +128 -0
  87. package/dist/scaffold/mapping.js +61 -0
  88. package/dist/scaffold/near.test.js +86 -0
  89. package/dist/scaffold/schema.js +83 -0
  90. package/dist/scaffold/tests.js +175 -0
  91. package/dist/schema.js +54 -0
  92. package/dist/subgraph.js +249 -0
  93. package/dist/type-generator.js +224 -0
  94. package/dist/validation/contract.js +46 -0
  95. package/dist/validation/index.js +8 -0
  96. package/dist/validation/manifest.js +271 -0
  97. package/dist/validation/schema.js +796 -0
  98. package/dist/validation/schema.test.js +35 -0
  99. package/dist/watcher.js +79 -0
  100. package/jest.config.js +1 -1
  101. package/package.json +16 -9
  102. package/{bin/graph → src/bin.ts} +2 -1
  103. package/src/cli.ts +36 -0
  104. package/src/codegen/schema.js +23 -22
  105. package/src/codegen/schema.test.js +33 -27
  106. package/src/codegen/{template.js → template.ts} +8 -6
  107. package/src/codegen/types/conversions.ts +382 -0
  108. package/src/codegen/types/index.js +4 -7
  109. package/src/codegen/types/index.test.js +10 -4
  110. package/src/codegen/{typescript.js → typescript.ts} +44 -26
  111. package/src/codegen/util.js +1 -1
  112. package/src/codegen/util.test.js +5 -2
  113. package/src/command-helpers/abi.js +46 -30
  114. package/src/command-helpers/auth.js +6 -9
  115. package/src/command-helpers/compiler.js +4 -6
  116. package/src/command-helpers/data-sources.js +8 -11
  117. package/src/command-helpers/fs.ts +5 -0
  118. package/src/command-helpers/gluegun.js +2 -4
  119. package/src/command-helpers/ipfs.ts +3 -0
  120. package/src/command-helpers/{jsonrpc.js → jsonrpc.ts} +11 -16
  121. package/src/command-helpers/network.js +58 -44
  122. package/src/command-helpers/network.test.js +23 -19
  123. package/src/command-helpers/node.js +3 -7
  124. package/src/command-helpers/scaffold.js +34 -25
  125. package/src/command-helpers/{spinner.js → spinner.ts} +10 -10
  126. package/src/command-helpers/studio.test.js +61 -30
  127. package/src/command-helpers/studio.ts +20 -0
  128. package/src/command-helpers/{subgraph.js → subgraph.ts} +6 -6
  129. package/src/command-helpers/version.js +11 -16
  130. package/src/command-helpers/version.test.js +111 -82
  131. package/src/commands/add.js +49 -35
  132. package/src/commands/auth.js +13 -25
  133. package/src/commands/build.js +9 -9
  134. package/src/commands/codegen.js +12 -12
  135. package/src/commands/create.js +22 -22
  136. package/src/commands/deploy.js +39 -34
  137. package/src/commands/init.js +21 -24
  138. package/src/commands/local.js +15 -14
  139. package/src/commands/remove.js +22 -22
  140. package/src/commands/test.js +86 -70
  141. package/src/compiler/{asc.js → asc.ts} +29 -16
  142. package/src/compiler/index.js +18 -18
  143. package/src/{debug.js → debug.ts} +2 -2
  144. package/src/migrations/mapping_api_version_0_0_1.js +7 -7
  145. package/src/migrations/mapping_api_version_0_0_2.js +5 -5
  146. package/src/migrations/mapping_api_version_0_0_3.js +7 -7
  147. package/src/migrations/mapping_api_version_0_0_4.js +7 -7
  148. package/src/migrations/mapping_api_version_0_0_5.js +7 -7
  149. package/src/migrations/spec_version_0_0_2.js +5 -5
  150. package/src/migrations/spec_version_0_0_3.js +5 -5
  151. package/src/migrations/util/load-manifest.js +6 -9
  152. package/src/migrations/util/versions.js +5 -10
  153. package/src/{migrations.js → migrations.ts} +14 -15
  154. package/src/protocols/arweave/scaffold/manifest.js +1 -4
  155. package/src/protocols/arweave/scaffold/mapping.js +1 -3
  156. package/src/protocols/arweave/subgraph.ts +22 -0
  157. package/src/protocols/cosmos/scaffold/manifest.js +1 -4
  158. package/src/protocols/cosmos/scaffold/mapping.js +1 -3
  159. package/src/protocols/cosmos/subgraph.js +2 -2
  160. package/src/protocols/ethereum/abi.js +7 -13
  161. package/src/protocols/ethereum/codegen/abi.js +219 -222
  162. package/src/protocols/ethereum/codegen/abi.test.js +6 -6
  163. package/src/protocols/ethereum/codegen/template.js +3 -5
  164. package/src/protocols/ethereum/contract.js +3 -2
  165. package/src/protocols/ethereum/scaffold/manifest.js +4 -7
  166. package/src/protocols/ethereum/scaffold/mapping.js +4 -11
  167. package/src/protocols/ethereum/subgraph.js +21 -20
  168. package/src/protocols/ethereum/type-generator.js +24 -30
  169. package/src/protocols/{index.js → index.ts} +65 -46
  170. package/src/protocols/ipfs/codegen/file_template.js +2 -2
  171. package/src/protocols/near/{contract.js → contract.ts} +16 -12
  172. package/src/protocols/near/scaffold/manifest.js +2 -5
  173. package/src/protocols/near/scaffold/mapping.js +1 -3
  174. package/src/protocols/near/subgraph.js +3 -6
  175. package/src/protocols/subgraph.ts +12 -0
  176. package/src/protocols/substreams/scaffold/{manifest.js → manifest.ts} +2 -7
  177. package/src/protocols/substreams/subgraph.ts +22 -0
  178. package/src/scaffold/cosmos.test.js +3 -3
  179. package/src/scaffold/ethereum.test.js +4 -4
  180. package/src/scaffold/index.js +7 -7
  181. package/src/scaffold/mapping.js +3 -3
  182. package/src/scaffold/near.test.js +3 -3
  183. package/src/scaffold/schema.js +4 -4
  184. package/src/scaffold/tests.js +72 -58
  185. package/src/schema.ts +26 -0
  186. package/src/{subgraph.js → subgraph.ts} +80 -60
  187. package/src/type-generator.js +20 -20
  188. package/src/validation/contract.js +2 -6
  189. package/src/validation/index.js +1 -1
  190. package/src/validation/manifest.js +24 -22
  191. package/src/validation/schema.test.js +1 -1
  192. package/src/validation/{schema.js → schema.ts} +268 -221
  193. package/src/{watcher.js → watcher.ts} +23 -12
  194. package/tests/cli/globalSetup.js +2 -2
  195. package/tests/cli/globalTeardown.js +2 -2
  196. package/tests/cli/init.test.js +2 -2
  197. package/tests/cli/util.js +7 -13
  198. package/tsconfig.json +18 -0
  199. package/src/cli.js +0 -38
  200. package/src/codegen/types/conversions.js +0 -329
  201. package/src/command-helpers/fs.js +0 -8
  202. package/src/command-helpers/ipfs.js +0 -6
  203. package/src/command-helpers/studio.js +0 -15
  204. package/src/protocols/arweave/subgraph.js +0 -20
  205. package/src/protocols/substreams/subgraph.js +0 -17
  206. package/src/schema.js +0 -23
@@ -0,0 +1,64 @@
1
+ # Each referenced type's in any of the types below must be listed
2
+ # here either as `scalar` or `type` for the validation code to work
3
+ # properly.
4
+ #
5
+ # That's why `String` is listed as a scalar even though it's built-in
6
+ # GraphQL basic types.
7
+ scalar String
8
+ scalar File
9
+ scalar BigInt
10
+
11
+ type SubgraphManifest {
12
+ specVersion: String!
13
+ features: [String!]
14
+ schema: Schema!
15
+ description: String
16
+ repository: String
17
+ graft: Graft
18
+ dataSources: [DataSource!]!
19
+ }
20
+
21
+ type Schema {
22
+ file: File!
23
+ }
24
+
25
+ type DataSource {
26
+ kind: String!
27
+ name: String!
28
+ network: String
29
+ source: ContractSource!
30
+ mapping: ContractMapping!
31
+ }
32
+
33
+ type ContractSource {
34
+ account: String
35
+ startBlock: BigInt
36
+ accounts: PartialAccount
37
+ }
38
+
39
+ type PartialAccount {
40
+ prefixes: [String!]
41
+ suffixes: [String!]
42
+ }
43
+
44
+ type ContractMapping {
45
+ apiVersion: String!
46
+ language: String!
47
+ file: File!
48
+ entities: [String!]!
49
+ blockHandlers: [BlockHandler!]
50
+ receiptHandlers: [ReceiptHandler!]
51
+ }
52
+
53
+ type BlockHandler {
54
+ handler: String!
55
+ }
56
+
57
+ type ReceiptHandler {
58
+ handler: String!
59
+ }
60
+
61
+ type Graft {
62
+ base: String!
63
+ block: BigInt!
64
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapping = exports.source = void 0;
4
+ const gluegun_1 = require("gluegun");
5
+ const source = ({ contract }) => `
6
+ account: '${contract}'`;
7
+ exports.source = source;
8
+ const mapping = ({ contractName }) => `
9
+ apiVersion: 0.0.5
10
+ language: wasm/assemblyscript
11
+ entities:
12
+ - ExampleEntity
13
+ receiptHandlers:
14
+ - handler: handleReceipt
15
+ file: ./src/${gluegun_1.strings.kebabCase(contractName)}.ts`;
16
+ exports.mapping = mapping;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatePlaceholderHandlers = void 0;
4
+ const generatePlaceholderHandlers = () => `
5
+ import { near, BigInt } from '@graphprotocol/graph-ts'
6
+ import { ExampleEntity } from '../generated/schema'
7
+
8
+ export function handleReceipt(receiptWithOutcome: near.ReceiptWithOutcome): void {
9
+ // Entities can be loaded from the store using a string ID; this ID
10
+ // needs to be unique across all entities of the same type
11
+ let entity = ExampleEntity.load(receiptWithOutcome.receipt.id.toHex())
12
+
13
+ // Entities only exist after they have been saved to the store;
14
+ // \`null\` checks allow to create entities on demand
15
+ if (!entity) {
16
+ entity = new ExampleEntity(receiptWithOutcome.receipt.id.toHex())
17
+
18
+ // Entity fields can be set using simple assignments
19
+ entity.count = BigInt.fromI32(0)
20
+ }
21
+
22
+ // BigInt and BigDecimal math are supported
23
+ entity.count = entity.count + BigInt.fromI32(1)
24
+
25
+ // Entity fields can be set based on receipt information
26
+ entity.block = receiptWithOutcome.block.header.hash
27
+
28
+ // Entities can be written to the store with \`.save()\`
29
+ entity.save()
30
+
31
+ // Note: If a handler doesn't require existing field values, it is faster
32
+ // _not_ to load the entity from the store. Instead, create it fresh with
33
+ // \`new Entity(...)\`, set the fields that should be updated and save the
34
+ // entity back to the store. Fields that were not set or unset remain
35
+ // unchanged, allowing for partial updates to be applied.
36
+ }
37
+ `;
38
+ exports.generatePlaceholderHandlers = generatePlaceholderHandlers;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const immutable_1 = __importDefault(require("immutable"));
7
+ class NearSubgraph {
8
+ constructor(options = {}) {
9
+ this.manifest = options.manifest;
10
+ this.resolveFile = options.resolveFile;
11
+ this.protocol = options.protocol;
12
+ }
13
+ validateManifest() {
14
+ return immutable_1.default.List();
15
+ }
16
+ handlerTypes() {
17
+ return immutable_1.default.List(['blockHandlers', 'receiptHandlers']);
18
+ }
19
+ }
20
+ exports.default = NearSubgraph;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,45 @@
1
+ # Each referenced type's in any of the types below must be listed
2
+ # here either as `scalar` or `type` for the validation code to work
3
+ # properly.
4
+ #
5
+ # That's why `String` is listed as a scalar even though it's built-in
6
+ # GraphQL basic types.
7
+ scalar String
8
+ scalar File
9
+ scalar BigInt
10
+
11
+ type SubgraphManifest {
12
+ specVersion: String!
13
+ features: [String!]
14
+ schema: Schema!
15
+ description: String
16
+ repository: String
17
+ graft: Graft
18
+ dataSources: [DataSource!]!
19
+ }
20
+
21
+ type Schema {
22
+ file: File!
23
+ }
24
+
25
+ type DataSource {
26
+ kind: String!
27
+ name: String!
28
+ network: String
29
+ source: SubstreamsSource!
30
+ mapping: SubstreamMapping!
31
+ }
32
+
33
+ type SubstreamsSource {
34
+ package: SubstreamsPackage!
35
+ }
36
+
37
+ type SubstreamsPackage {
38
+ moduleName: String!
39
+ file: String!
40
+ }
41
+
42
+ type SubstreamMapping {
43
+ apiVersion: String!
44
+ kind: String!
45
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapping = exports.source = void 0;
4
+ const source = () => `
5
+ package:
6
+ moduleName: graph_out
7
+ file: substreams-eth-block-meta-v0.1.0.spkg`;
8
+ exports.source = source;
9
+ const mapping = () => `
10
+ apiVersion: 0.0.5
11
+ kind: substreams/graph-entities`;
12
+ exports.mapping = mapping;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const immutable_1 = __importDefault(require("immutable"));
7
+ class SubstreamsSubgraph {
8
+ manifest;
9
+ resolveFile;
10
+ protocol;
11
+ constructor(options = {}) {
12
+ this.manifest = options.manifest;
13
+ this.resolveFile = options.resolveFile;
14
+ this.protocol = options.protocol;
15
+ }
16
+ validateManifest() {
17
+ return immutable_1.default.List();
18
+ }
19
+ handlerTypes() {
20
+ return immutable_1.default.List([]);
21
+ }
22
+ }
23
+ exports.default = SubstreamsSubgraph;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const immutable_1 = __importDefault(require("immutable"));
7
+ const _1 = __importDefault(require("./"));
8
+ const protocols_1 = __importDefault(require("../protocols"));
9
+ const protocol = new protocols_1.default('cosmos');
10
+ const scaffoldOptions = {
11
+ protocol,
12
+ network: 'cosmoshub-4',
13
+ contractName: 'CosmosHub',
14
+ };
15
+ const scaffold = new _1.default(scaffoldOptions);
16
+ describe('Cosmos subgraph scaffolding', () => {
17
+ test('Manifest', () => {
18
+ expect(scaffold.generateManifest()).toEqual(`\
19
+ specVersion: 0.0.5
20
+ schema:
21
+ file: ./schema.graphql
22
+ dataSources:
23
+ - kind: cosmos
24
+ name: CosmosHub
25
+ network: cosmoshub-4
26
+ source:
27
+ startBlock: 0
28
+ mapping:
29
+ apiVersion: 0.0.5
30
+ language: wasm/assemblyscript
31
+ entities:
32
+ - ExampleEntity
33
+ blockHandlers:
34
+ - handler: handleBlock
35
+ file: ./src/contract.ts
36
+ `);
37
+ });
38
+ test('Schema (default)', () => {
39
+ expect(scaffold.generateSchema()).toEqual(`\
40
+ type ExampleEntity @entity {
41
+ id: ID!
42
+ block: Bytes!
43
+ count: BigInt!
44
+ }
45
+ `);
46
+ });
47
+ test('Mapping (default)', () => {
48
+ expect(scaffold.generateMapping()).toEqual(`\
49
+ import { cosmos, BigInt } from "@graphprotocol/graph-ts"
50
+ import { ExampleEntity } from "../generated/schema"
51
+
52
+ export function handleBlock(block: cosmos.Block): void {
53
+ // Entities can be loaded from the store using a string ID; this ID
54
+ // needs to be unique across all entities of the same type
55
+ let entity = ExampleEntity.load(block.header.hash.toHex())
56
+
57
+ // Entities only exist after they have been saved to the store;
58
+ // \`null\` checks allow to create entities on demand
59
+ if (!entity) {
60
+ entity = new ExampleEntity(block.header.hash.toHex())
61
+
62
+ // Entity fields can be set using simple assignments
63
+ entity.count = BigInt.fromI32(0)
64
+ }
65
+
66
+ // BigInt and BigDecimal math are supported
67
+ entity.count = entity.count + BigInt.fromI32(1)
68
+
69
+ // Entity fields can be set based on receipt information
70
+ entity.height = block.header.height
71
+
72
+ // Entities can be written to the store with \`.save()\`
73
+ entity.save()
74
+
75
+ // Note: If a handler doesn't require existing field values, it is faster
76
+ // _not_ to load the entity from the store. Instead, create it fresh with
77
+ // \`new Entity(...)\`, set the fields that should be updated and save the
78
+ // entity back to the store. Fields that were not set or unset remain
79
+ // unchanged, allowing for partial updates to be applied.
80
+ }
81
+ `);
82
+ });
83
+ });