@smartive/graphql-magic 16.3.7 → 16.3.8

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 (76) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/dist/bin/gqm.cjs +37 -35
  3. package/dist/cjs/index.cjs +51 -48
  4. package/dist/esm/api/execute.d.ts +1 -5
  5. package/dist/esm/api/execute.js.map +1 -1
  6. package/dist/esm/client/queries.d.ts +4 -4
  7. package/dist/esm/client/queries.js.map +1 -1
  8. package/dist/esm/db/generate.js +2 -0
  9. package/dist/esm/db/generate.js.map +1 -1
  10. package/dist/esm/migrations/generate.js +1 -1
  11. package/dist/esm/migrations/generate.js.map +1 -1
  12. package/dist/esm/models/models.d.ts +1 -1
  13. package/dist/esm/models/models.js.map +1 -1
  14. package/dist/esm/models/utils.d.ts +8 -12
  15. package/dist/esm/models/utils.js +3 -5
  16. package/dist/esm/models/utils.js.map +1 -1
  17. package/dist/esm/permissions/check.js +0 -15
  18. package/dist/esm/permissions/check.js.map +1 -1
  19. package/dist/esm/permissions/generate.d.ts +5 -19
  20. package/dist/esm/permissions/generate.js.map +1 -1
  21. package/dist/esm/resolvers/arguments.js.map +1 -1
  22. package/dist/esm/resolvers/filters.js +0 -2
  23. package/dist/esm/resolvers/filters.js.map +1 -1
  24. package/dist/esm/resolvers/mutations.js +5 -4
  25. package/dist/esm/resolvers/mutations.js.map +1 -1
  26. package/dist/esm/resolvers/node.js.map +1 -1
  27. package/dist/esm/resolvers/resolver.d.ts +2 -2
  28. package/dist/esm/resolvers/resolver.js +1 -1
  29. package/dist/esm/resolvers/resolver.js.map +1 -1
  30. package/dist/esm/resolvers/selects.js.map +1 -1
  31. package/dist/esm/resolvers/utils.d.ts +2 -6
  32. package/dist/esm/resolvers/utils.js +4 -2
  33. package/dist/esm/resolvers/utils.js.map +1 -1
  34. package/dist/esm/schema/utils.d.ts +4 -4
  35. package/dist/esm/schema/utils.js +31 -30
  36. package/dist/esm/schema/utils.js.map +1 -1
  37. package/dist/esm/utils/dates.d.ts +2 -4
  38. package/dist/esm/utils/dates.js +1 -3
  39. package/dist/esm/utils/dates.js.map +1 -1
  40. package/docs/docs/1-tutorial.md +1 -1
  41. package/eslint.config.mjs +42 -0
  42. package/migrations/20230912185644_setup.ts +1 -1
  43. package/package.json +6 -11
  44. package/src/api/execute.ts +1 -0
  45. package/src/bin/gqm/codegen.ts +1 -1
  46. package/src/client/gql.ts +1 -1
  47. package/src/client/mutations.ts +8 -8
  48. package/src/client/queries.ts +15 -14
  49. package/src/db/generate.ts +8 -5
  50. package/src/migrations/generate.ts +26 -22
  51. package/src/models/models.ts +24 -9
  52. package/src/models/mutation-hook.ts +1 -1
  53. package/src/models/utils.ts +8 -7
  54. package/src/permissions/check.ts +22 -30
  55. package/src/permissions/generate.ts +8 -25
  56. package/src/resolvers/arguments.ts +7 -2
  57. package/src/resolvers/filters.ts +8 -10
  58. package/src/resolvers/mutations.ts +19 -16
  59. package/src/resolvers/node.ts +3 -2
  60. package/src/resolvers/resolver.ts +11 -10
  61. package/src/resolvers/selects.ts +4 -3
  62. package/src/resolvers/utils.ts +15 -10
  63. package/src/schema/generate.ts +11 -11
  64. package/src/schema/utils.ts +84 -82
  65. package/src/utils/dates.ts +3 -3
  66. package/tests/generated/api/index.ts +2 -2
  67. package/tests/generated/client/index.ts +1 -193
  68. package/tests/generated/db/index.ts +4 -4
  69. package/tests/generated/models.json +2 -1
  70. package/tests/generated/schema.graphql +1 -1
  71. package/tests/utils/graphql-client.ts +49 -0
  72. package/tests/utils/models.ts +1 -0
  73. package/tests/utils/server.ts +4 -5
  74. package/tsconfig.eslint.json +18 -3
  75. package/tsconfig.json +3 -1
  76. package/.eslintrc +0 -13
