@ai-dev-tools/test-copilot-core 1.0.19

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 (328) hide show
  1. package/README.md +6 -0
  2. package/azure-pipelines.yml +51 -0
  3. package/out/cli/commands/appInsightTelemetry.d.ts +7 -0
  4. package/out/cli/commands/appInsightTelemetry.d.ts.map +1 -0
  5. package/out/cli/commands/appInsightTelemetry.js +76 -0
  6. package/out/cli/commands/appInsightTelemetry.js.map +1 -0
  7. package/out/cli/commands/cliConfig.d.ts +4 -0
  8. package/out/cli/commands/cliConfig.d.ts.map +1 -0
  9. package/out/cli/commands/cliConfig.js +68 -0
  10. package/out/cli/commands/cliConfig.js.map +1 -0
  11. package/out/cli/commands/prompt.d.ts +6 -0
  12. package/out/cli/commands/prompt.d.ts.map +1 -0
  13. package/out/cli/commands/prompt.js +29 -0
  14. package/out/cli/commands/prompt.js.map +1 -0
  15. package/out/cli/commands/ut.d.ts +14 -0
  16. package/out/cli/commands/ut.d.ts.map +1 -0
  17. package/out/cli/commands/ut.js +72 -0
  18. package/out/cli/commands/ut.js.map +1 -0
  19. package/out/cli/commands/utPipeCmdWrapper.d.ts +18 -0
  20. package/out/cli/commands/utPipeCmdWrapper.d.ts.map +1 -0
  21. package/out/cli/commands/utPipeCmdWrapper.js +37 -0
  22. package/out/cli/commands/utPipeCmdWrapper.js.map +1 -0
  23. package/out/cli/config/index.d.ts +15 -0
  24. package/out/cli/config/index.d.ts.map +1 -0
  25. package/out/cli/config/index.js +10 -0
  26. package/out/cli/config/index.js.map +1 -0
  27. package/out/cli/index.d.ts +3 -0
  28. package/out/cli/index.d.ts.map +1 -0
  29. package/out/cli/index.js +169 -0
  30. package/out/cli/index.js.map +1 -0
  31. package/out/cli/type.d.ts +11 -0
  32. package/out/cli/type.d.ts.map +1 -0
  33. package/out/cli/type.js +3 -0
  34. package/out/cli/type.js.map +1 -0
  35. package/out/cli/utils/ds.d.ts +3 -0
  36. package/out/cli/utils/ds.d.ts.map +1 -0
  37. package/out/cli/utils/ds.js +50 -0
  38. package/out/cli/utils/ds.js.map +1 -0
  39. package/out/cli/utils/gpt.d.ts +3 -0
  40. package/out/cli/utils/gpt.d.ts.map +1 -0
  41. package/out/cli/utils/gpt.js +63 -0
  42. package/out/cli/utils/gpt.js.map +1 -0
  43. package/out/core/analyze/cjs.d.ts +61 -0
  44. package/out/core/analyze/cjs.d.ts.map +1 -0
  45. package/out/core/analyze/cjs.js +358 -0
  46. package/out/core/analyze/cjs.js.map +1 -0
  47. package/out/core/analyze/class.d.ts +4 -0
  48. package/out/core/analyze/class.d.ts.map +1 -0
  49. package/out/core/analyze/class.js +32 -0
  50. package/out/core/analyze/class.js.map +1 -0
  51. package/out/core/analyze/declares.d.ts +7 -0
  52. package/out/core/analyze/declares.d.ts.map +1 -0
  53. package/out/core/analyze/declares.js +316 -0
  54. package/out/core/analyze/declares.js.map +1 -0
  55. package/out/core/analyze/deps.d.ts +8 -0
  56. package/out/core/analyze/deps.d.ts.map +1 -0
  57. package/out/core/analyze/deps.js +210 -0
  58. package/out/core/analyze/deps.js.map +1 -0
  59. package/out/core/analyze/functionComponent.d.ts +4 -0
  60. package/out/core/analyze/functionComponent.d.ts.map +1 -0
  61. package/out/core/analyze/functionComponent.js +77 -0
  62. package/out/core/analyze/functionComponent.js.map +1 -0
  63. package/out/core/analyze/functions.d.ts +4 -0
  64. package/out/core/analyze/functions.d.ts.map +1 -0
  65. package/out/core/analyze/functions.js +46 -0
  66. package/out/core/analyze/functions.js.map +1 -0
  67. package/out/core/analyze/index.d.ts +16 -0
  68. package/out/core/analyze/index.d.ts.map +1 -0
  69. package/out/core/analyze/index.js +149 -0
  70. package/out/core/analyze/index.js.map +1 -0
  71. package/out/core/analyze/index.type.d.ts +69 -0
  72. package/out/core/analyze/index.type.d.ts.map +1 -0
  73. package/out/core/analyze/index.type.js +14 -0
  74. package/out/core/analyze/index.type.js.map +1 -0
  75. package/out/core/analyze/utils/global.d.ts +2 -0
  76. package/out/core/analyze/utils/global.d.ts.map +1 -0
  77. package/out/core/analyze/utils/global.js +84 -0
  78. package/out/core/analyze/utils/global.js.map +1 -0
  79. package/out/core/analyzev2/declare/class.d.ts +4 -0
  80. package/out/core/analyzev2/declare/class.d.ts.map +1 -0
  81. package/out/core/analyzev2/declare/class.js +24 -0
  82. package/out/core/analyzev2/declare/class.js.map +1 -0
  83. package/out/core/analyzev2/declare/funcLike.d.ts +8 -0
  84. package/out/core/analyzev2/declare/funcLike.d.ts.map +1 -0
  85. package/out/core/analyzev2/declare/funcLike.js +71 -0
  86. package/out/core/analyzev2/declare/funcLike.js.map +1 -0
  87. package/out/core/analyzev2/declare/variable.d.ts +3 -0
  88. package/out/core/analyzev2/declare/variable.d.ts.map +1 -0
  89. package/out/core/analyzev2/declare/variable.js +15 -0
  90. package/out/core/analyzev2/declare/variable.js.map +1 -0
  91. package/out/core/analyzev2/file.d.ts +19 -0
  92. package/out/core/analyzev2/file.d.ts.map +1 -0
  93. package/out/core/analyzev2/file.js +449 -0
  94. package/out/core/analyzev2/file.js.map +1 -0
  95. package/out/core/analyzev2/index.d.ts +5 -0
  96. package/out/core/analyzev2/index.d.ts.map +1 -0
  97. package/out/core/analyzev2/index.js +30 -0
  98. package/out/core/analyzev2/index.js.map +1 -0
  99. package/out/core/analyzev2/type.d.ts +35 -0
  100. package/out/core/analyzev2/type.d.ts.map +1 -0
  101. package/out/core/analyzev2/type.js +3 -0
  102. package/out/core/analyzev2/type.js.map +1 -0
  103. package/out/core/config/index.d.ts +25 -0
  104. package/out/core/config/index.d.ts.map +1 -0
  105. package/out/core/config/index.js +14 -0
  106. package/out/core/config/index.js.map +1 -0
  107. package/out/core/constants.d.ts +9 -0
  108. package/out/core/constants.d.ts.map +1 -0
  109. package/out/core/constants.js +12 -0
  110. package/out/core/constants.js.map +1 -0
  111. package/out/core/features/common/base.d.ts +20 -0
  112. package/out/core/features/common/base.d.ts.map +1 -0
  113. package/out/core/features/common/base.js +77 -0
  114. package/out/core/features/common/base.js.map +1 -0
  115. package/out/core/features/common/types.d.ts +16 -0
  116. package/out/core/features/common/types.d.ts.map +1 -0
  117. package/out/core/features/common/types.js +12 -0
  118. package/out/core/features/common/types.js.map +1 -0
  119. package/out/core/features/generateFile.d.ts +31 -0
  120. package/out/core/features/generateFile.d.ts.map +1 -0
  121. package/out/core/features/generateFile.js +148 -0
  122. package/out/core/features/generateFile.js.map +1 -0
  123. package/out/core/features/generateSingle.d.ts +28 -0
  124. package/out/core/features/generateSingle.d.ts.map +1 -0
  125. package/out/core/features/generateSingle.js +149 -0
  126. package/out/core/features/generateSingle.js.map +1 -0
  127. package/out/core/features/index.d.ts +9 -0
  128. package/out/core/features/index.d.ts.map +1 -0
  129. package/out/core/features/index.js +16 -0
  130. package/out/core/features/index.js.map +1 -0
  131. package/out/core/features/lintFix.d.ts +2 -0
  132. package/out/core/features/lintFix.d.ts.map +1 -0
  133. package/out/core/features/lintFix.js +33 -0
  134. package/out/core/features/lintFix.js.map +1 -0
  135. package/out/core/features/mergeUTFile.d.ts +19 -0
  136. package/out/core/features/mergeUTFile.d.ts.map +1 -0
  137. package/out/core/features/mergeUTFile.js +63 -0
  138. package/out/core/features/mergeUTFile.js.map +1 -0
  139. package/out/core/features/removeFailedCases.d.ts +23 -0
  140. package/out/core/features/removeFailedCases.d.ts.map +1 -0
  141. package/out/core/features/removeFailedCases.js +81 -0
  142. package/out/core/features/removeFailedCases.js.map +1 -0
  143. package/out/core/features/updateSpec.d.ts +20 -0
  144. package/out/core/features/updateSpec.d.ts.map +1 -0
  145. package/out/core/features/updateSpec.js +98 -0
  146. package/out/core/features/updateSpec.js.map +1 -0
  147. package/out/core/features/validFix.d.ts +29 -0
  148. package/out/core/features/validFix.d.ts.map +1 -0
  149. package/out/core/features/validFix.js +219 -0
  150. package/out/core/features/validFix.js.map +1 -0
  151. package/out/core/generate/UTGen.d.ts +79 -0
  152. package/out/core/generate/UTGen.d.ts.map +1 -0
  153. package/out/core/generate/UTGen.js +795 -0
  154. package/out/core/generate/UTGen.js.map +1 -0
  155. package/out/core/llm/index.d.ts +9 -0
  156. package/out/core/llm/index.d.ts.map +1 -0
  157. package/out/core/llm/index.js +39 -0
  158. package/out/core/llm/index.js.map +1 -0
  159. package/out/core/llm/prompts/config.d.ts +6 -0
  160. package/out/core/llm/prompts/config.d.ts.map +1 -0
  161. package/out/core/llm/prompts/config.js +239 -0
  162. package/out/core/llm/prompts/config.js.map +1 -0
  163. package/out/core/llm/prompts/templates/common.d.ts +3 -0
  164. package/out/core/llm/prompts/templates/common.d.ts.map +1 -0
  165. package/out/core/llm/prompts/templates/common.js +27 -0
  166. package/out/core/llm/prompts/templates/common.js.map +1 -0
  167. package/out/core/llm/prompts/templates/fixCase.d.ts +4 -0
  168. package/out/core/llm/prompts/templates/fixCase.d.ts.map +1 -0
  169. package/out/core/llm/prompts/templates/fixCase.js +46 -0
  170. package/out/core/llm/prompts/templates/fixCase.js.map +1 -0
  171. package/out/core/llm/prompts/templates/fixLint.d.ts +3 -0
  172. package/out/core/llm/prompts/templates/fixLint.d.ts.map +1 -0
  173. package/out/core/llm/prompts/templates/fixLint.js +22 -0
  174. package/out/core/llm/prompts/templates/fixLint.js.map +1 -0
  175. package/out/core/llm/prompts/templates/genClassMemberUT.d.ts +5 -0
  176. package/out/core/llm/prompts/templates/genClassMemberUT.d.ts.map +1 -0
  177. package/out/core/llm/prompts/templates/genClassMemberUT.js +115 -0
  178. package/out/core/llm/prompts/templates/genClassMemberUT.js.map +1 -0
  179. package/out/core/llm/prompts/templates/genFuncUT.d.ts +4 -0
  180. package/out/core/llm/prompts/templates/genFuncUT.d.ts.map +1 -0
  181. package/out/core/llm/prompts/templates/genFuncUT.js +64 -0
  182. package/out/core/llm/prompts/templates/genFuncUT.js.map +1 -0
  183. package/out/core/llm/prompts/templates/mergeUT.d.ts +4 -0
  184. package/out/core/llm/prompts/templates/mergeUT.d.ts.map +1 -0
  185. package/out/core/llm/prompts/templates/mergeUT.js +106 -0
  186. package/out/core/llm/prompts/templates/mergeUT.js.map +1 -0
  187. package/out/core/llm/prompts/templates/msnStudio.d.ts +3 -0
  188. package/out/core/llm/prompts/templates/msnStudio.d.ts.map +1 -0
  189. package/out/core/llm/prompts/templates/msnStudio.js +36 -0
  190. package/out/core/llm/prompts/templates/msnStudio.js.map +1 -0
  191. package/out/core/llm/prompts/templates/snapshotUT.d.ts +4 -0
  192. package/out/core/llm/prompts/templates/snapshotUT.d.ts.map +1 -0
  193. package/out/core/llm/prompts/templates/snapshotUT.js +68 -0
  194. package/out/core/llm/prompts/templates/snapshotUT.js.map +1 -0
  195. package/out/core/llm/prompts/templates/updateSpecBlock.d.ts +3 -0
  196. package/out/core/llm/prompts/templates/updateSpecBlock.d.ts.map +1 -0
  197. package/out/core/llm/prompts/templates/updateSpecBlock.js +38 -0
  198. package/out/core/llm/prompts/templates/updateSpecBlock.js.map +1 -0
  199. package/out/core/llm/prompts/templates/updateSpecFile.d.ts +3 -0
  200. package/out/core/llm/prompts/templates/updateSpecFile.d.ts.map +1 -0
  201. package/out/core/llm/prompts/templates/updateSpecFile.js +30 -0
  202. package/out/core/llm/prompts/templates/updateSpecFile.js.map +1 -0
  203. package/out/core/llm/types.d.ts +80 -0
  204. package/out/core/llm/types.d.ts.map +1 -0
  205. package/out/core/llm/types.js +5 -0
  206. package/out/core/llm/types.js.map +1 -0
  207. package/out/core/quality/validateMockedTest.d.ts +3 -0
  208. package/out/core/quality/validateMockedTest.d.ts.map +1 -0
  209. package/out/core/quality/validateMockedTest.js +211 -0
  210. package/out/core/quality/validateMockedTest.js.map +1 -0
  211. package/out/core/utils/checkTestIgnore.d.ts +4 -0
  212. package/out/core/utils/checkTestIgnore.d.ts.map +1 -0
  213. package/out/core/utils/checkTestIgnore.js +52 -0
  214. package/out/core/utils/checkTestIgnore.js.map +1 -0
  215. package/out/core/utils/common.d.ts +4 -0
  216. package/out/core/utils/common.d.ts.map +1 -0
  217. package/out/core/utils/common.js +34 -0
  218. package/out/core/utils/common.js.map +1 -0
  219. package/out/core/utils/console.d.ts +8 -0
  220. package/out/core/utils/console.d.ts.map +1 -0
  221. package/out/core/utils/console.js +24 -0
  222. package/out/core/utils/console.js.map +1 -0
  223. package/out/core/utils/deps.d.ts +3 -0
  224. package/out/core/utils/deps.d.ts.map +1 -0
  225. package/out/core/utils/deps.js +58 -0
  226. package/out/core/utils/deps.js.map +1 -0
  227. package/out/core/utils/eslintRuleHandler.d.ts +3 -0
  228. package/out/core/utils/eslintRuleHandler.d.ts.map +1 -0
  229. package/out/core/utils/eslintRuleHandler.js +98 -0
  230. package/out/core/utils/eslintRuleHandler.js.map +1 -0
  231. package/out/core/utils/file.d.ts +18 -0
  232. package/out/core/utils/file.d.ts.map +1 -0
  233. package/out/core/utils/file.js +142 -0
  234. package/out/core/utils/file.js.map +1 -0
  235. package/out/core/utils/lint.d.ts +9 -0
  236. package/out/core/utils/lint.d.ts.map +1 -0
  237. package/out/core/utils/lint.js +95 -0
  238. package/out/core/utils/lint.js.map +1 -0
  239. package/out/core/utils/lru.d.ts +12 -0
  240. package/out/core/utils/lru.d.ts.map +1 -0
  241. package/out/core/utils/lru.js +47 -0
  242. package/out/core/utils/lru.js.map +1 -0
  243. package/out/core/utils/move.d.ts +12 -0
  244. package/out/core/utils/move.d.ts.map +1 -0
  245. package/out/core/utils/move.js +93 -0
  246. package/out/core/utils/move.js.map +1 -0
  247. package/out/core/utils/msnStudio.d.ts +13 -0
  248. package/out/core/utils/msnStudio.d.ts.map +1 -0
  249. package/out/core/utils/msnStudio.js +150 -0
  250. package/out/core/utils/msnStudio.js.map +1 -0
  251. package/out/core/utils/parseCustomizedCmd.d.ts +2 -0
  252. package/out/core/utils/parseCustomizedCmd.d.ts.map +1 -0
  253. package/out/core/utils/parseCustomizedCmd.js +32 -0
  254. package/out/core/utils/parseCustomizedCmd.js.map +1 -0
  255. package/out/core/utils/specBlock.d.ts +20 -0
  256. package/out/core/utils/specBlock.d.ts.map +1 -0
  257. package/out/core/utils/specBlock.js +231 -0
  258. package/out/core/utils/specBlock.js.map +1 -0
  259. package/out/core/utils/system.d.ts +13 -0
  260. package/out/core/utils/system.d.ts.map +1 -0
  261. package/out/core/utils/system.js +86 -0
  262. package/out/core/utils/system.js.map +1 -0
  263. package/out/core/utils/telemetry.d.ts +9 -0
  264. package/out/core/utils/telemetry.d.ts.map +1 -0
  265. package/out/core/utils/telemetry.js +32 -0
  266. package/out/core/utils/telemetry.js.map +1 -0
  267. package/out/core/utils/tsMorph.d.ts +13 -0
  268. package/out/core/utils/tsMorph.d.ts.map +1 -0
  269. package/out/core/utils/tsMorph.js +76 -0
  270. package/out/core/utils/tsMorph.js.map +1 -0
  271. package/out/core/valid/customizedLint.d.ts +2 -0
  272. package/out/core/valid/customizedLint.d.ts.map +1 -0
  273. package/out/core/valid/customizedLint.js +64 -0
  274. package/out/core/valid/customizedLint.js.map +1 -0
  275. package/out/core/valid/customizedTest.d.ts +3 -0
  276. package/out/core/valid/customizedTest.d.ts.map +1 -0
  277. package/out/core/valid/customizedTest.js +58 -0
  278. package/out/core/valid/customizedTest.js.map +1 -0
  279. package/out/core/valid/extractVitestConfig.d.ts +5 -0
  280. package/out/core/valid/extractVitestConfig.d.ts.map +1 -0
  281. package/out/core/valid/extractVitestConfig.js +97 -0
  282. package/out/core/valid/extractVitestConfig.js.map +1 -0
  283. package/out/core/valid/getViteConfig.d.ts +2 -0
  284. package/out/core/valid/getViteConfig.d.ts.map +1 -0
  285. package/out/core/valid/getViteConfig.js +65 -0
  286. package/out/core/valid/getViteConfig.js.map +1 -0
  287. package/out/core/valid/index.d.ts +15 -0
  288. package/out/core/valid/index.d.ts.map +1 -0
  289. package/out/core/valid/index.js +99 -0
  290. package/out/core/valid/index.js.map +1 -0
  291. package/out/core/valid/jest.d.ts +4 -0
  292. package/out/core/valid/jest.d.ts.map +1 -0
  293. package/out/core/valid/jest.js +121 -0
  294. package/out/core/valid/jest.js.map +1 -0
  295. package/out/core/valid/mock.d.ts +2 -0
  296. package/out/core/valid/mock.d.ts.map +1 -0
  297. package/out/core/valid/mock.js +149 -0
  298. package/out/core/valid/mock.js.map +1 -0
  299. package/out/core/valid/remove.d.ts +5 -0
  300. package/out/core/valid/remove.d.ts.map +1 -0
  301. package/out/core/valid/remove.js +109 -0
  302. package/out/core/valid/remove.js.map +1 -0
  303. package/out/core/valid/tag.d.ts +3 -0
  304. package/out/core/valid/tag.d.ts.map +1 -0
  305. package/out/core/valid/tag.js +91 -0
  306. package/out/core/valid/tag.js.map +1 -0
  307. package/out/core/valid/type.d.ts +83 -0
  308. package/out/core/valid/type.d.ts.map +1 -0
  309. package/out/core/valid/type.js +3 -0
  310. package/out/core/valid/type.js.map +1 -0
  311. package/out/core/valid/vitest.d.ts +3 -0
  312. package/out/core/valid/vitest.d.ts.map +1 -0
  313. package/out/core/valid/vitest.js +82 -0
  314. package/out/core/valid/vitest.js.map +1 -0
  315. package/out/index.d.ts +20 -0
  316. package/out/index.d.ts.map +1 -0
  317. package/out/index.js +60 -0
  318. package/out/index.js.map +1 -0
  319. package/out/setup.d.ts +11 -0
  320. package/out/setup.d.ts.map +1 -0
  321. package/out/setup.js +14 -0
  322. package/out/setup.js.map +1 -0
  323. package/out/types.d.ts +23 -0
  324. package/out/types.d.ts.map +1 -0
  325. package/out/types.js +3 -0
  326. package/out/types.js.map +1 -0
  327. package/package.json +39 -0
  328. package/package_devops.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/llm/types.ts"],"names":[],"mappings":";;AAOC,CAAC;AAgED,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function validateMockedClassTest(testCode: string, testMethod: string, className: string, moduleName: string): boolean;
