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

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 (287) hide show
  1. package/CHANGELOG.md +816 -0
  2. package/DEVELOPMENT.md +49 -0
  3. package/LICENSE +21 -0
  4. package/README.md +3 -3
  5. package/{src → dist}/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.d.ts +2 -2
  6. package/{src → dist}/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.js +11 -17
  7. package/dist/addVirtualTypesFileToTsMorphProject/index.d.ts +1 -0
  8. package/dist/addVirtualTypesFileToTsMorphProject/index.js +1 -0
  9. package/{src → dist}/defineConfig.d.ts +1 -1
  10. package/{src → dist}/defineConfig.js +4 -10
  11. package/{src → dist}/generateResolverFiles/addExternalResolverImport.d.ts +1 -1
  12. package/{src → dist}/generateResolverFiles/addExternalResolverImport.js +3 -8
  13. package/{src → dist}/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.d.ts +1 -1
  14. package/{src → dist}/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.js +9 -14
  15. package/{src → dist}/generateResolverFiles/addResolverMainFiles.d.ts +1 -1
  16. package/{src → dist}/generateResolverFiles/addResolverMainFiles.js +11 -17
  17. package/{src → dist}/generateResolverFiles/ensureEnumTypeResolversAreGenerated.d.ts +1 -1
  18. package/{src → dist}/generateResolverFiles/ensureEnumTypeResolversAreGenerated.js +6 -11
  19. package/{src → dist}/generateResolverFiles/generateResolverFiles.d.ts +1 -1
  20. package/dist/generateResolverFiles/generateResolverFiles.js +87 -0
  21. package/{src → dist}/generateResolverFiles/getImportStatementWithExpectedNamedImport.d.ts +1 -1
  22. package/dist/generateResolverFiles/getImportStatementWithExpectedNamedImport.js +14 -0
  23. package/{src → dist}/generateResolverFiles/getVariableStatementWithExpectedIdentifier.d.ts +1 -1
  24. package/{src → dist}/generateResolverFiles/getVariableStatementWithExpectedIdentifier.js +1 -6
  25. package/{src → dist}/generateResolverFiles/handleGraphQLEnumType.d.ts +1 -1
  26. package/{src → dist}/generateResolverFiles/handleGraphQLEnumType.js +6 -11
  27. package/{src → dist}/generateResolverFiles/handleGraphQLInterfaceType.d.ts +1 -1
  28. package/{src → dist}/generateResolverFiles/handleGraphQLInterfaceType.js +6 -11
  29. package/{src → dist}/generateResolverFiles/handleGraphQLObjectType.d.ts +1 -1
  30. package/{src → dist}/generateResolverFiles/handleGraphQLObjectType.js +8 -14
  31. package/dist/generateResolverFiles/handleGraphQLRootObjectTypeField.d.ts +3 -0
  32. package/{src → dist}/generateResolverFiles/handleGraphQLRootObjectTypeField.js +8 -13
  33. package/{src → dist}/generateResolverFiles/handleGraphQLScalarType.d.ts +1 -1
  34. package/{src → dist}/generateResolverFiles/handleGraphQLScalarType.js +6 -11
  35. package/{src → dist}/generateResolverFiles/handleGraphQLUnionType.d.ts +1 -1
  36. package/{src → dist}/generateResolverFiles/handleGraphQLUnionType.js +5 -10
  37. package/dist/generateResolverFiles/index.d.ts +2 -0
  38. package/dist/generateResolverFiles/index.js +1 -0
  39. package/{src → dist}/generateResolverFiles/postProcessFiles.d.ts +1 -1
  40. package/{src → dist}/generateResolverFiles/postProcessFiles.js +24 -26
  41. package/{src → dist}/generateResolverFiles/types.d.ts +6 -6
  42. package/dist/generateResolverFiles/types.js +1 -0
  43. package/{src → dist}/generateResolverFiles/visitNamedType.d.ts +2 -2
  44. package/{src → dist}/generateResolverFiles/visitNamedType.js +3 -8
  45. package/dist/generateTypeDefsFiles/generateTypeDefsContent.js +7 -0
  46. package/{src → dist}/generateTypeDefsFiles/generateTypeDefsFiles.d.ts +3 -3
  47. package/{src → dist}/generateTypeDefsFiles/generateTypeDefsFiles.js +7 -13
  48. package/dist/generateTypeDefsFiles/index.d.ts +1 -0
  49. package/dist/generateTypeDefsFiles/index.js +1 -0
  50. package/{src → dist}/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.d.ts +3 -3
  51. package/{src → dist}/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.js +17 -22
  52. package/{src → dist}/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.js +5 -10
  53. package/dist/getGraphQLObjectTypeResolversToGenerate/index.d.ts +1 -0
  54. package/dist/getGraphQLObjectTypeResolversToGenerate/index.js +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +3 -0
  57. package/dist/normalizeAddConfigPath/index.d.ts +1 -0
  58. package/dist/normalizeAddConfigPath/index.js +1 -0
  59. package/{src → dist}/normalizeAddConfigPath/normalizeAddConfigPath.d.ts +1 -1
  60. package/{src → dist}/normalizeAddConfigPath/normalizeAddConfigPath.js +2 -8
  61. package/{src → dist}/parseGraphQLSchema/index.d.ts +2 -2
  62. package/dist/parseGraphQLSchema/index.js +1 -0
  63. package/{src → dist}/parseGraphQLSchema/normalizeResolverName.d.ts +1 -1
  64. package/{src → dist}/parseGraphQLSchema/normalizeResolverName.js +1 -6
  65. package/{src → dist}/parseGraphQLSchema/parseGraphQLSchema.d.ts +5 -5
  66. package/{src → dist}/parseGraphQLSchema/parseGraphQLSchema.js +43 -50
  67. package/{src → dist}/parseGraphQLSchema/parseLocationForOutputDir.d.ts +2 -2
  68. package/{src → dist}/parseGraphQLSchema/parseLocationForOutputDir.js +4 -10
  69. package/dist/parseSources/index.d.ts +1 -0
  70. package/dist/parseSources/index.js +1 -0
  71. package/{src → dist}/parseSources/parseSources.d.ts +1 -1
  72. package/{src → dist}/parseSources/parseSources.js +2 -7
  73. package/{src → dist}/parseTypeMappers/collectTypeMappersFromSourceFile.d.ts +2 -2
  74. package/{src → dist}/parseTypeMappers/collectTypeMappersFromSourceFile.js +15 -21
  75. package/dist/parseTypeMappers/index.d.ts +1 -0
  76. package/dist/parseTypeMappers/index.js +1 -0
  77. package/{src → dist}/parseTypeMappers/parseTypeMappers.d.ts +2 -2
  78. package/dist/parseTypeMappers/parseTypeMappers.js +20 -0
  79. package/{src → dist}/preset.d.ts +1 -1
  80. package/dist/preset.js +214 -0
  81. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  82. package/dist/utils/cwd.js +7 -0
  83. package/dist/utils/fmt.js +15 -0
  84. package/dist/utils/index.d.ts +12 -0
  85. package/dist/utils/index.js +12 -0
  86. package/{src → dist}/utils/isMatchResolverNamePattern.js +3 -9
  87. package/dist/utils/isNativeNamedType.js +13 -0
  88. package/dist/utils/isRootObjectType.js +3 -0
  89. package/{src → dist}/utils/isWhitelistedModule.js +1 -6
  90. package/{src → dist}/utils/logger.d.ts +1 -1
  91. package/dist/utils/logger.js +13 -0
  92. package/dist/utils/normalizeImportExtension.js +9 -0
  93. package/dist/utils/normalizeRelativePath.js +6 -0
  94. package/{src → dist}/utils/parseLocationForWhitelistedModule.d.ts +1 -1
  95. package/dist/utils/parseLocationForWhitelistedModule.js +17 -0
  96. package/{src → dist}/utils/printImportLine.d.ts +1 -1
  97. package/{src → dist}/utils/printImportLine.js +3 -7
  98. package/dist/utils/relativeModulePath.js +6 -0
  99. package/dist/validateAndMergeParsedConfigs/index.d.ts +1 -0
  100. package/dist/validateAndMergeParsedConfigs/index.js +1 -0
  101. package/{src → dist}/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.d.ts +2 -2
  102. package/{src → dist}/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.js +16 -13
  103. package/dist/validatePresetConfig/index.d.ts +1 -0
  104. package/dist/validatePresetConfig/index.js +1 -0
  105. package/{src → dist}/validatePresetConfig/validatePresetConfig.d.ts +2 -2
  106. package/{src → dist}/validatePresetConfig/validatePresetConfig.js +29 -36
  107. package/eslint.config.mjs +22 -0
  108. package/package.json +19 -12
  109. package/project.json +8 -0
  110. package/src/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.ts +109 -0
  111. package/src/addVirtualTypesFileToTsMorphProject/index.ts +1 -0
  112. package/src/defineConfig.spec.ts +76 -0
  113. package/src/defineConfig.ts +37 -0
  114. package/src/generateResolverFiles/addExternalResolverImport.ts +185 -0
  115. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.spec.ts +1174 -0
  116. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.ts +144 -0
  117. package/src/generateResolverFiles/addResolverMainFiles.ts +343 -0
  118. package/src/generateResolverFiles/ensureEnumTypeResolversAreGenerated.ts +51 -0
  119. package/src/generateResolverFiles/generateResolverFiles.ts +148 -0
  120. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.spec.ts +127 -0
  121. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.ts +25 -0
  122. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.spec.ts +147 -0
  123. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts +34 -0
  124. package/src/generateResolverFiles/handleGraphQLEnumType.ts +100 -0
  125. package/src/generateResolverFiles/handleGraphQLInterfaceType.ts +70 -0
  126. package/src/generateResolverFiles/handleGraphQLObjectType.ts +171 -0
  127. package/src/generateResolverFiles/handleGraphQLRootObjectTypeField.ts +105 -0
  128. package/src/generateResolverFiles/handleGraphQLScalarType.ts +81 -0
  129. package/src/generateResolverFiles/handleGraphQLUnionType.ts +68 -0
  130. package/src/generateResolverFiles/index.ts +2 -0
  131. package/src/generateResolverFiles/postProcessFiles.ts +287 -0
  132. package/src/generateResolverFiles/types.ts +203 -0
  133. package/src/generateResolverFiles/visitNamedType.ts +66 -0
  134. package/src/generateTypeDefsFiles/generateTypeDefsContent.ts +15 -0
  135. package/src/generateTypeDefsFiles/generateTypeDefsFiles.ts +100 -0
  136. package/src/generateTypeDefsFiles/index.ts +1 -0
  137. package/src/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.ts +361 -0
  138. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.spec.ts +115 -0
  139. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.ts +88 -0
  140. package/src/getGraphQLObjectTypeResolversToGenerate/index.ts +1 -0
  141. package/src/index.ts +3 -0
  142. package/src/normalizeAddConfigPath/index.ts +1 -0
  143. package/src/normalizeAddConfigPath/normalizeAddConfigPath.ts +29 -0
  144. package/src/parseGraphQLSchema/index.ts +2 -0
  145. package/src/parseGraphQLSchema/normalizeResolverName.ts +28 -0
  146. package/src/parseGraphQLSchema/parseGraphQLSchema.ts +531 -0
  147. package/src/parseGraphQLSchema/parseLocationForOutputDir.ts +76 -0
  148. package/src/parseSources/index.ts +1 -0
  149. package/src/parseSources/parseSources.ts +83 -0
  150. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.spec.ts +789 -0
  151. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.ts +197 -0
  152. package/src/parseTypeMappers/index.ts +1 -0
  153. package/src/parseTypeMappers/parseTypeMappers.ts +75 -0
  154. package/src/preset.ts +317 -0
  155. package/src/utils/cwd.ts +8 -0
  156. package/src/utils/fmt.ts +16 -0
  157. package/src/utils/index.ts +12 -0
  158. package/src/utils/isMatchResolverNamePattern.ts +27 -0
  159. package/src/utils/isNativeNamedType.ts +21 -0
  160. package/src/utils/isRootObjectType.ts +8 -0
  161. package/src/utils/isWhitelistedModule.spec.ts +71 -0
  162. package/src/utils/isWhitelistedModule.ts +21 -0
  163. package/src/utils/logger.ts +14 -0
  164. package/src/utils/normalizeImportExtension.spec.ts +42 -0
  165. package/src/utils/normalizeImportExtension.ts +16 -0
  166. package/src/utils/normalizeRelativePath.ts +6 -0
  167. package/src/utils/parseLocationForWhitelistedModule.spec.ts +130 -0
  168. package/src/utils/parseLocationForWhitelistedModule.ts +38 -0
  169. package/src/utils/printImportLine.spec.ts +150 -0
  170. package/src/utils/printImportLine.ts +78 -0
  171. package/src/utils/relativeModulePath.ts +7 -0
  172. package/src/validateAndMergeParsedConfigs/index.ts +1 -0
  173. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.spec.ts +211 -0
  174. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.ts +92 -0
  175. package/src/validatePresetConfig/index.ts +1 -0
  176. package/src/validatePresetConfig/validatePresetConfig.spec.ts +706 -0
  177. package/src/validatePresetConfig/validatePresetConfig.ts +571 -0
  178. package/tsconfig.json +14 -0
  179. package/tsconfig.lib.json +18 -0
  180. package/tsconfig.spec.json +20 -0
  181. package/vite.config.ts +24 -0
  182. package/src/addVirtualTypesFileToTsMorphProject/addVirtualTypesFileToTsMorphProject.js.map +0 -1
  183. package/src/addVirtualTypesFileToTsMorphProject/index.d.ts +0 -1
  184. package/src/addVirtualTypesFileToTsMorphProject/index.js +0 -5
  185. package/src/addVirtualTypesFileToTsMorphProject/index.js.map +0 -1
  186. package/src/defineConfig.js.map +0 -1
  187. package/src/generateResolverFiles/addExternalResolverImport.js.map +0 -1
  188. package/src/generateResolverFiles/addObjectTypeResolversPropertyAssignmentNodesIfNotImplemented.js.map +0 -1
  189. package/src/generateResolverFiles/addResolverMainFiles.js.map +0 -1
  190. package/src/generateResolverFiles/ensureEnumTypeResolversAreGenerated.js.map +0 -1
  191. package/src/generateResolverFiles/generateResolverFiles.js +0 -54
  192. package/src/generateResolverFiles/generateResolverFiles.js.map +0 -1
  193. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.js +0 -20
  194. package/src/generateResolverFiles/getImportStatementWithExpectedNamedImport.js.map +0 -1
  195. package/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.js.map +0 -1
  196. package/src/generateResolverFiles/handleGraphQLEnumType.js.map +0 -1
  197. package/src/generateResolverFiles/handleGraphQLInterfaceType.js.map +0 -1
  198. package/src/generateResolverFiles/handleGraphQLObjectType.js.map +0 -1
  199. package/src/generateResolverFiles/handleGraphQLRootObjectTypeField.d.ts +0 -3
  200. package/src/generateResolverFiles/handleGraphQLRootObjectTypeField.js.map +0 -1
  201. package/src/generateResolverFiles/handleGraphQLScalarType.js.map +0 -1
  202. package/src/generateResolverFiles/handleGraphQLUnionType.js.map +0 -1
  203. package/src/generateResolverFiles/index.d.ts +0 -2
  204. package/src/generateResolverFiles/index.js +0 -6
  205. package/src/generateResolverFiles/index.js.map +0 -1
  206. package/src/generateResolverFiles/postProcessFiles.js.map +0 -1
  207. package/src/generateResolverFiles/types.js +0 -3
  208. package/src/generateResolverFiles/types.js.map +0 -1
  209. package/src/generateResolverFiles/visitNamedType.js.map +0 -1
  210. package/src/generateTypeDefsFiles/generateTypeDefsContent.js +0 -12
  211. package/src/generateTypeDefsFiles/generateTypeDefsContent.js.map +0 -1
  212. package/src/generateTypeDefsFiles/generateTypeDefsFiles.js.map +0 -1
  213. package/src/generateTypeDefsFiles/index.d.ts +0 -1
  214. package/src/generateTypeDefsFiles/index.js +0 -5
  215. package/src/generateTypeDefsFiles/index.js.map +0 -1
  216. package/src/getGraphQLObjectTypeResolversToGenerate/getGraphQLObjectTypeResolversToGenerate.js.map +0 -1
  217. package/src/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.js.map +0 -1
  218. package/src/getGraphQLObjectTypeResolversToGenerate/index.d.ts +0 -1
  219. package/src/getGraphQLObjectTypeResolversToGenerate/index.js +0 -5
  220. package/src/getGraphQLObjectTypeResolversToGenerate/index.js.map +0 -1
  221. package/src/index.d.ts +0 -3
  222. package/src/index.js +0 -10
  223. package/src/index.js.map +0 -1
  224. package/src/normalizeAddConfigPath/index.d.ts +0 -1
  225. package/src/normalizeAddConfigPath/index.js +0 -5
  226. package/src/normalizeAddConfigPath/index.js.map +0 -1
  227. package/src/normalizeAddConfigPath/normalizeAddConfigPath.js.map +0 -1
  228. package/src/parseGraphQLSchema/index.js +0 -5
  229. package/src/parseGraphQLSchema/index.js.map +0 -1
  230. package/src/parseGraphQLSchema/normalizeResolverName.js.map +0 -1
  231. package/src/parseGraphQLSchema/parseGraphQLSchema.js.map +0 -1
  232. package/src/parseGraphQLSchema/parseLocationForOutputDir.js.map +0 -1
  233. package/src/parseSources/index.d.ts +0 -1
  234. package/src/parseSources/index.js +0 -5
  235. package/src/parseSources/index.js.map +0 -1
  236. package/src/parseSources/parseSources.js.map +0 -1
  237. package/src/parseTypeMappers/collectTypeMappersFromSourceFile.js.map +0 -1
  238. package/src/parseTypeMappers/index.d.ts +0 -1
  239. package/src/parseTypeMappers/index.js +0 -5
  240. package/src/parseTypeMappers/index.js.map +0 -1
  241. package/src/parseTypeMappers/parseTypeMappers.js +0 -26
  242. package/src/parseTypeMappers/parseTypeMappers.js.map +0 -1
  243. package/src/preset.js +0 -214
  244. package/src/preset.js.map +0 -1
  245. package/src/utils/cwd.js +0 -13
  246. package/src/utils/cwd.js.map +0 -1
  247. package/src/utils/fmt.js +0 -19
  248. package/src/utils/fmt.js.map +0 -1
  249. package/src/utils/index.d.ts +0 -12
  250. package/src/utils/index.js +0 -16
  251. package/src/utils/index.js.map +0 -1
  252. package/src/utils/isMatchResolverNamePattern.js.map +0 -1
  253. package/src/utils/isNativeNamedType.js +0 -18
  254. package/src/utils/isNativeNamedType.js.map +0 -1
  255. package/src/utils/isRootObjectType.js +0 -8
  256. package/src/utils/isRootObjectType.js.map +0 -1
  257. package/src/utils/isWhitelistedModule.js.map +0 -1
  258. package/src/utils/logger.js +0 -17
  259. package/src/utils/logger.js.map +0 -1
  260. package/src/utils/normalizeImportExtension.js +0 -13
  261. package/src/utils/normalizeImportExtension.js.map +0 -1
  262. package/src/utils/normalizeRelativePath.js +0 -11
  263. package/src/utils/normalizeRelativePath.js.map +0 -1
  264. package/src/utils/parseLocationForWhitelistedModule.js +0 -22
  265. package/src/utils/parseLocationForWhitelistedModule.js.map +0 -1
  266. package/src/utils/printImportLine.js.map +0 -1
  267. package/src/utils/relativeModulePath.js +0 -12
  268. package/src/utils/relativeModulePath.js.map +0 -1
  269. package/src/validateAndMergeParsedConfigs/index.d.ts +0 -1
  270. package/src/validateAndMergeParsedConfigs/index.js +0 -5
  271. package/src/validateAndMergeParsedConfigs/index.js.map +0 -1
  272. package/src/validateAndMergeParsedConfigs/validateAndMergeParsedConfigs.js.map +0 -1
  273. package/src/validatePresetConfig/index.d.ts +0 -1
  274. package/src/validatePresetConfig/index.js +0 -5
  275. package/src/validatePresetConfig/index.js.map +0 -1
  276. package/src/validatePresetConfig/validatePresetConfig.js.map +0 -1
  277. /package/{src → dist}/generateTypeDefsFiles/generateTypeDefsContent.d.ts +0 -0
  278. /package/{src → dist}/getGraphQLObjectTypeResolversToGenerate/getNodePropertyMap.d.ts +0 -0
  279. /package/{src → dist}/utils/cwd.d.ts +0 -0
  280. /package/{src → dist}/utils/fmt.d.ts +0 -0
  281. /package/{src → dist}/utils/isMatchResolverNamePattern.d.ts +0 -0
  282. /package/{src → dist}/utils/isNativeNamedType.d.ts +0 -0
  283. /package/{src → dist}/utils/isRootObjectType.d.ts +0 -0
  284. /package/{src → dist}/utils/isWhitelistedModule.d.ts +0 -0
  285. /package/{src → dist}/utils/normalizeImportExtension.d.ts +0 -0
  286. /package/{src → dist}/utils/normalizeRelativePath.d.ts +0 -0
  287. /package/{src → dist}/utils/relativeModulePath.d.ts +0 -0
