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