2
+ export declare function validateMockedFuncTest(testCode: string, testMethod: string, moduleName: string): boolean;
3
+ //# sourceMappingURL=validateMockedTest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateMockedTest.d.ts","sourceRoot":"","sources":["../../../src/core/quality/validateMockedTest.ts"],"names":[],"mappings":"AASA,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CA2C5H;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAsBxG"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateMockedClassTest = validateMockedClassTest;
7
+ exports.validateMockedFuncTest = validateMockedFuncTest;
8
+ const ts_morph_1 = require("ts-morph");
9
+ const console_1 = require("../utils/console");
10
+ const path_1 = __importDefault(require("path"));
11
+ // validate the case: just mock the class methods or funtions and test the mock logic and value, not test the real logic.
12
+ // in this case, the test code is useless, need to be deleted. Also, delete the test of this type won't impact the coverage of the source code.
13
+ function validateMockedClassTest(testCode, testMethod, className, moduleName) {
14
+ (0, console_1.getConsole)().log(`Validating the test method: "${testMethod}" in class: "${className}"`);
15
+ const project = new ts_morph_1.Project({
16
+ skipAddingFilesFromTsConfig: true
17
+ });
18
+ const testFile = project.createSourceFile("tmp.spec.ts", testCode, { overwrite: true });
19
+ const importDecls = testFile.getImportDeclarations();
20
+ // check if the class is imported
21
+ const imported = importDecls.some(decl => {
22
+ return decl.getNamedImports().some(named => named.getName() === className);
23
+ });
24
+ // if the class is not imported, return false directly
25
+ if (!imported) {
26
+ (0, console_1.getConsole)().log(`Test class: "${className}" is not imported, it just test mocked logic.`);
27
+ return false;
28
+ }
29
+ if (detectMockedClass(testFile, testMethod, className)) {
30
+ (0, console_1.getConsole)().log(`Test class: "${className}" was mocked in jest.mock, the test code does not the real logic.`);
31
+ return false;
32
+ }
33
+ // check if the test method is a method of the mocked module, example:
34
+ if (detectMockTestFunc(testFile, testMethod)) {
35
+ (0, console_1.getConsole)().log(`Test method: "${testMethod}" in class: "${className}" was mocked in jest.mock, the test code does not the real logic.`);
36
+ return false;
37
+ }
38
+ if (detectMockedTestModule(testFile, moduleName)) {
39
+ (0, console_1.getConsole)().log(`Test module: "${moduleName}" was overwrited in jest.mock, the test code does not the real logic.`);
40
+ return false;
41
+ }
42
+ if (detectFuncOverwrite(testFile, testMethod)) {
43
+ (0, console_1.getConsole)().log(`Test method: "${testMethod}" in class: "${className}" was overwritten in beforeEach/beforeAll, the test code does not the real logic.`);
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ function validateMockedFuncTest(testCode, testMethod, moduleName) {
49
+ const project = new ts_morph_1.Project({
50
+ skipAddingFilesFromTsConfig: true
51
+ });
52
+ const testFile = project.createSourceFile("tmp.spec.ts", testCode, { overwrite: true });
53
+ if (detectMockTestFunc(testFile, testMethod)) {
54
+ (0, console_1.getConsole)().log(`Test function: "${testMethod}" was mocked in jest.mock, the test code does not the real logic.`);
55
+ return false;
56
+ }
57
+ if (detectMockedTestModule(testFile, moduleName)) {
58
+ (0, console_1.getConsole)().log(`Test module: "${moduleName}" was overwrited in jest.mock, the test code does not the real logic.`);
59
+ return false;
60
+ }
61
+ if (detectFuncOverwrite(testFile, testMethod)) {
62
+ (0, console_1.getConsole)().log(`Test function: "${testMethod}" was overwritten in beforeEach/beforeAll, the test code does not the real logic.`);
63
+ return false;
64
+ }
65
+ return true;
66
+ }
67
+ function detectMockedClass(testFile, testMethod, className) {
68
+ // get all class declarations in the test file
69
+ const allClassDecls = testFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.ClassDeclaration);
70
+ // check if the test method is a method of the mock class
71
+ for (const mockClass of allClassDecls) {
72
+ // check weather the mocked class is inherited from the target class
73
+ const mockedClassName = mockClass.getName?.() || "<anonymous class>";
74
+ const heritage = mockClass.getHeritageClauses();
75
+ for (const h of heritage) {
76
+ const text = h.getText();
77
+ if (text.includes(`extends ${className}`)) {
78
+ (0, console_1.getConsole)().log(`Mocked class "${mockedClassName}" extends tested class "${className}.`);
79
+ return true;
80
+ }
81
+ }
82
+ // check weather mock the test method in the mocked class
83
+ const declaredMethods = mockClass.getMethods().map(m => m.getName());
84
+ const propertyDeclaredMethods = mockClass
85
+ .getProperties()
86
+ .filter(p => {
87
+ const init = p.getInitializer();
88
+ return init && init.getKind() === ts_morph_1.SyntaxKind.ArrowFunction;
89
+ })
90
+ .map(p => p.getName());
91
+ const mockMethods = [...declaredMethods, ...propertyDeclaredMethods];
92
+ const overlapping = mockMethods.filter(m => m === testMethod);
93
+ if (overlapping.length > 0) {
94
+ (0, console_1.getConsole)().log(`Test method: "${testMethod}" in class: "${className}" was mocked, the test code does not the real logic.`);
95
+ return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+ // detect overwrite in beforeEach or beforeAll, sample:
101
+ // beforeEach(() => {
102
+ // element.followSportsCallback = function (entity?: typeof mockEntity) {}
103
+ // });
104
+ function detectFuncOverwrite(testFile, testMethod) {
105
+ const setUpCalls = testFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
106
+ .filter(call => call.getExpression().getText() === "beforeEach" || call.getExpression().getText() === "beforeAll");
107
+ for (const call of setUpCalls) {
108
+ // const fn = call.getArguments()[0] as FunctionExpression | ArrowFunction;
109
+ const fn = call.getArguments()[0];
110
+ if (!fn)
111
+ continue;
112
+ if (checkFuncOverwrite(fn, testMethod)) {
113
+ return true;
114
+ }
115
+ }
116
+ return false;
117
+ }
118
+ //detect module overwrite in jest.mock, sample:
119
+ // jest.mock("../SportsRetentionFull.ts", () => {});
120
+ // jest.mock("../SportsRetentionFull", () => {});
121
+ function detectMockedTestModule(testFile, testModule) {
122
+ const jestMocks = testFile
123
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
124
+ .filter((c) => c.getExpression().getText() === "jest.mock");
125
+ for (const call of jestMocks) {
126
+ const firstArg = call.getArguments()[0];
127
+ if (!firstArg)
128
+ continue;
129
+ const argText = firstArg.getText().replace(/^['"`](.*)['"`]$/, "$1"); // remove the quotes
130
+ const moduleBaseName = path_1.default.basename(argText, path_1.default.extname(argText));
131
+ const testModuleBaseName = path_1.default.basename(testModule, path_1.default.extname(testModule));
132
+ if (moduleBaseName === testModuleBaseName) {
133
+ return true;
134
+ }
135
+ }
136
+ return false;
137
+ }
138
+ function checkFuncOverwrite(root, testMethod) {
139
+ const assigns = root.getDescendantsOfKind(ts_morph_1.SyntaxKind.BinaryExpression);
140
+ for (const assign of assigns) {
141
+ const left = assign.getLeft();
142
+ const right = assign.getRight();
143
+ const kind = left.getKind();
144
+ if (kind === ts_morph_1.SyntaxKind.PropertyAccessExpression) {
145
+ const leftExpr = left;
146
+ const name = leftExpr.getName();
147
+ if (name === testMethod && isMockAssignment(right)) {
148
+ return true;
149
+ }
150
+ }
151
+ else {
152
+ // sample:
153
+ // beforeEach(() => {
154
+ // instance = {
155
+ // getTelemetryByEntityId: (id?: string, type?: SportsFreCardTelemetryConstants) => {}
156
+ // } as SportsRetentionFull;
157
+ // });
158
+ const obj = right.getKind() === ts_morph_1.SyntaxKind.ObjectLiteralExpression
159
+ ? right
160
+ : right.getFirstDescendantByKind(ts_morph_1.SyntaxKind.ObjectLiteralExpression);
161
+ const props = obj?.getProperties() ?? [];
162
+ for (const p of props) {
163
+ const name = p.getName?.();
164
+ if (!name)
165
+ continue;
166
+ if (name === testMethod) {
167
+ return true;
168
+ }
169
+ }
170
+ }
171
+ }
172
+ return false;
173
+ }
174
+ function isMockAssignment(node) {
175
+ const kind = node.getKind();
176
+ return (kind === ts_morph_1.SyntaxKind.FunctionExpression ||
177
+ kind === ts_morph_1.SyntaxKind.ArrowFunction ||
178
+ node.getText().includes("jest.fn"));
179
+ }
180
+ ;
181
+ // check if the test method is a method of the mocked module, example:
182
+ // CommonHeaderWC: jest.fn().mockImplementation(() => ({
183
+ // getExperienceType: jest.fn(() => "testExperienceType")
184
+ // }))
185
+ function detectMockTestFunc(testFile, testMethod) {
186
+ const callExprs = testFile.getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression)
187
+ .filter(call => call.getExpression().getText() === "jest.mock");
188
+ for (const callExpr of callExprs) {
189
+ const args = callExpr.getArguments();
190
+ if (args.length < 2)
191
+ continue;
192
+ const factoryArg = args[1];
193
+ factoryArg.forEachDescendant((desc) => {
194
+ if (desc.getKind() === ts_morph_1.SyntaxKind.PropertyAssignment) {
195
+ const prop = desc.asKindOrThrow(ts_morph_1.SyntaxKind.PropertyAssignment);
196
+ const name = prop.getName();
197
+ if (testMethod === name) {
198
+ return true;
199
+ }
200
+ }
201
+ });
202
+ }
203
+ return false;
204
+ }
205
+ // const testCode = fs.readFileSync("D:\\code\\msnews-experiences\\experiences\\sports-retention-full\\src\\SportsRetentionFull.spec\\SportsRetentionFull.closeModule.web.spec.ts", "utf-8");
206
+ // const testCode = fs.readFileSync("D:\\code\\msnews-experiences\\experiences\\sports-retention-full\\src\\SportsRetentionFull.spec\\SportsRetentionFull.getTelemetryByEntityId.web.spec.ts", "utf-8");
207
+ // validateMockedClassTest(testCode, "getTelemetryByEntityId", "SportsRetentionFull", "SportsRetentionFull.ts");
208
+ // console.log('done');
209
+ // const testCode = fs.readFileSync("D:\\code\\msnews-experiences\\experiences\\sports-retention-full\\src\\components\\sports-interest-card\\SportsInterestCard.spec\\SportsInterestCardElement.followSportsCallback.web.spec.ts", "utf-8");
210
+ // validateMockedClassTest(testCode, "followSportsCallback", "SportsInterestCardElement");
211
+ //# sourceMappingURL=validateMockedTest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateMockedTest.js","sourceRoot":"","sources":["../../../src/core/quality/validateMockedTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Node, SourceFile } from "ts-morph";
2
+ export declare function hasIstanbulIgnoreFile(sourceFile: SourceFile): boolean;
3
+ export declare function hasIstanbulIgnoreNext(decl: Node): boolean;
4
+ //# sourceMappingURL=checkTestIgnore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkTestIgnore.d.ts","sourceRoot":"","sources":["../../../src/core/utils/checkTestIgnore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAW5C,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAMrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAmBzD"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasIstanbulIgnoreFile = hasIstanbulIgnoreFile;
4
+ exports.hasIstanbulIgnoreNext = hasIstanbulIgnoreNext;
5
+ const IGNORE_FILE_PATTERNS = "istanbul ignore file";
6
+ const IGNORE_FN_PATTERNS = [
7
+ "istanbul ignore next",
8
+ "istanbul ignore next line",
9
+ "istanbul ignore next-line",
10
+ "istanbul ignore next:",
11
+ ];
12
+ function hasIstanbulIgnoreFile(sourceFile) {
13
+ const fullText = sourceFile.getFullText();
14
+ if (fullText.includes(IGNORE_FILE_PATTERNS)) {
15
+ return true;
16
+ }
17
+ return false;
18
+ }
19
+ function hasIstanbulIgnoreNext(decl) {
20
+ const declStart = decl.getStart();
21
+ let node = decl;
22
+ // SourceFile
23
+ // └ VariableStatement ← comment is here
24
+ // └ VariableDeclarationList
25
+ // └ VariableDeclaration ← here is decl
26
+ // └ ArrowFunction
27
+ // for most cases, check up to 3 levels of ancestors is enough
28
+ for (let i = 0; i < 3 && node; i++) {
29
+ if (checkLeadingComments(node, declStart)) {
30
+ return true;
31
+ }
32
+ node = node.getParent();
33
+ }
34
+ return false;
35
+ }
36
+ function checkLeadingComments(node, declStart) {
37
+ const sf = node.getSourceFile();
38
+ const declLine = sf.getLineAndColumnAtPos(declStart).line;
39
+ for (const range of node.getLeadingCommentRanges()) {
40
+ const content = range.getText();
41
+ if (!IGNORE_FN_PATTERNS.some(p => content.includes(p)))
42
+ continue;
43
+ const commentLine = sf.getLineAndColumnAtPos(range.getPos()).line;
44
+ // declaration must be on the next line after the comment (Istanbul behavior)
45
+ // Another case: comment and declaration on the same line (rare but Istanbul supports it)
46
+ if (declLine === commentLine || declLine === commentLine + 1) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+ //# sourceMappingURL=checkTestIgnore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkTestIgnore.js","sourceRoot":"","sources":["../../../src/core/utils/checkTestIgnore.ts"],"names":[],"mappings":";;AAWA,sDAMC;AAED,sDAmBC;AApCD,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAEpD,MAAM,kBAAkB,GAAG;IACvB,sBAAsB;IACtB,2BAA2B;IAC3B,2BAA2B;IAC3B,uBAAuB;CAC1B,CAAC;AAEF,SAAgB,qBAAqB,CAAC,UAAsB;IACxD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAU;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAElC,IAAI,IAAI,GAAqB,IAAI,CAAC;IAElC,aAAa;IACb,+CAA+C;IAC/C,gCAAgC;IAChC,qDAAqD;IACrD,kCAAkC;IAClC,8DAA8D;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAU,EAAE,SAAiB;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAEjE,MAAM,WAAW,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QAElE,6EAA6E;QAC7E,yFAAyF;QACzF,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function extractCodeFromResponse(response: string): string;
2
+ export declare function formatImportName(symbolName: string, isDefaultExport: boolean): string;
3
+ export declare function getLanguage(fileSuffix: string): "typescript" | "javascript";
4
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/core/utils/common.ts"],"names":[],"mappings":"AAAA,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBhE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,MAAM,CAIrF;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,+BAE7C"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractCodeFromResponse = extractCodeFromResponse;
4
+ exports.formatImportName = formatImportName;
5
+ exports.getLanguage = getLanguage;
6
+ function extractCodeFromResponse(response) {
7
+ if (!response) {
8
+ return '';
9
+ }
10
+ const text = response.trim();
11
+ let match = /```(?:typescript|json|javascript|ts|js)?([\s\S]*?)(\n?```\n*|$)/g.exec(text);
12
+ if (match) {
13
+ return match[1].trim();
14
+ }
15
+ match = /```([\s\S]*?)(\n?```\n*|$)/g.exec(text);
16
+ if (match) {
17
+ return match[1].trim();
18
+ }
19
+ const lines = text.split('\n');
20
+ const hasMarkdown = lines.some(line => line.startsWith('#'));
21
+ if (hasMarkdown) {
22
+ return '';
23
+ }
24
+ return text;
25
+ }
26
+ function formatImportName(symbolName, isDefaultExport) {
27
+ return isDefaultExport
28
+ ? symbolName
29
+ : `{ ${symbolName} }`;
30
+ }
31
+ function getLanguage(fileSuffix) {
32
+ return /\.tsx?$/.test(fileSuffix) ? 'typescript' : 'javascript';
33
+ }
34
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/core/utils/common.ts"],"names":[],"mappings":";;AAAA,0DAoBC;AAED,4CAIC;AAED,kCAEC;AA9BD,SAAgB,uBAAuB,CAAC,QAAgB;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,kEAAkE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,eAAwB;IACzE,OAAO,eAAe;QAClB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,KAAK,UAAU,IAAI,CAAA;AAC7B,CAAC;AAED,SAAgB,WAAW,CAAC,UAAkB;IAC1C,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;AACpE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface IConsole {
2
+ log: (...args: any[]) => void;
3
+ error: (...args: any[]) => void;
4
+ disableRawConsole?: boolean;
5
+ }
6
+ export declare function setConsole(c?: IConsole): void;
7
+ export declare function getConsole(): IConsole;
8
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/core/utils/console.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAID,wBAAgB,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,QActC;AAED,wBAAgB,UAAU,aAEzB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setConsole = setConsole;
4
+ exports.getConsole = getConsole;
5
+ let _console = console;
6
+ function setConsole(c) {
7
+ if (!c) {
8
+ _console = console;
9
+ }
10
+ _console = {
11
+ log: (...args) => {
12
+ !c.disableRawConsole && console.log(...args);
13
+ c.log(...args);
14
+ },
15
+ error: (...args) => {
16
+ !c.disableRawConsole && console.error(...args);
17
+ c.error(...args);
18
+ }
19
+ };
20
+ }
21
+ function getConsole() {
22
+ return _console;
23
+ }
24
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/core/utils/console.ts"],"names":[],"mappings":";;AAQA,gCAcC;AAED,gCAEC;AApBD,IAAI,QAAQ,GAAa,OAAO,CAAC;AAEjC,SAAgB,UAAU,CAAC,CAAY;IACnC,IAAI,CAAC,CAAC,EAAE,CAAC;QACL,QAAQ,GAAG,OAAO,CAAC;IACvB,CAAC;IACD,QAAQ,GAAG;QACP,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YACb,CAAC,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YACf,CAAC,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAgB,UAAU;IACtB,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Declare } from '../analyze';
2
+ export declare function getPackageMocks(deps: Record<string, Declare[]>): string;
3
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/core/utils/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,UAmC9D"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPackageMocks = getPackageMocks;
4
+ const config_1 = require("../config");
5
+ function getPackageMocks(deps) {
6
+ let res = '';
7
+ const mockMap = (0, config_1.getConfig)().common.mockDependencies || {};
8
+ const testFramework = (0, config_1.getConfig)().common.testFramework || 'jest';
9
+ for (const key in deps) {
10
+ const mocks = mockMap[key];
11
+ const requireMock = requireMockMap[key];
12
+ if (!mocks && !requireMock) {
13
+ continue;
14
+ }
15
+ const ids = deps[key].map(d => d.name);
16
+ let mockStr = '';
17
+ if (mocks) {
18
+ for (const id of ids) {
19
+ if (!mocks[id] || requireMock?.[id]) {
20
+ continue;
21
+ }
22
+ let mockText = mocks[id].trim();
23
+ mockText = mockText.endsWith(',') ? mockText : `${mockText},`;
24
+ mockStr += `${id}: ${mockText}\n`;
25
+ }
26
+ }
27
+ if (requireMock) {
28
+ Object.values(requireMock).forEach(mock => {
29
+ mockStr += `${mock},\n`;
30
+ });
31
+ }
32
+ if (!mockStr) {
33
+ continue;
34
+ }
35
+ res += formatMockCode(testFramework, key, mockStr);
36
+ }
37
+ return res;
38
+ }
39
+ // must not end with comma
40
+ const requireMockMap = {
41
+ "@msnews/core": {
42
+ getAppEnvironment: `getAppEnvironment: jest.fn(() => ({}))`
43
+ }
44
+ };
45
+ function formatMockCode(testFramework, moduleName, mockCode) {
46
+ if (testFramework === 'vitest') {
47
+ return `vi.mock('${moduleName}', async () => ({
48
+ ...(await vi.importActual('${moduleName}')),
49
+ ${mockCode}
50
+ }));`;
51
+ }
52
+ return `jest.mock('${moduleName}', () => ({
53
+ ...jest.requireActual('${moduleName}'),
54
+ ${mockCode}
55
+ }));
56
+ `;
57
+ }
58
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/core/utils/deps.ts"],"names":[],"mappings":";;AAGA,0CAmCC;AArCD,sCAAsC;AAEtC,SAAgB,eAAe,CAAC,IAA+B;IAC3D,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,MAAM,OAAO,GAAG,IAAA,kBAAS,GAAE,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAA,kBAAS,GAAE,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC;IAEjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,KAAK,EAAE,CAAC;YACR,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,SAAS;gBACb,CAAC;gBACD,IAAI,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;gBAC9D,OAAO,IAAI,GAAG,EAAE,KAAK,QAAQ,IAAI,CAAC;YACtC,CAAC;QACL,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACtC,OAAO,IAAI,GAAG,IAAI,KAAK,CAAC;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,SAAS;QACb,CAAC;QACD,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,0BAA0B;AAC1B,MAAM,cAAc,GAAG;IACnB,cAAc,EAAE;QACZ,iBAAiB,EAAE,wCAAwC;KAC9D;CACJ,CAAC;AAEF,SAAS,cAAc,CAAC,aAAqB,EAAE,UAAkB,EAAE,QAAgB;IAC/E,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,YAAY,UAAU;iCACJ,UAAU;MACrC,QAAQ;KACT,CAAC;IACF,CAAC;IACD,OAAO,cAAc,UAAU;6BACN,UAAU;MACjC,QAAQ;;CAEb,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function getRuleErrors(lintErrors: string[]): any[];
2
+ export declare function disableLintRules(testCode: string, ruleKeys: string[]): string;
3
+ //# sourceMappingURL=eslintRuleHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslintRuleHandler.d.ts","sourceRoot":"","sources":["../../../src/core/utils/eslintRuleHandler.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAoBjD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAiC7E"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getRuleErrors = getRuleErrors;
37
+ exports.disableLintRules = disableLintRules;
38
+ const util = __importStar(require("util"));
39
+ const constants_1 = require("../constants");
40
+ // sample: lint.ts:34 22:9 error Missing an explicit type attribute for button react/button-has-type
41
+ function getRuleErrors(lintErrors) {
42
+ const ruleErrors = [];
43
+ const regex = /^\s*(\d+):(\d+)\s+error\s+(.+?)\s{2,}([a-zA-Z0-9\-\/@]+)$/;
44
+ for (const line of lintErrors) {
45
+ const match = line.match(regex);
46
+ if (!match)
47
+ continue;
48
+ const [, lineNum, colNum, message, rule] = match;
49
+ const lineN = Number(lineNum);
50
+ const colN = Number(colNum);
51
+ const ruleKey = rule.trim();
52
+ if (!ruleKey) {
53
+ continue;
54
+ }
55
+ ruleErrors.push({ rule: ruleKey, message: message.trim(), rows: [lineN], cols: [colN] });
56
+ }
57
+ return ruleErrors;
58
+ }
59
+ function disableLintRules(testCode, ruleKeys) {
60
+ const lines = testCode.split(/\r?\n/);
61
+ const result = [];
62
+ let inserted = false;
63
+ const disableComments = ruleKeys.map(rule => util.format(constants_1.DISABLE_ESLINT_RULE_TEMPLATE, rule)).join('\n');
64
+ for (let i = 0; i < lines.length; i++) {
65
+ const line = lines[i];
66
+ // insert to first not comment / empty line
67
+ if (!inserted) {
68
+ const trimmed = line.trim();
69
+ const isComment = trimmed.startsWith("//") ||
70
+ trimmed.startsWith("/*") ||
71
+ trimmed.startsWith("*") ||
72
+ trimmed.startsWith("*/");
73
+ if (!isComment && trimmed !== "") {
74
+ result.push(disableComments);
75
+ inserted = true;
76
+ }
77
+ }
78
+ result.push(line);
79
+ }
80
+ // corner case: all lines are comments / empty
81
+ if (!inserted) {
82
+ result.push(disableComments);
83
+ }
84
+ return result.join("\n");
85
+ }
86
+ // const errors = `
87
+ // 3:1 error '@testing-library/react' should be listed in the project's dependencies, not devDependencies import/no-extraneous-dependencies
88
+ // 5:46 error Absolute imports should come before relative imports import/first
89
+ // 7:1 error 'jest' is not defined no-undef
90
+ // 8:6 error 'jest' is not defined no-undef
91
+ // 9:33 error 'jest' is not defined no-undef
92
+ // 16:15 error 'jest' is not defined no-undef
93
+ // 131:12 error Expected indentation of 4 space characters but found 11 react/jsx-indent
94
+ // 137:5 error 'expect' is not defined no-undef
95
+ // 138:5 error 'expect' is not defined no-undef
96
+ // `;
97
+ // getRuleErrors(errors.split(/\r?\n/).map(line => line.trim()));
98
+ //# sourceMappingURL=eslintRuleHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslintRuleHandler.js","sourceRoot":"","sources":["../../../src/core/utils/eslintRuleHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,sCAoBC;AAED,4CAiCC;AA5DD,2CAA6B;AAE7B,4CAA4D;AAE5D,oGAAoG;AACpG,SAAgB,aAAa,CAAC,UAAoB;IAC9C,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,MAAM,KAAK,GAAG,2DAA2D,CAAC;IAE1E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,SAAS;QACb,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,QAAkB;IACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,wCAA4B,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,2CAA2C;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,SAAS,GACX,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBACvB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE7B,IAAI,CAAC,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7B,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC;QACL,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,mBAAmB;AACnB,mJAAmJ;AACnJ,8HAA8H;AAC9H,0HAA0H;AAC1H,0HAA0H;AAC1H,0HAA0H;AAC1H,0HAA0H;AAC1H,kIAAkI;AAClI,0HAA0H;AAC1H,0HAA0H;AAC1H,OAAO;AACP,mEAAmE"}
@@ -0,0 +1,18 @@
1
+ export declare function findProjectRoot(p: string, findTop?: boolean, fileKey?: string): string;
2
+ export declare function toUnixStyle(filePath: string): string;
3
+ export declare function getFilesInDir(dirPath: string, options?: {
4
+ filter?: (filePath: string) => boolean;
5
+ ignoreDir?: Set<string>;
6
+ skipFolderName?: string;
7
+ }): string[];
8
+ interface PackageInfo {
9
+ packagePath: string;
10
+ targetFiles: string[];
11
+ }
12
+ export declare function getPackagesFrom(inputPath: string, options?: {
13
+ ignoreDir?: Set<string>;
14
+ skipFolderName?: string;
15
+ }): PackageInfo[];
16
+ export declare function getNormalizedRelativePath(from: any, to: any): string;
17
+ export {};
18
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/core/utils/file.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,UAAQ,EAAE,OAAO,SAAiB,GAAG,MAAM,CAkB5F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,UAE3C;AAaD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IACrD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,EAAE,CAsCX;AAsCD,UAAU,WAAW;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IACzD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,WAAW,EAAE,CA0BhB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,KAAA,EAAE,EAAE,KAAA,UAYjD"}