@@ -0,0 +1,203 @@
1
+ import type { SourceFile, Project } from 'ts-morph';
2
+ import type * as typeScriptResolversPlugin from '@graphql-codegen/typescript-resolvers';
3
+ import type { GraphQLObjectTypeResolversToGenerate } from '../getGraphQLObjectTypeResolversToGenerate/index.js';
4
+ import type { TypeMappersMap } from '../parseTypeMappers/index.js';
5
+ import type {
6
+ ImportExtension,
7
+ ImportLineMeta,
8
+ RootObjectType,
9
+ } from '../utils/index.js';
10
+ import type { ParsedPresetConfig } from '../validatePresetConfig/index.js';
11
+ import type { NormalizedResolverName } from '../parseGraphQLSchema/index.js';
12
+ import type { ParsedGraphQLSchemaMeta } from '../parseGraphQLSchema/index.js';
13
+
14
+ export type GeneratedTypesFileMeta = {
15
+ generatedResolverTypes: NonNullable<
16
+ Awaited<ReturnType<typeof typeScriptResolversPlugin.plugin>>['meta']
17
+ >['generatedResolverTypes'];
18
+ };
19
+
20
+ interface BaseVirtualFile {
21
+ __filetype: string;
22
+ filesystem: {
23
+ type: 'virtual' | 'filesystem';
24
+ contentUpdated: boolean;
25
+ };
26
+ content: string;
27
+ mainImportIdentifier: string;
28
+ }
29
+
30
+ export interface StandardFile extends BaseVirtualFile {
31
+ __filetype: 'file';
32
+ }
33
+
34
+ export interface InterfacelResolverFile extends BaseVirtualFile {
35
+ __filetype: 'interfaceResolver';
36
+ meta: {
37
+ moduleName: string;
38
+ relativePathFromBaseToModule: string[];
39
+ resolverTypeImportDeclaration: string;
40
+ variableStatement: string;
41
+ resolverType: {
42
+ baseImport: string; // e.g. `NodeResolvers`
43
+ final: string;
44
+ };
45
+ normalizedResolverName: NormalizedResolverName;
46
+ };
47
+ }
48
+
49
+ export interface UnionResolverFile extends BaseVirtualFile {
50
+ __filetype: 'unionResolver';
51
+ meta: {
52
+ moduleName: string;
53
+ relativePathFromBaseToModule: string[];
54
+ resolverTypeImportDeclaration: string;
55
+ variableStatement: string;
56
+ resolverType: {
57
+ baseImport: string; // e.g. `NodeResolvers`
58
+ final: string;
59
+ };
60
+ normalizedResolverName: NormalizedResolverName;
61
+ };
62
+ }
63
+
64
+ export interface ScalarResolverFile extends BaseVirtualFile {
65
+ __filetype: 'scalarResolver';
66
+ meta: {
67
+ moduleName: string;
68
+ relativePathFromBaseToModule: string[];
69
+ resolverTypeImportDeclaration: string;
70
+ variableStatement: string;
71
+ resolverType: {
72
+ baseImport: string; // e.g. `NodeResolvers`
73
+ final: string;
74
+ };
75
+ normalizedResolverName: NormalizedResolverName;
76
+ };
77
+ }
78
+
79
+ export interface EnumResolverFile extends BaseVirtualFile {
80
+ __filetype: 'enumResolver';
81
+ meta: {
82
+ moduleName: string;
83
+ relativePathFromBaseToModule: string[];
84
+ resolverTypeImportDeclaration: string;
85
+ variableStatement: string;
86
+ resolverType: {
87
+ baseImport: string; // e.g. `NodeResolvers`
88
+ final: string;
89
+ };
90
+ normalizedResolverName: NormalizedResolverName;
91
+ allowedValues: string[];
92
+ };
93
+ }
94
+
95
+ export interface RootObjectTypeFieldResolverFile extends BaseVirtualFile {
96
+ __filetype: 'rootObjectTypeFieldResolver';
97
+ meta: {
98
+ moduleName: string;
99
+ relativePathFromBaseToModule: string[];
100
+ belongsToRootObject: RootObjectType;
101
+ resolverTypeImportDeclaration: string;
102
+ variableStatement: string;
103
+ resolverType: {
104
+ baseImport: string; // e.g. `QueryResolvers`
105
+ resolver: string; // e.g. `QueryResolvers['user']`
106
+ final: string; // e.g. `NonNullable<<QueryResolvers['user']>`
107
+ };
108
+ normalizedResolverName: NormalizedResolverName;
109
+ };
110
+ }
111
+
112
+ export interface ObjectTypeFile extends BaseVirtualFile {
113
+ __filetype: 'objectType';
114
+ meta: {
115
+ moduleName: string;
116
+ relativePathFromBaseToModule: string[];
117
+ resolverTypeImportDeclaration: string;
118
+ variableStatement: string;
119
+ resolverType: {
120
+ baseImport: string; // e.g. `UserResolvers`
121
+ final: string; // e.g. `UserResolvers`, `Pick<UserResolvers, 'id'|'name'>`
122
+ otherVariants: string[]; // e.g. `Pick<UserResolvers, |'id'|'name'>`
123
+ };
124
+ normalizedResolverName: NormalizedResolverName;
125
+ resolversToGenerate?: GraphQLObjectTypeResolversToGenerate[number];
126
+ };
127
+ }
128
+
129
+ export type ResolverFile =
130
+ | RootObjectTypeFieldResolverFile
131
+ | ObjectTypeFile
132
+ | InterfacelResolverFile
133
+ | UnionResolverFile
134
+ | ScalarResolverFile
135
+ | EnumResolverFile;
136
+
137
+ export interface GenerateResolverFilesContext {
138
+ config: {
139
+ baseOutputDir: string;
140
+ resolverTypesPath: string;
141
+ resolverRelativeTargetDir: string;
142
+ resolverMainFile: string;
143
+ resolverMainFileMode: ParsedPresetConfig['resolverMainFileMode'];
144
+ resolverGeneration: ParsedPresetConfig['resolverGeneration'];
145
+ unmanagedResolvers: Record<string, string>;
146
+ tsMorph: {
147
+ project: Project;
148
+ typesSourceFile: SourceFile;
149
+ };
150
+ typeMappersMap: TypeMappersMap;
151
+ parsedGraphQLSchemaMeta: ParsedGraphQLSchemaMeta;
152
+ graphQLObjectTypeResolversToGenerate: GraphQLObjectTypeResolversToGenerate;
153
+ fixObjectTypeResolvers: ParsedPresetConfig['fixObjectTypeResolvers'];
154
+ emitLegacyCommonJSImports: boolean;
155
+ importExtension: ImportExtension;
156
+ generatedTypesFileMeta: GeneratedTypesFileMeta;
157
+ };
158
+ result: {
159
+ files: Record<string, StandardFile | ResolverFile>;
160
+ externalImports: Record<
161
+ string,
162
+ {
163
+ moduleName: string;
164
+ relativePathFromBaseToModule: string[];
165
+ importLineMeta: ImportLineMeta;
166
+ identifierUsages: {
167
+ identifierName: string;
168
+ normalizedResolverName: string;
169
+ }[];
170
+ }
171
+ >;
172
+ };
173
+ }
174
+
175
+ export interface GraphQLTypeHandlerParams<BelongsToRootObject = null> {
176
+ moduleName: string;
177
+ relativePathFromBaseToModule: string[];
178
+ fieldFilePath: string;
179
+ resolverName: string;
180
+ isFileAlreadyOnFilesystem: boolean;
181
+ belongsToRootObject: BelongsToRootObject;
182
+ normalizedResolverName: NormalizedResolverName;
183
+ resolversTypeMeta: {
184
+ // typeNamedImport: name of the type to be imported from `module`.
185
+ // If it's a root object type field, this is the root type (e.g. Query, Mutation, Subscription).
186
+ // Otherwise, it's the object type e.g. User, Profile, etc.
187
+ typeNamedImport: string;
188
+ // path to typescript-resolvers file
189
+ module: ImportLineMeta['module'];
190
+ moduleType: ImportLineMeta['moduleType'];
191
+ // typeString: valid type specified for a field or object type
192
+ typeString: string;
193
+ };
194
+ generatedTypesFileMeta: GeneratedTypesFileMeta;
195
+ }
196
+
197
+ export type GraphQLTypeHandler<
198
+ BelongsToRootObject = null,
199
+ ExtraParams = Record<string, unknown>
200
+ > = (
201
+ params: GraphQLTypeHandlerParams<BelongsToRootObject> & ExtraParams,
202
+ ctx: GenerateResolverFilesContext
203
+ ) => void;
@@ -0,0 +1,66 @@
1
+ import type {
2
+ GraphQLTypeHandler,
3
+ GenerateResolverFilesContext,
4
+ } from './types.js';
5
+ import { addExternalResolverImport } from './addExternalResolverImport.js';
6
+ import type { ResolverDetails } from '../parseGraphQLSchema/index.js';
7
+
8
+ export const visitNamedType = <T = null>(
9
+ {
10
+ moduleName,
11
+ relativePathFromBaseToModule,
12
+ normalizedResolverName,
13
+ resolverFile,
14
+ relativePathToResolverTypesFile,
15
+ typeNamedImport,
16
+ typeString,
17
+ belongsToRootObject,
18
+ visitor,
19
+ }: ResolverDetails & {
20
+ belongsToRootObject: T;
21
+ visitor: GraphQLTypeHandler<T>;
22
+ },
23
+ ctx: GenerateResolverFilesContext
24
+ ): void => {
25
+ const unmanagedResolversImportSyntax =
26
+ ctx.config.unmanagedResolvers[normalizedResolverName.base];
27
+ if (unmanagedResolversImportSyntax) {
28
+ addExternalResolverImport(
29
+ {
30
+ moduleName,
31
+ relativePathFromBaseToModule,
32
+ normalizedResolverName: normalizedResolverName.base,
33
+ configImportSyntax: unmanagedResolversImportSyntax,
34
+ },
35
+ ctx
36
+ );
37
+
38
+ return;
39
+ }
40
+
41
+ if (ctx.result.files[resolverFile.path]) {
42
+ throw new Error(
43
+ `Unexpected duplication in field filename. Type: ${resolverFile.name}, file: ${resolverFile.path}`
44
+ );
45
+ }
46
+
47
+ visitor(
48
+ {
49
+ belongsToRootObject,
50
+ fieldFilePath: resolverFile.path,
51
+ isFileAlreadyOnFilesystem: resolverFile.isOnFilesystem,
52
+ moduleName,
53
+ normalizedResolverName,
54
+ relativePathFromBaseToModule,
55
+ resolverName: resolverFile.name,
56
+ resolversTypeMeta: {
57
+ module: relativePathToResolverTypesFile,
58
+ moduleType: 'file',
59
+ typeNamedImport: typeNamedImport(ctx.config.generatedTypesFileMeta),
60
+ typeString: typeString(ctx.config.generatedTypesFileMeta),
61
+ },
62
+ generatedTypesFileMeta: ctx.config.generatedTypesFileMeta,
63
+ },
64
+ ctx
65
+ );
66
+ };
@@ -0,0 +1,15 @@
1
+ import { mergeTypeDefs } from '@graphql-tools/merge';
2
+
3
+ interface GenerateTypeDefsContentParams {
4
+ mergedSDL: string;
5
+ }
6
+
7
+ export const generateTypeDefsContent = ({
8
+ mergedSDL,
9
+ }: GenerateTypeDefsContentParams): string => {
10
+ const documentNode = mergeTypeDefs(mergedSDL, { noLocation: true });
11
+ const documentNodeString = JSON.stringify(documentNode);
12
+
13
+ return `import type { DocumentNode } from 'graphql';
14
+ export const typeDefs = ${documentNodeString} as unknown as DocumentNode`;
15
+ };
@@ -0,0 +1,100 @@
1
+ import * as path from 'path';
2
+ import type { StandardFile } from '../generateResolverFiles/index.js';
3
+ import type { ParseSourcesResult } from '../parseSources/index.js';
4
+ import { cwd, isWhitelistedModule } from '../utils/index.js';
5
+ import type { TypeDefsFileMode } from '../validatePresetConfig/index.js';
6
+ import { generateTypeDefsContent } from './generateTypeDefsContent.js';
7
+
8
+ interface GenerateTypeDefsFilesParams {
9
+ baseOutputDir: string;
10
+ typeDefsFilePath: string;
11
+ typeDefsFileMode: TypeDefsFileMode;
12
+ sourceMap: ParseSourcesResult['sourceMap'];
13
+ whitelistedModules: string[];
14
+ blacklistedModules: string[];
15
+ }
16
+
17
+ export const generateTypeDefsFiles = ({
18
+ baseOutputDir,
19
+ typeDefsFilePath,
20
+ typeDefsFileMode,
21
+ sourceMap,
22
+ blacklistedModules,
23
+ whitelistedModules,
24
+ }: GenerateTypeDefsFilesParams): Record<string, StandardFile> => {
25
+ const filesContent: Record<string, string> = {};
26
+ Object.values(sourceMap).forEach(({ moduleName, source, sourcePath }) => {
27
+ const isWhitelisted = isWhitelistedModule({
28
+ moduleName,
29
+ whitelistedModules,
30
+ blacklistedModules,
31
+ });
32
+
33
+ if (typeDefsFileMode === 'merged') {
34
+ appendSDLToFile({
35
+ filesContent,
36
+ filePath: path.posix.join(baseOutputDir, typeDefsFilePath),
37
+ rawSDL: source.rawSDL,
38
+ });
39
+ return;
40
+ }
41
+
42
+ if (isWhitelisted && typeDefsFileMode === 'mergedWhitelisted') {
43
+ appendSDLToFile({
44
+ filesContent,
45
+ filePath: path.posix.join(baseOutputDir, typeDefsFilePath),
46
+ rawSDL: source.rawSDL,
47
+ });
48
+ return;
49
+ }
50
+
51
+ if (isWhitelisted && typeDefsFileMode === 'modules') {
52
+ // sourcePath.dir is absolute which does not work well to use as filenames for Windows
53
+ // example of cases where it does not work:
54
+ // - when `prettier` is run in afterAllFileWrite hooks with absolute Windows path
55
+ const relativeSourcePathDir = path.posix.relative(cwd(), sourcePath.dir);
56
+ appendSDLToFile({
57
+ filesContent,
58
+ filePath: path.posix.join(relativeSourcePathDir, typeDefsFilePath),
59
+ rawSDL: source.rawSDL,
60
+ });
61
+ return;
62
+ }
63
+ });
64
+
65
+ const result: Record<string, StandardFile> = {};
66
+ Object.entries(filesContent).forEach(([filePath, content]) => {
67
+ result[filePath] = {
68
+ __filetype: 'file',
69
+ // TODO: this is virtual so it will always re-generate
70
+ // In the future, if no schema file changes, then we don't need to re-generate this file
71
+ filesystem: {
72
+ type: 'virtual',
73
+ contentUpdated: false,
74
+ },
75
+ content: generateTypeDefsContent({ mergedSDL: content }),
76
+ mainImportIdentifier: 'typeDefs',
77
+ };
78
+ });
79
+
80
+ return result;
81
+ };
82
+
83
+ const appendSDLToFile = ({
84
+ rawSDL,
85
+ filePath,
86
+ filesContent,
87
+ }: {
88
+ rawSDL: string | undefined;
89
+ filePath: string;
90
+ filesContent: Record<string, string>;
91
+ }): void => {
92
+ if (!rawSDL) {
93
+ return;
94
+ }
95
+
96
+ if (!filesContent[filePath]) {
97
+ filesContent[filePath] = '';
98
+ }
99
+ filesContent[filePath] += `${rawSDL}\n`;
100
+ };
@@ -0,0 +1 @@
1
+ export * from './generateTypeDefsFiles.js';