@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,84 +0,0 @@
|
|
|
1
|
-
import { allowedStudioNetworks, validateStudioNetwork } from './studio';
|
|
2
|
-
|
|
3
|
-
describe('Version Command Helpers', () => {
|
|
4
|
-
describe('validateStudioNetwork', () => {
|
|
5
|
-
describe("When it's studio", () => {
|
|
6
|
-
test("And it's Ethereum mainnet", () => {
|
|
7
|
-
expect(() =>
|
|
8
|
-
validateStudioNetwork({
|
|
9
|
-
studio: true,
|
|
10
|
-
network: 'mainnet',
|
|
11
|
-
}),
|
|
12
|
-
).not.toThrow(
|
|
13
|
-
new Error(
|
|
14
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
15
|
-
', ',
|
|
16
|
-
)}`,
|
|
17
|
-
),
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test("And it's Gnosis chain", () => {
|
|
22
|
-
expect(() =>
|
|
23
|
-
validateStudioNetwork({
|
|
24
|
-
studio: true,
|
|
25
|
-
network: 'gnosis',
|
|
26
|
-
}),
|
|
27
|
-
).not.toThrow(
|
|
28
|
-
new Error(
|
|
29
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
30
|
-
', ',
|
|
31
|
-
)}`,
|
|
32
|
-
),
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test("And it's NOT an allowed network", () => {
|
|
37
|
-
expect(() =>
|
|
38
|
-
validateStudioNetwork({
|
|
39
|
-
product: 'subgraph-studio',
|
|
40
|
-
network: 'celo',
|
|
41
|
-
}),
|
|
42
|
-
).toThrow(
|
|
43
|
-
new Error(
|
|
44
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
45
|
-
', ',
|
|
46
|
-
)}`,
|
|
47
|
-
),
|
|
48
|
-
);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
describe("When it's NOT studio", () => {
|
|
53
|
-
test("And it's Rinkeby", () => {
|
|
54
|
-
expect(() =>
|
|
55
|
-
validateStudioNetwork({
|
|
56
|
-
studio: false,
|
|
57
|
-
network: 'rinkeby',
|
|
58
|
-
}),
|
|
59
|
-
).not.toThrow(
|
|
60
|
-
new Error(
|
|
61
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
62
|
-
', ',
|
|
63
|
-
)}`,
|
|
64
|
-
),
|
|
65
|
-
);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test("And it's NOT an allowed network", () => {
|
|
69
|
-
expect(() =>
|
|
70
|
-
validateStudioNetwork({
|
|
71
|
-
product: 'hosted-service',
|
|
72
|
-
network: 'celo',
|
|
73
|
-
}),
|
|
74
|
-
).not.toThrow(
|
|
75
|
-
new Error(
|
|
76
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
77
|
-
', ',
|
|
78
|
-
)}`,
|
|
79
|
-
),
|
|
80
|
-
);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
});
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export const allowedStudioNetworks = ['mainnet', 'rinkeby', 'goerli', 'gnosis'] as const;
|
|
2
|
-
|
|
3
|
-
export const validateStudioNetwork = ({
|
|
4
|
-
studio,
|
|
5
|
-
product,
|
|
6
|
-
network,
|
|
7
|
-
}: {
|
|
8
|
-
studio?: string | boolean;
|
|
9
|
-
product?: string;
|
|
10
|
-
network: string;
|
|
11
|
-
}) => {
|
|
12
|
-
const isStudio = studio || product === 'subgraph-studio';
|
|
13
|
-
const isAllowedNetwork = allowedStudioNetworks.includes(
|
|
14
|
-
// @ts-expect-error we're checking if the network is allowed
|
|
15
|
-
network,
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
if (isStudio && !isAllowedNetwork) {
|
|
19
|
-
throw new Error(
|
|
20
|
-
`The Subgraph Studio only allows subgraphs for these networks: ${allowedStudioNetworks.join(
|
|
21
|
-
', ',
|
|
22
|
-
)}`,
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export const validateSubgraphName = (
|
|
2
|
-
name: string,
|
|
3
|
-
{ allowSimpleName }: { allowSimpleName?: boolean },
|
|
4
|
-
) => {
|
|
5
|
-
if (allowSimpleName) {
|
|
6
|
-
return name;
|
|
7
|
-
}
|
|
8
|
-
if (name.split('/').length !== 2) {
|
|
9
|
-
throw new Error(`Subgraph name "${name}" needs to have the format "<PREFIX>/${name}".
|
|
10
|
-
|
|
11
|
-
When using the Hosted Service at https://thegraph.com, <PREFIX> is the
|
|
12
|
-
name of your GitHub user or organization.
|
|
13
|
-
|
|
14
|
-
You can bypass this check with --allow-simple-name.`);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const getSubgraphBasename = (name: string) => {
|
|
19
|
-
const segments = name.split('/', 2);
|
|
20
|
-
return segments[segments.length - 1];
|
|
21
|
-
};
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import * as loadManifestUtil from '../migrations/util/load-manifest';
|
|
2
|
-
import * as graphTsUtil from '../migrations/util/versions';
|
|
3
|
-
import { assertGraphTsVersion, assertManifestApiVersion } from './version';
|
|
4
|
-
|
|
5
|
-
describe('Version Command Helpers', () => {
|
|
6
|
-
describe('assertManifestApiVersion', () => {
|
|
7
|
-
const fakeManifestPath = 'fake/manifest/path';
|
|
8
|
-
const minimumApiVersion = '0.0.5';
|
|
9
|
-
|
|
10
|
-
describe('With just dataSources', () => {
|
|
11
|
-
test('When all of them are less than minimum apiVersion', async () => {
|
|
12
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
13
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
14
|
-
Promise.resolve({
|
|
15
|
-
dataSources: [
|
|
16
|
-
{ mapping: { apiVersion: '0.0.1' } },
|
|
17
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
18
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
19
|
-
],
|
|
20
|
-
}),
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
await expect(assertManifestApiVersion(fakeManifestPath, minimumApiVersion)).rejects.toThrow(
|
|
24
|
-
new Error(
|
|
25
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
26
|
-
),
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
test('When one of them is less than minimum apiVersion', async () => {
|
|
30
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
31
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
32
|
-
Promise.resolve({
|
|
33
|
-
dataSources: [
|
|
34
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
35
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
36
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
37
|
-
],
|
|
38
|
-
}),
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
await expect(assertManifestApiVersion(fakeManifestPath, minimumApiVersion)).rejects.toThrow(
|
|
42
|
-
new Error(
|
|
43
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
44
|
-
),
|
|
45
|
-
);
|
|
46
|
-
});
|
|
47
|
-
test('When none of them are less than minimum apiVersion', async () => {
|
|
48
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
49
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
50
|
-
Promise.resolve({
|
|
51
|
-
dataSources: [
|
|
52
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
53
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
54
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
55
|
-
],
|
|
56
|
-
}),
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
await expect(assertManifestApiVersion(fakeManifestPath, minimumApiVersion)).resolves.toBe(
|
|
60
|
-
undefined,
|
|
61
|
-
);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('With dataSources and templates', () => {
|
|
65
|
-
describe('And the dataSources have a lower apiVersion', () => {
|
|
66
|
-
test('When all of the templates are less than minimum apiVersion', async () => {
|
|
67
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
68
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
69
|
-
Promise.resolve({
|
|
70
|
-
dataSources: [
|
|
71
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
72
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
73
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
74
|
-
],
|
|
75
|
-
templates: [
|
|
76
|
-
{ mapping: { apiVersion: '0.0.1' } },
|
|
77
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
78
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
79
|
-
],
|
|
80
|
-
}),
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
await expect(
|
|
84
|
-
assertManifestApiVersion(fakeManifestPath, minimumApiVersion),
|
|
85
|
-
).rejects.toThrow(
|
|
86
|
-
new Error(
|
|
87
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
88
|
-
),
|
|
89
|
-
);
|
|
90
|
-
});
|
|
91
|
-
test('When one of the templates is less than minimum apiVersion', async () => {
|
|
92
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
93
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
94
|
-
Promise.resolve({
|
|
95
|
-
dataSources: [
|
|
96
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
97
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
98
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
99
|
-
],
|
|
100
|
-
templates: [
|
|
101
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
102
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
103
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
104
|
-
],
|
|
105
|
-
}),
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
await expect(
|
|
109
|
-
assertManifestApiVersion(fakeManifestPath, minimumApiVersion),
|
|
110
|
-
).rejects.toThrow(
|
|
111
|
-
new Error(
|
|
112
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
113
|
-
),
|
|
114
|
-
);
|
|
115
|
-
});
|
|
116
|
-
test('When none of the templates are less than minimum apiVersion', async () => {
|
|
117
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
118
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
119
|
-
Promise.resolve({
|
|
120
|
-
dataSources: [
|
|
121
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
122
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
123
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
124
|
-
],
|
|
125
|
-
templates: [
|
|
126
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
127
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
128
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
129
|
-
],
|
|
130
|
-
}),
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
await expect(
|
|
134
|
-
assertManifestApiVersion(fakeManifestPath, minimumApiVersion),
|
|
135
|
-
).rejects.toThrow(
|
|
136
|
-
new Error(
|
|
137
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
138
|
-
),
|
|
139
|
-
);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
describe('And the dataSources do NOT have a lower apiVersion', () => {
|
|
143
|
-
test('When all of the templates are less than minimum apiVersion', async () => {
|
|
144
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
145
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
146
|
-
Promise.resolve({
|
|
147
|
-
dataSources: [
|
|
148
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
149
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
150
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
151
|
-
],
|
|
152
|
-
templates: [
|
|
153
|
-
{ mapping: { apiVersion: '0.0.1' } },
|
|
154
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
155
|
-
{ mapping: { apiVersion: '0.0.3' } },
|
|
156
|
-
],
|
|
157
|
-
}),
|
|
158
|
-
);
|
|
159
|
-
|
|
160
|
-
await expect(
|
|
161
|
-
assertManifestApiVersion(fakeManifestPath, minimumApiVersion),
|
|
162
|
-
).rejects.toThrow(
|
|
163
|
-
new Error(
|
|
164
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
165
|
-
),
|
|
166
|
-
);
|
|
167
|
-
});
|
|
168
|
-
test('When one of the templates is less than minimum apiVersion', async () => {
|
|
169
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
170
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
171
|
-
Promise.resolve({
|
|
172
|
-
dataSources: [
|
|
173
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
174
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
175
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
176
|
-
],
|
|
177
|
-
templates: [
|
|
178
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
179
|
-
{ mapping: { apiVersion: '0.0.2' } },
|
|
180
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
181
|
-
],
|
|
182
|
-
}),
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
await expect(
|
|
186
|
-
assertManifestApiVersion(fakeManifestPath, minimumApiVersion),
|
|
187
|
-
).rejects.toThrow(
|
|
188
|
-
new Error(
|
|
189
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
190
|
-
),
|
|
191
|
-
);
|
|
192
|
-
});
|
|
193
|
-
test('When none of the templates are less than minimum apiVersion', async () => {
|
|
194
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
195
|
-
loadManifestUtil.loadManifest = jest.fn().mockImplementation(() =>
|
|
196
|
-
Promise.resolve({
|
|
197
|
-
dataSources: [
|
|
198
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
199
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
200
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
201
|
-
],
|
|
202
|
-
templates: [
|
|
203
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
204
|
-
{ mapping: { apiVersion: '0.0.6' } },
|
|
205
|
-
{ mapping: { apiVersion: '0.0.5' } },
|
|
206
|
-
],
|
|
207
|
-
}),
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
await expect(assertManifestApiVersion(fakeManifestPath, minimumApiVersion)).resolves.toBe(
|
|
211
|
-
undefined,
|
|
212
|
-
);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
describe('assertGraphTsVersion', () => {
|
|
218
|
-
const fakeNodeModulesDir = 'fake/path/to/node/modules';
|
|
219
|
-
const minimumGraphTsVersion = '0.22.0';
|
|
220
|
-
|
|
221
|
-
test("When the installed graph-ts version is less than what's supported", async () => {
|
|
222
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
223
|
-
graphTsUtil.getGraphTsVersion = jest.fn().mockImplementation(() => Promise.resolve('0.19.0'));
|
|
224
|
-
|
|
225
|
-
await expect(assertGraphTsVersion(fakeNodeModulesDir, minimumGraphTsVersion)).rejects.toThrow(
|
|
226
|
-
new Error(
|
|
227
|
-
`To use this version of the graph-cli you must upgrade the graph-ts dependency to a version greater than or equal to ${minimumGraphTsVersion}
|
|
228
|
-
Also, you'll probably need to take a look at our AssemblyScript migration guide because of language breaking changes: https://thegraph.com/docs/developer/assemblyscript-migration-guide`,
|
|
229
|
-
),
|
|
230
|
-
);
|
|
231
|
-
});
|
|
232
|
-
test('When the installed graph-ts version is a supported one', async () => {
|
|
233
|
-
// @ts-expect-error TODO: dont pollute the globals
|
|
234
|
-
graphTsUtil.getGraphTsVersion = jest.fn().mockImplementation(() => Promise.resolve('0.22.0'));
|
|
235
|
-
|
|
236
|
-
await expect(assertGraphTsVersion(fakeNodeModulesDir, minimumGraphTsVersion)).resolves.toBe(
|
|
237
|
-
undefined,
|
|
238
|
-
);
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
});
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import semver from 'semver';
|
|
2
|
-
import * as manifestUtil from '../migrations/util/load-manifest';
|
|
3
|
-
import * as graphTsUtil from '../migrations/util/versions';
|
|
4
|
-
|
|
5
|
-
export const assertManifestApiVersion = async (manifestPath: string, minimumApiVersion: string) => {
|
|
6
|
-
const manifest = await manifestUtil.loadManifest(manifestPath);
|
|
7
|
-
|
|
8
|
-
const lessThanMinimumVersion = (manifestApiVersion: string) =>
|
|
9
|
-
semver.lt(manifestApiVersion, minimumApiVersion);
|
|
10
|
-
|
|
11
|
-
let isLessThanMinimumVersion = false;
|
|
12
|
-
|
|
13
|
-
if (manifest) {
|
|
14
|
-
if (manifest.dataSources && Array.isArray(manifest.dataSources)) {
|
|
15
|
-
isLessThanMinimumVersion = manifest.dataSources.some(
|
|
16
|
-
(dataSource: any) =>
|
|
17
|
-
dataSource?.mapping?.apiVersion && lessThanMinimumVersion(dataSource.mapping.apiVersion),
|
|
18
|
-
);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (manifest.templates && Array.isArray(manifest.templates)) {
|
|
22
|
-
isLessThanMinimumVersion ||= manifest.templates.some(
|
|
23
|
-
(template: any) =>
|
|
24
|
-
template?.mapping?.apiVersion && lessThanMinimumVersion(template.mapping.apiVersion),
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (isLessThanMinimumVersion) {
|
|
30
|
-
throw new Error(
|
|
31
|
-
`The current version of graph-cli can't be used with mappings on apiVersion less than '${minimumApiVersion}'`,
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const assertGraphTsVersion = async (sourceDir: string, minimumGraphTsVersion: string) => {
|
|
37
|
-
let graphTsVersion;
|
|
38
|
-
try {
|
|
39
|
-
graphTsVersion = await graphTsUtil.getGraphTsVersion(sourceDir);
|
|
40
|
-
} catch (_) {
|
|
41
|
-
// We only do the assertion if `graph-ts` is installed.
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Coerce needed because we may be dealing with an alpha version
|
|
45
|
-
// and in the `semver` library, this would return true when comparing
|
|
46
|
-
// the same version.
|
|
47
|
-
if (graphTsVersion && semver.lt(semver.coerce(graphTsVersion)!, minimumGraphTsVersion)) {
|
|
48
|
-
throw new Error(
|
|
49
|
-
`To use this version of the graph-cli you must upgrade the graph-ts dependency to a version greater than or equal to ${minimumGraphTsVersion}
|
|
50
|
-
Also, you'll probably need to take a look at our AssemblyScript migration guide because of language breaking changes: https://thegraph.com/docs/developer/assemblyscript-migration-guide`,
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
};
|
package/src/commands/add.ts
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { GluegunToolbox } from 'gluegun';
|
|
3
|
-
import immutable from 'immutable';
|
|
4
|
-
import { loadAbiFromBlockScout, loadAbiFromEtherscan } from '../command-helpers/abi';
|
|
5
|
-
import * as DataSourcesExtractor from '../command-helpers/data-sources';
|
|
6
|
-
import { fixParameters } from '../command-helpers/gluegun';
|
|
7
|
-
import { updateNetworksFile } from '../command-helpers/network';
|
|
8
|
-
import {
|
|
9
|
-
generateDataSource,
|
|
10
|
-
writeABI,
|
|
11
|
-
writeMapping,
|
|
12
|
-
writeSchema,
|
|
13
|
-
writeTestsFiles,
|
|
14
|
-
} from '../command-helpers/scaffold';
|
|
15
|
-
import { withSpinner } from '../command-helpers/spinner';
|
|
16
|
-
import Protocol from '../protocols';
|
|
17
|
-
import EthereumABI from '../protocols/ethereum/abi';
|
|
18
|
-
import Subgraph from '../subgraph';
|
|
19
|
-
|
|
20
|
-
const HELP = `
|
|
21
|
-
${chalk.bold('graph add')} <address> [<subgraph-manifest default: "./subgraph.yaml">]
|
|
22
|
-
|
|
23
|
-
${chalk.dim('Options:')}
|
|
24
|
-
|
|
25
|
-
--abi <path> Path to the contract ABI (default: download from Etherscan)
|
|
26
|
-
--contract-name Name of the contract (default: Contract)
|
|
27
|
-
--merge-entities Whether to merge entities with the same name (default: false)
|
|
28
|
-
--network-file <path> Networks config file path (default: "./networks.json")
|
|
29
|
-
-h, --help Show usage information
|
|
30
|
-
`;
|
|
31
|
-
|
|
32
|
-
export interface AddOptions {
|
|
33
|
-
abi?: string;
|
|
34
|
-
contractName?: string;
|
|
35
|
-
mergeEntities?: boolean;
|
|
36
|
-
networkFile?: string;
|
|
37
|
-
help?: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export default {
|
|
41
|
-
description: 'Adds a new datasource to a subgraph',
|
|
42
|
-
run: async (toolbox: GluegunToolbox) => {
|
|
43
|
-
// Obtain tools
|
|
44
|
-
const { print, system } = toolbox;
|
|
45
|
-
|
|
46
|
-
// Read CLI parameters
|
|
47
|
-
let { abi, contractName, h, help, mergeEntities, networkFile } = toolbox.parameters.options;
|
|
48
|
-
|
|
49
|
-
contractName ||= 'Contract';
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
fixParameters(toolbox.parameters, {
|
|
53
|
-
h,
|
|
54
|
-
help,
|
|
55
|
-
mergeEntities,
|
|
56
|
-
});
|
|
57
|
-
} catch (e) {
|
|
58
|
-
print.error(e.message);
|
|
59
|
-
process.exitCode = 1;
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const address = toolbox.parameters.first || toolbox.parameters.array?.[0];
|
|
64
|
-
const manifestPath =
|
|
65
|
-
toolbox.parameters.second || toolbox.parameters.array?.[1] || './subgraph.yaml';
|
|
66
|
-
|
|
67
|
-
// Show help text if requested
|
|
68
|
-
if (help || h) {
|
|
69
|
-
print.info(HELP);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Validate the address
|
|
74
|
-
if (!address) {
|
|
75
|
-
print.error('No contract address provided');
|
|
76
|
-
process.exitCode = 1;
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const dataSourcesAndTemplates = await DataSourcesExtractor.fromFilePath(manifestPath);
|
|
81
|
-
const protocol = Protocol.fromDataSources(dataSourcesAndTemplates);
|
|
82
|
-
const manifest = await Subgraph.load(manifestPath, { protocol });
|
|
83
|
-
const network = manifest.result.getIn(['dataSources', 0, 'network']) as any;
|
|
84
|
-
const result = manifest.result.asMutable();
|
|
85
|
-
|
|
86
|
-
const entities = getEntities(manifest);
|
|
87
|
-
const contractNames = getContractNames(manifest);
|
|
88
|
-
if (contractNames.includes(contractName)) {
|
|
89
|
-
print.error(
|
|
90
|
-
`Datasource or template with name ${contractName} already exists, please choose a different name`,
|
|
91
|
-
);
|
|
92
|
-
process.exitCode = 1;
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
let ethabi = null;
|
|
97
|
-
if (abi) {
|
|
98
|
-
ethabi = EthereumABI.load(contractName, abi);
|
|
99
|
-
} else if (network === 'poa-core') {
|
|
100
|
-
ethabi = await loadAbiFromBlockScout(EthereumABI, network, address);
|
|
101
|
-
} else {
|
|
102
|
-
ethabi = await loadAbiFromEtherscan(EthereumABI, network, address);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const { collisionEntities, onlyCollisions, abiData } = updateEventNamesOnCollision(
|
|
106
|
-
toolbox,
|
|
107
|
-
ethabi,
|
|
108
|
-
entities,
|
|
109
|
-
contractName,
|
|
110
|
-
mergeEntities,
|
|
111
|
-
);
|
|
112
|
-
ethabi.data = abiData;
|
|
113
|
-
|
|
114
|
-
await writeABI(ethabi, contractName);
|
|
115
|
-
await writeSchema(ethabi, protocol, result.getIn(['schema', 'file']) as any, collisionEntities);
|
|
116
|
-
await writeMapping(ethabi, protocol, contractName, collisionEntities);
|
|
117
|
-
await writeTestsFiles(ethabi, protocol, contractName);
|
|
118
|
-
|
|
119
|
-
const dataSources = result.get('dataSources');
|
|
120
|
-
const dataSource = await generateDataSource(protocol, contractName, network, address, ethabi);
|
|
121
|
-
|
|
122
|
-
// Handle the collisions edge case by copying another data source yaml data
|
|
123
|
-
if (mergeEntities && onlyCollisions) {
|
|
124
|
-
const firstDataSource = dataSources.get(0);
|
|
125
|
-
const source = dataSource.get('source') as any;
|
|
126
|
-
const mapping = firstDataSource.get('mapping').asMutable();
|
|
127
|
-
|
|
128
|
-
// Save the address of the new data source
|
|
129
|
-
source.abi = firstDataSource.get('source').get('abi');
|
|
130
|
-
|
|
131
|
-
dataSource.set('mapping', mapping);
|
|
132
|
-
dataSource.set('source', source);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
result.set('dataSources', dataSources.push(dataSource));
|
|
136
|
-
|
|
137
|
-
await Subgraph.write(result, manifestPath);
|
|
138
|
-
|
|
139
|
-
// Update networks.json
|
|
140
|
-
const networksFile = networkFile || './networks.json';
|
|
141
|
-
await updateNetworksFile(toolbox, network, contractName, address, networksFile);
|
|
142
|
-
|
|
143
|
-
// Detect Yarn and/or NPM
|
|
144
|
-
const yarn = system.which('yarn');
|
|
145
|
-
const npm = system.which('npm');
|
|
146
|
-
if (!yarn && !npm) {
|
|
147
|
-
print.error(`Neither Yarn nor NPM were found on your system. Please install one of them.`);
|
|
148
|
-
process.exitCode = 1;
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
await withSpinner(
|
|
153
|
-
'Running codegen',
|
|
154
|
-
'Failed to run codegen',
|
|
155
|
-
'Warning during codegen',
|
|
156
|
-
async () => {
|
|
157
|
-
await system.run(yarn ? 'yarn codegen' : 'npm run codegen');
|
|
158
|
-
},
|
|
159
|
-
);
|
|
160
|
-
},
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const getEntities = (manifest: any) => {
|
|
164
|
-
const dataSources = manifest.result.get('dataSources', immutable.List());
|
|
165
|
-
const templates = manifest.result.get('templates', immutable.List());
|
|
166
|
-
|
|
167
|
-
return dataSources
|
|
168
|
-
.concat(templates)
|
|
169
|
-
.map((dataSource: any) => dataSource.getIn(['mapping', 'entities']))
|
|
170
|
-
.flatten();
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
const getContractNames = (manifest: any) => {
|
|
174
|
-
const dataSources = manifest.result.get('dataSources', immutable.List());
|
|
175
|
-
const templates = manifest.result.get('templates', immutable.List());
|
|
176
|
-
|
|
177
|
-
return dataSources.concat(templates).map((dataSource: any) => dataSource.get('name'));
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
const updateEventNamesOnCollision = (
|
|
181
|
-
toolbox: GluegunToolbox,
|
|
182
|
-
ethabi: any,
|
|
183
|
-
entities: any,
|
|
184
|
-
contractName: string,
|
|
185
|
-
mergeEntities: boolean,
|
|
186
|
-
) => {
|
|
187
|
-
let abiData = ethabi.data;
|
|
188
|
-
const { print } = toolbox;
|
|
189
|
-
const collisionEntities = [];
|
|
190
|
-
let onlyCollisions = true;
|
|
191
|
-
|
|
192
|
-
for (let i = 0; i < abiData.size; i++) {
|
|
193
|
-
const dataRow = abiData.get(i).asMutable();
|
|
194
|
-
|
|
195
|
-
if (dataRow.get('type') === 'event') {
|
|
196
|
-
if (entities.includes(dataRow.get('name'))) {
|
|
197
|
-
if (entities.includes(`${contractName}${dataRow.get('name')}`)) {
|
|
198
|
-
print.error(`Contract name ('${contractName}')
|
|
199
|
-
+ event name ('${dataRow.get('name')}') entity already exists.`);
|
|
200
|
-
process.exitCode = 1;
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (mergeEntities) {
|
|
205
|
-
collisionEntities.push(dataRow.get('name'));
|
|
206
|
-
abiData = abiData.asImmutable().delete(i); // needs to be immutable when deleting, yes you read that right - https://github.com/immutable-js/immutable-js/issues/1901
|
|
207
|
-
i--; // deletion also shifts values to the left
|
|
208
|
-
continue;
|
|
209
|
-
} else {
|
|
210
|
-
dataRow.set('name', `${contractName}${dataRow.get('name')}`);
|
|
211
|
-
}
|
|
212
|
-
} else {
|
|
213
|
-
onlyCollisions = false;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
abiData = abiData.asMutable().set(i, dataRow);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return { abiData, collisionEntities, onlyCollisions };
|
|
220
|
-
};
|