@@ -21,17 +21,17 @@ import { FieldResolverNode, ResolverNode } from './node';
21
21
  export const ID_ALIAS = 'ID';
22
22
  export const TYPE_ALIAS = 'TYPE';
23
23
 
24
- export type VariableValues = {
25
- [variableName: string]: Value;
26
- };
24
+ export type VariableValues = Record<string, Value>;
27
25
 
28
26
  export const getTypeName = (t: TypeNode): string => {
29
27
  switch (t.kind) {
30
28
  case 'ListType':
31
29
  case 'NonNullType':
32
30
  return getTypeName(t.type);
33
- default:
31
+ case 'NamedType':
34
32
  return t.name.value;
33
+ default:
34
+ throw new Error(`Unknown type node kind: ${t.kind}`);
35
35
  }
36
36
  };
37
37
 
@@ -67,14 +67,14 @@ export type Entry = {
67
67
 
68
68
  export function hydrate<T extends Entry>(
69
69
  node: FieldResolverNode,
70
- raw: { [key: string]: undefined | null | string | Date | number }[]
70
+ raw: Record<string, undefined | null | string | Date | number>[],
71
71
  ): T[] {
72
72
  const resultAlias = node.resultAlias;
73
73
  const res = raw.map((entry) => {
74
74
  const res: any = {};
75
75
  outer: for (const [column, value] of Object.entries(entry)) {
76
76
  let current = res;
77
- const [, columnWithoutField, fieldName] = column.match(/^(.*\w)__(\w+)$/);
77
+ const [, columnWithoutField, fieldName] = column.match(/^(.*\w)__(\w+)$/)!;
78
78
  const longColumn = node.ctx.aliases.getLong(columnWithoutField);
79
79
  const longColumnWithoutRoot = longColumn.replace(new RegExp(`^${resultAlias}(__)?`), '');
80
80
  const allParts = [resultAlias, ...(longColumnWithoutRoot ? longColumnWithoutRoot.split('__') : []), fieldName];
@@ -92,6 +92,7 @@ export function hydrate<T extends Entry>(
92
92
  }
93
93
  current[it(fieldName)] = value;
94
94
  }
95
+
95
96
  return res[resultAlias];
96
97
  });
97
98
 
@@ -102,6 +103,7 @@ export const ors = (query: Knex.QueryBuilder, [first, ...rest]: ((query: Knex.Qu
102
103
  if (!first) {
103
104
  return query;
104
105
  }
106
+
105
107
  return query.where((subQuery) => {
106
108
  void subQuery.where((subSubQuery) => {
107
109
  void first(subSubQuery);
@@ -117,7 +119,7 @@ export const ors = (query: Knex.QueryBuilder, [first, ...rest]: ((query: Knex.Qu
117
119
  export const getNameOrAlias = (node: FieldNode) => {
118
120
  const name = node.alias ? node.alias.value : node.name.value;
119
121
 
120
- if ([ID_ALIAS].indexOf(name) >= 0) {
122
+ if ([ID_ALIAS].includes(name)) {
121
123
  throw new UserInputError(`"${name}" can not be used as alias since it's a reserved word`);
122
124
  }
123
125
 
@@ -140,7 +142,7 @@ export const applyJoins = (aliases: AliasGenerator, query: Knex.QueryBuilder, jo
140
142
  void query.leftJoin(
141
143
  `${table2Name} as ${table2ShortAlias}`,
142
144
  `${table1ShortAlias}.${column1}`,
143
- `${table2ShortAlias}.${column2}`
145
+ `${table2ShortAlias}.${column2}`,
144
146
  );
145
147
  }
146
148
  };
@@ -154,7 +156,7 @@ export const addJoin = (
154
156
  table2Name: string,
155
157
  table2Alias: string,
156
158
  column1: string,
157
- column2: string
159
+ column2: string,
158
160
  ) => {
159
161
  const join = { table1Alias, table2Name, table2Alias, column1, column2 };
160
162
  const existingJoin = joins.find((j) => j.table2Alias === join.table2Alias);
@@ -173,6 +175,7 @@ export class AliasGenerator {
173
175
  public getShort(long?: string) {
174
176
  if (!long) {
175
177
  const short = `a${Object.keys(this.reverse).length}`;
178
+
176
179
  return (this.reverse[short] = short);
177
180
  }
178
181
 
@@ -187,6 +190,7 @@ export class AliasGenerator {
187
190
  }
188
191
 
189
192
  this.reverse[short] = long;
193
+
190
194
  return short;
191
195
  }
192
196
 
@@ -201,6 +205,7 @@ export const getColumnName = (field: EntityField) =>
201
205
  field.kind === 'relation' ? field.foreignKey || `${field.name}Id` : field.name;
202
206
 
203
207
  export const getColumn = (node: Pick<ResolverNode, 'model' | 'ctx' | 'rootTableAlias' | 'tableAlias'>, key: string) => {
204
- const field = node.model.fields.find((field) => getColumnName(field) === key);
208
+ const field = node.model.fields.find((field) => getColumnName(field) === key)!;
209
+
205
210
  return `${node.ctx.aliases.getShort(field.inherited ? node.rootTableAlias : node.tableAlias)}.${key}`;
206
211
  };
@@ -22,12 +22,12 @@ export const generateDefinitions = ({
22
22
  ...inputs.map((model) => input(model.name, model.fields)),
23
23
  ...objects
24
24
  .filter((model) =>
25
- entities.some((m) => m.creatable && m.fields.some((f) => f.creatable && f.kind === 'json' && f.type === model.name))
25
+ entities.some((m) => m.creatable && m.fields.some((f) => f.creatable && f.kind === 'json' && f.type === model.name)),
26
26
  )
27
27
  .map((model) => input(`Create${model.name}`, model.fields)),
28
28
  ...objects
29
29
  .filter((model) =>
30
- entities.some((m) => m.updatable && m.fields.some((f) => f.updatable && f.kind === 'json' && f.type === model.name))
30
+ entities.some((m) => m.updatable && m.fields.some((f) => f.updatable && f.kind === 'json' && f.type === model.name)),
31
31
  )
32
32
  .map((model) => input(`Update${model.name}`, model.fields)),
33
33
 
@@ -58,7 +58,7 @@ export const generateDefinitions = ({
58
58
  ],
59
59
  })),
60
60
  ],
61
- [...(model.parent ? [model.parent] : []), ...(model.interfaces || [])]
61
+ [...(model.parent ? [model.parent] : []), ...(model.interfaces || [])],
62
62
  ),
63
63
  input(`${model.name}Where`, [
64
64
  ...model.fields
@@ -112,13 +112,13 @@ export const generateDefinitions = ({
112
112
  ]),
113
113
  input(
114
114
  `${model.name}WhereUnique`,
115
- model.fields.filter(({ unique }) => unique).map((field) => ({ name: field.name, type: field.type }))
115
+ model.fields.filter(({ unique }) => unique).map((field) => ({ name: field.name, type: field.type })),
116
116
  ),
117
117
  ...(model.fields.some(({ orderable }) => orderable)
118
118
  ? [
119
119
  input(
120
120
  `${model.name}OrderBy`,
121
- model.fields.filter(({ orderable }) => orderable).map(({ name }) => ({ name, type: 'Order' }))
121
+ model.fields.filter(({ orderable }) => orderable).map(({ name }) => ({ name, type: 'Order' })),
122
122
  ),
123
123
  ]
124
124
  : []),
@@ -139,9 +139,9 @@ export const generateDefinitions = ({
139
139
  type: field.kind === 'json' ? `Create${field.type}` : field.type,
140
140
  list: field.list,
141
141
  nonNull: field.nonNull && field.defaultValue === undefined,
142
- }
143
- )
144
- )
142
+ },
143
+ ),
144
+ ),
145
145
  );
146
146
  }
147
147
 
@@ -158,9 +158,9 @@ export const generateDefinitions = ({
158
158
  name: field.name,
159
159
  type: field.kind === 'json' ? `Update${field.type}` : field.type,
160
160
  list: field.list,
161
- }
162
- )
163
- )
161
+ },
162
+ ),
163
+ ),
164
164
  );
165
165
  }
166
166
  }
@@ -1,9 +1,11 @@
1
1
  import { Dayjs } from 'dayjs';
2
2
  import {
3
- ArgumentNode,
3
+ ConstArgumentNode,
4
+ ConstDirectiveNode,
5
+ ConstObjectFieldNode,
6
+ ConstValueNode,
4
7
  DefinitionNode,
5
8
  DirectiveDefinitionNode,
6
- DirectiveNode,
7
9
  DocumentNode,
8
10
  EnumTypeDefinitionNode,
9
11
  EnumValueDefinitionNode,
@@ -11,16 +13,15 @@ import {
11
13
  InputObjectTypeDefinitionNode,
12
14
  InputValueDefinitionNode,
13
15
  InterfaceTypeDefinitionNode,
16
+ Kind,
14
17
  ListTypeNode,
15
18
  NamedTypeNode,
16
19
  NameNode,
17
20
  NonNullTypeNode,
18
- ObjectFieldNode,
19
21
  ObjectTypeDefinitionNode,
20
22
  ScalarTypeDefinitionNode,
21
23
  StringValueNode,
22
24
  TypeNode,
23
- ValueNode,
24
25
  } from 'graphql';
25
26
  import { DateTime } from 'luxon';
26
27
  import { Directive, Value, Values } from '../values';
@@ -46,71 +47,71 @@ export type DirectiveLocation =
46
47
  | 'INPUT_OBJECT';
47
48
 
48
49
  export const document = (definitions: DefinitionNode[]): DocumentNode => ({
49
- kind: 'Document',
50
+ kind: Kind.DOCUMENT,
50
51
  definitions,
51
52
  });
52
53
 
53
54
  export const directive = (nme: string, locations: DirectiveLocation[], fields?: Field[]): DirectiveDefinitionNode => ({
54
55
  name: name(nme),
55
56
  repeatable: false,
56
- kind: 'DirectiveDefinition',
57
+ kind: Kind.DIRECTIVE_DEFINITION,
57
58
  arguments: fields && inputValues(fields),
58
59
  locations: locations.map(name),
59
60
  });
60
61
 
61
62
  export const scalar = (nme: string): ScalarTypeDefinitionNode => ({
62
63
  name: name(nme),
63
- kind: 'ScalarTypeDefinition',
64
+ kind: Kind.SCALAR_TYPE_DEFINITION,
64
65
  });
65
66
 
66
67
  export const input = (nme: string, fields: Field[], dvs?: Directive[]): InputObjectTypeDefinitionNode => ({
67
68
  name: name(nme),
68
69
  fields: inputValues(fields),
69
- kind: 'InputObjectTypeDefinition',
70
+ kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,
70
71
  directives: directives(dvs),
71
72
  });
72
73
 
73
74
  export const object = (nme: string, fds: Field[], interfaces?: string[], dvs?: Directive[]): ObjectTypeDefinitionNode => ({
74
75
  name: name(nme),
75
76
  fields: fields(fds),
76
- kind: 'ObjectTypeDefinition',
77
- interfaces: interfaces && interfaces.map((i) => namedType(i)),
77
+ kind: Kind.OBJECT_TYPE_DEFINITION,
78
+ interfaces: interfaces?.map((i) => namedType(i)),
78
79
  directives: directives(dvs),
79
80
  });
80
81
 
81
82
  export const iface = (nme: string, fds: Field[], interfaces?: string[], dvs?: Directive[]): InterfaceTypeDefinitionNode => ({
82
83
  name: name(nme),
83
84
  fields: fields(fds),
84
- kind: 'InterfaceTypeDefinition',
85
- interfaces: interfaces && interfaces.map((i) => namedType(i)),
85
+ kind: Kind.INTERFACE_TYPE_DEFINITION,
86
+ interfaces: interfaces?.map((i) => namedType(i)),
86
87
  directives: directives(dvs),
87
88
  });
88
89
 
89
90
  export const inputValues = (fields: Field[]): InputValueDefinitionNode[] =>
90
91
  fields.map(
91
92
  (field): InputValueDefinitionNode => ({
92
- kind: 'InputValueDefinition',
93
+ kind: Kind.INPUT_VALUE_DEFINITION,
93
94
  name: name(field.name),
94
95
  type: fieldType(field),
95
96
  defaultValue: field.defaultValue === undefined ? undefined : value(field.defaultValue),
96
97
  directives: directives(field.directives),
97
- })
98
+ }),
98
99
  );
99
100
 
100
101
  export const fields = (fields: Field[]): FieldDefinitionNode[] =>
101
102
  fields.map(
102
103
  (field): FieldDefinitionNode => ({
103
- kind: 'FieldDefinition',
104
+ kind: Kind.FIELD_DEFINITION,
104
105
  name: name(field.name),
105
106
  type: fieldType(field),
106
107
  arguments: field.args?.map((arg) => ({
107
- kind: 'InputValueDefinition',
108
+ kind: Kind.INPUT_VALUE_DEFINITION,
108
109
  name: name(arg.name),
109
110
  type: fieldType(arg),
110
111
  defaultValue: arg.defaultValue === undefined ? undefined : value(arg.defaultValue),
111
112
  })),
112
113
  directives: directives(field.directives),
113
- })
114
+ }),
114
115
  );
