@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,211 @@
1
+ import { validateAndMergeParsedConfigs } from './validateAndMergeParsedConfigs';
2
+
3
+ describe('validateAndMergeParsedConfigs', () => {
4
+ it('merges configs correctly', () => {
5
+ const result = validateAndMergeParsedConfigs({
6
+ unmanagedNonScalarResolvers: {
7
+ User: 'userResolvers#User as UserResolver',
8
+ },
9
+ parsedGraphQLSchemaMeta: {
10
+ userDefinedSchemaTypeMap: {
11
+ query: {},
12
+ mutation: {},
13
+ subscription: {},
14
+ interface: {},
15
+ union: {},
16
+ enum: {},
17
+ object: {
18
+ User: {
19
+ 'src/schema/user': {
20
+ moduleName: 'user',
21
+ schemaType: 'User',
22
+ normalizedResolverName: {
23
+ base: 'User',
24
+ withModule: 'user.User',
25
+ },
26
+ fieldsToPick: [],
27
+ relativePathFromBaseToModule: ['user'],
28
+ relativePathToResolverTypesFile: '../types.generated.ts',
29
+ resolverFile: {
30
+ name: 'User',
31
+ path: 'user/User.ts',
32
+ isOnFilesystem: false,
33
+ },
34
+ typeNamedImport: () => 'User',
35
+ typeString: () => 'UserResolver',
36
+ },
37
+ },
38
+ },
39
+ scalar: {
40
+ DateTime: {
41
+ moduleName: 'base',
42
+ schemaType: 'DateTime',
43
+ typeString: () => 'DateTimeResolver',
44
+ typeNamedImport: () => 'DateTimeResolver',
45
+ resolverFile: {
46
+ name: 'DateTime',
47
+ path: 'base/DateTime.ts',
48
+ isOnFilesystem: false,
49
+ },
50
+ relativePathToResolverTypesFile: '../types.generated.ts',
51
+ relativePathFromBaseToModule: ['./DateTime'],
52
+ normalizedResolverName: {
53
+ base: 'DateTime',
54
+ withModule: 'base.DateTime',
55
+ },
56
+ },
57
+ },
58
+ },
59
+ pluginsConfig: {
60
+ defaultTypeMappers: {
61
+ User: './user/schema.mappers#UserMapper',
62
+ },
63
+ defaultScalarTypesMap: {
64
+ DateTime: 'string',
65
+ },
66
+ scalarsModuleResolvers: {
67
+ DateTime: '~graphql-scalars#DateTimeResolver',
68
+ },
69
+ unmanagedScalarResolvers: {},
70
+ },
71
+ },
72
+ });
73
+
74
+ expect(result).toEqual({
75
+ unmanagedResolvers: {
76
+ User: 'userResolvers#User as UserResolver',
77
+ DateTime: '~graphql-scalars#DateTimeResolver',
78
+ },
79
+ scalarTypes: {
80
+ DateTime: 'string',
81
+ },
82
+ typeMappers: {
83
+ User: './user/schema.mappers#UserMapper',
84
+ },
85
+ userDefinedSchemaTypeMap: {
86
+ query: {},
87
+ mutation: {},
88
+ subscription: {},
89
+ interface: {},
90
+ union: {},
91
+ enum: {},
92
+ object: {
93
+ User: {
94
+ 'src/schema/user': {
95
+ moduleName: 'user',
96
+ schemaType: 'User',
97
+ normalizedResolverName: {
98
+ base: 'User',
99
+ withModule: 'user.User',
100
+ },
101
+ fieldsToPick: [],
102
+ relativePathFromBaseToModule: ['user'],
103
+ relativePathToResolverTypesFile: '../types.generated.ts',
104
+ resolverFile: {
105
+ name: 'User',
106
+ path: 'user/User.ts',
107
+ isOnFilesystem: false,
108
+ },
109
+ typeNamedImport: expect.any(Function),
110
+ typeString: expect.any(Function),
111
+ },
112
+ },
113
+ },
114
+ scalar: {
115
+ DateTime: {
116
+ moduleName: 'base',
117
+ schemaType: 'DateTime',
118
+ typeString: expect.any(Function),
119
+ typeNamedImport: expect.any(Function),
120
+ resolverFile: {
121
+ name: 'DateTime',
122
+ path: 'base/DateTime.ts',
123
+ isOnFilesystem: false,
124
+ },
125
+ relativePathToResolverTypesFile: '../types.generated.ts',
126
+ relativePathFromBaseToModule: ['./DateTime'],
127
+ normalizedResolverName: {
128
+ base: 'DateTime',
129
+ withModule: 'base.DateTime',
130
+ },
131
+ },
132
+ },
133
+ },
134
+ });
135
+ });
136
+
137
+ it('throws error if input externalResolvers is used for scalars', () => {
138
+ expect(() =>
139
+ validateAndMergeParsedConfigs({
140
+ unmanagedNonScalarResolvers: {
141
+ DateTime: '~graphql-scalars#DateTimeResolver',
142
+ },
143
+ parsedGraphQLSchemaMeta: {
144
+ userDefinedSchemaTypeMap: {
145
+ query: {},
146
+ mutation: {},
147
+ subscription: {},
148
+ interface: {},
149
+ union: {},
150
+ enum: {},
151
+ object: {
152
+ User: {
153
+ 'src/schema/user': {
154
+ moduleName: 'user',
155
+ schemaType: 'User',
156
+ normalizedResolverName: {
157
+ base: 'User',
158
+ withModule: 'user.User',
159
+ },
160
+ fieldsToPick: [],
161
+ relativePathFromBaseToModule: ['user'],
162
+ relativePathToResolverTypesFile: '../types.generated.ts',
163
+ resolverFile: {
164
+ name: 'User',
165
+ path: 'user/User.ts',
166
+ isOnFilesystem: false,
167
+ },
168
+ typeNamedImport: () => 'User',
169
+ typeString: () => 'UserResolver',
170
+ },
171
+ },
172
+ },
173
+ scalar: {
174
+ DateTime: {
175
+ moduleName: 'base',
176
+ schemaType: 'DateTime',
177
+ typeString: () => 'DateTimeResolver',
178
+ typeNamedImport: () => 'DateTimeResolver',
179
+ resolverFile: {
180
+ name: 'DateTime',
181
+ path: 'base/DateTime.ts',
182
+ isOnFilesystem: false,
183
+ },
184
+ relativePathToResolverTypesFile: '../types.generated.ts',
185
+ relativePathFromBaseToModule: ['./DateTime'],
186
+ normalizedResolverName: {
187
+ base: 'DateTime',
188
+ withModule: 'base.DateTime',
189
+ },
190
+ },
191
+ },
192
+ },
193
+ pluginsConfig: {
194
+ defaultTypeMappers: {
195
+ User: './user/schema.mappers#UserMapper',
196
+ },
197
+ defaultScalarTypesMap: {
198
+ DateTime: 'string',
199
+ },
200
+ scalarsModuleResolvers: {
201
+ DateTime: '~graphql-scalars#DateTimeResolver',
202
+ },
203
+ unmanagedScalarResolvers: {},
204
+ },
205
+ },
206
+ })
207
+ ).toThrow(
208
+ 'Validation - Scalar "DateTime" found in presetConfig.externalResolvers. Use presetConfig.scalarsOverrides to override scalar implementation and type. Remove "DateTime" from presetConfig.externalResolvers.'
209
+ );
210
+ });
211
+ });
@@ -0,0 +1,92 @@
1
+ import type { ParsedGraphQLSchemaMeta } from '../parseGraphQLSchema/index.js';
2
+ import type {
3
+ ParsedPresetConfig,
4
+ ScalarsOverridesType,
5
+ } from '../validatePresetConfig/index.js';
6
+ import { fmt } from '../utils/index.js';
7
+
8
+ interface MergedConfig {
9
+ userDefinedSchemaTypeMap: ParsedGraphQLSchemaMeta['userDefinedSchemaTypeMap'];
10
+ scalarTypes: Record<string, ScalarsOverridesType>;
11
+ typeMappers: Record<string, string>;
12
+ /**
13
+ * Resolvers users explicitly wants to control i.e. unmanaged by server preset so no static analysis is run on these resolvers
14
+ * This is set by a few options:
15
+ * - config.externalResolvers: for non-scalar types
16
+ * - config.scalarsOverrides: for scalar types
17
+ * - external resolvers e.g. from `graphql-scalars` module
18
+ **/
19
+ unmanagedResolvers: Record<string, string>;
20
+ }
21
+
22
+ /**
23
+ * validateAndMergeParsedConfigs is used to make sure all parsed configs do not incorrectly override each other.
24
+ * Use this to ensure there's only one way of doing something. e.g.
25
+ * - scalarsOverrides must be used over externalResolvers to override scalars
26
+ */
27
+ export const validateAndMergeParsedConfigs = ({
28
+ unmanagedNonScalarResolvers,
29
+ parsedGraphQLSchemaMeta: {
30
+ userDefinedSchemaTypeMap,
31
+ pluginsConfig: {
32
+ scalarsModuleResolvers,
33
+ unmanagedScalarResolvers,
34
+ defaultScalarTypesMap,
35
+ defaultTypeMappers,
36
+ },
37
+ },
38
+ }: {
39
+ unmanagedNonScalarResolvers: ParsedPresetConfig['externalResolvers'];
40
+ parsedGraphQLSchemaMeta: ParsedGraphQLSchemaMeta;
41
+ }): MergedConfig => {
42
+ Object.keys(scalarsModuleResolvers).forEach((schemaType) => {
43
+ if (
44
+ // If the scalar is defined on the filesystem, it means user wants to use their custom definition.
45
+ // This means we should use it, instead of importing it from scalar module
46
+ userDefinedSchemaTypeMap.scalar[schemaType]?.resolverFile.isOnFilesystem
47
+ ) {
48
+ delete scalarsModuleResolvers[schemaType];
49
+ }
50
+ });
51
+
52
+ // By default, codegen doesn't generate types for enums
53
+ // This is great for the default codegen setup but it's not great for server preset - where we need to be able to import
54
+ // generated resolver types to fill in content for resolver files without needing to manually set up mappers/enumValues
55
+ // `schemaEnumTypeMappers` is the schema mappers for enums, which can be overriden by user's provided mapper types
56
+ const schemaEnumTypeMappers = Object.entries(
57
+ userDefinedSchemaTypeMap.enum
58
+ ).reduce<Record<string, string>>(
59
+ (result, [enumTypename, { allowedValues }]) => {
60
+ result[enumTypename] = allowedValues.map((v) => `'${v}'`).join(' | ');
61
+ return result;
62
+ },
63
+ {}
64
+ );
65
+
66
+ Object.keys(unmanagedNonScalarResolvers).forEach((schemaType) => {
67
+ if (userDefinedSchemaTypeMap.scalar[schemaType]) {
68
+ throw new Error(
69
+ fmt.error(
70
+ `Scalar "${schemaType}" found in presetConfig.externalResolvers. Use presetConfig.scalarsOverrides to override scalar implementation and type. Remove "${schemaType}" from presetConfig.externalResolvers.`,
71
+ 'Validation'
72
+ )
73
+ );
74
+ }
75
+ });
76
+
77
+ return {
78
+ userDefinedSchemaTypeMap,
79
+ scalarTypes: {
80
+ ...defaultScalarTypesMap,
81
+ },
82
+ typeMappers: {
83
+ ...schemaEnumTypeMappers,
84
+ ...defaultTypeMappers,
85
+ },
86
+ unmanagedResolvers: {
87
+ ...unmanagedNonScalarResolvers,
88
+ ...scalarsModuleResolvers,
89
+ ...unmanagedScalarResolvers,
90
+ },
91
+ };
92
+ };
@@ -0,0 +1 @@
1
+ export * from './validatePresetConfig.js';