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

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 (80) hide show
  1. package/dist/defineConfig.d.ts +1 -1
  2. package/dist/defineConfig.js +8 -0
  3. package/package.json +7 -3
  4. package/CHANGELOG.md +0 -816
  5. package/DEVELOPMENT.md +0 -49
  6. package/dist/tsconfig.lib.tsbuildinfo +0 -1
  7. package/eslint.config.mjs +0 -22
  8. package/project.json +0 -8
  9. package/src/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.ts +0 -109
  10. package/src/addVirtualTypesFileToTsMorphProject/index.ts +0 -1
  11. package/src/defineConfig.spec.ts +0 -76
  12. package/src/defineConfig.ts +0 -37
  13. package/src/generateResolverFiles/addExternalResolverImport.ts +0 -185
  14. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.spec.ts +0 -1174
  15. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.ts +0 -144
  16. package/src/generateResolverFiles/addResolverMainFiles.ts +0 -343
  17. package/src/generateResolverFiles/ensureEnumTypeResolversAreGenerated.ts +0 -51
  18. package/src/generateResolverFiles/generateResolverFiles.ts +0 -148
  19. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.spec.ts +0 -127
  20. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.ts +0 -25
  21. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.spec.ts +0 -147
  22. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts +0 -34
  23. package/src/generateResolverFiles/handleGraphQLEnumType.ts +0 -100
  24. package/src/generateResolverFiles/handleGraphQLInterfaceType.ts +0 -70
  25. package/src/generateResolverFiles/handleGraphQLObjectType.ts +0 -171
  26. package/src/generateResolverFiles/handleGraphQLRootObjectTypeField.ts +0 -105
  27. package/src/generateResolverFiles/handleGraphQLScalarType.ts +0 -81
  28. package/src/generateResolverFiles/handleGraphQLUnionType.ts +0 -68
  29. package/src/generateResolverFiles/index.ts +0 -2
  30. package/src/generateResolverFiles/postProcessFiles.ts +0 -287
  31. package/src/generateResolverFiles/types.ts +0 -203
  32. package/src/generateResolverFiles/visitNamedType.ts +0 -66
  33. package/src/generateTypeDefsFiles/generateTypeDefsContent.ts +0 -15
  34. package/src/generateTypeDefsFiles/generateTypeDefsFiles.ts +0 -100
  35. package/src/generateTypeDefsFiles/index.ts +0 -1
  36. package/src/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.ts +0 -361
  37. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.spec.ts +0 -115
  38. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.ts +0 -88
  39. package/src/getGraphQLObjectTypeResolversToGenerate/index.ts +0 -1
  40. package/src/index.ts +0 -3
  41. package/src/normalizeAddConfigPath/index.ts +0 -1
  42. package/src/normalizeAddConfigPath/normalizeAddConfigPath.ts +0 -29
  43. package/src/parseGraphQLSchema/index.ts +0 -2
  44. package/src/parseGraphQLSchema/normalizeResolverName.ts +0 -28
  45. package/src/parseGraphQLSchema/parseGraphQLSchema.ts +0 -531
  46. package/src/parseGraphQLSchema/parseLocationForOutputDir.ts +0 -76
  47. package/src/parseSources/index.ts +0 -1
  48. package/src/parseSources/parseSources.ts +0 -83
  49. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.spec.ts +0 -789
  50. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.ts +0 -197
  51. package/src/parseTypeMappers/index.ts +0 -1
  52. package/src/parseTypeMappers/parseTypeMappers.ts +0 -75
  53. package/src/preset.ts +0 -317
  54. package/src/utils/cwd.ts +0 -8
  55. package/src/utils/fmt.ts +0 -16
  56. package/src/utils/index.ts +0 -12
  57. package/src/utils/isMatchResolverNamePattern.ts +0 -27
  58. package/src/utils/isNativeNamedType.ts +0 -21
  59. package/src/utils/isRootObjectType.ts +0 -8
  60. package/src/utils/isWhitelistedModule.spec.ts +0 -71
  61. package/src/utils/isWhitelistedModule.ts +0 -21
  62. package/src/utils/logger.ts +0 -14
  63. package/src/utils/normalizeImportExtension.spec.ts +0 -42
  64. package/src/utils/normalizeImportExtension.ts +0 -16
  65. package/src/utils/normalizeRelativePath.ts +0 -6
  66. package/src/utils/parseLocationForWhitelistedModule.spec.ts +0 -130
  67. package/src/utils/parseLocationForWhitelistedModule.ts +0 -38
  68. package/src/utils/printImportLine.spec.ts +0 -150
  69. package/src/utils/printImportLine.ts +0 -78
  70. package/src/utils/relativeModulePath.ts +0 -7
  71. package/src/validateAndMergeParsedConfigs/index.ts +0 -1
  72. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.spec.ts +0 -211
  73. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.ts +0 -92
  74. package/src/validatePresetConfig/index.ts +0 -1
  75. package/src/validatePresetConfig/validatePresetConfig.spec.ts +0 -706
  76. package/src/validatePresetConfig/validatePresetConfig.ts +0 -571
  77. package/tsconfig.json +0 -14
  78. package/tsconfig.lib.json +0 -18
  79. package/tsconfig.spec.json +0 -20
  80. package/vite.config.ts +0 -24
