@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.
- package/CHANGELOG.md +8 -0
- package/package.json +5 -1
- package/babel.config.js +0 -3
- package/jest.config.js +0 -175
- package/src/bin.ts +0 -6
- package/src/cli.ts +0 -30
- package/src/codegen/schema.test.ts +0 -460
- package/src/codegen/schema.ts +0 -299
- package/src/codegen/template.ts +0 -45
- package/src/codegen/types/conversions.ts +0 -358
- package/src/codegen/types/index.test.ts +0 -715
- package/src/codegen/types/index.ts +0 -111
- package/src/codegen/typescript.ts +0 -224
- package/src/codegen/util.test.ts +0 -112
- package/src/codegen/util.ts +0 -54
- package/src/command-helpers/abi.ts +0 -99
- package/src/command-helpers/auth.ts +0 -46
- package/src/command-helpers/compiler.ts +0 -60
- package/src/command-helpers/data-sources.ts +0 -36
- package/src/command-helpers/fs.ts +0 -5
- package/src/command-helpers/gluegun.ts +0 -52
- package/src/command-helpers/ipfs-http-client.d.ts +0 -1
- package/src/command-helpers/ipfs.ts +0 -3
- package/src/command-helpers/jsonrpc.ts +0 -22
- package/src/command-helpers/network.test.ts +0 -85
- package/src/command-helpers/network.ts +0 -133
- package/src/command-helpers/node.ts +0 -46
- package/src/command-helpers/scaffold.ts +0 -174
- package/src/command-helpers/spinner.ts +0 -60
- package/src/command-helpers/studio.test.ts +0 -84
- package/src/command-helpers/studio.ts +0 -25
- package/src/command-helpers/subgraph.ts +0 -21
- package/src/command-helpers/version.test.ts +0 -241
- package/src/command-helpers/version.ts +0 -53
- package/src/commands/add.ts +0 -220
- package/src/commands/auth.ts +0 -138
- package/src/commands/binary-install-raw.d.ts +0 -1
- package/src/commands/build.ts +0 -147
- package/src/commands/codegen.ts +0 -123
- package/src/commands/create.ts +0 -109
- package/src/commands/deploy.ts +0 -388
- package/src/commands/init.ts +0 -1060
- package/src/commands/local.ts +0 -539
- package/src/commands/remove.ts +0 -110
- package/src/commands/test.ts +0 -369
- package/src/compiler/asc.ts +0 -77
- package/src/compiler/index.ts +0 -677
- package/src/debug.ts +0 -15
- package/src/migrations/mapping_api_version_0_0_1.ts +0 -75
- package/src/migrations/mapping_api_version_0_0_2.ts +0 -75
- package/src/migrations/mapping_api_version_0_0_3.ts +0 -75
- package/src/migrations/mapping_api_version_0_0_4.ts +0 -77
- package/src/migrations/mapping_api_version_0_0_5.ts +0 -77
- package/src/migrations/spec_version_0_0_2.ts +0 -24
- package/src/migrations/spec_version_0_0_3.ts +0 -29
- package/src/migrations/util/load-manifest.ts +0 -10
- package/src/migrations/util/versions.ts +0 -27
- package/src/migrations.ts +0 -33
- package/src/protocols/arweave/manifest.graphql +0 -57
- package/src/protocols/arweave/scaffold/manifest.ts +0 -14
- package/src/protocols/arweave/scaffold/mapping.ts +0 -49
- package/src/protocols/arweave/subgraph.ts +0 -22
- package/src/protocols/contract.ts +0 -9
- package/src/protocols/cosmos/manifest.graphql +0 -76
- package/src/protocols/cosmos/scaffold/manifest.ts +0 -11
- package/src/protocols/cosmos/scaffold/mapping.ts +0 -35
- package/src/protocols/cosmos/subgraph.ts +0 -27
- package/src/protocols/ethereum/abi.ts +0 -153
- package/src/protocols/ethereum/codegen/abi.test.ts +0 -330
- package/src/protocols/ethereum/codegen/abi.ts +0 -719
- package/src/protocols/ethereum/codegen/template.ts +0 -41
- package/src/protocols/ethereum/contract.ts +0 -24
- package/src/protocols/ethereum/manifest.graphql +0 -94
- package/src/protocols/ethereum/scaffold/manifest.ts +0 -28
- package/src/protocols/ethereum/scaffold/mapping.ts +0 -76
- package/src/protocols/ethereum/subgraph.ts +0 -189
- package/src/protocols/ethereum/type-generator.ts +0 -191
- package/src/protocols/index.ts +0 -287
- package/src/protocols/ipfs/codegen/file_template.ts +0 -43
- package/src/protocols/near/contract.ts +0 -47
- package/src/protocols/near/manifest.graphql +0 -64
- package/src/protocols/near/scaffold/manifest.ts +0 -13
- package/src/protocols/near/scaffold/mapping.ts +0 -35
- package/src/protocols/near/subgraph.ts +0 -22
- package/src/protocols/subgraph.ts +0 -12
- package/src/protocols/substreams/manifest.graphql +0 -45
- package/src/protocols/substreams/scaffold/manifest.ts +0 -8
- package/src/protocols/substreams/subgraph.ts +0 -22
- package/src/scaffold/cosmos.test.ts +0 -83
- package/src/scaffold/ethereum.test.ts +0 -512
- package/src/scaffold/index.ts +0 -172
- package/src/scaffold/mapping.ts +0 -44
- package/src/scaffold/near.test.ts +0 -86
- package/src/scaffold/schema.ts +0 -89
- package/src/scaffold/tests.ts +0 -217
- package/src/schema.ts +0 -26
- package/src/subgraph.ts +0 -302
- package/src/type-generator.ts +0 -266
- package/src/validation/contract.ts +0 -51
- package/src/validation/index.ts +0 -5
- package/src/validation/manifest.ts +0 -360
- package/src/validation/schema.test.ts +0 -38
- package/src/validation/schema.ts +0 -957
- package/src/watcher.ts +0 -96
- package/tests/cli/globalSetup.ts +0 -8
- package/tests/cli/globalTeardown.ts +0 -8
- package/tests/cli/init/ethereum/abis/Marketplace.json +0 -408
- package/tests/cli/init/ethereum/abis/OverloadedElements.json +0 -91
- package/tests/cli/init/ethereum/abis/SoloMargin.json +0 -2729
- package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stderr +0 -14
- package/tests/cli/init/ethereum/from-contract-with-abi-and-structs.stdout +0 -12
- package/tests/cli/init/ethereum/from-contract-with-abi.stderr +0 -14
- package/tests/cli/init/ethereum/from-contract-with-abi.stdout +0 -12
- package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stderr +0 -14
- package/tests/cli/init/ethereum/from-contract-with-overloaded-elements.stdout +0 -12
- package/tests/cli/init/ethereum/from-contract.stderr +0 -16
- package/tests/cli/init/ethereum/from-contract.stdout +0 -12
- package/tests/cli/init/ethereum/from-example.stderr +0 -12
- package/tests/cli/init/ethereum/from-example.stdout +0 -12
- package/tests/cli/init/near/from-contract.stderr +0 -14
- package/tests/cli/init/near/from-contract.stdout +0 -12
- package/tests/cli/init.test.ts +0 -157
- package/tests/cli/spawn-command.d.ts +0 -7
- package/tests/cli/util.ts +0 -132
- package/tests/cli/validation/abi-not-found/Abi.json +0 -7
- package/tests/cli/validation/abi-not-found/mapping.ts +0 -0
- package/tests/cli/validation/abi-not-found/schema.graphql +0 -3
- package/tests/cli/validation/abi-not-found/subgraph.yaml +0 -42
- package/tests/cli/validation/abi-not-found copy.stderr +0 -13
- package/tests/cli/validation/big-decimal-is-valid/Abi.json +0 -7
- package/tests/cli/validation/big-decimal-is-valid/mapping.ts +0 -0
- package/tests/cli/validation/big-decimal-is-valid/schema.graphql +0 -4
- package/tests/cli/validation/big-decimal-is-valid/subgraph.yaml +0 -23
- package/tests/cli/validation/call-function-not-found/Abi.json +0 -57
- package/tests/cli/validation/call-function-not-found/mapping.ts +0 -0
- package/tests/cli/validation/call-function-not-found/schema.graphql +0 -3
- package/tests/cli/validation/call-function-not-found/subgraph.yaml +0 -22
- package/tests/cli/validation/call-function-not-found.stderr +0 -10
- package/tests/cli/validation/call-handler-with-tuple/Abi.json +0 -24
- package/tests/cli/validation/call-handler-with-tuple/generated/schema.ts +0 -44
- package/tests/cli/validation/call-handler-with-tuple/mapping.ts +0 -0
- package/tests/cli/validation/call-handler-with-tuple/schema.graphql +0 -3
- package/tests/cli/validation/call-handler-with-tuple/subgraph.yaml +0 -22
- package/tests/cli/validation/call-handler-with-tuple.stderr +0 -24
- package/tests/cli/validation/conflicting-network-names/Abi.json +0 -7
- package/tests/cli/validation/conflicting-network-names/mapping.ts +0 -0
- package/tests/cli/validation/conflicting-network-names/schema.graphql +0 -3
- package/tests/cli/validation/conflicting-network-names/subgraph.yaml +0 -41
- package/tests/cli/validation/conflicting-network-names.stderr +0 -10
- package/tests/cli/validation/conflicting-protocol-names/Abi.json +0 -7
- package/tests/cli/validation/conflicting-protocol-names/mapping.ts +0 -0
- package/tests/cli/validation/conflicting-protocol-names/schema.graphql +0 -3
- package/tests/cli/validation/conflicting-protocol-names/subgraph.yaml +0 -41
- package/tests/cli/validation/conflicting-protocol-names.stderr +0 -10
- package/tests/cli/validation/derived-from-target-type-missing/Abi.json +0 -6
- package/tests/cli/validation/derived-from-target-type-missing/mapping.ts +0 -0
- package/tests/cli/validation/derived-from-target-type-missing/schema.graphql +0 -4
- package/tests/cli/validation/derived-from-target-type-missing/subgraph.yaml +0 -22
- package/tests/cli/validation/derived-from-target-type-missing.stderr +0 -5
- package/tests/cli/validation/derived-from-with-interface/Gravity.json +0 -1
- package/tests/cli/validation/derived-from-with-interface/mapping.ts +0 -22
- package/tests/cli/validation/derived-from-with-interface/schema.graphql +0 -19
- package/tests/cli/validation/derived-from-with-interface/subgraph.yaml +0 -25
- package/tests/cli/validation/duplicate-data-source-name/Abi.json +0 -7
- package/tests/cli/validation/duplicate-data-source-name/mapping.ts +0 -0
- package/tests/cli/validation/duplicate-data-source-name/schema.graphql +0 -4
- package/tests/cli/validation/duplicate-data-source-name/subgraph.yaml +0 -40
- package/tests/cli/validation/duplicate-data-source-name.stderr +0 -5
- package/tests/cli/validation/duplicate-template-name/Abi.json +0 -7
- package/tests/cli/validation/duplicate-template-name/mapping.ts +0 -0
- package/tests/cli/validation/duplicate-template-name/schema.graphql +0 -4
- package/tests/cli/validation/duplicate-template-name/subgraph.yaml +0 -59
- package/tests/cli/validation/duplicate-template-name.stderr +0 -5
- package/tests/cli/validation/entity-field-args/Abi.json +0 -7
- package/tests/cli/validation/entity-field-args/mapping.ts +0 -0
- package/tests/cli/validation/entity-field-args/schema.graphql +0 -4
- package/tests/cli/validation/entity-field-args/subgraph.yaml +0 -22
- package/tests/cli/validation/entity-field-args.stderr +0 -5
- package/tests/cli/validation/ethereum-contract-without-handlers/Abi.json +0 -7
- package/tests/cli/validation/ethereum-contract-without-handlers/mapping.ts +0 -0
- package/tests/cli/validation/ethereum-contract-without-handlers/schema.graphql +0 -3
- package/tests/cli/validation/ethereum-contract-without-handlers/subgraph.yaml +0 -19
- package/tests/cli/validation/ethereum-contract-without-handlers.stderr +0 -6
- package/tests/cli/validation/event-not-found/Abi.json +0 -7
- package/tests/cli/validation/event-not-found/mapping.ts +0 -0
- package/tests/cli/validation/event-not-found/schema.graphql +0 -3
- package/tests/cli/validation/event-not-found/subgraph.yaml +0 -40
- package/tests/cli/validation/event-not-found.stderr +0 -12
- package/tests/cli/validation/example-values-found/Abi.json +0 -7
- package/tests/cli/validation/example-values-found/generated/ExampleSubgraph/ExampleContract.ts +0 -35
- package/tests/cli/validation/example-values-found/generated/schema.ts +0 -44
- package/tests/cli/validation/example-values-found/mapping.ts +0 -0
- package/tests/cli/validation/example-values-found/schema.graphql +0 -3
- package/tests/cli/validation/example-values-found/subgraph.yaml +0 -24
- package/tests/cli/validation/example-values-found.stderr +0 -34
- package/tests/cli/validation/invalid-abis/InvalidAbi.json +0 -1
- package/tests/cli/validation/invalid-abis/mapping.ts +0 -0
- package/tests/cli/validation/invalid-abis/schema.graphql +0 -3
- package/tests/cli/validation/invalid-abis/subgraph.yaml +0 -22
- package/tests/cli/validation/invalid-abis.stderr +0 -5
- package/tests/cli/validation/invalid-contract-addresses/Abi.json +0 -7
- package/tests/cli/validation/invalid-contract-addresses/mapping.ts +0 -0
- package/tests/cli/validation/invalid-contract-addresses/schema.graphql +0 -3
- package/tests/cli/validation/invalid-contract-addresses/subgraph.yaml +0 -58
- package/tests/cli/validation/invalid-contract-addresses.stderr +0 -14
- package/tests/cli/validation/invalid-data-source-template/mapping.ts +0 -0
- package/tests/cli/validation/invalid-data-source-template/schema.graphql +0 -3
- package/tests/cli/validation/invalid-data-source-template/subgraph.yaml +0 -32
- package/tests/cli/validation/invalid-data-source-template.stderr +0 -30
- package/tests/cli/validation/invalid-entity-field-types/Abi.json +0 -7
- package/tests/cli/validation/invalid-entity-field-types/mapping.ts +0 -0
- package/tests/cli/validation/invalid-entity-field-types/schema.graphql +0 -157
- package/tests/cli/validation/invalid-entity-field-types/subgraph.yaml +0 -22
- package/tests/cli/validation/invalid-entity-field-types.stderr +0 -148
- package/tests/cli/validation/invalid-fulltext-directive/Abi.json +0 -7
- package/tests/cli/validation/invalid-fulltext-directive/mapping.ts +0 -0
- package/tests/cli/validation/invalid-fulltext-directive/schema.graphql +0 -140
- package/tests/cli/validation/invalid-fulltext-directive/subgraph.yaml +0 -22
- package/tests/cli/validation/invalid-fulltext-directive.stderr +0 -32
- package/tests/cli/validation/invalid-graphql-schema/Abi.json +0 -7
- package/tests/cli/validation/invalid-graphql-schema/mapping.ts +0 -0
- package/tests/cli/validation/invalid-graphql-schema/schema.graphql +0 -8
- package/tests/cli/validation/invalid-graphql-schema/subgraph.yaml +0 -22
- package/tests/cli/validation/invalid-graphql-schema.stderr +0 -25
- package/tests/cli/validation/invalid-manifest/subgraph.yaml +0 -13
- package/tests/cli/validation/invalid-manifest-cannot-infer-protocol/subgraph.yaml +0 -12
- package/tests/cli/validation/invalid-manifest-cannot-infer-protocol.stderr +0 -5
- package/tests/cli/validation/invalid-manifest.stderr +0 -28
- package/tests/cli/validation/missing-entity-id/Abi.json +0 -7
- package/tests/cli/validation/missing-entity-id/mapping.ts +0 -0
- package/tests/cli/validation/missing-entity-id/schema.graphql +0 -3
- package/tests/cli/validation/missing-entity-id/subgraph.yaml +0 -22
- package/tests/cli/validation/missing-entity-id/types/ExampleSubgraph/ExampleContract.ts +0 -35
- package/tests/cli/validation/missing-entity-id/types/schema.ts +0 -27
- package/tests/cli/validation/missing-entity-id.stderr +0 -5
- package/tests/cli/validation/missing-or-invalid-derived-from-fields/Abi.json +0 -7
- package/tests/cli/validation/missing-or-invalid-derived-from-fields/mapping.ts +0 -0
- package/tests/cli/validation/missing-or-invalid-derived-from-fields/schema.graphql +0 -40
- package/tests/cli/validation/missing-or-invalid-derived-from-fields/subgraph.yaml +0 -22
- package/tests/cli/validation/missing-or-invalid-derived-from-fields.stderr +0 -10
- package/tests/cli/validation/missing-or-invalid-derived-from-fields.stdout +0 -0
- package/tests/cli/validation/near-is-valid/mapping.ts +0 -0
- package/tests/cli/validation/near-is-valid/schema.graphql +0 -8
- package/tests/cli/validation/near-is-valid/subgraph.yaml +0 -30
- package/tests/cli/validation/nested-template-nice-error/Abi.json +0 -7
- package/tests/cli/validation/nested-template-nice-error/mapping.ts +0 -0
- package/tests/cli/validation/nested-template-nice-error/schema.graphql +0 -3
- package/tests/cli/validation/nested-template-nice-error/subgraph.yaml +0 -35
- package/tests/cli/validation/nested-template-nice-error.stderr +0 -5
- package/tests/cli/validation/no-network-names/Abi.json +0 -7
- package/tests/cli/validation/no-network-names/mapping.ts +0 -0
- package/tests/cli/validation/no-network-names/schema.graphql +0 -3
- package/tests/cli/validation/no-network-names/subgraph.yaml +0 -40
- package/tests/cli/validation/no-network-names.stderr +0 -34
- package/tests/cli/validation/source-without-address-is-valid/Abi.json +0 -7
- package/tests/cli/validation/source-without-address-is-valid/generated/ExampleSubgraph/ExampleContract.ts +0 -35
- package/tests/cli/validation/source-without-address-is-valid/mapping.ts +0 -0
- package/tests/cli/validation/source-without-address-is-valid/schema.graphql +0 -3
- package/tests/cli/validation/source-without-address-is-valid/subgraph.yaml +0 -23
- package/tests/cli/validation/source-without-address-is-valid.stderr +0 -24
- package/tests/cli/validation/topic0-is-valid/Abi.json +0 -7
- package/tests/cli/validation/topic0-is-valid/mapping.ts +0 -0
- package/tests/cli/validation/topic0-is-valid/schema.graphql +0 -4
- package/tests/cli/validation/topic0-is-valid/subgraph.yaml +0 -24
- package/tests/cli/validation.test.ts +0 -226
- package/tsconfig.build.json +0 -4
- package/tsconfig.json +0 -19
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import immutable from 'immutable';
|
|
2
|
-
import * as tsCodegen from '../../../codegen/typescript';
|
|
3
|
-
|
|
4
|
-
export default class EthereumTemplateCodeGen {
|
|
5
|
-
constructor(public template: immutable.Map<any, any>) {
|
|
6
|
-
this.template = template;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
generateModuleImports() {
|
|
10
|
-
return ['Address'];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
generateCreateMethod() {
|
|
14
|
-
const name = this.template.get('name');
|
|
15
|
-
|
|
16
|
-
return tsCodegen.staticMethod(
|
|
17
|
-
'create',
|
|
18
|
-
[tsCodegen.param('address', tsCodegen.namedType('Address'))],
|
|
19
|
-
tsCodegen.namedType('void'),
|
|
20
|
-
`
|
|
21
|
-
DataSourceTemplate.create('${name}', [address.toHex()])
|
|
22
|
-
`,
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
generateCreateWithContextMethod() {
|
|
27
|
-
const name = this.template.get('name');
|
|
28
|
-
|
|
29
|
-
return tsCodegen.staticMethod(
|
|
30
|
-
'createWithContext',
|
|
31
|
-
[
|
|
32
|
-
tsCodegen.param('address', tsCodegen.namedType('Address')),
|
|
33
|
-
tsCodegen.param('context', tsCodegen.namedType('DataSourceContext')),
|
|
34
|
-
],
|
|
35
|
-
tsCodegen.namedType('void'),
|
|
36
|
-
`
|
|
37
|
-
DataSourceTemplate.createWithContext('${name}', [address.toHex()], context)
|
|
38
|
-
`,
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Contract } from '../contract';
|
|
2
|
-
|
|
3
|
-
export default class EthereumContract implements Contract {
|
|
4
|
-
static identifierName() {
|
|
5
|
-
return 'address';
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
constructor(private address: string) {
|
|
9
|
-
this.address = address;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
validate() {
|
|
13
|
-
const pattern = /^(0x)?[0-9a-fA-F]{40}$/;
|
|
14
|
-
|
|
15
|
-
const errorMessage = "Must be 40 hexadecimal characters, with an optional '0x' prefix.";
|
|
16
|
-
|
|
17
|
-
const valid = pattern.test(this.address);
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
valid,
|
|
21
|
-
error: valid ? null : errorMessage,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
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
|
-
scalar Boolean
|
|
11
|
-
|
|
12
|
-
type SubgraphManifest {
|
|
13
|
-
specVersion: String!
|
|
14
|
-
features: [String!]
|
|
15
|
-
schema: Schema!
|
|
16
|
-
description: String
|
|
17
|
-
repository: String
|
|
18
|
-
graft: Graft
|
|
19
|
-
dataSources: [DataSource!]!
|
|
20
|
-
templates: [DataSourceTemplate!]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
type Schema {
|
|
24
|
-
file: File!
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type DataSource {
|
|
28
|
-
kind: String!
|
|
29
|
-
name: String!
|
|
30
|
-
network: String
|
|
31
|
-
source: ContractSource!
|
|
32
|
-
mapping: ContractMapping!
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
type ContractSource {
|
|
36
|
-
address: String
|
|
37
|
-
abi: String!
|
|
38
|
-
startBlock: BigInt
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
type ContractMapping {
|
|
42
|
-
kind: String
|
|
43
|
-
apiVersion: String!
|
|
44
|
-
language: String!
|
|
45
|
-
file: File!
|
|
46
|
-
entities: [String!]!
|
|
47
|
-
abis: [ContractAbi!]!
|
|
48
|
-
blockHandlers: [BlockHandler!]
|
|
49
|
-
callHandlers: [CallHandler!]
|
|
50
|
-
eventHandlers: [ContractEventHandler!]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
type ContractAbi {
|
|
54
|
-
name: String!
|
|
55
|
-
file: File!
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
type BlockHandler {
|
|
59
|
-
handler: String!
|
|
60
|
-
filter: BlockFilter
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
type BlockFilter {
|
|
64
|
-
kind: String!
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
type CallHandler {
|
|
68
|
-
function: String!
|
|
69
|
-
handler: String!
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
type ContractEventHandler {
|
|
73
|
-
event: String!
|
|
74
|
-
topic0: String
|
|
75
|
-
handler: String!
|
|
76
|
-
receipt: Boolean
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
type Graft {
|
|
80
|
-
base: String!
|
|
81
|
-
block: BigInt!
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
type DataSourceTemplate {
|
|
85
|
-
kind: String!
|
|
86
|
-
name: String!
|
|
87
|
-
network: String
|
|
88
|
-
source: ContractSourceTemplate!
|
|
89
|
-
mapping: ContractMapping!
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
type ContractSourceTemplate {
|
|
93
|
-
abi: String!
|
|
94
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { strings } from 'gluegun';
|
|
2
|
-
import { abiEvents } from '../../../scaffold/schema';
|
|
3
|
-
import ABI from '../abi';
|
|
4
|
-
|
|
5
|
-
export const source = ({ contract, contractName }: { contract: string; contractName: string }) => `
|
|
6
|
-
address: '${contract}'
|
|
7
|
-
abi: ${contractName}`;
|
|
8
|
-
|
|
9
|
-
export const mapping = ({ abi, contractName }: { abi: ABI; contractName: string }) => `
|
|
10
|
-
kind: ethereum/events
|
|
11
|
-
apiVersion: 0.0.7
|
|
12
|
-
language: wasm/assemblyscript
|
|
13
|
-
entities:
|
|
14
|
-
${abiEvents(abi)
|
|
15
|
-
.map(event => `- ${event.get('_alias')}`)
|
|
16
|
-
.join('\n ')}
|
|
17
|
-
abis:
|
|
18
|
-
- name: ${contractName}
|
|
19
|
-
file: ./abis/${contractName}.json
|
|
20
|
-
eventHandlers:
|
|
21
|
-
${abiEvents(abi)
|
|
22
|
-
.map(
|
|
23
|
-
event => `
|
|
24
|
-
- event: ${ABI.eventSignature(event)}
|
|
25
|
-
handler: handle${event.get('_alias')}`,
|
|
26
|
-
)
|
|
27
|
-
.join('')}
|
|
28
|
-
file: ./src/${strings.kebabCase(contractName)}.ts`;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { generateEventFieldAssignments } from '../../../scaffold/mapping';
|
|
2
|
-
import ABI from '../abi';
|
|
3
|
-
|
|
4
|
-
export const generatePlaceholderHandlers = ({
|
|
5
|
-
abi,
|
|
6
|
-
events,
|
|
7
|
-
contractName,
|
|
8
|
-
}: {
|
|
9
|
-
abi: ABI;
|
|
10
|
-
events: any[];
|
|
11
|
-
contractName: string;
|
|
12
|
-
}) =>
|
|
13
|
-
`
|
|
14
|
-
import { BigInt } from '@graphprotocol/graph-ts'
|
|
15
|
-
import { ${contractName}, ${events.map(event => event._alias)} }
|
|
16
|
-
from '../generated/${contractName}/${contractName}'
|
|
17
|
-
import { ExampleEntity } from '../generated/schema'
|
|
18
|
-
|
|
19
|
-
${events
|
|
20
|
-
.map((event, index) =>
|
|
21
|
-
index === 0
|
|
22
|
-
? `
|
|
23
|
-
export function handle${event._alias}(event: ${event._alias}): void {
|
|
24
|
-
// Entities can be loaded from the store using a string ID; this ID
|
|
25
|
-
// needs to be unique across all entities of the same type
|
|
26
|
-
let entity = ExampleEntity.load(event.transaction.from)
|
|
27
|
-
|
|
28
|
-
// Entities only exist after they have been saved to the store;
|
|
29
|
-
// \`null\` checks allow to create entities on demand
|
|
30
|
-
if (!entity) {
|
|
31
|
-
entity = new ExampleEntity(event.transaction.from)
|
|
32
|
-
|
|
33
|
-
// Entity fields can be set using simple assignments
|
|
34
|
-
entity.count = BigInt.fromI32(0)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// BigInt and BigDecimal math are supported
|
|
38
|
-
entity.count = entity.count + BigInt.fromI32(1)
|
|
39
|
-
|
|
40
|
-
// Entity fields can be set based on event parameters
|
|
41
|
-
${generateEventFieldAssignments(event).slice(0, 2).join('\n')}
|
|
42
|
-
|
|
43
|
-
// Entities can be written to the store with \`.save()\`
|
|
44
|
-
entity.save()
|
|
45
|
-
|
|
46
|
-
// Note: If a handler doesn't require existing field values, it is faster
|
|
47
|
-
// _not_ to load the entity from the store. Instead, create it fresh with
|
|
48
|
-
// \`new Entity(...)\`, set the fields that should be updated and save the
|
|
49
|
-
// entity back to the store. Fields that were not set or unset remain
|
|
50
|
-
// unchanged, allowing for partial updates to be applied.
|
|
51
|
-
|
|
52
|
-
// It is also possible to access smart contracts from mappings. For
|
|
53
|
-
// example, the contract that has emitted the event can be connected to
|
|
54
|
-
// with:
|
|
55
|
-
//
|
|
56
|
-
// let contract = Contract.bind(event.address)
|
|
57
|
-
//
|
|
58
|
-
// The following functions can then be called on this contract to access
|
|
59
|
-
// state variables and other data:
|
|
60
|
-
//
|
|
61
|
-
// ${
|
|
62
|
-
abi.codeGenerator().callableFunctions().isEmpty()
|
|
63
|
-
? 'None'
|
|
64
|
-
: abi
|
|
65
|
-
.codeGenerator()
|
|
66
|
-
.callableFunctions()
|
|
67
|
-
.map((fn: any) => `- contract.${fn.get('name')}(...)`)
|
|
68
|
-
.join('\n// ')
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
`
|
|
72
|
-
: `
|
|
73
|
-
export function handle${event._alias}(event: ${event._alias}): void {}
|
|
74
|
-
`,
|
|
75
|
-
)
|
|
76
|
-
.join('\n')}`;
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
import immutable from 'immutable';
|
|
2
|
-
import * as DataSourcesExtractor from '../../command-helpers/data-sources';
|
|
3
|
-
import { Subgraph, SubgraphOptions } from '../subgraph';
|
|
4
|
-
import ABI from './abi';
|
|
5
|
-
|
|
6
|
-
export default class EthereumSubgraph implements Subgraph {
|
|
7
|
-
public manifest: SubgraphOptions['manifest'];
|
|
8
|
-
public resolveFile: SubgraphOptions['resolveFile'];
|
|
9
|
-
public protocol: SubgraphOptions['protocol'];
|
|
10
|
-
|
|
11
|
-
constructor(options: SubgraphOptions) {
|
|
12
|
-
this.manifest = options.manifest;
|
|
13
|
-
this.resolveFile = options.resolveFile;
|
|
14
|
-
this.protocol = options.protocol;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
validateManifest() {
|
|
18
|
-
return this.validateAbis().concat(this.validateEvents()).concat(this.validateCallFunctions());
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
validateAbis() {
|
|
22
|
-
const dataSourcesAndTemplates = DataSourcesExtractor.fromManifest(this.manifest, this.protocol);
|
|
23
|
-
|
|
24
|
-
return dataSourcesAndTemplates.reduce(
|
|
25
|
-
(errors: any[], dataSourceOrTemplate: any) =>
|
|
26
|
-
errors.concat(
|
|
27
|
-
this.validateDataSourceAbis(
|
|
28
|
-
dataSourceOrTemplate.get('dataSource'),
|
|
29
|
-
dataSourceOrTemplate.get('path'),
|
|
30
|
-
),
|
|
31
|
-
),
|
|
32
|
-
immutable.List(),
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
validateDataSourceAbis(dataSource: any, path: string) {
|
|
37
|
-
// Validate that the the "source > abi" reference of all data sources
|
|
38
|
-
// points to an existing ABI in the data source ABIs
|
|
39
|
-
const abiName = dataSource.getIn(['source', 'abi']);
|
|
40
|
-
const abiNames = dataSource.getIn(['mapping', 'abis']).map((abi: any) => abi.get('name'));
|
|
41
|
-
const nameErrors = abiNames.includes(abiName)
|
|
42
|
-
? immutable.List()
|
|
43
|
-
: immutable.fromJS([
|
|
44
|
-
{
|
|
45
|
-
path: [...path, 'source', 'abi'],
|
|
46
|
-
message: `\
|
|
47
|
-
ABI name '${abiName}' not found in mapping > abis.
|
|
48
|
-
Available ABIs:
|
|
49
|
-
${abiNames
|
|
50
|
-
.sort()
|
|
51
|
-
.map((name: string) => `- ${name}`)
|
|
52
|
-
.join('\n')}`,
|
|
53
|
-
},
|
|
54
|
-
]);
|
|
55
|
-
|
|
56
|
-
// Validate that all ABI files are valid
|
|
57
|
-
const fileErrors = dataSource
|
|
58
|
-
.getIn(['mapping', 'abis'])
|
|
59
|
-
.reduce((errors: any[], abi: any, abiIndex: number) => {
|
|
60
|
-
try {
|
|
61
|
-
ABI.load(abi.get('name'), this.resolveFile(abi.get('file')));
|
|
62
|
-
return errors;
|
|
63
|
-
} catch (e) {
|
|
64
|
-
return errors.push(
|
|
65
|
-
immutable.fromJS({
|
|
66
|
-
path: [...path, 'mapping', 'abis', abiIndex, 'file'],
|
|
67
|
-
message: e.message,
|
|
68
|
-
}),
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
}, immutable.List());
|
|
72
|
-
|
|
73
|
-
return nameErrors.concat(fileErrors);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
validateEvents() {
|
|
77
|
-
const dataSourcesAndTemplates = DataSourcesExtractor.fromManifest(this.manifest, this.protocol);
|
|
78
|
-
|
|
79
|
-
return dataSourcesAndTemplates.reduce((errors: any[], dataSourceOrTemplate: any) => {
|
|
80
|
-
return errors.concat(
|
|
81
|
-
this.validateDataSourceEvents(
|
|
82
|
-
dataSourceOrTemplate.get('dataSource'),
|
|
83
|
-
dataSourceOrTemplate.get('path'),
|
|
84
|
-
),
|
|
85
|
-
);
|
|
86
|
-
}, immutable.List());
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
validateDataSourceEvents(dataSource: any, path: string) {
|
|
90
|
-
let abi: ABI;
|
|
91
|
-
try {
|
|
92
|
-
// Resolve the source ABI name into a real ABI object
|
|
93
|
-
const abiName = dataSource.getIn(['source', 'abi']);
|
|
94
|
-
const abiEntry = dataSource
|
|
95
|
-
.getIn(['mapping', 'abis'])
|
|
96
|
-
.find((abi: any) => abi.get('name') === abiName);
|
|
97
|
-
abi = ABI.load(abiEntry.get('name'), this.resolveFile(abiEntry.get('file')));
|
|
98
|
-
} catch (_) {
|
|
99
|
-
// Ignore errors silently; we can't really say anything about
|
|
100
|
-
// the events if the ABI can't even be loaded
|
|
101
|
-
return immutable.List();
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Obtain event signatures from the mapping
|
|
105
|
-
const manifestEvents = dataSource
|
|
106
|
-
.getIn(['mapping', 'eventHandlers'], immutable.List())
|
|
107
|
-
.map((handler: any) => handler.get('event'));
|
|
108
|
-
|
|
109
|
-
// Obtain event signatures from the ABI
|
|
110
|
-
const abiEvents = abi.eventSignatures();
|
|
111
|
-
|
|
112
|
-
// Add errors for every manifest event signature that is not
|
|
113
|
-
// present in the ABI
|
|
114
|
-
return manifestEvents.reduce(
|
|
115
|
-
(errors: any[], manifestEvent: any, index: number) =>
|
|
116
|
-
abiEvents.includes(manifestEvent)
|
|
117
|
-
? errors
|
|
118
|
-
: errors.push(
|
|
119
|
-
immutable.fromJS({
|
|
120
|
-
path: [...path, 'eventHandlers', index],
|
|
121
|
-
message: `\
|
|
122
|
-
Event with signature '${manifestEvent}' not present in ABI '${abi.name}'.
|
|
123
|
-
Available events:
|
|
124
|
-
${abiEvents
|
|
125
|
-
.sort()
|
|
126
|
-
.map(event => `- ${event}`)
|
|
127
|
-
.join('\n')}`,
|
|
128
|
-
}),
|
|
129
|
-
),
|
|
130
|
-
immutable.List(),
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
validateCallFunctions() {
|
|
135
|
-
return this.manifest
|
|
136
|
-
.get('dataSources')
|
|
137
|
-
.filter((dataSource: any) => this.protocol.isValidKindName(dataSource.get('kind')))
|
|
138
|
-
.reduce((errors: any[], dataSource: any, dataSourceIndex: string) => {
|
|
139
|
-
const path = ['dataSources', dataSourceIndex, 'callHandlers'];
|
|
140
|
-
|
|
141
|
-
let abi: ABI;
|
|
142
|
-
try {
|
|
143
|
-
// Resolve the source ABI name into a real ABI object
|
|
144
|
-
const abiName = dataSource.getIn(['source', 'abi']);
|
|
145
|
-
const abiEntry = dataSource
|
|
146
|
-
.getIn(['mapping', 'abis'])
|
|
147
|
-
.find((abi: any) => abi.get('name') === abiName);
|
|
148
|
-
abi = ABI.load(abiEntry.get('name'), this.resolveFile(abiEntry.get('file')));
|
|
149
|
-
} catch (e) {
|
|
150
|
-
// Ignore errors silently; we can't really say anything about
|
|
151
|
-
// the call functions if the ABI can't even be loaded
|
|
152
|
-
return errors;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Obtain event signatures from the mapping
|
|
156
|
-
const manifestFunctions = dataSource
|
|
157
|
-
.getIn(['mapping', 'callHandlers'], immutable.List())
|
|
158
|
-
.map((handler: any) => handler.get('function'));
|
|
159
|
-
|
|
160
|
-
// Obtain event signatures from the ABI
|
|
161
|
-
const abiFunctions = abi.callFunctionSignatures();
|
|
162
|
-
|
|
163
|
-
// Add errors for every manifest event signature that is not
|
|
164
|
-
// present in the ABI
|
|
165
|
-
return manifestFunctions.reduce(
|
|
166
|
-
(errors: any[], manifestFunction: any, index: number) =>
|
|
167
|
-
abiFunctions.includes(manifestFunction)
|
|
168
|
-
? errors
|
|
169
|
-
: errors.push(
|
|
170
|
-
immutable.fromJS({
|
|
171
|
-
path: [...path, index],
|
|
172
|
-
message: `\
|
|
173
|
-
Call function with signature '${manifestFunction}' not present in ABI '${abi.name}'.
|
|
174
|
-
Available call functions:
|
|
175
|
-
${abiFunctions
|
|
176
|
-
.sort()
|
|
177
|
-
.map(tx => `- ${tx}`)
|
|
178
|
-
.join('\n')}`,
|
|
179
|
-
}),
|
|
180
|
-
),
|
|
181
|
-
errors,
|
|
182
|
-
);
|
|
183
|
-
}, immutable.List());
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
handlerTypes() {
|
|
187
|
-
return immutable.List(['blockHandlers', 'callHandlers', 'eventHandlers']);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import immutable from 'immutable';
|
|
4
|
-
import prettier from 'prettier';
|
|
5
|
-
import { GENERATED_FILE_NOTE } from '../../codegen/typescript';
|
|
6
|
-
import { displayPath } from '../../command-helpers/fs';
|
|
7
|
-
import { Spinner, step, withSpinner } from '../../command-helpers/spinner';
|
|
8
|
-
import { TypeGeneratorOptions } from '../../type-generator';
|
|
9
|
-
import ABI from './abi';
|
|
10
|
-
|
|
11
|
-
export default class EthereumTypeGenerator {
|
|
12
|
-
private sourceDir: TypeGeneratorOptions['sourceDir'];
|
|
13
|
-
private outputDir: TypeGeneratorOptions['outputDir'];
|
|
14
|
-
|
|
15
|
-
constructor(options: TypeGeneratorOptions) {
|
|
16
|
-
this.sourceDir = options.sourceDir;
|
|
17
|
-
this.outputDir = options.outputDir;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async loadABIs(subgraph: immutable.Map<any, any>) {
|
|
21
|
-
return await withSpinner(
|
|
22
|
-
'Load contract ABIs',
|
|
23
|
-
'Failed to load contract ABIs',
|
|
24
|
-
`Warnings while loading contract ABIs`,
|
|
25
|
-
async spinner => {
|
|
26
|
-
try {
|
|
27
|
-
return subgraph
|
|
28
|
-
.get('dataSources')
|
|
29
|
-
.reduce(
|
|
30
|
-
(abis: any[], dataSource: any) =>
|
|
31
|
-
dataSource
|
|
32
|
-
.getIn(['mapping', 'abis'])
|
|
33
|
-
.reduce(
|
|
34
|
-
(abis: any[], abi: any) =>
|
|
35
|
-
abis.push(
|
|
36
|
-
this._loadABI(dataSource, abi.get('name'), abi.get('file'), spinner),
|
|
37
|
-
),
|
|
38
|
-
abis,
|
|
39
|
-
),
|
|
40
|
-
immutable.List(),
|
|
41
|
-
);
|
|
42
|
-
} catch (e) {
|
|
43
|
-
throw Error(`Failed to load contract ABIs: ${e.message}`);
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
_loadABI(dataSource: any, name: string, maybeRelativePath: string, spinner: Spinner) {
|
|
50
|
-
try {
|
|
51
|
-
if (this.sourceDir) {
|
|
52
|
-
const absolutePath = path.resolve(this.sourceDir, maybeRelativePath);
|
|
53
|
-
step(spinner, `Load contract ABI from`, displayPath(absolutePath));
|
|
54
|
-
return { dataSource, abi: ABI.load(name, absolutePath) };
|
|
55
|
-
}
|
|
56
|
-
return { dataSource, abi: ABI.load(name, maybeRelativePath) };
|
|
57
|
-
} catch (e) {
|
|
58
|
-
throw Error(`Failed to load contract ABI: ${e.message}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async loadDataSourceTemplateABIs(subgraph: immutable.Map<any, any>) {
|
|
63
|
-
return await withSpinner(
|
|
64
|
-
`Load data source template ABIs`,
|
|
65
|
-
`Failed to load data source template ABIs`,
|
|
66
|
-
`Warnings while loading data source template ABIs`,
|
|
67
|
-
async spinner => {
|
|
68
|
-
const abis = [];
|
|
69
|
-
for (const template of subgraph.get('templates', immutable.List())) {
|
|
70
|
-
for (const abi of template.getIn(['mapping', 'abis'])) {
|
|
71
|
-
abis.push(
|
|
72
|
-
this._loadDataSourceTemplateABI(template, abi.get('name'), abi.get('file'), spinner),
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return abis;
|
|
77
|
-
},
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
_loadDataSourceTemplateABI(
|
|
82
|
-
template: any,
|
|
83
|
-
name: string,
|
|
84
|
-
maybeRelativePath: string,
|
|
85
|
-
spinner: Spinner,
|
|
86
|
-
) {
|
|
87
|
-
try {
|
|
88
|
-
if (this.sourceDir) {
|
|
89
|
-
const absolutePath = path.resolve(this.sourceDir, maybeRelativePath);
|
|
90
|
-
step(spinner, `Load data source template ABI from`, displayPath(absolutePath));
|
|
91
|
-
return { template, abi: ABI.load(name, absolutePath) };
|
|
92
|
-
}
|
|
93
|
-
return { template, abi: ABI.load(name, maybeRelativePath) };
|
|
94
|
-
} catch (e) {
|
|
95
|
-
throw Error(`Failed to load data source template ABI: ${e.message}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
generateTypesForABIs(abis: any[]) {
|
|
100
|
-
return withSpinner(
|
|
101
|
-
`Generate types for contract ABIs`,
|
|
102
|
-
`Failed to generate types for contract ABIs`,
|
|
103
|
-
`Warnings while generating types for contract ABIs`,
|
|
104
|
-
async spinner => {
|
|
105
|
-
return await Promise.all(
|
|
106
|
-
abis.map(async abi => await this._generateTypesForABI(abi, spinner)),
|
|
107
|
-
);
|
|
108
|
-
},
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async _generateTypesForABI(abi: any, spinner: Spinner) {
|
|
113
|
-
try {
|
|
114
|
-
step(
|
|
115
|
-
spinner,
|
|
116
|
-
`Generate types for contract ABI:`,
|
|
117
|
-
`${abi.abi.name} (${displayPath(abi.abi.file)})`,
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
const codeGenerator = abi.abi.codeGenerator();
|
|
121
|
-
const code = prettier.format(
|
|
122
|
-
[
|
|
123
|
-
GENERATED_FILE_NOTE,
|
|
124
|
-
...codeGenerator.generateModuleImports(),
|
|
125
|
-
...codeGenerator.generateTypes(),
|
|
126
|
-
].join('\n'),
|
|
127
|
-
{
|
|
128
|
-
parser: 'typescript',
|
|
129
|
-
},
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
const outputFile = path.join(
|
|
133
|
-
this.outputDir,
|
|
134
|
-
abi.dataSource.get('name'),
|
|
135
|
-
`${abi.abi.name}.ts`,
|
|
136
|
-
);
|
|
137
|
-
step(spinner, `Write types to`, displayPath(outputFile));
|
|
138
|
-
await fs.mkdirs(path.dirname(outputFile));
|
|
139
|
-
await fs.writeFile(outputFile, code);
|
|
140
|
-
} catch (e) {
|
|
141
|
-
throw Error(`Failed to generate types for contract ABI: ${e.message}`);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
async generateTypesForDataSourceTemplateABIs(abis: any[]) {
|
|
146
|
-
return await withSpinner(
|
|
147
|
-
`Generate types for data source template ABIs`,
|
|
148
|
-
`Failed to generate types for data source template ABIs`,
|
|
149
|
-
`Warnings while generating types for data source template ABIs`,
|
|
150
|
-
async spinner => {
|
|
151
|
-
return await Promise.all(
|
|
152
|
-
abis.map(async abi => await this._generateTypesForDataSourceTemplateABI(abi, spinner)),
|
|
153
|
-
);
|
|
154
|
-
},
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
async _generateTypesForDataSourceTemplateABI(abi: any, spinner: Spinner) {
|
|
159
|
-
try {
|
|
160
|
-
step(
|
|
161
|
-
spinner,
|
|
162
|
-
`Generate types for data source template ABI:`,
|
|
163
|
-
`${abi.template.get('name')} > ${abi.abi.name} (${displayPath(abi.abi.file)})`,
|
|
164
|
-
);
|
|
165
|
-
|
|
166
|
-
const codeGenerator = abi.abi.codeGenerator();
|
|
167
|
-
const code = prettier.format(
|
|
168
|
-
[
|
|
169
|
-
GENERATED_FILE_NOTE,
|
|
170
|
-
...codeGenerator.generateModuleImports(),
|
|
171
|
-
...codeGenerator.generateTypes(),
|
|
172
|
-
].join('\n'),
|
|
173
|
-
{
|
|
174
|
-
parser: 'typescript',
|
|
175
|
-
},
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
const outputFile = path.join(
|
|
179
|
-
this.outputDir,
|
|
180
|
-
'templates',
|
|
181
|
-
abi.template.get('name'),
|
|
182
|
-
`${abi.abi.name}.ts`,
|
|
183
|
-
);
|
|
184
|
-
step(spinner, `Write types to`, displayPath(outputFile));
|
|
185
|
-
await fs.mkdirs(path.dirname(outputFile));
|
|
186
|
-
await fs.writeFile(outputFile, code);
|
|
187
|
-
} catch (e) {
|
|
188
|
-
throw Error(`Failed to generate types for data source template ABI: ${e.message}`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|