115
116
 
116
117
  export const inputValue = (
@@ -118,62 +119,62 @@ export const inputValue = (
118
119
  type: TypeNode,
119
120
  dvs?: Directive[],
120
121
  description?: string,
121
- defaultValue?: Value
122
+ defaultValue?: Value,
122
123
  ): InputValueDefinitionNode => ({
123
124
  name: name(nme),
124
125
  type,
125
- kind: 'InputValueDefinition',
126
+ kind: Kind.INPUT_VALUE_DEFINITION,
126
127
  directives: directives(dvs),
127
128
  defaultValue: defaultValue ? value(defaultValue) : undefined,
128
129
  description: description ? (value(description) as StringValueNode) : undefined,
129
130
  });
130
131
 
131
- export const directives = (directives?: Directive[]): DirectiveNode[] | undefined =>
132
+ export const directives = (directives?: Directive[]): ConstDirectiveNode[] | undefined =>
132
133
  directives?.map(
133
- (directive): DirectiveNode => ({
134
- kind: 'Directive',
134
+ (directive): ConstDirectiveNode => ({
135
+ kind: Kind.DIRECTIVE,
135
136
  name: name(directive.name),
136
137
  arguments: args(directive.values),
137
- })
138
+ }),
138
139
  );
139
140
 
140
- export const args = (ags: Values | undefined): ReadonlyArray<ArgumentNode> | undefined =>
141
+ export const args = (ags: Values | undefined): readonly ConstArgumentNode[] | undefined =>
141
142
  ags?.map(
142
- (argument): ArgumentNode => ({
143
- kind: 'Argument',
143
+ (argument): ConstArgumentNode => ({
144
+ kind: Kind.ARGUMENT,
144
145
  name: name(argument.name),
145
146
  value: value(argument.values),
146
- })
147
+ }),
147
148
  );
148
149
 
149
150
  export const enm = (nme: string, values: string[]): EnumTypeDefinitionNode => ({
150
151
  name: name(nme),
151
- kind: 'EnumTypeDefinition',
152
+ kind: Kind.ENUM_TYPE_DEFINITION,
152
153
  values: values.map(
153
154
  (v): EnumValueDefinitionNode => ({
154
- kind: 'EnumValueDefinition',
155
+ kind: Kind.ENUM_VALUE_DEFINITION,
155
156
  name: name(v),
156
- })
157
+ }),
157
158
  ),
158
159
  });
