@graphprotocol/graph-cli 0.45.0-alpha-20230330183447-cd5fb05 → 0.45.0-alpha-20230330190905-cfb33e5
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 +6 -9
- package/dist/command-helpers/scaffold.js +2 -2
- package/dist/commands/add.js +1 -1
- package/dist/protocols/ethereum/scaffold/mapping.js +1 -1
- package/dist/scaffold/index.js +3 -1
- package/dist/scaffold/mapping.js +25 -6
- package/dist/scaffold/schema.js +17 -9
- package/oclif.manifest.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# @graphprotocol/graph-cli
|
|
2
2
|
|
|
3
|
-
## 0.45.0-alpha-
|
|
3
|
+
## 0.45.0-alpha-20230330190905-cfb33e5
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
+
- [#1225](https://github.com/graphprotocol/graph-tooling/pull/1225)
|
|
8
|
+
[`3f9aa1c`](https://github.com/graphprotocol/graph-tooling/commit/3f9aa1ce7dbb8c26da9fc8e3d9801ec412886f1d)
|
|
9
|
+
Thanks [@saihaj](https://github.com/saihaj)! - When the contract has an `id` event, the CLI
|
|
10
|
+
renames the `id` entity to `{contractName}_id` and map it to `{contractName}_id` in the mapping.
|
|
11
|
+
|
|
7
12
|
- [#1209](https://github.com/graphprotocol/graph-tooling/pull/1209)
|
|
8
13
|
[`f26398e`](https://github.com/graphprotocol/graph-tooling/commit/f26398e054c556f414a1b45e92b7e4007a9b5a79)
|
|
9
14
|
Thanks [@kalloc](https://github.com/kalloc)! - Support `ts` typing in tests folder
|
|
@@ -27,14 +32,6 @@
|
|
|
27
32
|
- Updated dependency [`chokidar@3.5.3` ↗︎](https://www.npmjs.com/package/chokidar/v/3.5.3) (from
|
|
28
33
|
`3.5.1`, in `dependencies`)
|
|
29
34
|
|
|
30
|
-
- [#1227](https://github.com/graphprotocol/graph-tooling/pull/1227)
|
|
31
|
-
[`cd5fb05`](https://github.com/graphprotocol/graph-tooling/commit/cd5fb05301a33e63df434725343ac4dc8bd9735f)
|
|
32
|
-
Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates:
|
|
33
|
-
|
|
34
|
-
- Updated dependency
|
|
35
|
-
[`docker-compose@0.23.19` ↗︎](https://www.npmjs.com/package/docker-compose/v/0.23.19) (from
|
|
36
|
-
`0.23.4`, in `dependencies`)
|
|
37
|
-
|
|
38
35
|
- [#1207](https://github.com/graphprotocol/graph-tooling/pull/1207)
|
|
39
36
|
[`ad275b3`](https://github.com/graphprotocol/graph-tooling/commit/ad275b31e635dab03cfefda00617ef9f612b01c0)
|
|
40
37
|
Thanks [@saihaj](https://github.com/saihaj)! - bring back short hand for version and help
|
|
@@ -71,13 +71,13 @@ const writeABI = async (abi, contractName) => {
|
|
|
71
71
|
await fs_extra_1.default.writeFile(`./abis/${contractName}.json`, data, 'utf-8');
|
|
72
72
|
};
|
|
73
73
|
exports.writeABI = writeABI;
|
|
74
|
-
const writeSchema = async (abi, protocol, schemaPath, entities) => {
|
|
74
|
+
const writeSchema = async (abi, protocol, schemaPath, entities, contractName) => {
|
|
75
75
|
const events = protocol.hasEvents()
|
|
76
76
|
? (0, schema_1.abiEvents)(abi)
|
|
77
77
|
.filter(event => !entities.includes(event.get('name')))
|
|
78
78
|
.toJS()
|
|
79
79
|
: [];
|
|
80
|
-
const data = prettier_1.default.format(events.map(event => (0, schema_1.generateEventType)(event, protocol.name)).join('\n\n'), {
|
|
80
|
+
const data = prettier_1.default.format(events.map(event => (0, schema_1.generateEventType)(event, protocol.name, contractName)).join('\n\n'), {
|
|
81
81
|
parser: 'graphql',
|
|
82
82
|
});
|
|
83
83
|
await fs_extra_1.default.appendFile(schemaPath, data, { encoding: 'utf-8' });
|
package/dist/commands/add.js
CHANGED
|
@@ -72,7 +72,7 @@ class AddCommand extends core_1.Command {
|
|
|
72
72
|
const { collisionEntities, onlyCollisions, abiData } = updateEventNamesOnCollision(ethabi, entities, contractName, mergeEntities);
|
|
73
73
|
ethabi.data = abiData;
|
|
74
74
|
await (0, scaffold_1.writeABI)(ethabi, contractName);
|
|
75
|
-
await (0, scaffold_1.writeSchema)(ethabi, protocol, result.getIn(['schema', 'file']), collisionEntities);
|
|
75
|
+
await (0, scaffold_1.writeSchema)(ethabi, protocol, result.getIn(['schema', 'file']), collisionEntities, contractName);
|
|
76
76
|
await (0, scaffold_1.writeMapping)(ethabi, protocol, contractName, collisionEntities);
|
|
77
77
|
await (0, scaffold_1.writeTestsFiles)(ethabi, protocol, contractName);
|
|
78
78
|
const dataSources = result.get('dataSources');
|
|
@@ -29,7 +29,7 @@ const generatePlaceholderHandlers = ({ abi, events, contractName, }) => `
|
|
|
29
29
|
entity.count = entity.count + BigInt.fromI32(1)
|
|
30
30
|
|
|
31
31
|
// Entity fields can be set based on event parameters
|
|
32
|
-
${(0, mapping_1.generateEventFieldAssignments)(event).slice(0, 2).join('\n')}
|
|
32
|
+
${(0, mapping_1.generateEventFieldAssignments)(event, contractName).slice(0, 2).join('\n')}
|
|
33
33
|
|
|
34
34
|
// Entities can be written to the store with \`.save()\`
|
|
35
35
|
entity.save()
|
package/dist/scaffold/index.js
CHANGED
|
@@ -69,7 +69,9 @@ dataSources:
|
|
|
69
69
|
const hasEvents = this.protocol.hasEvents();
|
|
70
70
|
const events = hasEvents ? (0, schema_1.abiEvents)(this.abi).toJS() : [];
|
|
71
71
|
return prettier_1.default.format(hasEvents && this.indexEvents
|
|
72
|
-
? events
|
|
72
|
+
? events
|
|
73
|
+
.map((event) => (0, schema_1.generateEventType)(event, this.protocol.name, this.contractName))
|
|
74
|
+
.join('\n\n')
|
|
73
75
|
: (0, schema_1.generateExampleEntityType)(this.protocol, events), {
|
|
74
76
|
parser: 'graphql',
|
|
75
77
|
});
|
package/dist/scaffold/mapping.js
CHANGED
|
@@ -23,17 +23,36 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.generateEventIndexingHandlers = exports.generateEventFieldAssignments = exports.generateFieldAssignments = exports.generateFieldAssignment = void 0;
|
|
26
|
+
exports.generateEventIndexingHandlers = exports.generateEventFieldAssignments = exports.renameInput = exports.INPUT_NAMES_BLACKLIST = exports.generateFieldAssignments = exports.generateFieldAssignment = void 0;
|
|
27
27
|
const util = __importStar(require("../codegen/util"));
|
|
28
|
-
const generateFieldAssignment = (
|
|
28
|
+
const generateFieldAssignment = (key, value) => `entity.${key.join('_')} = event.params.${value.join('.')}`;
|
|
29
29
|
exports.generateFieldAssignment = generateFieldAssignment;
|
|
30
30
|
const generateFieldAssignments = ({ index, input }) => input.type === 'tuple'
|
|
31
31
|
? util
|
|
32
32
|
.unrollTuple({ value: input, index, path: [input.name || `param${index}`] })
|
|
33
|
-
.map(({ path }) => (0, exports.generateFieldAssignment)(path))
|
|
34
|
-
: (0, exports.generateFieldAssignment)([input.name || `param${index}`]);
|
|
33
|
+
.map(({ path }) => (0, exports.generateFieldAssignment)(path, path))
|
|
34
|
+
: (0, exports.generateFieldAssignment)([(input.mappedName ?? input.name) || `param${index}`], [input.name || `param${index}`]);
|
|
35
35
|
exports.generateFieldAssignments = generateFieldAssignments;
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Map of input names that are reserved so we do not use them as field names to avoid conflicts
|
|
38
|
+
*/
|
|
39
|
+
exports.INPUT_NAMES_BLACKLIST = {
|
|
40
|
+
/** Related to https://github.com/graphprotocol/graph-tooling/issues/710 */
|
|
41
|
+
id: 'id',
|
|
42
|
+
};
|
|
43
|
+
const renameInput = (name, subgraphName) => {
|
|
44
|
+
const inputMap = {
|
|
45
|
+
[exports.INPUT_NAMES_BLACKLIST.id]: `${subgraphName}_id`,
|
|
46
|
+
};
|
|
47
|
+
return inputMap?.[name] ?? name;
|
|
48
|
+
};
|
|
49
|
+
exports.renameInput = renameInput;
|
|
50
|
+
const generateEventFieldAssignments = (event, contractName) => event.inputs.reduce((acc, input, index) => {
|
|
51
|
+
if (Object.values(exports.INPUT_NAMES_BLACKLIST).includes(input.name)) {
|
|
52
|
+
input.mappedName = (0, exports.renameInput)(input.name, contractName ?? 'contract');
|
|
53
|
+
}
|
|
54
|
+
return acc.concat((0, exports.generateFieldAssignments)({ input, index }));
|
|
55
|
+
}, []);
|
|
37
56
|
exports.generateEventFieldAssignments = generateEventFieldAssignments;
|
|
38
57
|
const generateEventIndexingHandlers = (events, contractName) => `
|
|
39
58
|
import { ${events.map(event => `${event._alias} as ${event._alias}Event`)}} from '../generated/${contractName}/${contractName}'
|
|
@@ -43,7 +62,7 @@ const generateEventIndexingHandlers = (events, contractName) => `
|
|
|
43
62
|
.map(event => `
|
|
44
63
|
export function handle${event._alias}(event: ${event._alias}Event): void {
|
|
45
64
|
let entity = new ${event._alias}(event.transaction.hash.concatI32(event.logIndex.toI32()))
|
|
46
|
-
${(0, exports.generateEventFieldAssignments)(event).join('\n')}
|
|
65
|
+
${(0, exports.generateEventFieldAssignments)(event, contractName).join('\n')}
|
|
47
66
|
|
|
48
67
|
entity.blockNumber = event.block.number
|
|
49
68
|
entity.blockTimestamp = event.block.timestamp
|
package/dist/scaffold/schema.js
CHANGED
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.generateExampleEntityType = exports.generateEventType = exports.generateEventFields = exports.generateField = exports.protocolTypeToGraphQL = exports.abiEvents = void 0;
|
|
27
27
|
const types_1 = require("../codegen/types");
|
|
28
28
|
const util = __importStar(require("../codegen/util"));
|
|
29
|
+
const mapping_1 = require("./mapping");
|
|
29
30
|
function abiEvents(abi) {
|
|
30
31
|
return util.disambiguateNames({
|
|
31
32
|
// @ts-expect-error improve typings of disambiguateNames to handle iterables
|
|
@@ -62,15 +63,22 @@ const generateEventFields = ({ index, input, protocolName, }) => input.type == '
|
|
|
62
63
|
}),
|
|
63
64
|
];
|
|
64
65
|
exports.generateEventFields = generateEventFields;
|
|
65
|
-
const generateEventType = (event, protocolName) =>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
const generateEventType = (event, protocolName, subgraphName) => {
|
|
67
|
+
return `type ${event._alias} @entity(immutable: true) {
|
|
68
|
+
id: Bytes!
|
|
69
|
+
${event.inputs
|
|
70
|
+
.reduce((acc, input, index) => {
|
|
71
|
+
if (Object.values(mapping_1.INPUT_NAMES_BLACKLIST).includes(input.name)) {
|
|
72
|
+
input.name = (0, mapping_1.renameInput)(input.name, subgraphName ?? 'contract');
|
|
73
|
+
}
|
|
74
|
+
return acc.concat((0, exports.generateEventFields)({ input, index, protocolName }));
|
|
75
|
+
}, [])
|
|
76
|
+
.join('\n')}
|
|
77
|
+
blockNumber: BigInt!
|
|
78
|
+
blockTimestamp: BigInt!
|
|
79
|
+
transactionHash: Bytes!
|
|
80
|
+
}`;
|
|
81
|
+
};
|
|
74
82
|
exports.generateEventType = generateEventType;
|
|
75
83
|
const generateExampleEntityType = (protocol, events) => {
|
|
76
84
|
if (protocol.hasABIs() && events.length > 0) {
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphprotocol/graph-cli",
|
|
3
|
-
"version": "0.45.0-alpha-
|
|
3
|
+
"version": "0.45.0-alpha-20230330190905-cfb33e5",
|
|
4
4
|
"description": "CLI for building for and deploying to The Graph",
|
|
5
5
|
"license": "(Apache-2.0 OR MIT)",
|
|
6
6
|
"engines": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"chalk": "3.0.0",
|
|
26
26
|
"chokidar": "3.5.3",
|
|
27
27
|
"debug": "4.3.1",
|
|
28
|
-
"docker-compose": "0.23.
|
|
28
|
+
"docker-compose": "0.23.4",
|
|
29
29
|
"dockerode": "2.5.8",
|
|
30
30
|
"fs-extra": "9.0.0",
|
|
31
31
|
"glob": "7.1.6",
|