@eddeee888/gcg-typescript-resolver-files 0.16.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 +25 -18
  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,789 @@
1
+ import { Project, SyntaxKind } from 'ts-morph';
2
+ import { collectTypeMappersFromSourceFile } from './collectTypeMappersFromSourceFile';
3
+
4
+ describe('collectTypeMappersFromSourceFile', () => {
5
+ it('mutates the result based on typeMappersSuffix for exports from other modules', () => {
6
+ const project = new Project({
7
+ compilerOptions: {
8
+ paths: {
9
+ '@external/module1': ['/path/to/external/modules1/index.ts'],
10
+ '@external/module2': ['/path/to/external/modules2/index.ts'],
11
+ },
12
+ },
13
+ });
14
+ project.createSourceFile(
15
+ `/path/to/external/modules1/index.ts`,
16
+ `
17
+ export interface Billing {
18
+ id: number;
19
+ address: string;
20
+ }
21
+
22
+ export type PaymentTypeMapper = {
23
+ id: string;
24
+ type: 'creditcard' | 'cash' | 'bitcoin';
25
+ typeCode: 'payment';
26
+ }
27
+
28
+ export type SomethingTypeMapper = {
29
+ id: number;
30
+ }
31
+ `
32
+ );
33
+ project.createSourceFile(
34
+ `/path/to/external/modules2/index.ts`,
35
+ `
36
+ export type Address = {
37
+ id: string;
38
+ }
39
+ export interface GeoTypeMapper {
40
+ id: string;
41
+ }
42
+ export type NotAliasMapper2 = {
43
+ id: number;
44
+ }
45
+ `
46
+ );
47
+ project.createSourceFile(
48
+ '/path/to/schemas/module1/localModule1.ts',
49
+ `
50
+ export type Preference = {
51
+ id: number;
52
+ }
53
+ export interface FlagTypeMapper {
54
+ id: number;
55
+ }
56
+ export type NotAliasMapper3 = {
57
+ id: number;
58
+ }
59
+ `
60
+ );
61
+ const mapperFile = project.createSourceFile(
62
+ '/path/to/schemas/module1/schema.mappers.ts',
63
+ `
64
+ export type {
65
+ Billing as BillingTypeMapper,
66
+ PaymentTypeMapper,
67
+ SomethingTypeMapper as NotAliasMapper1
68
+ } from '@external/module1';
69
+ export {
70
+ Address as AddressTypeMapper,
71
+ GeoTypeMapper,
72
+ NotAliasMapper2
73
+ } from '@external/module2';
74
+ export {
75
+ Preference as PreferenceTypeMapper,
76
+ FlagTypeMapper,
77
+ NotAliasMapper3
78
+ } from './localModule1';`
79
+ );
80
+
81
+ const result = {};
82
+
83
+ collectTypeMappersFromSourceFile(
84
+ {
85
+ typeMappersSourceFile: mapperFile,
86
+ typeMappersSuffix: 'TypeMapper',
87
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
88
+ emitLegacyCommonJSImports: true,
89
+ },
90
+ result
91
+ );
92
+
93
+ expect(result).toEqual({
94
+ Billing: {
95
+ schemaType: 'Billing',
96
+ mapper: {
97
+ name: 'BillingTypeMapper',
98
+ kind: SyntaxKind.ExportSpecifier,
99
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
100
+ },
101
+ configImportPath: './module1/schema.mappers#BillingTypeMapper',
102
+ },
103
+ Payment: {
104
+ schemaType: 'Payment',
105
+ mapper: {
106
+ name: 'PaymentTypeMapper',
107
+ kind: SyntaxKind.ExportSpecifier,
108
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
109
+ },
110
+ configImportPath: './module1/schema.mappers#PaymentTypeMapper',
111
+ },
112
+ Address: {
113
+ schemaType: 'Address',
114
+ mapper: {
115
+ name: 'AddressTypeMapper',
116
+ kind: SyntaxKind.ExportSpecifier,
117
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
118
+ },
119
+ configImportPath: './module1/schema.mappers#AddressTypeMapper',
120
+ },
121
+ Geo: {
122
+ schemaType: 'Geo',
123
+ mapper: {
124
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
125
+ kind: SyntaxKind.ExportSpecifier,
126
+ name: 'GeoTypeMapper',
127
+ },
128
+ configImportPath: './module1/schema.mappers#GeoTypeMapper',
129
+ },
130
+ Preference: {
131
+ schemaType: 'Preference',
132
+ mapper: {
133
+ name: 'PreferenceTypeMapper',
134
+ kind: SyntaxKind.ExportSpecifier,
135
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
136
+ },
137
+ configImportPath: './module1/schema.mappers#PreferenceTypeMapper',
138
+ },
139
+ Flag: {
140
+ schemaType: 'Flag',
141
+ mapper: {
142
+ name: 'FlagTypeMapper',
143
+ kind: SyntaxKind.ExportSpecifier,
144
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
145
+ },
146
+ configImportPath: './module1/schema.mappers#FlagTypeMapper',
147
+ },
148
+ });
149
+ });
150
+
151
+ it('mutates the result based on typeMappersSuffix for imports and rexports', () => {
152
+ const project = new Project({
153
+ compilerOptions: {
154
+ paths: {
155
+ '@external/module1': ['/path/to/external/modules1/index.ts'],
156
+ '@external/module2': ['/path/to/external/modules2/index.ts'],
157
+ },
158
+ },
159
+ });
160
+ project.createSourceFile(
161
+ `/path/to/external/modules1/index.ts`,
162
+ `
163
+ export interface Billing {
164
+ __type: 1;
165
+ }
166
+
167
+ export type PaymentTypeMapper = {
168
+ __type: 2;
169
+ }
170
+
171
+ export type SomethingTypeMapper = {
172
+ id: number;
173
+ }
174
+ `
175
+ );
176
+ project.createSourceFile(
177
+ `/path/to/external/modules2/index.ts`,
178
+ `
179
+ export type Address = {
180
+ __type: 3;
181
+ }
182
+ export interface GeoTypeMapper {
183
+ __type: boolean;
184
+ }
185
+ export type NotAliasMapper2 = {
186
+ id: number;
187
+ }
188
+ `
189
+ );
190
+ project.createSourceFile(
191
+ '/path/to/schemas/module1/localModule1.ts',
192
+ `
193
+ export type Preference = {
194
+ __type: true;
195
+ }
196
+ export interface FlagTypeMapper {
197
+ __type: false;
198
+ }
199
+ export type NotAliasMapper3 = {
200
+ id: number;
201
+ }
202
+ `
203
+ );
204
+ const mapperFile = project.createSourceFile(
205
+ '/path/to/schemas/module1/schema.mappers.ts',
206
+ `
207
+ import type {
208
+ Billing as BillingTypeMapper,
209
+ PaymentTypeMapper,
210
+ SomethingTypeMapper as NotAliasMapper1
211
+ } from '@external/module1';
212
+ import {
213
+ Address as AddressTypeMapper,
214
+ GeoTypeMapper,
215
+ NotAliasMapper2
216
+ } from '@external/module2';
217
+ import {
218
+ Preference as PreferenceTypeMapper,
219
+ FlagTypeMapper,
220
+ NotAliasMapper3
221
+ } from './localModule1';
222
+
223
+ export {
224
+ BillingTypeMapper,
225
+ PaymentTypeMapper,
226
+ NotAliasMapper1,
227
+ AddressTypeMapper,
228
+ GeoTypeMapper,
229
+ NotAliasMapper2,
230
+ PreferenceTypeMapper,
231
+ FlagTypeMapper,
232
+ NotAliasMapper3
233
+ }
234
+ `
235
+ );
236
+
237
+ const result = {};
238
+
239
+ collectTypeMappersFromSourceFile(
240
+ {
241
+ typeMappersSourceFile: mapperFile,
242
+ typeMappersSuffix: 'TypeMapper',
243
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
244
+ emitLegacyCommonJSImports: true,
245
+ },
246
+ result
247
+ );
248
+
249
+ expect(result).toEqual({
250
+ Billing: {
251
+ schemaType: 'Billing',
252
+ mapper: {
253
+ name: 'BillingTypeMapper',
254
+ kind: SyntaxKind.ExportSpecifier,
255
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
256
+ },
257
+ configImportPath: './module1/schema.mappers#BillingTypeMapper',
258
+ },
259
+ Payment: {
260
+ schemaType: 'Payment',
261
+ mapper: {
262
+ name: 'PaymentTypeMapper',
263
+ kind: SyntaxKind.ExportSpecifier,
264
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
265
+ },
266
+ configImportPath: './module1/schema.mappers#PaymentTypeMapper',
267
+ },
268
+ Address: {
269
+ schemaType: 'Address',
270
+ mapper: {
271
+ name: 'AddressTypeMapper',
272
+ kind: SyntaxKind.ExportSpecifier,
273
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
274
+ },
275
+ configImportPath: './module1/schema.mappers#AddressTypeMapper',
276
+ },
277
+ Geo: {
278
+ schemaType: 'Geo',
279
+ mapper: {
280
+ name: 'GeoTypeMapper',
281
+ kind: SyntaxKind.ExportSpecifier,
282
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
283
+ },
284
+ configImportPath: './module1/schema.mappers#GeoTypeMapper',
285
+ },
286
+ Preference: {
287
+ schemaType: 'Preference',
288
+ mapper: {
289
+ name: 'PreferenceTypeMapper',
290
+ kind: SyntaxKind.ExportSpecifier,
291
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
292
+ },
293
+ configImportPath: './module1/schema.mappers#PreferenceTypeMapper',
294
+ },
295
+ Flag: {
296
+ schemaType: 'Flag',
297
+ mapper: {
298
+ name: 'FlagTypeMapper',
299
+ kind: SyntaxKind.ExportSpecifier,
300
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
301
+ },
302
+ configImportPath: './module1/schema.mappers#FlagTypeMapper',
303
+ },
304
+ });
305
+ });
306
+
307
+ it('mutates the result based on typeMappersSuffix for locally declared types/interfaces and exported', () => {
308
+ const project = new Project();
309
+ const mapperFile = project.createSourceFile(
310
+ '/path/to/schemas/module1/schema.mappers.ts',
311
+ `
312
+ export interface UserTypeMapper {
313
+ id: string;
314
+ }
315
+
316
+ export type ProfileTypeMapper {
317
+ id: string;
318
+ account: string;
319
+ }
320
+
321
+ export interface NotMapperInlineExport1 {
322
+ id: string;
323
+ }
324
+
325
+ export type NotMapperInlineExport2 = {
326
+ id: string;
327
+ };
328
+
329
+ interface Like {
330
+ id: string;
331
+ }
332
+
333
+ type Password = {
334
+ isValid: boolean;
335
+ };
336
+ type PasswordTypeMapper = Password;
337
+
338
+ interface NotGoingToBe1TypeMapper {
339
+ something: string;
340
+ }
341
+
342
+ type NotGoingToBe2TypeMapper = {
343
+ something: string;
344
+ }
345
+
346
+ export {
347
+ Like as LikeTypeMapper,
348
+ PasswordTypeMapper,
349
+ NotGoingToBe1TypeMapper as NotMapper1,
350
+ NotGoingToBe2TypeMapper as NotMapper2,
351
+ };`
352
+ );
353
+
354
+ const result = {};
355
+
356
+ collectTypeMappersFromSourceFile(
357
+ {
358
+ typeMappersSourceFile: mapperFile,
359
+ typeMappersSuffix: 'TypeMapper',
360
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
361
+ emitLegacyCommonJSImports: true,
362
+ },
363
+ result
364
+ );
365
+
366
+ expect(result).toEqual({
367
+ Profile: {
368
+ schemaType: 'Profile',
369
+ mapper: {
370
+ name: 'ProfileTypeMapper',
371
+ kind: SyntaxKind.TypeAliasDeclaration,
372
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
373
+ },
374
+ configImportPath: './module1/schema.mappers#ProfileTypeMapper',
375
+ },
376
+ User: {
377
+ schemaType: 'User',
378
+ mapper: {
379
+ name: 'UserTypeMapper',
380
+ kind: SyntaxKind.InterfaceDeclaration,
381
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
382
+ },
383
+ configImportPath: './module1/schema.mappers#UserTypeMapper',
384
+ },
385
+ Like: {
386
+ schemaType: 'Like',
387
+ mapper: {
388
+ name: 'LikeTypeMapper',
389
+ kind: SyntaxKind.ExportSpecifier,
390
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
391
+ },
392
+ configImportPath: './module1/schema.mappers#LikeTypeMapper',
393
+ },
394
+ Password: {
395
+ schemaType: 'Password',
396
+ mapper: {
397
+ name: 'PasswordTypeMapper',
398
+ kind: SyntaxKind.ExportSpecifier,
399
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
400
+ },
401
+ configImportPath: './module1/schema.mappers#PasswordTypeMapper',
402
+ },
403
+ });
404
+ });
405
+
406
+ it('mutates the result based on typeMappersSuffix for locally declared class and exported', () => {
407
+ const project = new Project();
408
+ const mapperFile = project.createSourceFile(
409
+ '/path/to/schemas/module1/schema.mappers.ts',
410
+ `
411
+ export class UserTypeMapper {
412
+ id: string;
413
+ firstName!: string;
414
+ readonly lastName: string;
415
+ public createdAt: string;
416
+ public readonly updatedAt: string;
417
+ // bellow are not going to be collected
418
+ protected protectedField: string;
419
+ static notInstanceField: string;
420
+ private tsPrivateField: string;
421
+ private readonly tsPrivateReadonlyField: string;
422
+ #ecmaPrivateField: string;
423
+ method(): string
424
+ get getter(): string
425
+ }
426
+
427
+ export class NotMapperInlineExport1 {
428
+ id: string;
429
+ }
430
+
431
+ class PostTypeMapper {
432
+ id: string
433
+ }
434
+
435
+ class Base {
436
+ id: string;
437
+ private title: string;
438
+ }
439
+
440
+ class Like extends Base {
441
+ createdAt: string
442
+ }
443
+
444
+ export {
445
+ Like as LikeTypeMapper,
446
+ PostTypeMapper,
447
+ };`
448
+ );
449
+
450
+ const result = {};
451
+
452
+ collectTypeMappersFromSourceFile(
453
+ {
454
+ typeMappersSourceFile: mapperFile,
455
+ typeMappersSuffix: 'TypeMapper',
456
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
457
+ emitLegacyCommonJSImports: true,
458
+ },
459
+ result
460
+ );
461
+
462
+ expect(result).toEqual({
463
+ Like: {
464
+ schemaType: 'Like',
465
+ mapper: {
466
+ name: 'LikeTypeMapper',
467
+ kind: SyntaxKind.ExportSpecifier,
468
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
469
+ },
470
+ configImportPath: './module1/schema.mappers#LikeTypeMapper',
471
+ },
472
+ Post: {
473
+ schemaType: 'Post',
474
+ mapper: {
475
+ name: 'PostTypeMapper',
476
+ kind: SyntaxKind.ExportSpecifier,
477
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
478
+ },
479
+ configImportPath: './module1/schema.mappers#PostTypeMapper',
480
+ },
481
+ User: {
482
+ schemaType: 'User',
483
+ mapper: {
484
+ name: 'UserTypeMapper',
485
+ kind: SyntaxKind.ClassDeclaration,
486
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
487
+ },
488
+ configImportPath: './module1/schema.mappers#UserTypeMapper',
489
+ },
490
+ });
491
+ });
492
+
493
+ it('mutates the result on multiple runs', () => {
494
+ const project = new Project({
495
+ compilerOptions: {
496
+ paths: {
497
+ '@external/module1': ['/path/to/external/modules1/index.ts'],
498
+ '@external/module2': ['/path/to/external/modules2/index.ts'],
499
+ },
500
+ },
501
+ });
502
+ project.createSourceFile(
503
+ `/path/to/external/modules1/index.ts`,
504
+ `
505
+ export interface Billing {
506
+ id: number;
507
+ address: string;
508
+ }
509
+
510
+ export type PaymentTypeMapper = {
511
+ id: string;
512
+ type: 'creditcard' | 'cash' | 'bitcoin';
513
+ typeCode: 'payment';
514
+ }
515
+ `
516
+ );
517
+ project.createSourceFile(
518
+ `/path/to/external/modules2/index.ts`,
519
+ `
520
+ export type Address = {
521
+ id: string;
522
+ }
523
+ export interface GeoTypeMapper {
524
+ id: string;
525
+ }
526
+ `
527
+ );
528
+ project.createSourceFile(
529
+ '/path/to/schemas/preference/localModule1.ts',
530
+ `
531
+ export type Preference = {
532
+ id: number;
533
+ }
534
+ export interface FlagTypeMapper {
535
+ id: number;
536
+ }
537
+ `
538
+ );
539
+ const billingMapperFile = project.createSourceFile(
540
+ '/path/to/schemas/billing/schema.mappers.ts',
541
+ "export type { Billing as BillingTypeMapper, PaymentTypeMapper } from '@external/module1';"
542
+ );
543
+ const addressMapperFile = project.createSourceFile(
544
+ '/path/to/schemas/address/schema.mappers.ts',
545
+ "export { Address as AddressTypeMapper, GeoTypeMapper } from '@external/module2';"
546
+ );
547
+ const preferenceMapperFile = project.createSourceFile(
548
+ '/path/to/schemas/preference/schema.mappers.ts',
549
+ "export { Preference as PreferenceTypeMapper, FlagTypeMapper } from './localModule1';"
550
+ );
551
+
552
+ const expectedBilling = {
553
+ schemaType: 'Billing',
554
+ mapper: {
555
+ name: 'BillingTypeMapper',
556
+ kind: SyntaxKind.ExportSpecifier,
557
+ filename: '/path/to/schemas/billing/schema.mappers.ts',
558
+ },
559
+ configImportPath: './billing/schema.mappers#BillingTypeMapper',
560
+ };
561
+ const expectedPayment = {
562
+ schemaType: 'Payment',
563
+ mapper: {
564
+ name: 'PaymentTypeMapper',
565
+ kind: SyntaxKind.ExportSpecifier,
566
+ filename: '/path/to/schemas/billing/schema.mappers.ts',
567
+ },
568
+ configImportPath: './billing/schema.mappers#PaymentTypeMapper',
569
+ };
570
+ const expectedAddress = {
571
+ schemaType: 'Address',
572
+ mapper: {
573
+ name: 'AddressTypeMapper',
574
+ kind: SyntaxKind.ExportSpecifier,
575
+ filename: '/path/to/schemas/address/schema.mappers.ts',
576
+ },
577
+ configImportPath: './address/schema.mappers#AddressTypeMapper',
578
+ };
579
+ const expectedGeo = {
580
+ schemaType: 'Geo',
581
+ mapper: {
582
+ name: 'GeoTypeMapper',
583
+ kind: SyntaxKind.ExportSpecifier,
584
+ filename: '/path/to/schemas/address/schema.mappers.ts',
585
+ },
586
+ configImportPath: './address/schema.mappers#GeoTypeMapper',
587
+ };
588
+ const expectedPreference = {
589
+ schemaType: 'Preference',
590
+ mapper: {
591
+ name: 'PreferenceTypeMapper',
592
+ kind: SyntaxKind.ExportSpecifier,
593
+ filename: '/path/to/schemas/preference/schema.mappers.ts',
594
+ },
595
+ configImportPath: './preference/schema.mappers#PreferenceTypeMapper',
596
+ };
597
+ const expectedFlag = {
598
+ schemaType: 'Flag',
599
+ mapper: {
600
+ name: 'FlagTypeMapper',
601
+ kind: SyntaxKind.ExportSpecifier,
602
+ filename: '/path/to/schemas/preference/schema.mappers.ts',
603
+ },
604
+ configImportPath: './preference/schema.mappers#FlagTypeMapper',
605
+ };
606
+
607
+ const result = {};
608
+
609
+ collectTypeMappersFromSourceFile(
610
+ {
611
+ typeMappersSourceFile: billingMapperFile,
612
+ typeMappersSuffix: 'TypeMapper',
613
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
614
+ emitLegacyCommonJSImports: true,
615
+ },
616
+ result
617
+ );
618
+ expect(result).toEqual({
619
+ Billing: expectedBilling,
620
+ Payment: expectedPayment,
621
+ });
622
+
623
+ collectTypeMappersFromSourceFile(
624
+ {
625
+ typeMappersSourceFile: addressMapperFile,
626
+ typeMappersSuffix: 'TypeMapper',
627
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
628
+ emitLegacyCommonJSImports: true,
629
+ },
630
+ result
631
+ );
632
+ expect(result).toEqual({
633
+ Billing: expectedBilling,
634
+ Payment: expectedPayment,
635
+ Address: expectedAddress,
636
+ Geo: expectedGeo,
637
+ });
638
+
639
+ collectTypeMappersFromSourceFile(
640
+ {
641
+ typeMappersSourceFile: preferenceMapperFile,
642
+ typeMappersSuffix: 'TypeMapper',
643
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
644
+ emitLegacyCommonJSImports: true,
645
+ },
646
+ result
647
+ );
648
+ expect(result).toEqual({
649
+ Billing: expectedBilling,
650
+ Payment: expectedPayment,
651
+ Address: expectedAddress,
652
+ Geo: expectedGeo,
653
+ Preference: expectedPreference,
654
+ Flag: expectedFlag,
655
+ });
656
+ });
657
+
658
+ it('mutates the result with .js extensions in configImportPath for mapper files when emitLegacyCommonJSImports=false', () => {
659
+ const project = new Project({
660
+ compilerOptions: {
661
+ paths: {
662
+ '@external/module1': ['/path/to/external/modules1/index.ts'],
663
+ '@external/module2': ['/path/to/external/modules2/index.ts'],
664
+ },
665
+ },
666
+ });
667
+ project.createSourceFile(
668
+ `/path/to/external/modules1/index.ts`,
669
+ `
670
+ export interface Billing {
671
+ id: number;
672
+ address: string;
673
+ }
674
+ `
675
+ );
676
+ project.createSourceFile(
677
+ `/path/to/external/modules2/index.ts`,
678
+ `
679
+ export type Address = {
680
+ id: string;
681
+ }
682
+ `
683
+ );
684
+ project.createSourceFile(
685
+ '/path/to/schemas/module1/localModule1.ts',
686
+ `
687
+ export type Preference = {
688
+ id: number;
689
+ }
690
+ `
691
+ );
692
+ const mapperFile = project.createSourceFile(
693
+ '/path/to/schemas/module1/schema.mappers.ts',
694
+ `
695
+ export type { Billing as BillingMapper } from '@external/module1';
696
+ export { Address as AddressMapper } from '@external/module2';
697
+ export { Preference as PreferenceMapper } from './localModule1';`
698
+ );
699
+
700
+ const result = {};
701
+
702
+ collectTypeMappersFromSourceFile(
703
+ {
704
+ typeMappersSourceFile: mapperFile,
705
+ typeMappersSuffix: 'Mapper',
706
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
707
+ emitLegacyCommonJSImports: false,
708
+ },
709
+ result
710
+ );
711
+
712
+ expect(result).toEqual({
713
+ Billing: {
714
+ schemaType: 'Billing',
715
+ mapper: {
716
+ name: 'BillingMapper',
717
+ kind: SyntaxKind.ExportSpecifier,
718
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
719
+ },
720
+ configImportPath: './module1/schema.mappers.js#BillingMapper',
721
+ },
722
+ Address: {
723
+ schemaType: 'Address',
724
+ mapper: {
725
+ name: 'AddressMapper',
726
+ kind: SyntaxKind.ExportSpecifier,
727
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
728
+ },
729
+ configImportPath: './module1/schema.mappers.js#AddressMapper',
730
+ },
731
+ Preference: {
732
+ schemaType: 'Preference',
733
+ mapper: {
734
+ name: 'PreferenceMapper',
735
+ kind: SyntaxKind.ExportSpecifier,
736
+ filename: '/path/to/schemas/module1/schema.mappers.ts',
737
+ },
738
+ configImportPath: './module1/schema.mappers.js#PreferenceMapper',
739
+ },
740
+ });
741
+ });
742
+
743
+ it('throws error if there are duplicated mappers', () => {
744
+ const project = new Project();
745
+ project.createSourceFile(
746
+ '/path/to/schemas/module1/schema.mappers.ts',
747
+ `
748
+ export interface UserTypeMapper {
749
+ id: string;
750
+ }`
751
+ );
752
+ project.createSourceFile(
753
+ '/path/to/schemas/module2/schema.mappers.ts',
754
+ `
755
+ export type UserTypeMapper {
756
+ id: string;
757
+ password: string;
758
+ }`
759
+ );
760
+
761
+ const result = {};
762
+
763
+ collectTypeMappersFromSourceFile(
764
+ {
765
+ typeMappersSourceFile: project.getSourceFiles()[0],
766
+ typeMappersSuffix: 'TypeMapper',
767
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
768
+ emitLegacyCommonJSImports: true,
769
+ },
770
+ result
771
+ );
772
+
773
+ expect(() =>
774
+ collectTypeMappersFromSourceFile(
775
+ {
776
+ typeMappersSourceFile: project.getSourceFiles()[1],
777
+ typeMappersSuffix: 'TypeMapper',
778
+ resolverTypesPath: '/path/to/schemas/types.generated.ts',
779
+ emitLegacyCommonJSImports: true,
780
+ },
781
+ result
782
+ )
783
+ ).toThrowErrorMatchingInlineSnapshot(`
784
+ [Error: GraphQL type "User" has duplicated "UserTypeMapper" mappers:
785
+ - ./module2/schema.mappers#UserTypeMapper
786
+ - ./module1/schema.mappers#UserTypeMapper]
787
+ `);
788
+ });
789
+ });