159
160
 
160
161
  export const nonNull = (type: NamedTypeNode | ListTypeNode): NonNullTypeNode => ({
161
162
  type,
162
- kind: 'NonNullType',
163
+ kind: Kind.NON_NULL_TYPE,
163
164
  });
164
165
 
165
166
  export const namedType = (nme: string): NamedTypeNode => ({
166
- kind: 'NamedType',
167
+ kind: Kind.NAMED_TYPE,
167
168
  name: name(nme),
168
169
  });
169
170
 
170
171
  export const list = (type: TypeNode): ListTypeNode => ({
171
172
  type,
172
- kind: 'ListType',
173
+ kind: Kind.LIST_TYPE,
173
174
  });
174
175
 
175
176
  export const name = (name: string): NameNode => ({
176
- kind: 'Name',
177
+ kind: Kind.NAME,
177
178
  value: name,
178
179
  });
179
180
 
@@ -185,61 +186,62 @@ export const fieldType = (field: Field) => {
185
186
  if (field.nonNull) {
186
187
  type = nonNull(type);
187
188
  }
189
+
188
190
  return type;
189
191
  };
190
192
 
191
- export const value = (val: Value = null): ValueNode =>
193
+ export const value = (val: Value = null): ConstValueNode =>
192
194
  val === null
