@eddeee888/gcg-typescript-resolver-files 0.18.0 → 0.18.1

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 (78) hide show
  1. package/package.json +6 -2
  2. package/CHANGELOG.md +0 -816
  3. package/DEVELOPMENT.md +0 -49
  4. package/dist/tsconfig.lib.tsbuildinfo +0 -1
  5. package/eslint.config.mjs +0 -22
  6. package/project.json +0 -8
  7. package/src/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.ts +0 -109
  8. package/src/addVirtualTypesFileToTsMorphProject/index.ts +0 -1
  9. package/src/defineConfig.spec.ts +0 -76
  10. package/src/defineConfig.ts +0 -37
  11. package/src/generateResolverFiles/addExternalResolverImport.ts +0 -185
  12. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.spec.ts +0 -1174
  13. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.ts +0 -144
  14. package/src/generateResolverFiles/addResolverMainFiles.ts +0 -343
  15. package/src/generateResolverFiles/ensureEnumTypeResolversAreGenerated.ts +0 -51
  16. package/src/generateResolverFiles/generateResolverFiles.ts +0 -148
  17. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.spec.ts +0 -127
  18. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.ts +0 -25
  19. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.spec.ts +0 -147
  20. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts +0 -34
  21. package/src/generateResolverFiles/handleGraphQLEnumType.ts +0 -100
  22. package/src/generateResolverFiles/handleGraphQLInterfaceType.ts +0 -70
  23. package/src/generateResolverFiles/handleGraphQLObjectType.ts +0 -171
  24. package/src/generateResolverFiles/handleGraphQLRootObjectTypeField.ts +0 -105
  25. package/src/generateResolverFiles/handleGraphQLScalarType.ts +0 -81
  26. package/src/generateResolverFiles/handleGraphQLUnionType.ts +0 -68
  27. package/src/generateResolverFiles/index.ts +0 -2
  28. package/src/generateResolverFiles/postProcessFiles.ts +0 -287
  29. package/src/generateResolverFiles/types.ts +0 -203
  30. package/src/generateResolverFiles/visitNamedType.ts +0 -66
  31. package/src/generateTypeDefsFiles/generateTypeDefsContent.ts +0 -15
  32. package/src/generateTypeDefsFiles/generateTypeDefsFiles.ts +0 -100
  33. package/src/generateTypeDefsFiles/index.ts +0 -1
  34. package/src/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.ts +0 -361
  35. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.spec.ts +0 -115
  36. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.ts +0 -88
  37. package/src/getGraphQLObjectTypeResolversToGenerate/index.ts +0 -1
  38. package/src/index.ts +0 -3
  39. package/src/normalizeAddConfigPath/index.ts +0 -1
  40. package/src/normalizeAddConfigPath/normalizeAddConfigPath.ts +0 -29
  41. package/src/parseGraphQLSchema/index.ts +0 -2
  42. package/src/parseGraphQLSchema/normalizeResolverName.ts +0 -28
  43. package/src/parseGraphQLSchema/parseGraphQLSchema.ts +0 -531
  44. package/src/parseGraphQLSchema/parseLocationForOutputDir.ts +0 -76
  45. package/src/parseSources/index.ts +0 -1
  46. package/src/parseSources/parseSources.ts +0 -83
  47. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.spec.ts +0 -789
  48. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.ts +0 -197
  49. package/src/parseTypeMappers/index.ts +0 -1
  50. package/src/parseTypeMappers/parseTypeMappers.ts +0 -75
  51. package/src/preset.ts +0 -317
  52. package/src/utils/cwd.ts +0 -8
  53. package/src/utils/fmt.ts +0 -16
  54. package/src/utils/index.ts +0 -12
  55. package/src/utils/isMatchResolverNamePattern.ts +0 -27
  56. package/src/utils/isNativeNamedType.ts +0 -21
  57. package/src/utils/isRootObjectType.ts +0 -8
  58. package/src/utils/isWhitelistedModule.spec.ts +0 -71
  59. package/src/utils/isWhitelistedModule.ts +0 -21
  60. package/src/utils/logger.ts +0 -14
  61. package/src/utils/normalizeImportExtension.spec.ts +0 -42
  62. package/src/utils/normalizeImportExtension.ts +0 -16
  63. package/src/utils/normalizeRelativePath.ts +0 -6
  64. package/src/utils/parseLocationForWhitelistedModule.spec.ts +0 -130
  65. package/src/utils/parseLocationForWhitelistedModule.ts +0 -38
  66. package/src/utils/printImportLine.spec.ts +0 -150
  67. package/src/utils/printImportLine.ts +0 -78
  68. package/src/utils/relativeModulePath.ts +0 -7
  69. package/src/validateAndMergeParsedConfigs/index.ts +0 -1
  70. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.spec.ts +0 -211
  71. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.ts +0 -92
  72. package/src/validatePresetConfig/index.ts +0 -1
  73. package/src/validatePresetConfig/validatePresetConfig.spec.ts +0 -706
  74. package/src/validatePresetConfig/validatePresetConfig.ts +0 -571
  75. package/tsconfig.json +0 -14
  76. package/tsconfig.lib.json +0 -18
  77. package/tsconfig.spec.json +0 -20
  78. package/vite.config.ts +0 -24
