@graphprotocol/graph-cli 0.37.2 → 0.37.3-alpha-20230110163550-d64bef6

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.
Files changed (206) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/babel.config.js +3 -0
  3. package/dist/bin.js +6 -0
  4. package/dist/cli.js +32 -0
  5. package/dist/codegen/schema.js +250 -0
  6. package/dist/codegen/schema.test.js +458 -0
  7. package/dist/codegen/template.js +65 -0
  8. package/dist/codegen/types/conversions.js +359 -0
  9. package/dist/codegen/types/index.js +71 -0
  10. package/dist/codegen/types/index.test.js +563 -0
  11. package/dist/codegen/typescript.js +200 -0
  12. package/dist/codegen/util.js +46 -0
  13. package/dist/codegen/util.test.js +93 -0
  14. package/dist/command-helpers/abi.js +78 -0
  15. package/dist/command-helpers/auth.js +77 -0
  16. package/dist/command-helpers/compiler.js +66 -0
  17. package/dist/command-helpers/data-sources.js +29 -0
  18. package/dist/command-helpers/fs.js +9 -0
  19. package/dist/command-helpers/gluegun.js +49 -0
  20. package/dist/command-helpers/ipfs.js +5 -0
  21. package/dist/command-helpers/jsonrpc.js +29 -0
  22. package/dist/command-helpers/network.js +93 -0
  23. package/dist/command-helpers/network.test.js +86 -0
  24. package/dist/command-helpers/node.js +40 -0
  25. package/dist/command-helpers/scaffold.js +112 -0
  26. package/dist/command-helpers/spinner.js +84 -0
  27. package/dist/command-helpers/studio.js +13 -0
  28. package/dist/command-helpers/studio.test.js +41 -0
  29. package/dist/command-helpers/subgraph.js +24 -0
  30. package/dist/command-helpers/version.js +74 -0
  31. package/dist/command-helpers/version.test.js +179 -0
  32. package/dist/commands/add.js +190 -0
  33. package/dist/commands/auth.js +127 -0
  34. package/dist/commands/build.js +140 -0
  35. package/dist/commands/codegen.js +135 -0
  36. package/dist/commands/create.js +86 -0
  37. package/dist/commands/deploy.js +334 -0
  38. package/dist/commands/init.js +788 -0
  39. package/dist/commands/local.js +387 -0
  40. package/dist/commands/remove.js +86 -0
  41. package/dist/commands/test.js +295 -0
  42. package/dist/compiler/asc.js +83 -0
  43. package/dist/compiler/index.js +474 -0
  44. package/dist/debug.js +16 -0
  45. package/dist/migrations/mapping_api_version_0_0_1.js +78 -0
  46. package/dist/migrations/mapping_api_version_0_0_2.js +76 -0
  47. package/dist/migrations/mapping_api_version_0_0_3.js +78 -0
  48. package/dist/migrations/mapping_api_version_0_0_4.js +80 -0
  49. package/dist/migrations/mapping_api_version_0_0_5.js +80 -0
  50. package/dist/migrations/spec_version_0_0_2.js +49 -0
  51. package/dist/migrations/spec_version_0_0_3.js +54 -0
  52. package/dist/migrations/util/load-manifest.js +18 -0
  53. package/dist/migrations/util/versions.js +29 -0
  54. package/dist/migrations.js +56 -0
  55. package/dist/protocols/arweave/manifest.graphql +57 -0
  56. package/dist/protocols/arweave/scaffold/manifest.js +18 -0
  57. package/dist/protocols/arweave/scaffold/mapping.js +52 -0
  58. package/dist/protocols/arweave/subgraph.js +23 -0
  59. package/dist/protocols/cosmos/manifest.graphql +76 -0
  60. package/dist/protocols/cosmos/scaffold/manifest.js +15 -0
  61. package/dist/protocols/cosmos/scaffold/mapping.js +38 -0
  62. package/dist/protocols/cosmos/subgraph.js +25 -0
  63. package/dist/protocols/ethereum/abi.js +140 -0
  64. package/dist/protocols/ethereum/codegen/abi.js +451 -0
  65. package/dist/protocols/ethereum/codegen/abi.test.js +328 -0
  66. package/dist/protocols/ethereum/codegen/template.js +50 -0
  67. package/dist/protocols/ethereum/contract.js +20 -0
  68. package/dist/protocols/ethereum/manifest.graphql +94 -0
  69. package/dist/protocols/ethereum/scaffold/manifest.js +32 -0
  70. package/dist/protocols/ethereum/scaffold/mapping.js +65 -0
  71. package/dist/protocols/ethereum/subgraph.js +171 -0
  72. package/dist/protocols/ethereum/type-generator.js +125 -0
  73. package/dist/protocols/index.js +268 -0
  74. package/dist/protocols/ipfs/codegen/file_template.js +50 -0
  75. package/dist/protocols/near/contract.js +41 -0
  76. package/dist/protocols/near/manifest.graphql +64 -0
  77. package/dist/protocols/near/scaffold/manifest.js +16 -0
  78. package/dist/protocols/near/scaffold/mapping.js +38 -0
  79. package/dist/protocols/near/subgraph.js +20 -0
  80. package/dist/protocols/subgraph.js +2 -0
  81. package/dist/protocols/substreams/manifest.graphql +45 -0
  82. package/dist/protocols/substreams/scaffold/manifest.js +12 -0
  83. package/dist/protocols/substreams/subgraph.js +23 -0
  84. package/dist/scaffold/cosmos.test.js +83 -0
  85. package/dist/scaffold/ethereum.test.js +505 -0
  86. package/dist/scaffold/index.js +128 -0
  87. package/dist/scaffold/mapping.js +61 -0
  88. package/dist/scaffold/near.test.js +86 -0
  89. package/dist/scaffold/schema.js +83 -0
  90. package/dist/scaffold/tests.js +175 -0
  91. package/dist/schema.js +54 -0
  92. package/dist/subgraph.js +249 -0
  93. package/dist/type-generator.js +224 -0
  94. package/dist/validation/contract.js +46 -0
  95. package/dist/validation/index.js +8 -0
  96. package/dist/validation/manifest.js +271 -0
  97. package/dist/validation/schema.js +796 -0
  98. package/dist/validation/schema.test.js +35 -0
  99. package/dist/watcher.js +79 -0
  100. package/jest.config.js +1 -1
  101. package/package.json +16 -9
  102. package/{bin/graph → src/bin.ts} +2 -1
  103. package/src/cli.ts +36 -0
  104. package/src/codegen/schema.js +23 -22
  105. package/src/codegen/schema.test.js +33 -27
  106. package/src/codegen/{template.js → template.ts} +8 -6
  107. package/src/codegen/types/conversions.ts +382 -0
  108. package/src/codegen/types/index.js +4 -7
  109. package/src/codegen/types/index.test.js +10 -4
  110. package/src/codegen/{typescript.js → typescript.ts} +44 -26
  111. package/src/codegen/util.js +1 -1
  112. package/src/codegen/util.test.js +5 -2
  113. package/src/command-helpers/abi.js +46 -30
  114. package/src/command-helpers/auth.js +6 -9
  115. package/src/command-helpers/compiler.js +4 -6
  116. package/src/command-helpers/data-sources.js +8 -11
  117. package/src/command-helpers/fs.ts +5 -0
  118. package/src/command-helpers/gluegun.js +2 -4
  119. package/src/command-helpers/ipfs.ts +3 -0
  120. package/src/command-helpers/{jsonrpc.js → jsonrpc.ts} +11 -16
  121. package/src/command-helpers/network.js +58 -44
  122. package/src/command-helpers/network.test.js +23 -19
  123. package/src/command-helpers/node.js +3 -7
  124. package/src/command-helpers/scaffold.js +34 -25
  125. package/src/command-helpers/{spinner.js → spinner.ts} +10 -10
  126. package/src/command-helpers/studio.test.js +61 -30
  127. package/src/command-helpers/studio.ts +20 -0
  128. package/src/command-helpers/{subgraph.js → subgraph.ts} +6 -6
  129. package/src/command-helpers/version.js +11 -16
  130. package/src/command-helpers/version.test.js +111 -82
  131. package/src/commands/add.js +49 -35
  132. package/src/commands/auth.js +13 -25
  133. package/src/commands/build.js +9 -9
  134. package/src/commands/codegen.js +12 -12
  135. package/src/commands/create.js +22 -22
  136. package/src/commands/deploy.js +39 -34
  137. package/src/commands/init.js +21 -24
  138. package/src/commands/local.js +15 -14
  139. package/src/commands/remove.js +22 -22
  140. package/src/commands/test.js +86 -70
  141. package/src/compiler/{asc.js → asc.ts} +29 -16
  142. package/src/compiler/index.js +18 -18
  143. package/src/{debug.js → debug.ts} +2 -2
  144. package/src/migrations/mapping_api_version_0_0_1.js +7 -7
  145. package/src/migrations/mapping_api_version_0_0_2.js +5 -5
  146. package/src/migrations/mapping_api_version_0_0_3.js +7 -7
  147. package/src/migrations/mapping_api_version_0_0_4.js +7 -7
  148. package/src/migrations/mapping_api_version_0_0_5.js +7 -7
  149. package/src/migrations/spec_version_0_0_2.js +5 -5
  150. package/src/migrations/spec_version_0_0_3.js +5 -5
  151. package/src/migrations/util/load-manifest.js +6 -9
  152. package/src/migrations/util/versions.js +5 -10
  153. package/src/{migrations.js → migrations.ts} +14 -15
  154. package/src/protocols/arweave/scaffold/manifest.js +1 -4
  155. package/src/protocols/arweave/scaffold/mapping.js +1 -3
  156. package/src/protocols/arweave/subgraph.ts +22 -0
  157. package/src/protocols/cosmos/scaffold/manifest.js +1 -4
  158. package/src/protocols/cosmos/scaffold/mapping.js +1 -3
  159. package/src/protocols/cosmos/subgraph.js +2 -2
  160. package/src/protocols/ethereum/abi.js +7 -13
  161. package/src/protocols/ethereum/codegen/abi.js +219 -222
  162. package/src/protocols/ethereum/codegen/abi.test.js +6 -6
  163. package/src/protocols/ethereum/codegen/template.js +3 -5
  164. package/src/protocols/ethereum/contract.js +3 -2
  165. package/src/protocols/ethereum/scaffold/manifest.js +4 -7
  166. package/src/protocols/ethereum/scaffold/mapping.js +4 -11
  167. package/src/protocols/ethereum/subgraph.js +21 -20
  168. package/src/protocols/ethereum/type-generator.js +24 -30
  169. package/src/protocols/{index.js → index.ts} +65 -46
  170. package/src/protocols/ipfs/codegen/file_template.js +2 -2
  171. package/src/protocols/near/{contract.js → contract.ts} +16 -12
  172. package/src/protocols/near/scaffold/manifest.js +2 -5
  173. package/src/protocols/near/scaffold/mapping.js +1 -3
  174. package/src/protocols/near/subgraph.js +3 -6
  175. package/src/protocols/subgraph.ts +12 -0
  176. package/src/protocols/substreams/scaffold/{manifest.js → manifest.ts} +2 -7
  177. package/src/protocols/substreams/subgraph.ts +22 -0
  178. package/src/scaffold/cosmos.test.js +3 -3
  179. package/src/scaffold/ethereum.test.js +4 -4
  180. package/src/scaffold/index.js +7 -7
  181. package/src/scaffold/mapping.js +3 -3
  182. package/src/scaffold/near.test.js +3 -3
  183. package/src/scaffold/schema.js +4 -4
  184. package/src/scaffold/tests.js +72 -58
  185. package/src/schema.ts +26 -0
  186. package/src/{subgraph.js → subgraph.ts} +80 -60
  187. package/src/type-generator.js +20 -20
  188. package/src/validation/contract.js +2 -6
  189. package/src/validation/index.js +1 -1
  190. package/src/validation/manifest.js +24 -22
  191. package/src/validation/schema.test.js +1 -1
  192. package/src/validation/{schema.js → schema.ts} +268 -221
  193. package/src/{watcher.js → watcher.ts} +23 -12
  194. package/tests/cli/globalSetup.js +2 -2
  195. package/tests/cli/globalTeardown.js +2 -2
  196. package/tests/cli/init.test.js +2 -2
  197. package/tests/cli/util.js +7 -13
  198. package/tsconfig.json +18 -0
  199. package/src/cli.js +0 -38
  200. package/src/codegen/types/conversions.js +0 -329
  201. package/src/command-helpers/fs.js +0 -8
  202. package/src/command-helpers/ipfs.js +0 -6
  203. package/src/command-helpers/studio.js +0 -15
  204. package/src/protocols/arweave/subgraph.js +0 -20
  205. package/src/protocols/substreams/subgraph.js +0 -17
  206. package/src/schema.js +0 -23
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const prettier_1 = __importDefault(require("prettier"));
30
+ const graphql = __importStar(require("graphql/language"));
31
+ const immutable_1 = __importDefault(require("immutable"));
32
+ const schema_1 = __importDefault(require("./schema"));
33
+ const { Class, Method, StaticMethod, Param, NamedType, NullableType, ArrayType, } = require('./typescript');
34
+ const formatTS = code => prettier_1.default.format(code, { parser: 'typescript', semi: false });
35
+ const createSchemaCodeGen = schema => new schema_1.default({
36
+ ast: immutable_1.default.fromJS(graphql.parse(schema)),
37
+ });
38
+ const testEntity = (generatedTypes, expectedEntity) => {
39
+ const entity = generatedTypes.find(type => type.name === expectedEntity.name);
40
+ expect(entity instanceof Class).toBe(true);
41
+ expect(entity.extends).toBe('Entity');
42
+ expect(entity.export).toBe(true);
43
+ const { members, methods } = entity;
44
+ expect(members).toStrictEqual(expectedEntity.members);
45
+ for (const expectedMethod of expectedEntity.methods) {
46
+ const method = methods.find(method => method.name === expectedMethod.name);
47
+ expectedMethod.static
48
+ ? expect(method instanceof StaticMethod).toBe(true)
49
+ : expect(method instanceof Method).toBe(true);
50
+ expect(method.params).toStrictEqual(expectedMethod.params);
51
+ expect(method.returnType).toStrictEqual(expectedMethod.returnType);
52
+ expect(formatTS(method.body)).toBe(formatTS(expectedMethod.body));
53
+ }
54
+ expect(methods.length).toBe(expectedEntity.methods.length);
55
+ };
56
+ describe('Schema code generator', () => {
57
+ test('Should generate nothing for non entity types', () => {
58
+ const codegen = createSchemaCodeGen(`
59
+ type Foo {
60
+ foobar: Int
61
+ }
62
+
63
+ type Bar {
64
+ barfoo: Int
65
+ }
66
+ `);
67
+ expect(codegen.generateTypes().size).toBe(0);
68
+ });
69
+ describe('Should generate correct classes for each entity', () => {
70
+ const codegen = createSchemaCodeGen(`
71
+ # just to be sure nothing will be generated from non-entity types alongside regular ones
72
+ type Foo {
73
+ foobar: Int
74
+ }
75
+
76
+ type Account @entity {
77
+ id: ID!
78
+
79
+ # two non primitive types
80
+ description: String
81
+ name: String!
82
+
83
+ # two primitive types (i32)
84
+ age: Int
85
+ count: Int!
86
+
87
+ # derivedFrom
88
+ wallets: [Wallet!] @derivedFrom(field: "account")
89
+ }
90
+
91
+ type Wallet @entity {
92
+ id: ID!
93
+ amount: BigInt!
94
+ account: Account!
95
+ }
96
+ `);
97
+ const generatedTypes = codegen.generateTypes();
98
+ test('Foo is NOT an entity', () => {
99
+ const foo = generatedTypes.find(type => type.name === 'Foo');
100
+ expect(foo).toBe(undefined);
101
+ // Account and Wallet
102
+ expect(generatedTypes.size).toBe(2);
103
+ });
104
+ test('Account is an entity with the correct methods', () => {
105
+ testEntity(generatedTypes, {
106
+ name: 'Account',
107
+ members: [],
108
+ methods: [
109
+ {
110
+ name: 'constructor',
111
+ params: [new Param('id', new NamedType('string'))],
112
+ returnType: undefined,
113
+ body: `
114
+ super()
115
+ this.set('id', Value.fromString(id))
116
+ `,
117
+ },
118
+ {
119
+ name: 'save',
120
+ params: [],
121
+ returnType: new NamedType('void'),
122
+ body: `
123
+ let id = this.get('id')
124
+ assert(id != null, 'Cannot save Account entity without an ID')
125
+ if (id) {
126
+ assert(
127
+ id.kind == ValueKind.STRING,
128
+ \`Entities of type Account must have an ID of type String but the id '\${id.displayData()}' is of type \${id.displayKind()}\`)
129
+ store.set('Account', id.toString(), this)
130
+ }
131
+ `,
132
+ },
133
+ {
134
+ name: 'load',
135
+ static: true,
136
+ params: [new Param('id', new NamedType('string'))],
137
+ returnType: new NullableType(new NamedType('Account')),
138
+ body: `
139
+ return changetype<Account | null>(store.get('Account', id))
140
+ `,
141
+ },
142
+ {
143
+ name: 'get id',
144
+ params: [],
145
+ returnType: new NamedType('string'),
146
+ body: `
147
+ let value = this.get('id')
148
+ return value!.toString()
149
+ `,
150
+ },
151
+ {
152
+ name: 'set id',
153
+ params: [new Param('value', new NamedType('string'))],
154
+ returnType: undefined,
155
+ body: `
156
+ this.set('id', Value.fromString(value))
157
+ `,
158
+ },
159
+ {
160
+ name: 'get description',
161
+ params: [],
162
+ returnType: new NullableType(new NamedType('string')),
163
+ body: `
164
+ let value = this.get('description')
165
+ if (!value || value.kind == ValueKind.NULL) {
166
+ return null
167
+ } else {
168
+ return value.toString()
169
+ }
170
+ `,
171
+ },
172
+ {
173
+ name: 'set description',
174
+ params: [new Param('value', new NullableType(new NamedType('string')))],
175
+ returnType: undefined,
176
+ body: `
177
+ if (!value) {
178
+ this.unset('description')
179
+ } else {
180
+ this.set('description', Value.fromString(<string>value))
181
+ }
182
+ `,
183
+ },
184
+ {
185
+ name: 'get name',
186
+ params: [],
187
+ returnType: new NamedType('string'),
188
+ body: `
189
+ let value = this.get('name')
190
+ return value!.toString()
191
+ `,
192
+ },
193
+ {
194
+ name: 'set name',
195
+ params: [new Param('value', new NamedType('string'))],
196
+ returnType: undefined,
197
+ body: `
198
+ this.set('name', Value.fromString(value))
199
+ `,
200
+ },
201
+ {
202
+ name: 'get age',
203
+ params: [],
204
+ returnType: new NamedType('i32'),
205
+ body: `
206
+ let value = this.get('age')
207
+ return value!.toI32()
208
+ `,
209
+ },
210
+ {
211
+ name: 'set age',
212
+ params: [new Param('value', new NamedType('i32'))],
213
+ returnType: undefined,
214
+ body: `
215
+ this.set('age', Value.fromI32(value))
216
+ `,
217
+ },
218
+ {
219
+ name: 'get count',
220
+ params: [],
221
+ returnType: new NamedType('i32'),
222
+ body: `
223
+ let value = this.get('count')
224
+ return value!.toI32()
225
+ `,
226
+ },
227
+ {
228
+ name: 'set count',
229
+ params: [new Param('value', new NamedType('i32'))],
230
+ returnType: undefined,
231
+ body: `
232
+ this.set('count', Value.fromI32(value))
233
+ `,
234
+ },
235
+ {
236
+ name: 'get wallets',
237
+ params: [],
238
+ returnType: new NullableType(new ArrayType(new NamedType('string'))),
239
+ body: `
240
+ let value = this.get('wallets')
241
+ if (!value || value.kind == ValueKind.NULL) {
242
+ return null
243
+ } else {
244
+ return value.toStringArray()
245
+ }
246
+ `,
247
+ },
248
+ {
249
+ name: 'set wallets',
250
+ params: [
251
+ new Param('value', new NullableType(new ArrayType(new NamedType('string')))),
252
+ ],
253
+ returnType: undefined,
254
+ body: `
255
+ if (!value) {
256
+ this.unset('wallets')
257
+ } else {
258
+ this.set('wallets', Value.fromStringArray(<Array<string>>value))
259
+ }
260
+ `,
261
+ },
262
+ ],
263
+ });
264
+ });
265
+ test('Wallet is an entity with the correct methods', () => {
266
+ testEntity(generatedTypes, {
267
+ name: 'Wallet',
268
+ members: [],
269
+ methods: [
270
+ {
271
+ name: 'constructor',
272
+ params: [new Param('id', new NamedType('string'))],
273
+ returnType: undefined,
274
+ body: `
275
+ super()
276
+ this.set('id', Value.fromString(id))
277
+ `,
278
+ },
279
+ {
280
+ name: 'save',
281
+ params: [],
282
+ returnType: new NamedType('void'),
283
+ body: `
284
+ let id = this.get('id')
285
+ assert(id != null, 'Cannot save Wallet entity without an ID')
286
+ if (id) {
287
+ assert(
288
+ id.kind == ValueKind.STRING,
289
+ \`Entities of type Wallet must have an ID of type String but the id '\${id.displayData()}' is of type \${id.displayKind()}\`)
290
+ store.set('Wallet', id.toString(), this)
291
+ }
292
+ `,
293
+ },
294
+ {
295
+ name: 'load',
296
+ static: true,
297
+ params: [new Param('id', new NamedType('string'))],
298
+ returnType: new NullableType(new NamedType('Wallet')),
299
+ body: `
300
+ return changetype<Wallet | null>(store.get('Wallet', id))
301
+ `,
302
+ },
303
+ {
304
+ name: 'get id',
305
+ params: [],
306
+ returnType: new NamedType('string'),
307
+ body: `
308
+ let value = this.get('id')
309
+ return value!.toString()
310
+ `,
311
+ },
312
+ {
313
+ name: 'set id',
314
+ params: [new Param('value', new NamedType('string'))],
315
+ returnType: undefined,
316
+ body: `
317
+ this.set('id', Value.fromString(value))
318
+ `,
319
+ },
320
+ {
321
+ name: 'get amount',
322
+ params: [],
323
+ returnType: new NamedType('BigInt'),
324
+ body: `
325
+ let value = this.get('amount')
326
+ return value!.toBigInt()
327
+ `,
328
+ },
329
+ {
330
+ name: 'set amount',
331
+ params: [new Param('value', new NamedType('BigInt'))],
332
+ returnType: undefined,
333
+ body: `
334
+ this.set('amount', Value.fromBigInt(value))
335
+ `,
336
+ },
337
+ {
338
+ name: 'get account',
339
+ params: [],
340
+ returnType: new NamedType('string'),
341
+ body: `
342
+ let value = this.get('account')
343
+ return value!.toString()
344
+ `,
345
+ },
346
+ {
347
+ name: 'set account',
348
+ params: [new Param('value', new NamedType('string'))],
349
+ returnType: undefined,
350
+ body: `
351
+ this.set('account', Value.fromString(value))
352
+ `,
353
+ },
354
+ ],
355
+ });
356
+ });
357
+ });
358
+ test('Should handle references with Bytes id types', () => {
359
+ const codegen = createSchemaCodeGen(`
360
+ interface Employee {
361
+ id: Bytes!
362
+ name: String!
363
+ }
364
+
365
+ type Worker implements Employee @entity {
366
+ id: Bytes!
367
+ name: String!
368
+ }
369
+
370
+ type Task @entity {
371
+ id: Bytes!
372
+ employee: Employee!
373
+ worker: Worker!
374
+ }
375
+ `);
376
+ const generatedTypes = codegen.generateTypes();
377
+ testEntity(generatedTypes, {
378
+ name: 'Task',
379
+ members: [],
380
+ methods: [
381
+ {
382
+ name: 'constructor',
383
+ params: [new Param('id', new NamedType('Bytes'))],
384
+ returnType: undefined,
385
+ body: "\n super()\n this.set('id', Value.fromBytes(id))\n ",
386
+ },
387
+ {
388
+ name: 'save',
389
+ params: [],
390
+ returnType: new NamedType('void'),
391
+ body: '\n' +
392
+ " let id = this.get('id')\n" +
393
+ ' assert(id != null,\n' +
394
+ " 'Cannot save Task entity without an ID')\n" +
395
+ ' if (id) {\n' +
396
+ ' assert(id.kind == ValueKind.BYTES,\n' +
397
+ " `Entities of type Task must have an ID of type Bytes but the id '${id.displayData()}' is of type ${id.displayKind()}`)\n" +
398
+ " store.set('Task', id.toBytes().toHexString(), this)\n" +
399
+ ' }',
400
+ },
401
+ {
402
+ name: 'load',
403
+ static: true,
404
+ params: [new Param('id', new NamedType('Bytes'))],
405
+ returnType: new NullableType(new NamedType('Task')),
406
+ body: '\n' +
407
+ " return changetype<Task | null>(store.get('Task', id.toHexString()))\n" +
408
+ ' ',
409
+ },
410
+ {
411
+ name: 'get id',
412
+ params: [],
413
+ returnType: new NamedType('Bytes'),
414
+ body: '\n' +
415
+ " let value = this.get('id')\n" +
416
+ ' return value!.toBytes()\n' +
417
+ ' ',
418
+ },
419
+ {
420
+ name: 'set id',
421
+ params: [new Param('value', new NamedType('Bytes'))],
422
+ returnType: undefined,
423
+ body: "\n this.set('id', Value.fromBytes(value))\n ",
424
+ },
425
+ {
426
+ name: 'get employee',
427
+ params: [],
428
+ returnType: new NamedType('Bytes'),
429
+ body: '\n' +
430
+ " let value = this.get('employee')\n" +
431
+ ' return value!.toBytes()\n' +
432
+ ' ',
433
+ },
434
+ {
435
+ name: 'set employee',
436
+ params: [new Param('value', new NamedType('Bytes'))],
437
+ returnType: undefined,
438
+ body: "\n this.set('employee', Value.fromBytes(value))\n ",
439
+ },
440
+ {
441
+ name: 'get worker',
442
+ params: [],
443
+ returnType: new NamedType('Bytes'),
444
+ body: '\n' +
445
+ " let value = this.get('worker')\n" +
446
+ ' return value!.toBytes()\n' +
447
+ ' ',
448
+ },
449
+ {
450
+ name: 'set worker',
451
+ params: [new Param('value', new NamedType('Bytes'))],
452
+ returnType: undefined,
453
+ body: "\n this.set('worker', Value.fromBytes(value))\n ",
454
+ },
455
+ ],
456
+ });
457
+ });
458
+ });
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const immutable_1 = __importDefault(require("immutable"));
30
+ const file_template_1 = __importDefault(require("../protocols/ipfs/codegen/file_template"));
31
+ const tsCodegen = __importStar(require("./typescript"));
32
+ class DataSourceTemplateCodeGenerator {
33
+ template;
34
+ protocolTemplateCodeGen;
35
+ constructor(template, protocol) {
36
+ this.template = template;
37
+ let kind = template.get('kind');
38
+ if (kind.split('/')[0] == protocol.name) {
39
+ this.protocolTemplateCodeGen = protocol.getTemplateCodeGen(template);
40
+ }
41
+ else if (kind == 'file/ipfs') {
42
+ this.protocolTemplateCodeGen = new file_template_1.default(template);
43
+ }
44
+ }
45
+ generateModuleImports() {
46
+ return [
47
+ tsCodegen.moduleImports([
48
+ ...this.protocolTemplateCodeGen.generateModuleImports(),
49
+ 'DataSourceTemplate',
50
+ 'DataSourceContext',
51
+ ], '@graphprotocol/graph-ts'),
52
+ ];
53
+ }
54
+ generateTypes() {
55
+ return immutable_1.default.List([this._generateTemplateType()]);
56
+ }
57
+ _generateTemplateType() {
58
+ let name = this.template.get('name');
59
+ let klass = tsCodegen.klass(name, { export: true, extends: 'DataSourceTemplate' });
60
+ klass.addMethod(this.protocolTemplateCodeGen.generateCreateMethod());
61
+ klass.addMethod(this.protocolTemplateCodeGen.generateCreateWithContextMethod());
62
+ return klass;
63
+ }
64
+ }
65
+ exports.default = DataSourceTemplateCodeGenerator;