Skip to content

Commit aa7ae12

Browse files
committed
fix: generate types for mappings when int8 is used as id
1 parent 4311d0e commit aa7ae12

File tree

1 file changed

+72
-7
lines changed

1 file changed

+72
-7
lines changed

packages/cli/src/codegen/schema.ts

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import * as util from './util.js';
1616
class IdField {
1717
static BYTES = Symbol('Bytes');
1818
static STRING = Symbol('String');
19+
static INT8 = Symbol('Int8');
1920

2021
private kind: typeof IdField.BYTES | typeof IdField.STRING;
2122

@@ -27,35 +28,99 @@ class IdField {
2728
throw Error('id field must be a named type');
2829
}
2930
const typeName = idField.type.type.name.value;
30-
this.kind = typeName === 'Bytes' ? IdField.BYTES : IdField.STRING;
31+
switch (typeName) {
32+
case 'Bytes':
33+
this.kind = IdField.BYTES;
34+
break;
35+
case 'Int8':
36+
this.kind = IdField.INT8;
37+
break;
38+
default:
39+
this.kind = IdField.STRING;
40+
break;
41+
}
3142
}
3243

3344
typeName() {
34-
return this.kind === IdField.BYTES ? 'Bytes' : 'string';
45+
switch (this.kind) {
46+
case IdField.BYTES:
47+
return 'Bytes';
48+
case IdField.INT8:
49+
return 'Int8';
50+
case IdField.STRING:
51+
return 'string';
52+
default:
53+
return 'string';
54+
}
3555
}
3656

3757
gqlTypeName() {
38-
return this.kind === IdField.BYTES ? 'Bytes' : 'String';
58+
switch (this.kind) {
59+
case IdField.BYTES:
60+
return 'Bytes';
61+
case IdField.INT8:
62+
return 'Int8';
63+
case IdField.STRING:
64+
return 'String';
65+
default:
66+
return 'String';
67+
}
3968
}
4069

4170
tsNamedType() {
4271
return tsCodegen.namedType(this.typeName());
4372
}
4473

4574
tsValueFrom() {
46-
return this.kind === IdField.BYTES ? 'Value.fromBytes(id)' : 'Value.fromString(id)';
75+
switch (this.kind) {
76+
case IdField.BYTES:
77+
return 'Value.fromBytes(id)';
78+
case IdField.INT8:
79+
return 'Value.fromI64(id)';
80+
case IdField.STRING:
81+
return 'Value.fromString(id)';
82+
default:
83+
return 'Value.fromString(id)';
84+
}
4785
}
4886

4987
tsValueKind() {
50-
return this.kind === IdField.BYTES ? 'ValueKind.BYTES' : 'ValueKind.STRING';
88+
switch (this.kind) {
89+
case IdField.BYTES:
90+
return 'ValueKind.BYTES';
91+
case IdField.INT8:
92+
return 'ValueKind.INT8';
93+
case IdField.STRING:
94+
return 'ValueKind.STRING';
95+
default:
96+
return 'ValueKind.STRING';
97+
}
5198
}
5299

53100
tsValueToString() {
54-
return this.kind == IdField.BYTES ? 'id.toBytes().toHexString()' : 'id.toString()';
101+
switch (this.kind) {
102+
case IdField.BYTES:
103+
return 'id.toBytes().toHexString()';
104+
case IdField.INT8:
105+
return 'id.toI64().toString()';
106+
case IdField.STRING:
107+
return 'id.toString()';
108+
default:
109+
return 'id.toString()';
110+
}
55111
}
56112

57113
tsToString() {
58-
return this.kind == IdField.BYTES ? 'id.toHexString()' : 'id';
114+
switch (this.kind) {
115+
case IdField.BYTES:
116+
return 'id.toHexString()';
117+
case IdField.INT8:
118+
return 'id.toString()';
119+
case IdField.STRING:
120+
return 'id';
121+
default:
122+
return 'id';
123+
}
59124
}
60125

61126
static fromFields(fields: readonly FieldDefinitionNode[] | undefined) {

0 commit comments

Comments
 (0)