@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 CHANGED
@@ -1,9 +1,14 @@
1
1
  # @graphprotocol/graph-cli
2
2
 
3
- ## 0.45.0-alpha-20230330183447-cd5fb05
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' });
@@ -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()
@@ -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.map((event) => (0, schema_1.generateEventType)(event, this.protocol.name)).join('\n\n')
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
  });
@@ -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 = (path) => `entity.${path.join('_')} = event.params.${path.join('.')}`;
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
- const generateEventFieldAssignments = (event) => event.inputs.reduce((acc, input, index) => acc.concat((0, exports.generateFieldAssignments)({ input, index })), []);
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
@@ -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) => `type ${event._alias} @entity(immutable: true) {
66
- id: Bytes!
67
- ${event.inputs
68
- .reduce((acc, input, index) => acc.concat((0, exports.generateEventFields)({ input, index, protocolName })), [])
69
- .join('\n')}
70
- blockNumber: BigInt!
71
- blockTimestamp: BigInt!
72
- transactionHash: Bytes!
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) {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.45.0-alpha-20230330183447-cd5fb05",
2
+ "version": "0.45.0-alpha-20230330190905-cfb33e5",
3
3
  "commands": {
4
4
  "add": {
5
5
  "id": "add",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphprotocol/graph-cli",
3
- "version": "0.45.0-alpha-20230330183447-cd5fb05",
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.19",
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",