@@ -1,531 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
- import {
4
- type GraphQLField,
5
- type GraphQLScalarType,
6
- type GraphQLSchema,
7
- type GraphQLObjectType,
8
- type Location,
9
- isObjectType,
10
- isScalarType,
11
- isSpecifiedScalarType,
12
- isUnionType,
13
- isInterfaceType,
14
- isEnumType,
15
- } from 'graphql';
16
- import type { ParseSourcesResult } from '../parseSources/index.js';
17
- import type { TypeMappersMap } from '../parseTypeMappers/index.js';
18
- import type {
19
- ParsedPresetConfig,
20
- ScalarsOverridesType,
21
- } from '../validatePresetConfig/index.js';
22
- import {
23
- logger,
24
- isNativeNamedType,
25
- isRootObjectType,
26
- relativeModulePath,
27
- type RootObjectType,
28
- } from '../utils/index.js';
29
- import { parseLocationForOutputDir } from './parseLocationForOutputDir.js';
30
- import { normalizeResolverName } from './normalizeResolverName.js';
31
- import type { GeneratedTypesFileMeta } from '../generateResolverFiles/index.js';
32
-
33
- interface ParseGraphQLSchemaParams {
34
- schemaAst: GraphQLSchema;
35
- sourceMap: ParseSourcesResult['sourceMap'];
36
- resolverTypesPath: string;
37
- typeMappersMap: TypeMappersMap;
38
- scalarsModule: ParsedPresetConfig['scalarsModule'];
39
- scalarsOverrides: ParsedPresetConfig['scalarsOverrides'];
40
- mode: ParsedPresetConfig['mode'];
41
- baseOutputDir: string;
42
- resolverRelativeTargetDir: string;
43
- whitelistedModules: ParsedPresetConfig['whitelistedModules'];
44
- blacklistedModules: ParsedPresetConfig['blacklistedModules'];
45
- }
46
-
47
- export interface ResolverDetails {
48
- schemaType: string;
49
- moduleName: string;
50
- resolverFile: {
51
- name: string;
52
- path: string;
53
- isOnFilesystem: boolean;
54
- };
55
- relativePathFromBaseToModule: string[];
56
- normalizedResolverName: ReturnType<typeof normalizeResolverName>;
57
- typeNamedImport: (generatedTypesFileMeta: GeneratedTypesFileMeta) => string;
58
- typeString: (generatedTypesFileMeta: GeneratedTypesFileMeta) => string;
59
- relativePathToResolverTypesFile: string;
60
- }
61
-
62
- type ObjectResolverDetails = ResolverDetails & {
63
- fieldsToPick: string[];
64
- };
65
-
66
- type EnumResolverDetails = ResolverDetails & {
67
- allowedValues: string[];
68
- };
69
-
70
- export interface ParsedGraphQLSchemaMeta {
71
- userDefinedSchemaTypeMap: {
72
- query: Record<
73
- string, // normalized resolver name
74
- ResolverDetails
75
- >;
76
- mutation: Record<
77
- string, // normalized resolver name
78
- ResolverDetails
79
- >;
80
- subscription: Record<
81
- string, // normalized resolver name
82
- ResolverDetails
83
- >;
84
- object: Record<
85
- string, // schema name e.g. `User`, `Job`, etc.
86
- Record<
87
- string, // normalized name e.g. `user.User` (modules) or `.User` (merged)
88
- ObjectResolverDetails
89
- >
90
- >;
91
- scalar: Record<string, ResolverDetails>;
92
- interface: Record<string, ResolverDetails>;
93
- union: Record<string, ResolverDetails>;
94
- enum: Record<string, EnumResolverDetails>;
95
- };
96
- pluginsConfig: {
97
- defaultScalarTypesMap: Record<string, ScalarsOverridesType>;
98
- scalarsModuleResolvers: Record<string, string>;
99
- unmanagedScalarResolvers: Record<string, string>;
100
- defaultTypeMappers: Record<string, string>;
101
- };
102
- }
103
-
104
- export const parseGraphQLSchema = async ({
105
- schemaAst,
106
- sourceMap,
107
- resolverTypesPath,
108
- typeMappersMap,
109
- scalarsModule,
110
- scalarsOverrides,
111
- mode,
112
- baseOutputDir,
113
- resolverRelativeTargetDir,
114
- whitelistedModules,
115
- blacklistedModules,
116
- }: ParseGraphQLSchemaParams): Promise<ParsedGraphQLSchemaMeta> => {
117
- const scalarsModuleResolverMap = scalarsModule
118
- ? await getScalarResolverMapFromModule(scalarsModule)
119
- : {};
120
-
121
- return Object.entries(schemaAst.getTypeMap()).reduce<ParsedGraphQLSchemaMeta>(
122
- (res, [schemaType, namedType]) => {
123
- if (isNativeNamedType(namedType)) {
124
- if (isSpecifiedScalarType(namedType)) {
125
- handleNativeScalarType({ schemaType, result: res, scalarsOverrides });
126
- }
127
- return res;
128
- }
129
-
130
- // Root object types e.g. Query, Mutation, Subscription
131
- if (isRootObjectType(schemaType) && isObjectType(namedType)) {
132
- Object.entries(namedType.getFields()).forEach(
133
- ([fieldName, fieldNode]) => {
134
- const resolverDetails = createResolverDetails({
135
- belongsToRootObject: schemaType,
136
- mode,
137
- sourceMap,
138
- resolverRelativeTargetDir,
139
- resolverTypesPath,
140
- baseOutputDir,
141
- blacklistedModules,
142
- whitelistedModules,
143
- schemaType,
144
- nestedDirs: [schemaType],
145
- location: fieldNode.astNode?.loc,
146
- resolverName: fieldName,
147
- });
148
- if (!resolverDetails) {
149
- return;
150
- }
151
-
152
- res.userDefinedSchemaTypeMap[
153
- schemaType.toLowerCase() as 'query' | 'mutation' | 'subscription'
154
- ][resolverDetails.normalizedResolverName.withModule] =
155
- resolverDetails;
156
- }
157
- );
158
- return res;
159
- }
160
-
161
- // Wire up `mappers` config:
162
- // - Interface
163
- // - Enum
164
- // - Non-root object types
165
- if (
166
- isInterfaceType(namedType) ||
167
- isEnumType(namedType) ||
168
- (!isRootObjectType(schemaType) && isObjectType(namedType))
169
- ) {
170
- const typeMapperDetails = typeMappersMap[schemaType];
171
- if (typeMapperDetails) {
172
- res.pluginsConfig.defaultTypeMappers[typeMapperDetails.schemaType] =
173
- typeMapperDetails.configImportPath;
174
- }
175
- }
176
-
177
- // Other output object types
178
- if (!isRootObjectType(schemaType) && isObjectType(namedType)) {
179
- handleObjectType({
180
- mode,
181
- sourceMap,
182
- resolverTypesPath,
183
- resolverRelativeTargetDir,
184
- baseOutputDir,
185
- blacklistedModules,
186
- whitelistedModules,
187
- namedType,
188
- schemaType,
189
- result: res,
190
- });
191
- return res;
192
- }
193
-
194
- // Handle scalar type wireups
195
- if (isScalarType(namedType)) {
196
- handleScalarType({
197
- scalarsModuleResolverMap,
198
- schemaType,
199
- scalarsModule,
200
- scalarsOverrides,
201
- result: res,
202
- });
203
- }
204
-
205
- // create resolver details for other types:
206
- // - Scalar
207
- // - Union
208
- // - Interface
209
- // - Enum
210
- const resolverDetails = createResolverDetails({
211
- belongsToRootObject: null,
212
- mode,
213
- sourceMap,
214
- resolverRelativeTargetDir,
215
- resolverTypesPath,
216
- baseOutputDir,
217
- blacklistedModules,
218
- whitelistedModules,
219
- schemaType,
220
- nestedDirs: [],
221
- location: namedType.astNode?.loc,
222
- resolverName: namedType.name,
223
- });
224
-
225
- if (resolverDetails) {
226
- if (isScalarType(namedType)) {
227
- res.userDefinedSchemaTypeMap.scalar[schemaType] = resolverDetails;
228
- } else if (isUnionType(namedType)) {
229
- res.userDefinedSchemaTypeMap.union[schemaType] = resolverDetails;
230
- } else if (isInterfaceType(namedType)) {
231
- res.userDefinedSchemaTypeMap.interface[schemaType] = resolverDetails;
232
- } else if (isEnumType(namedType)) {
233
- res.userDefinedSchemaTypeMap.enum[schemaType] = {
234
- ...resolverDetails,
235
- allowedValues:
236
- namedType.astNode?.values?.map((v) => v.name.value) || [],
237
- };
238
- }
239
- }
240
-
241
- return res;
242
- },
243
- {
244
- userDefinedSchemaTypeMap: {
245
- query: {},
246
- mutation: {},
247
- subscription: {},
248
- object: {},
249
- scalar: {},
250
- interface: {},
251
- union: {},
252
- enum: {},
253
- },
254
- pluginsConfig: {
255
- defaultScalarTypesMap: {},
256
- scalarsModuleResolvers: {},
257
- unmanagedScalarResolvers: {},
258
- defaultTypeMappers: {},
259
- },
260
- }
261
- );
262
- };
263
-
264
- const handleScalarType = ({
265
- scalarsModuleResolverMap,
266
- schemaType,
267
- scalarsModule,
268
- scalarsOverrides,
269
- result,
270
- }: {
271
- scalarsModuleResolverMap: Record<string, GraphQLScalarType<unknown, unknown>>;
272
- schemaType: string;
273
- scalarsModule: string | false;
274
- scalarsOverrides: ParsedPresetConfig['scalarsOverrides'];
275
- result: ParsedGraphQLSchemaMeta;
276
- }): void => {
277
- const scalarsModuleResolver = scalarsModuleResolverMap[schemaType];
278
- // Use found the scalar from scalar module
279
- if (scalarsModuleResolver) {
280
- if (
281
- scalarsModuleResolver.extensions.codegenScalarType &&
282
- typeof scalarsModuleResolver.extensions.codegenScalarType === 'string'
283
- ) {
284
- result.pluginsConfig.defaultScalarTypesMap[schemaType] =
285
- scalarsModuleResolver.extensions.codegenScalarType;
286
- }
287
-
288
- result.pluginsConfig.scalarsModuleResolvers[
289
- schemaType
290
- ] = `~${scalarsModule}#${scalarsModuleResolver.name}Resolver`;
291
- }
292
-
293
- // If found scalar overrides, use them
294
- const override = scalarsOverrides[schemaType];
295
- if (override) {
296
- if (override.type) {
297
- result.pluginsConfig.defaultScalarTypesMap[schemaType] = override.type;
298
- }
299
- if (override.resolver) {
300
- result.pluginsConfig.unmanagedScalarResolvers[schemaType] =
301
- override.resolver;
302
- }
303
- }
304
- };
305
-
306
- const getScalarResolverMapFromModule = async (
307
- scalarsModule: string
308
- ): Promise<Record<string, GraphQLScalarType<unknown, unknown>>> => {
309
- let module:
310
- | { resolvers: Record<string, GraphQLScalarType<unknown, unknown>> }
311
- | undefined;
312
- try {
313
- module = await import(scalarsModule);
314
- } catch (err) {
315
- if (
316
- err instanceof Error &&
317
- 'code' in err &&
318
- err.code === 'MODULE_NOT_FOUND'
319
- ) {
320
- logger.warn(
321
- `Unable to import \`${scalarsModule}\`. Install \`${scalarsModule}\` or you have to implement Scalar resolvers by yourself.`
322
- );
323
- }
324
- }
325
-
326
- if (!module || !module.resolvers) {
327
- return {};
328
- }
329
-
330
- return module.resolvers;
331
- };
332
-
333
- const handleNativeScalarType = ({
334
- schemaType,
335
- result,
336
- scalarsOverrides,
337
- }: {
338
- schemaType: string;
339
- result: ParsedGraphQLSchemaMeta;
340
- scalarsOverrides: ParsedPresetConfig['scalarsOverrides'];
341
- }): void => {
342
- const override = scalarsOverrides[schemaType];
343
- // Note: only override the type i.e. same functionality as `typescript` plugin's scalars
344
- // I've never seen someone overriding native scalar's implementation so it's probably not a thing.
345
- if (override && override.type) {
346
- result.pluginsConfig.defaultScalarTypesMap[schemaType] = override.type;
347
- }
348
- };
349
-
350
- const handleObjectType = ({
351
- mode,
352
- sourceMap,
353
- resolverTypesPath,
354
- resolverRelativeTargetDir,
355
- baseOutputDir,
356
- blacklistedModules,
357
- whitelistedModules,
358
- namedType,
359
- schemaType,
360
- result,
361
- }: {
362
- mode: ParseGraphQLSchemaParams['mode'];
363
- sourceMap: ParseGraphQLSchemaParams['sourceMap'];
364
- resolverTypesPath: ParseGraphQLSchemaParams['resolverTypesPath'];
365
- resolverRelativeTargetDir: ParseGraphQLSchemaParams['resolverRelativeTargetDir'];
366
- baseOutputDir: ParseGraphQLSchemaParams['baseOutputDir'];
367
- blacklistedModules: ParseGraphQLSchemaParams['blacklistedModules'];
368
- whitelistedModules: ParseGraphQLSchemaParams['whitelistedModules'];
369
- namedType: GraphQLObjectType;
370
- schemaType: string;
371
- result: ParsedGraphQLSchemaMeta;
372
- }): void => {
373
- // parse for details
374
- const fieldsByGraphQLModule = Object.entries(namedType.getFields()).reduce<
375
- Record<
376
- string,
377
- {
378
- fieldNodes: GraphQLField<unknown, unknown>[];
379
- firstFieldLocation: Location | undefined;
380
- }
381
- >
382
- >((res, [_, fieldNode]) => {
383
- const fieldLocation = fieldNode.astNode?.loc;
384
- const modulePath = path.dirname(fieldLocation?.source.name || '');
385
-
386
- if (!res[modulePath]) {
387
- res[modulePath] = {
388
- fieldNodes: [],
389
- // Note: fieldLocation here is the location of the first field found in a GraphQL Module.
390
- // The reason we use field's location instead of the object type's location is because when `extend type ObjectType` is used, the location of object type is the last found location.
391
- // i.e. we cannot rely on object's location if `extend type` is used.
392
- firstFieldLocation: fieldLocation,
393
- };
394
- }
395
-
396
- res[modulePath].fieldNodes.push(fieldNode);
397
-
398
- return res;
399
- }, {});
400
-
401
- result.userDefinedSchemaTypeMap.object[schemaType] =
402
- result.userDefinedSchemaTypeMap.object[schemaType] || {};
403
-
404
- Object.entries(fieldsByGraphQLModule).forEach(
405
- (
406
- [_modulePath, { firstFieldLocation, fieldNodes }],
407
- _index,
408
- graphQLModules
409
- ) => {
410
- const resolverDetails = createResolverDetails({
411
- belongsToRootObject: null,
412
- mode,
413
- sourceMap,
414
- resolverRelativeTargetDir,
415
- resolverTypesPath,
416
- baseOutputDir,
417
- blacklistedModules,
418
- whitelistedModules,
419
- schemaType,
420
- nestedDirs: [],
421
- location: firstFieldLocation,
422
- resolverName: namedType.name,
423
- });
424
-
425
- if (!resolverDetails) {
426
- return;
427
- }
428
-
429
- // If there are multiple object type files to generate
430
- // e.g. `extend type ObjectType` is used across multiple modules
431
- // We create an array of fields to pick for each module
432
- //
433
- // If there's only one module, we return an empty array i.e. pick all fields
434
- const fieldsToPick =
435
- graphQLModules.length > 1 ? fieldNodes.map((field) => field.name) : [];
436
-
437
- result.userDefinedSchemaTypeMap.object[schemaType][
438
- resolverDetails.normalizedResolverName.withModule
439
- ] = {
440
- ...resolverDetails,
441
- fieldsToPick,
442
- };
443
- }
444
- );
445
- };
446
-
447
- const createResolverDetails = ({
448
- belongsToRootObject,
449
- mode,
450
- sourceMap,
451
- resolverRelativeTargetDir,
452
- resolverTypesPath,
453
- baseOutputDir,
454
- blacklistedModules,
455
- whitelistedModules,
456
- schemaType,
457
- nestedDirs,
458
- location,
459
- resolverName,
460
- }: {
461
- belongsToRootObject: RootObjectType | null;
462
- mode: ParseGraphQLSchemaParams['mode'];
463
- sourceMap: ParseGraphQLSchemaParams['sourceMap'];
464
- resolverRelativeTargetDir: ParseGraphQLSchemaParams['resolverRelativeTargetDir'];
465
- resolverTypesPath: ParseGraphQLSchemaParams['resolverTypesPath'];
466
- baseOutputDir: ParseGraphQLSchemaParams['baseOutputDir'];
467
- blacklistedModules: ParseGraphQLSchemaParams['blacklistedModules'];
468
- whitelistedModules: ParseGraphQLSchemaParams['whitelistedModules'];
469
- schemaType: string;
470
- nestedDirs: string[];
471
- location: Location | undefined;
472
- resolverName: string;
473
- }): ResolverDetails | undefined => {
474
- const parsedDetails = parseLocationForOutputDir({
475
- nestedDirs,
476
- location,
477
- mode,
478
- sourceMap,
479
- resolverRelativeTargetDir,
480
- baseOutputDir,
481
- blacklistedModules,
482
- whitelistedModules,
483
- });
484
- if (!parsedDetails) {
485
- // No `parsedDetails` means the location is NOT whitelisted, ignore.
486
- return;
487
- }
488
- const { moduleName, resolversOutputDir, relativePathFromBaseToModule } =
489
- parsedDetails;
490
-
491
- const normalizedResolverName = normalizeResolverName(
492
- moduleName,
493
- resolverName,
494
- belongsToRootObject
495
- );
496
-
497
- const resolverFilePath = path.posix.join(
498
- resolversOutputDir,
499
- `${resolverName}.ts`
500
- );
501
-
502
- return {
503
- schemaType,
504
- moduleName,
505
- resolverFile: {
506
- name: resolverName,
507
- path: resolverFilePath,
508
- isOnFilesystem: fs.existsSync(resolverFilePath),
509
- },
510
- relativePathFromBaseToModule,
511
- normalizedResolverName,
512
- typeNamedImport: ({ generatedResolverTypes }) =>
513
- generatedResolverTypes.userDefined[schemaType]?.name ||
514
- `${schemaType}Resolvers`,
515
- typeString: ({ generatedResolverTypes }) => {
516
- if (belongsToRootObject) {
517
- return generatedResolverTypes.userDefined[schemaType]
518
- ? `${generatedResolverTypes.userDefined[schemaType].name}['${resolverName}']`
519
- : `${schemaType}Resolvers['${resolverName}']`;
520
- }
521
- return (
522
- generatedResolverTypes.userDefined[schemaType]?.name ||
523
- `${schemaType}Resolvers`
524
- );
525
- },
526
- relativePathToResolverTypesFile: relativeModulePath(
527
- resolversOutputDir,
528
- resolverTypesPath
529
- ),
530
- };
531
- };
@@ -1,76 +0,0 @@
1
- import * as path from 'path';
2
- import type { Location } from 'graphql';
3
- import { parseLocationForWhitelistedModule } from '../utils/index.js';
4
- import type { ParsedPresetConfig } from '../validatePresetConfig/index.js';
5
- import type { ParseSourcesResult } from '../parseSources/index.js';
6
-
7
- interface ParseLocationForOutputDirParams {
8
- nestedDirs: string[];
9
- location?: Location;
10
- mode: ParsedPresetConfig['mode'];
11
- sourceMap: ParseSourcesResult['sourceMap'];
12
- whitelistedModules: string[];
13
- blacklistedModules: string[];
14
- baseOutputDir: string;
15
- resolverRelativeTargetDir: string;
16
- }
17
-
18
- type OutputDirResult =
19
- | {
20
- resolversOutputDir: string;
21
- moduleName: string;
22
- relativePathFromBaseToModule: string[];
23
- }
24
- | undefined;
25
- /**
26
- * Parse location to see which module it belongs to.
27
- * Also check against whitelisted and blacklisted to see if need to generate file.
28
- */
29
- export const parseLocationForOutputDir = ({
30
- nestedDirs,
31
- mode,
32
- sourceMap,
33
- whitelistedModules,
34
- blacklistedModules,
35
- baseOutputDir,
36
- resolverRelativeTargetDir,
37
- location,
38
- }: ParseLocationForOutputDirParams): OutputDirResult => {
39
- // If mode is "merged", there's only one module:
40
- // - always generate a.k.a it's always whitelisted
41
- // - put them together at designated relativeTargetDir
42
- // - moduleName='' i.e. no module
43
- if (mode === 'merged') {
44
- return {
45
- resolversOutputDir: path.posix.join(
46
- baseOutputDir,
47
- resolverRelativeTargetDir,
48
- ...nestedDirs
49
- ),
50
- moduleName: '',
51
- relativePathFromBaseToModule: [],
52
- };
53
- }
54
-
55
- // 2. mode is "modules", each module is the folder containing the schema files
56
- // This means one or multiple schema files can add up to one module
57
- const parsedSource = parseLocationForWhitelistedModule({
58
- location,
59
- sourceMap,
60
- whitelistedModules,
61
- blacklistedModules,
62
- });
63
-
64
- return parsedSource
65
- ? {
66
- resolversOutputDir: path.posix.join(
67
- baseOutputDir,
68
- ...parsedSource.relativePathFromBaseToModule,
69
- resolverRelativeTargetDir,
70
- ...nestedDirs
71
- ),
72
- moduleName: parsedSource.moduleName,
73
- relativePathFromBaseToModule: parsedSource.relativePathFromBaseToModule,
74
- }
75
- : undefined;
76
- };
@@ -1 +0,0 @@
1
- export * from './parseSources.js';
@@ -1,83 +0,0 @@
1
- import * as path from 'path';
2
- import type { Source } from '@graphql-tools/utils';
3
- import type { ModuleNamingMode } from '../validatePresetConfig/index.js';
4
-
5
- export interface ParsedSource {
6
- source: Source;
7
- sourcePath: path.ParsedPath;
8
- moduleName: string;
9
- relativePathFromBaseToModule: string[];
10
- }
11
-
12
- export interface ParseSourcesResult {
13
- sourceMap: Record<string, ParsedSource>;
14
- }
15
-
16
- export function parseSources({
17
- sources,
18
- baseOutputDir,
19
- moduleNamingMode,
20
- }: {
21
- sources: Source[];
22
- baseOutputDir: string;
23
- moduleNamingMode: ModuleNamingMode;
24
- }): ParseSourcesResult {
25
- return sources.reduce<ParseSourcesResult>(
26
- (result, source) => {
27
- if (!source.location) {
28
- throw new Error('Missing source location');
29
- }
30
-
31
- const sourcePath = path.parse(source.location);
32
-
33
- const relativePathFromBaseToModule = path
34
- .relative(path.resolve(baseOutputDir), path.resolve(sourcePath.dir))
35
- .split(path.sep);
36
-
37
- const moduleName = selectModuleName({
38
- moduleNamingMode,
39
- relativePathFromBaseToModule,
40
- });
41
-
42
- result.sourceMap[source.location] = {
43
- source,
44
- sourcePath,
45
- moduleName,
46
- relativePathFromBaseToModule,
47
- };
48
-
49
- return result;
50
- },
51
- { sourceMap: {} }
52
- );
53
- }
54
-
55
- const selectModuleName = ({
56
- moduleNamingMode,
57
- relativePathFromBaseToModule,
58
- }: {
59
- moduleNamingMode: ModuleNamingMode;
60
- relativePathFromBaseToModule: string[];
61
- }): string => {
62
- if (moduleNamingMode === 'all') {
63
- return relativePathFromBaseToModule.join('_');
64
- }
65
-
66
- const wrappedModuleNamingMode =
67
- moduleNamingMode >= 0
68
- ? moduleNamingMode
69
- : relativePathFromBaseToModule.length + moduleNamingMode;
70
-
71
- if (
72
- wrappedModuleNamingMode < 0 ||
73
- wrappedModuleNamingMode >= relativePathFromBaseToModule.length
74
- ) {
75
- throw new Error(
76
- `"moduleNamingMode" ${moduleNamingMode} exceeds path ${relativePathFromBaseToModule.join(
77
- '/'
78
- )}`
79
- );
80
- }
81
-
82
- return relativePathFromBaseToModule[wrappedModuleNamingMode];
83
- };