@@ -1,1174 +0,0 @@
1
- import * as path from 'path';
2
- import { Project } from 'ts-morph';
3
- import {
4
- type AddedPropertyAssignmentNodes,
5
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented,
6
- } from './addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.js';
7
- import type { ObjectTypeFile } from './types';
8
-
9
- const createFilePath = (filePath: string): string =>
10
- path.join('/path/', filePath);
11
-
12
- describe('addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented() - mode: smart', () => {
13
- it('adds missing field resolvers if needed', () => {
14
- const project = new Project();
15
- project.createSourceFile(
16
- createFilePath('user.mappers.ts'),
17
- `export interface UserMapper {
18
- id: number;
19
- firstName: string;
20
- lastName: string;
21
- role: 'ADMIN' | 'USER';
22
- createdAt: Date;
23
- }`
24
- );
25
- project.createSourceFile(
26
- createFilePath('types.generated.ts'),
27
- `
28
- import { UserMapper } from './user.mappers';
29
- export type Maybe<T> = T | null;
30
- export type InputMaybe<T> = Maybe<T>;
31
- export type Exact<T extends { [key: string]: unknown }> = {
32
- [K in keyof T]: T[K];
33
- };
34
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
35
- [SubKey in K]?: Maybe<T[SubKey]>;
36
- };
37
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
38
- [SubKey in K]: Maybe<T[SubKey]>;
39
- };
40
- /** All built-in and custom scalars, mapped to their actual values */
41
- export type Scalars = {
42
- ID: string;
43
- String: string;
44
- Boolean: boolean;
45
- Int: number;
46
- Float: number;
47
- DateTime: Date | string;
48
- };
49
-
50
- export type Query = {
51
- __typename: 'Query';
52
- me?: Maybe<User>;
53
- };
54
-
55
- export type User = {
56
- __typename: 'User';
57
- accountGitHub?: Maybe<Scalars['String']>;
58
- accountGoogle?: Maybe<Scalars['String']>;
59
- createdAt: Scalars['DateTime'];
60
- fullName: Scalars['String'];
61
- id: Scalars['ID'];
62
- role: UserRole;
63
- };
64
-
65
- export type UserRole = 'ADMIN' | 'USER';
66
-
67
- export type ResolverTypeWrapper<T> = Promise<T> | T;
68
-
69
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
70
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
71
- };
72
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
73
- | ResolverFn<TResult, TParent, TContext, TArgs>
74
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
75
-
76
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
77
- parent: TParent,
78
- args: TArgs,
79
- context: TContext,
80
- info: any
81
- ) => Promise<TResult> | TResult;
82
-
83
- /** Mapping between all available schema types and the resolvers types */
84
- export type ResolversTypes = {
85
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
86
- Query: ResolverTypeWrapper<{}>;
87
- User: ResolverTypeWrapper<UserMapper>;
88
- String: ResolverTypeWrapper<Scalars['String']>;
89
- ID: ResolverTypeWrapper<Scalars['ID']>;
90
- UserRole: UserRole;
91
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
92
- };
93
-
94
- /** Mapping between all available schema types and the resolvers parents */
95
- export type ResolversParentTypes = {
96
- DateTime: Scalars['DateTime'];
97
- Query: {};
98
- User: UserMapper;
99
- String: Scalars['String'];
100
- ID: Scalars['ID'];
101
- Boolean: Scalars['Boolean'];
102
- };
103
-
104
- export type UserResolvers<
105
- ContextType = any,
106
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
107
- > = {
108
- accountGitHub?: Resolver<
109
- Maybe<ResolversTypes['String']>,
110
- ParentType,
111
- ContextType
112
- >;
113
- accountGoogle?: Resolver<
114
- Maybe<ResolversTypes['String']>,
115
- ParentType,
116
- ContextType
117
- >;
118
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
119
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
120
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
121
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
122
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
123
- };
124
- `
125
- );
126
-
127
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
128
- const sourceFile = project.createSourceFile(
129
- createFilePath('User.ts'),
130
- `import type { UserResolvers } from './types.generated';
131
- export const User: UserResolvers = {
132
- /* Implement logic here */
133
- };`
134
- );
135
- const resolverFile: ObjectTypeFile = {
136
- __filetype: 'objectType',
137
- content: '',
138
- mainImportIdentifier: 'User',
139
- filesystem: {
140
- type: 'filesystem',
141
- contentUpdated: false,
142
- },
143
- meta: {
144
- moduleName: 'user',
145
- relativePathFromBaseToModule: ['user'],
146
- normalizedResolverName: {
147
- base: 'User',
148
- withModule: 'user.User',
149
- },
150
- resolverTypeImportDeclaration: '',
151
- variableStatement: '',
152
- resolverType: {
153
- baseImport: 'UserResolvers',
154
- final: 'UserResolvers',
155
- otherVariants: [],
156
- },
157
- resolversToGenerate: {
158
- id: {
159
- resolverName: 'id',
160
- resolverDeclaration: `({ id }) => id`,
161
- },
162
- accountGitHub: {
163
- resolverName: 'accountGitHub',
164
- resolverDeclaration: `({ accountGitHub }) => accountGitHub`,
165
- },
166
- accountGoogle: {
167
- resolverName: 'accountGoogle',
168
- resolverDeclaration: `({ accountGoogle }) => accountGoogle`,
169
- },
170
- fullName: {
171
- resolverName: 'fullName',
172
- resolverDeclaration: `({ fullName }) => fullName`,
173
- },
174
- },
175
- },
176
- };
177
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
178
- mode: 'smart',
179
- addedPropertyAssignmentNodes,
180
- sourceFile,
181
- resolverFile,
182
- });
183
-
184
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
185
- const file = Object.values(addedPropertyAssignmentNodes)[0];
186
-
187
- const addedNode1 = file[4];
188
- expect(addedNode1.__toBeRemoved).toBe(true);
189
- expect(addedNode1.node.getText()).toBe('id: ({ id }) => id');
190
-
191
- const addedNode2 = file[5];
192
- expect(addedNode2.__toBeRemoved).toBe(true);
193
- expect(addedNode2.node.getText()).toBe(
194
- 'accountGitHub: ({ accountGitHub }) => accountGitHub'
195
- );
196
-
197
- const addedNode3 = file[6];
198
- expect(addedNode3.__toBeRemoved).toBe(true);
199
- expect(addedNode3.node.getText()).toBe(
200
- 'accountGoogle: ({ accountGoogle }) => accountGoogle'
201
- );
202
-
203
- const addedNode4 = file[7];
204
- expect(addedNode4.__toBeRemoved).toBe(true);
205
- expect(addedNode4.node.getText()).toBe(
206
- 'fullName: ({ fullName }) => fullName'
207
- );
208
-
209
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
210
- "import type { UserResolvers } from './types.generated';
211
- export const User: UserResolvers = {
212
- /* Implement logic here */
213
- id: ({ id }) => id,
214
- accountGitHub: ({ accountGitHub }) => accountGitHub,
215
- accountGoogle: ({ accountGoogle }) => accountGoogle,
216
- fullName: ({ fullName }) => fullName
217
- };"
218
- `);
219
- });
220
-
221
- it('adds does not add missing field resolvers if not needed i.e. resolversToGenerate is {}', () => {
222
- const project = new Project();
223
- project.createSourceFile(
224
- createFilePath('user.mappers.ts'),
225
- `export interface UserMapper {
226
- id: number;
227
- fullName: string;
228
- role: 'ADMIN' | 'USER';
229
- createdAt: Date;
230
- }`
231
- );
232
- project.createSourceFile(
233
- createFilePath('types.generated.ts'),
234
- `
235
- import { UserMapper } from './user.mappers';
236
- export type Maybe<T> = T | null;
237
- export type InputMaybe<T> = Maybe<T>;
238
- export type Exact<T extends { [key: string]: unknown }> = {
239
- [K in keyof T]: T[K];
240
- };
241
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
242
- [SubKey in K]?: Maybe<T[SubKey]>;
243
- };
244
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
245
- [SubKey in K]: Maybe<T[SubKey]>;
246
- };
247
- /** All built-in and custom scalars, mapped to their actual values */
248
- export type Scalars = {
249
- ID: string;
250
- String: string;
251
- Boolean: boolean;
252
- Int: number;
253
- Float: number;
254
- DateTime: Date | string;
255
- };
256
-
257
- export type Query = {
258
- __typename: 'Query';
259
- me?: Maybe<User>;
260
- };
261
-
262
- export type User = {
263
- __typename: 'User';
264
- accountGitHub?: Maybe<Scalars['String']>;
265
- accountGoogle?: Maybe<Scalars['String']>;
266
- createdAt: Scalars['DateTime'];
267
- fullName: Scalars['String'];
268
- id: Scalars['ID'];
269
- role: UserRole;
270
- };
271
-
272
- export type UserRole = 'ADMIN' | 'USER';
273
-
274
- export type ResolverTypeWrapper<T> = Promise<T> | T;
275
-
276
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
277
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
278
- };
279
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
280
- | ResolverFn<TResult, TParent, TContext, TArgs>
281
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
282
-
283
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
284
- parent: TParent,
285
- args: TArgs,
286
- context: TContext,
287
- info: any
288
- ) => Promise<TResult> | TResult;
289
-
290
- /** Mapping between all available schema types and the resolvers types */
291
- export type ResolversTypes = {
292
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
293
- Query: ResolverTypeWrapper<{}>;
294
- User: ResolverTypeWrapper<UserMapper>;
295
- String: ResolverTypeWrapper<Scalars['String']>;
296
- ID: ResolverTypeWrapper<Scalars['ID']>;
297
- UserRole: UserRole;
298
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
299
- };
300
-
301
- /** Mapping between all available schema types and the resolvers parents */
302
- export type ResolversParentTypes = {
303
- DateTime: Scalars['DateTime'];
304
- Query: {};
305
- User: UserMapper;
306
- String: Scalars['String'];
307
- ID: Scalars['ID'];
308
- Boolean: Scalars['Boolean'];
309
- };
310
-
311
- export type UserResolvers<
312
- ContextType = any,
313
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
314
- > = {
315
- accountGitHub?: Resolver<
316
- Maybe<ResolversTypes['String']>,
317
- ParentType,
318
- ContextType
319
- >;
320
- accountGoogle?: Resolver<
321
- Maybe<ResolversTypes['String']>,
322
- ParentType,
323
- ContextType
324
- >;
325
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
326
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
327
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
328
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
329
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
330
- };
331
- `
332
- );
333
-
334
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
335
- const sourceFile = project.createSourceFile(
336
- createFilePath('User.ts'),
337
- `import type { UserResolvers } from './types.generated';
338
- export const User: UserResolvers = {};`
339
- );
340
- const resolverFile: ObjectTypeFile = {
341
- __filetype: 'objectType',
342
- content: '',
343
- mainImportIdentifier: 'User',
344
- filesystem: {
345
- type: 'filesystem',
346
- contentUpdated: false,
347
- },
348
- meta: {
349
- moduleName: 'user',
350
- relativePathFromBaseToModule: ['user'],
351
- normalizedResolverName: {
352
- base: 'User',
353
- withModule: 'user.User',
354
- },
355
- resolverTypeImportDeclaration: '',
356
- variableStatement: '',
357
- resolverType: {
358
- baseImport: 'UserResolvers',
359
- final: 'UserResolvers',
360
- otherVariants: [],
361
- },
362
- resolversToGenerate: {},
363
- },
364
- };
365
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
366
- mode: 'smart',
367
- addedPropertyAssignmentNodes,
368
- sourceFile,
369
- resolverFile,
370
- });
371
-
372
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
373
- const file = Object.values(addedPropertyAssignmentNodes)[0];
374
-
375
- expect(file).toEqual({});
376
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
377
- "import type { UserResolvers } from './types.generated';
378
- export const User: UserResolvers = {};"
379
- `);
380
- });
381
-
382
- it('adds missing field resolvers, if necessary, when Mapper is a Class', () => {
383
- const project = new Project();
384
- project.createSourceFile(
385
- createFilePath('user.mappers.ts'),
386
- `export class UserMapper {
387
- id: number;
388
- firstName: string;
389
- lastName: string;
390
- role: 'ADMIN' | 'USER';
391
- createdAt: Date;
392
- }`
393
- );
394
- project.createSourceFile(
395
- createFilePath('types.generated.ts'),
396
- `
397
- import { UserMapper } from './user.mappers';
398
- export type Maybe<T> = T | null;
399
- export type InputMaybe<T> = Maybe<T>;
400
- export type Exact<T extends { [key: string]: unknown }> = {
401
- [K in keyof T]: T[K];
402
- };
403
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
404
- [SubKey in K]?: Maybe<T[SubKey]>;
405
- };
406
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
407
- [SubKey in K]: Maybe<T[SubKey]>;
408
- };
409
- /** All built-in and custom scalars, mapped to their actual values */
410
- export type Scalars = {
411
- ID: string;
412
- String: string;
413
- Boolean: boolean;
414
- Int: number;
415
- Float: number;
416
- DateTime: Date | string;
417
- };
418
-
419
- export type Query = {
420
- __typename: 'Query';
421
- me?: Maybe<User>;
422
- };
423
-
424
- export type User = {
425
- __typename: 'User';
426
- accountGitHub?: Maybe<Scalars['String']>;
427
- accountGoogle?: Maybe<Scalars['String']>;
428
- createdAt: Scalars['DateTime'];
429
- fullName: Scalars['String'];
430
- id: Scalars['ID'];
431
- role: UserRole;
432
- };
433
-
434
- export type UserRole = 'ADMIN' | 'USER';
435
-
436
- export type ResolverTypeWrapper<T> = Promise<T> | T;
437
-
438
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
439
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
440
- };
441
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
442
- | ResolverFn<TResult, TParent, TContext, TArgs>
443
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
444
-
445
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
446
- parent: TParent,
447
- args: TArgs,
448
- context: TContext,
449
- info: any
450
- ) => Promise<TResult> | TResult;
451
-
452
- /** Mapping between all available schema types and the resolvers types */
453
- export type ResolversTypes = {
454
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
455
- Query: ResolverTypeWrapper<{}>;
456
- User: ResolverTypeWrapper<UserMapper>;
457
- String: ResolverTypeWrapper<Scalars['String']>;
458
- ID: ResolverTypeWrapper<Scalars['ID']>;
459
- UserRole: UserRole;
460
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
461
- };
462
-
463
- /** Mapping between all available schema types and the resolvers parents */
464
- export type ResolversParentTypes = {
465
- DateTime: Scalars['DateTime'];
466
- Query: {};
467
- User: UserMapper;
468
- String: Scalars['String'];
469
- ID: Scalars['ID'];
470
- Boolean: Scalars['Boolean'];
471
- };
472
-
473
- export type UserResolvers<
474
- ContextType = any,
475
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
476
- > = {
477
- accountGitHub?: Resolver<
478
- Maybe<ResolversTypes['String']>,
479
- ParentType,
480
- ContextType
481
- >;
482
- accountGoogle?: Resolver<
483
- Maybe<ResolversTypes['String']>,
484
- ParentType,
485
- ContextType
486
- >;
487
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
488
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
489
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
490
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
491
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
492
- };
493
- `
494
- );
495
-
496
- const sourceFile = project.createSourceFile(
497
- createFilePath('User.ts'),
498
- `import type { UserResolvers } from './types.generated';
499
- export const User: UserResolvers = {
500
- /* Implement logic here */
501
- };`
502
- );
503
- const resolverFile: Parameters<
504
- typeof addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented
505
- >[0]['resolverFile'] = {
506
- __filetype: 'objectType',
507
- content: '',
508
- filesystem: {
509
- type: 'filesystem',
510
- contentUpdated: false,
511
- },
512
- mainImportIdentifier: 'User',
513
- meta: {
514
- moduleName: 'user',
515
- relativePathFromBaseToModule: ['user'],
516
- normalizedResolverName: {
517
- base: 'User',
518
- withModule: 'user.User',
519
- },
520
- resolverTypeImportDeclaration: '',
521
- variableStatement: '',
522
- resolverType: {
523
- baseImport: 'UserResolvers',
524
- final: 'UserResolvers',
525
- otherVariants: [],
526
- },
527
- resolversToGenerate: {
528
- id: {
529
- resolverName: 'id',
530
- resolverDeclaration: `({ id }) => id`,
531
- },
532
- accountGitHub: {
533
- resolverName: 'accountGitHub',
534
- resolverDeclaration: `({ accountGitHub }) => accountGitHub`,
535
- },
536
- accountGoogle: {
537
- resolverName: 'accountGoogle',
538
- resolverDeclaration: `({ accountGoogle }) => accountGoogle`,
539
- },
540
- fullName: {
541
- resolverName: 'fullName',
542
- resolverDeclaration: `({ fullName }) => fullName`,
543
- },
544
- },
545
- },
546
- };
547
-
548
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
549
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
550
- mode: 'smart',
551
- addedPropertyAssignmentNodes,
552
- sourceFile,
553
- resolverFile,
554
- });
555
-
556
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
557
- const file = Object.values(addedPropertyAssignmentNodes)[0];
558
-
559
- const addedNode1 = file[4];
560
- expect(addedNode1.__toBeRemoved).toBe(true);
561
- expect(addedNode1.node.getText()).toBe('id: ({ id }) => id');
562
-
563
- const addedNode2 = file[5];
564
- expect(addedNode2.__toBeRemoved).toBe(true);
565
- expect(addedNode2.node.getText()).toBe(
566
- 'accountGitHub: ({ accountGitHub }) => accountGitHub'
567
- );
568
-
569
- const addedNode3 = file[6];
570
- expect(addedNode3.__toBeRemoved).toBe(true);
571
- expect(addedNode3.node.getText()).toBe(
572
- 'accountGoogle: ({ accountGoogle }) => accountGoogle'
573
- );
574
-
575
- const addedNode4 = file[7];
576
- expect(addedNode4.__toBeRemoved).toBe(true);
577
- expect(addedNode4.node.getText()).toBe(
578
- 'fullName: ({ fullName }) => fullName'
579
- );
580
-
581
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
582
- "import type { UserResolvers } from './types.generated';
583
- export const User: UserResolvers = {
584
- /* Implement logic here */
585
- id: ({ id }) => id,
586
- accountGitHub: ({ accountGitHub }) => accountGitHub,
587
- accountGoogle: ({ accountGoogle }) => accountGoogle,
588
- fullName: ({ fullName }) => fullName
589
- };"
590
- `);
591
- });
592
- });
593
-
594
- describe('addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented() - mode: fast', () => {
595
- it('adds missing field resolvers if needed', () => {
596
- const project = new Project();
597
- project.createSourceFile(
598
- createFilePath('user.mappers.ts'),
599
- `export interface UserMapper {
600
- id: number;
601
- firstName: string;
602
- lastName: string;
603
- role: 'ADMIN' | 'USER';
604
- createdAt: Date;
605
- }`
606
- );
607
- project.createSourceFile(
608
- createFilePath('types.generated.ts'),
609
- `
610
- import { UserMapper } from './user.mappers';
611
- export type Maybe<T> = T | null;
612
- export type InputMaybe<T> = Maybe<T>;
613
- export type Exact<T extends { [key: string]: unknown }> = {
614
- [K in keyof T]: T[K];
615
- };
616
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
617
- [SubKey in K]?: Maybe<T[SubKey]>;
618
- };
619
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
620
- [SubKey in K]: Maybe<T[SubKey]>;
621
- };
622
- /** All built-in and custom scalars, mapped to their actual values */
623
- export type Scalars = {
624
- ID: string;
625
- String: string;
626
- Boolean: boolean;
627
- Int: number;
628
- Float: number;
629
- DateTime: Date | string;
630
- };
631
-
632
- export type Query = {
633
- __typename: 'Query';
634
- me?: Maybe<User>;
635
- };
636
-
637
- export type User = {
638
- __typename: 'User';
639
- accountGitHub?: Maybe<Scalars['String']>;
640
- accountGoogle?: Maybe<Scalars['String']>;
641
- createdAt: Scalars['DateTime'];
642
- fullName: Scalars['String'];
643
- id: Scalars['ID'];
644
- role: UserRole;
645
- };
646
-
647
- export type UserRole = 'ADMIN' | 'USER';
648
-
649
- export type ResolverTypeWrapper<T> = Promise<T> | T;
650
-
651
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
652
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
653
- };
654
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
655
- | ResolverFn<TResult, TParent, TContext, TArgs>
656
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
657
-
658
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
659
- parent: TParent,
660
- args: TArgs,
661
- context: TContext,
662
- info: any
663
- ) => Promise<TResult> | TResult;
664
-
665
- /** Mapping between all available schema types and the resolvers types */
666
- export type ResolversTypes = {
667
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
668
- Query: ResolverTypeWrapper<{}>;
669
- User: ResolverTypeWrapper<UserMapper>;
670
- String: ResolverTypeWrapper<Scalars['String']>;
671
- ID: ResolverTypeWrapper<Scalars['ID']>;
672
- UserRole: UserRole;
673
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
674
- };
675
-
676
- /** Mapping between all available schema types and the resolvers parents */
677
- export type ResolversParentTypes = {
678
- DateTime: Scalars['DateTime'];
679
- Query: {};
680
- User: UserMapper;
681
- String: Scalars['String'];
682
- ID: Scalars['ID'];
683
- Boolean: Scalars['Boolean'];
684
- };
685
-
686
- export type UserResolvers<
687
- ContextType = any,
688
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
689
- > = {
690
- accountGitHub?: Resolver<
691
- Maybe<ResolversTypes['String']>,
692
- ParentType,
693
- ContextType
694
- >;
695
- accountGoogle?: Resolver<
696
- Maybe<ResolversTypes['String']>,
697
- ParentType,
698
- ContextType
699
- >;
700
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
701
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
702
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
703
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
704
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
705
- };
706
- `
707
- );
708
-
709
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
710
- const sourceFile = project.createSourceFile(
711
- createFilePath('User.ts'),
712
- `import type { UserResolvers } from './types.generated';
713
- export const User: UserResolvers = {
714
- /* Implement logic here */
715
- };`
716
- );
717
- const resolverFile: ObjectTypeFile = {
718
- __filetype: 'objectType',
719
- content: '',
720
- mainImportIdentifier: 'User',
721
- filesystem: {
722
- type: 'filesystem',
723
- contentUpdated: false,
724
- },
725
- meta: {
726
- moduleName: 'user',
727
- relativePathFromBaseToModule: ['user'],
728
- normalizedResolverName: {
729
- base: 'User',
730
- withModule: 'user.User',
731
- },
732
- resolverTypeImportDeclaration: '',
733
- variableStatement: '',
734
- resolverType: {
735
- baseImport: 'UserResolvers',
736
- final: 'UserResolvers',
737
- otherVariants: [],
738
- },
739
- resolversToGenerate: {
740
- id: {
741
- resolverName: 'id',
742
- resolverDeclaration: `({ id }) => id`,
743
- },
744
- accountGitHub: {
745
- resolverName: 'accountGitHub',
746
- resolverDeclaration: `({ accountGitHub }) => accountGitHub`,
747
- },
748
- accountGoogle: {
749
- resolverName: 'accountGoogle',
750
- resolverDeclaration: `({ accountGoogle }) => accountGoogle`,
751
- },
752
- fullName: {
753
- resolverName: 'fullName',
754
- resolverDeclaration: `({ fullName }) => fullName`,
755
- },
756
- },
757
- },
758
- };
759
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
760
- mode: 'fast',
761
- addedPropertyAssignmentNodes,
762
- sourceFile,
763
- resolverFile,
764
- });
765
-
766
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
767
- const file = Object.values(addedPropertyAssignmentNodes)[0];
768
-
769
- const addedNode1 = file[4];
770
- expect(addedNode1.__toBeRemoved).toBe(false);
771
- expect(addedNode1.node.getText()).toBe('id: ({ id }) => id');
772
-
773
- const addedNode2 = file[5];
774
- expect(addedNode2.__toBeRemoved).toBe(false);
775
- expect(addedNode2.node.getText()).toBe(
776
- 'accountGitHub: ({ accountGitHub }) => accountGitHub'
777
- );
778
-
779
- const addedNode3 = file[6];
780
- expect(addedNode3.__toBeRemoved).toBe(false);
781
- expect(addedNode3.node.getText()).toBe(
782
- 'accountGoogle: ({ accountGoogle }) => accountGoogle'
783
- );
784
-
785
- const addedNode4 = file[7];
786
- expect(addedNode4.__toBeRemoved).toBe(false);
787
- expect(addedNode4.node.getText()).toBe(
788
- 'fullName: ({ fullName }) => fullName'
789
- );
790
-
791
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
792
- "import type { UserResolvers } from './types.generated';
793
- export const User: UserResolvers = {
794
- /* Implement logic here */
795
- id: ({ id }) => id,
796
- accountGitHub: ({ accountGitHub }) => accountGitHub,
797
- accountGoogle: ({ accountGoogle }) => accountGoogle,
798
- fullName: ({ fullName }) => fullName
799
- };"
800
- `);
801
- });
802
-
803
- it('adds does not add missing field resolvers if not needed i.e. resolversToGenerate is {}', () => {
804
- const project = new Project();
805
- project.createSourceFile(
806
- createFilePath('user.mappers.ts'),
807
- `export interface UserMapper {
808
- id: number;
809
- fullName: string;
810
- role: 'ADMIN' | 'USER';
811
- createdAt: Date;
812
- }`
813
- );
814
- project.createSourceFile(
815
- createFilePath('types.generated.ts'),
816
- `
817
- import { UserMapper } from './user.mappers';
818
- export type Maybe<T> = T | null;
819
- export type InputMaybe<T> = Maybe<T>;
820
- export type Exact<T extends { [key: string]: unknown }> = {
821
- [K in keyof T]: T[K];
822
- };
823
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
824
- [SubKey in K]?: Maybe<T[SubKey]>;
825
- };
826
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
827
- [SubKey in K]: Maybe<T[SubKey]>;
828
- };
829
- /** All built-in and custom scalars, mapped to their actual values */
830
- export type Scalars = {
831
- ID: string;
832
- String: string;
833
- Boolean: boolean;
834
- Int: number;
835
- Float: number;
836
- DateTime: Date | string;
837
- };
838
-
839
- export type Query = {
840
- __typename: 'Query';
841
- me?: Maybe<User>;
842
- };
843
-
844
- export type User = {
845
- __typename: 'User';
846
- accountGitHub?: Maybe<Scalars['String']>;
847
- accountGoogle?: Maybe<Scalars['String']>;
848
- createdAt: Scalars['DateTime'];
849
- fullName: Scalars['String'];
850
- id: Scalars['ID'];
851
- role: UserRole;
852
- };
853
-
854
- export type UserRole = 'ADMIN' | 'USER';
855
-
856
- export type ResolverTypeWrapper<T> = Promise<T> | T;
857
-
858
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
859
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
860
- };
861
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
862
- | ResolverFn<TResult, TParent, TContext, TArgs>
863
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
864
-
865
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
866
- parent: TParent,
867
- args: TArgs,
868
- context: TContext,
869
- info: any
870
- ) => Promise<TResult> | TResult;
871
-
872
- /** Mapping between all available schema types and the resolvers types */
873
- export type ResolversTypes = {
874
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
875
- Query: ResolverTypeWrapper<{}>;
876
- User: ResolverTypeWrapper<UserMapper>;
877
- String: ResolverTypeWrapper<Scalars['String']>;
878
- ID: ResolverTypeWrapper<Scalars['ID']>;
879
- UserRole: UserRole;
880
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
881
- };
882
-
883
- /** Mapping between all available schema types and the resolvers parents */
884
- export type ResolversParentTypes = {
885
- DateTime: Scalars['DateTime'];
886
- Query: {};
887
- User: UserMapper;
888
- String: Scalars['String'];
889
- ID: Scalars['ID'];
890
- Boolean: Scalars['Boolean'];
891
- };
892
-
893
- export type UserResolvers<
894
- ContextType = any,
895
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
896
- > = {
897
- accountGitHub?: Resolver<
898
- Maybe<ResolversTypes['String']>,
899
- ParentType,
900
- ContextType
901
- >;
902
- accountGoogle?: Resolver<
903
- Maybe<ResolversTypes['String']>,
904
- ParentType,
905
- ContextType
906
- >;
907
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
908
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
909
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
910
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
911
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
912
- };
913
- `
914
- );
915
-
916
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
917
- const sourceFile = project.createSourceFile(
918
- createFilePath('User.ts'),
919
- `import type { UserResolvers } from './types.generated';
920
- export const User: UserResolvers = {};`
921
- );
922
- const resolverFile: ObjectTypeFile = {
923
- __filetype: 'objectType',
924
- content: '',
925
- mainImportIdentifier: 'User',
926
- filesystem: {
927
- type: 'filesystem',
928
- contentUpdated: false,
929
- },
930
- meta: {
931
- moduleName: 'user',
932
- relativePathFromBaseToModule: ['user'],
933
- normalizedResolverName: {
934
- base: 'User',
935
- withModule: 'user.User',
936
- },
937
- resolverTypeImportDeclaration: '',
938
- variableStatement: '',
939
- resolverType: {
940
- baseImport: 'UserResolvers',
941
- final: 'UserResolvers',
942
- otherVariants: [],
943
- },
944
- resolversToGenerate: {},
945
- },
946
- };
947
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
948
- mode: 'fast',
949
- addedPropertyAssignmentNodes,
950
- sourceFile,
951
- resolverFile,
952
- });
953
-
954
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
955
- const file = Object.values(addedPropertyAssignmentNodes)[0];
956
-
957
- expect(file).toEqual({});
958
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
959
- "import type { UserResolvers } from './types.generated';
960
- export const User: UserResolvers = {};"
961
- `);
962
- });
963
-
964
- it('adds missing field resolvers, if necessary, when Mapper is a Class', () => {
965
- const project = new Project();
966
- project.createSourceFile(
967
- createFilePath('user.mappers.ts'),
968
- `export class UserMapper {
969
- id: number;
970
- firstName: string;
971
- lastName: string;
972
- role: 'ADMIN' | 'USER';
973
- createdAt: Date;
974
- }`
975
- );
976
- project.createSourceFile(
977
- createFilePath('types.generated.ts'),
978
- `
979
- import { UserMapper } from './user.mappers';
980
- export type Maybe<T> = T | null;
981
- export type InputMaybe<T> = Maybe<T>;
982
- export type Exact<T extends { [key: string]: unknown }> = {
983
- [K in keyof T]: T[K];
984
- };
985
- export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
986
- [SubKey in K]?: Maybe<T[SubKey]>;
987
- };
988
- export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
989
- [SubKey in K]: Maybe<T[SubKey]>;
990
- };
991
- /** All built-in and custom scalars, mapped to their actual values */
992
- export type Scalars = {
993
- ID: string;
994
- String: string;
995
- Boolean: boolean;
996
- Int: number;
997
- Float: number;
998
- DateTime: Date | string;
999
- };
1000
-
1001
- export type Query = {
1002
- __typename: 'Query';
1003
- me?: Maybe<User>;
1004
- };
1005
-
1006
- export type User = {
1007
- __typename: 'User';
1008
- accountGitHub?: Maybe<Scalars['String']>;
1009
- accountGoogle?: Maybe<Scalars['String']>;
1010
- createdAt: Scalars['DateTime'];
1011
- fullName: Scalars['String'];
1012
- id: Scalars['ID'];
1013
- role: UserRole;
1014
- };
1015
-
1016
- export type UserRole = 'ADMIN' | 'USER';
1017
-
1018
- export type ResolverTypeWrapper<T> = Promise<T> | T;
1019
-
1020
- export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
1021
- resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
1022
- };
1023
- export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> =
1024
- | ResolverFn<TResult, TParent, TContext, TArgs>
1025
- | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
1026
-
1027
- export type ResolverFn<TResult, TParent, TContext, TArgs> = (
1028
- parent: TParent,
1029
- args: TArgs,
1030
- context: TContext,
1031
- info: any
1032
- ) => Promise<TResult> | TResult;
1033
-
1034
- /** Mapping between all available schema types and the resolvers types */
1035
- export type ResolversTypes = {
1036
- DateTime: ResolverTypeWrapper<Scalars['DateTime']>;
1037
- Query: ResolverTypeWrapper<{}>;
1038
- User: ResolverTypeWrapper<UserMapper>;
1039
- String: ResolverTypeWrapper<Scalars['String']>;
1040
- ID: ResolverTypeWrapper<Scalars['ID']>;
1041
- UserRole: UserRole;
1042
- Boolean: ResolverTypeWrapper<Scalars['Boolean']>;
1043
- };
1044
-
1045
- /** Mapping between all available schema types and the resolvers parents */
1046
- export type ResolversParentTypes = {
1047
- DateTime: Scalars['DateTime'];
1048
- Query: {};
1049
- User: UserMapper;
1050
- String: Scalars['String'];
1051
- ID: Scalars['ID'];
1052
- Boolean: Scalars['Boolean'];
1053
- };
1054
-
1055
- export type UserResolvers<
1056
- ContextType = any,
1057
- ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']
1058
- > = {
1059
- accountGitHub?: Resolver<
1060
- Maybe<ResolversTypes['String']>,
1061
- ParentType,
1062
- ContextType
1063
- >;
1064
- accountGoogle?: Resolver<
1065
- Maybe<ResolversTypes['String']>,
1066
- ParentType,
1067
- ContextType
1068
- >;
1069
- createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>;
1070
- fullName?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
1071
- id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
1072
- role?: Resolver<ResolversTypes['UserRole'], ParentType, ContextType>;
1073
- __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
1074
- };
1075
- `
1076
- );
1077
-
1078
- const sourceFile = project.createSourceFile(
1079
- createFilePath('User.ts'),
1080
- `import type { UserResolvers } from './types.generated';
1081
- export const User: UserResolvers = {
1082
- /* Implement logic here */
1083
- };`
1084
- );
1085
- const resolverFile: Parameters<
1086
- typeof addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented
1087
- >[0]['resolverFile'] = {
1088
- __filetype: 'objectType',
1089
- content: '',
1090
- filesystem: {
1091
- type: 'filesystem',
1092
- contentUpdated: false,
1093
- },
1094
- mainImportIdentifier: 'User',
1095
- meta: {
1096
- moduleName: 'user',
1097
- relativePathFromBaseToModule: ['user'],
1098
- normalizedResolverName: {
1099
- base: 'User',
1100
- withModule: 'user.User',
1101
- },
1102
- resolverTypeImportDeclaration: '',
1103
- variableStatement: '',
1104
- resolverType: {
1105
- baseImport: 'UserResolvers',
1106
- final: 'UserResolvers',
1107
- otherVariants: [],
1108
- },
1109
- resolversToGenerate: {
1110
- id: {
1111
- resolverName: 'id',
1112
- resolverDeclaration: `({ id }) => id`,
1113
- },
1114
- accountGitHub: {
1115
- resolverName: 'accountGitHub',
1116
- resolverDeclaration: `({ accountGitHub }) => accountGitHub`,
1117
- },
1118
- accountGoogle: {
1119
- resolverName: 'accountGoogle',
1120
- resolverDeclaration: `({ accountGoogle }) => accountGoogle`,
1121
- },
1122
- fullName: {
1123
- resolverName: 'fullName',
1124
- resolverDeclaration: `({ fullName }) => fullName`,
1125
- },
1126
- },
1127
- },
1128
- };
1129
-
1130
- const addedPropertyAssignmentNodes: AddedPropertyAssignmentNodes = {};
1131
- addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented({
1132
- mode: 'fast',
1133
- addedPropertyAssignmentNodes,
1134
- sourceFile,
1135
- resolverFile,
1136
- });
1137
-
1138
- // This is `/path/User.ts` file. We target it this way because the path on windows is different from linux
1139
- const file = Object.values(addedPropertyAssignmentNodes)[0];
1140
-
1141
- const addedNode1 = file[4];
1142
- expect(addedNode1.__toBeRemoved).toBe(false);
1143
- expect(addedNode1.node.getText()).toBe('id: ({ id }) => id');
1144
-
1145
- const addedNode2 = file[5];
1146
- expect(addedNode2.__toBeRemoved).toBe(false);
1147
- expect(addedNode2.node.getText()).toBe(
1148
- 'accountGitHub: ({ accountGitHub }) => accountGitHub'
1149
- );
1150
-
1151
- const addedNode3 = file[6];
1152
- expect(addedNode3.__toBeRemoved).toBe(false);
1153
- expect(addedNode3.node.getText()).toBe(
1154
- 'accountGoogle: ({ accountGoogle }) => accountGoogle'
1155
- );
1156
-
1157
- const addedNode4 = file[7];
1158
- expect(addedNode4.__toBeRemoved).toBe(false);
1159
- expect(addedNode4.node.getText()).toBe(
1160
- 'fullName: ({ fullName }) => fullName'
1161
- );
1162
-
1163
- expect(sourceFile.getText()).toMatchInlineSnapshot(`
1164
- "import type { UserResolvers } from './types.generated';
1165
- export const User: UserResolvers = {
1166
- /* Implement logic here */
1167
- id: ({ id }) => id,
1168
- accountGitHub: ({ accountGitHub }) => accountGitHub,
1169
- accountGoogle: ({ accountGoogle }) => accountGoogle,
1170
- fullName: ({ fullName }) => fullName
1171
- };"
1172
- `);
1173
- });
1174
- });