193
195
  ? {
194
- kind: 'NullValue',
196
+ kind: Kind.NULL,
195
197
  }
196
198
  : typeof val === 'boolean'
197
- ? {
198
- kind: 'BooleanValue',
199
- value: val,
200
- }
201
- : typeof val === 'number'
202
- ? {
203
- kind: 'IntValue',
204
- value: `${val}`,
205
- }
206
- : typeof val === 'string'
207
- ? {
208
- kind: 'StringValue',
209
- value: val,
210
- }
211
- : val instanceof Symbol
212
- ? {
213
- kind: 'EnumValue',
214
- value: val.description,
215
- }
216
- : Array.isArray(val)
217
- ? {
218
- kind: 'ListValue',
219
- values: val.map(value),
220
- }
221
- : val instanceof DateTime
222
- ? {
223
- kind: 'StringValue',
224
- value: val.toString(),
225
- }
226
- : val instanceof Dayjs
227
- ? {
228
- kind: 'StringValue',
229
- value: val.toISOString(),
230
- }
231
- : typeof val === 'object'
232
- ? {
233
- kind: 'ObjectValue',
234
- fields: Object.keys(val).map(
235
- (nme): ObjectFieldNode => ({
236
- kind: 'ObjectField',
237
- name: name(nme),
238
- value: value(val[nme]),
239
- })
240
- ),
241
- }
242
- : doThrow(`Unsupported value ${val}`);
199
+ ? {
200
+ kind: Kind.BOOLEAN,
201
+ value: val,
202
+ }
203
+ : typeof val === 'number'
204
+ ? {
205
+ kind: Kind.INT,
206
+ value: `${val}`,
207
+ }
208
+ : typeof val === 'string'
209
+ ? {
210
+ kind: Kind.STRING,
211
+ value: val,
212
+ }
213
+ : val instanceof Symbol
214
+ ? {
215
+ kind: Kind.ENUM,
216
+ value: val.description!,
217
+ }
218
+ : Array.isArray(val)
219
+ ? {
220
+ kind: Kind.LIST,
221
+ values: val.map(value),
222
+ }
223
+ : val instanceof DateTime
224
+ ? {
225
+ kind: Kind.STRING,
226
+ value: val.toString(),
227
+ }
228
+ : val instanceof Dayjs
229
+ ? {
230
+ kind: Kind.STRING,
231
+ value: val.toISOString(),
232
+ }
233
+ : typeof val === 'object'
234
+ ? {
235
+ kind: Kind.OBJECT,
236
+ fields: Object.keys(val).map(
237
+ (nme): ConstObjectFieldNode => ({
238
+ kind: Kind.OBJECT_FIELD,
239
+ name: name(nme),
240
+ value: value(val[nme]),
241
+ }),
242
+ ),
243
+ }
244
+ : doThrow(`Unsupported value ${val}`);
243
245
 
