@graphprotocol/graph-cli 0.37.4 → 0.37.5

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