244
246
  const doThrow = (message: string) => {
245
247
  throw new Error(message);
@@ -3,7 +3,7 @@ import { DateTime } from 'luxon';
3
3
 
4
4
  export type DateLibrary = 'luxon' | 'dayjs';
5
5
 
6
- export const DATE_CLASS: { [key in DateLibrary]: string } = {
6
+ export const DATE_CLASS: Record<DateLibrary, string> = {
7
7
  luxon: 'DateTime',
8
8
  dayjs: 'Dayjs',
9
9
  };
@@ -19,9 +19,9 @@ export const anyDateToLuxon = (date: unknown, zone: string | undefined, fallback
19
19
  if (!date) {
20
20
  if (fallbackToNow) {
21
21
  return DateTime.local({ zone });
22
- } else {
23
- return undefined;
24
22
  }
23
+
24
+ return undefined;
25
25
  }
26
26
 
27
27
  if (DateTime.isDateTime(date)) {
@@ -678,7 +678,7 @@ export type User = {
678
678
  deletedReactions: Array<Reaction>;
679
679
  deletedReviews: Array<Review>;
680
680
  id: Scalars['ID']['output'];
681
- role?: Maybe<Role>;
681
+ role: Role;
682
682
  updatedAnswers: Array<Answer>;
683
683
  updatedManyObjects: Array<SomeObject>;
684
684
  updatedQuestions: Array<Question>;
@@ -1172,7 +1172,7 @@ export type UserResolvers<ContextType = any, ParentType extends ResolversParentT
1172
1172
  deletedReactions?: Resolver<Array<ResolversTypes['Reaction']>, ParentType, ContextType, Partial<UserDeletedReactionsArgs>>;
1173
1173
  deletedReviews?: Resolver<Array<ResolversTypes['Review']>, ParentType, ContextType, Partial<UserDeletedReviewsArgs>>;
1174
1174
  id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
1175
- role?: Resolver<Maybe<ResolversTypes['Role']>, ParentType, ContextType>;
1175
+ role?: Resolver<ResolversTypes['Role'], ParentType, ContextType>;
1176
1176
  updatedAnswers?: Resolver<Array<ResolversTypes['Answer']>, ParentType, ContextType, Partial<UserUpdatedAnswersArgs>>;
1177
1177
  updatedManyObjects?: Resolver<Array<ResolversTypes['SomeObject']>, ParentType, ContextType, Partial<UserUpdatedManyObjectsArgs>>;
1178
1178
  updatedQuestions?: Resolver<Array<ResolversTypes['Question']>, ParentType, ContextType, Partial<UserUpdatedQuestionsArgs>>;