intershell 0.3.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 (357) hide show
  1. package/README.md +301 -0
  2. package/dist/commands/ci/act.d.ts +13 -0
  3. package/dist/commands/ci/act.d.ts.map +1 -0
  4. package/dist/commands/ci/act.js +89 -0
  5. package/dist/commands/ci/act.js.map +1 -0
  6. package/dist/commands/ci/attach-affected.d.ts +12 -0
  7. package/dist/commands/ci/attach-affected.d.ts.map +1 -0
  8. package/dist/commands/ci/attach-affected.js +83 -0
  9. package/dist/commands/ci/attach-affected.js.map +1 -0
  10. package/dist/commands/ci/attach-service-ports.d.ts +10 -0
  11. package/dist/commands/ci/attach-service-ports.d.ts.map +1 -0
  12. package/dist/commands/ci/attach-service-ports.js +25 -0
  13. package/dist/commands/ci/attach-service-ports.js.map +1 -0
  14. package/dist/commands/commit-check.d.ts +13 -0
  15. package/dist/commands/commit-check.d.ts.map +1 -0
  16. package/dist/commands/commit-check.js +110 -0
  17. package/dist/commands/commit-check.js.map +1 -0
  18. package/dist/commands/commit.d.ts +16 -0
  19. package/dist/commands/commit.d.ts.map +1 -0
  20. package/dist/commands/commit.js +91 -0
  21. package/dist/commands/commit.js.map +1 -0
  22. package/dist/commands/dev/check.d.ts +13 -0
  23. package/dist/commands/dev/check.d.ts.map +1 -0
  24. package/dist/commands/dev/check.js +91 -0
  25. package/dist/commands/dev/check.js.map +1 -0
  26. package/dist/commands/dev/cleanup.d.ts +10 -0
  27. package/dist/commands/dev/cleanup.d.ts.map +1 -0
  28. package/dist/commands/dev/cleanup.js +28 -0
  29. package/dist/commands/dev/cleanup.js.map +1 -0
  30. package/dist/commands/dev/rm.d.ts +12 -0
  31. package/dist/commands/dev/rm.d.ts.map +1 -0
  32. package/dist/commands/dev/rm.js +49 -0
  33. package/dist/commands/dev/rm.js.map +1 -0
  34. package/dist/commands/dev/setup.d.ts +10 -0
  35. package/dist/commands/dev/setup.d.ts.map +1 -0
  36. package/dist/commands/dev/setup.js +40 -0
  37. package/dist/commands/dev/setup.js.map +1 -0
  38. package/dist/commands/local/cleanup.d.ts +12 -0
  39. package/dist/commands/local/cleanup.d.ts.map +1 -0
  40. package/dist/commands/local/cleanup.js +62 -0
  41. package/dist/commands/local/cleanup.js.map +1 -0
  42. package/dist/commands/local/setup.d.ts +11 -0
  43. package/dist/commands/local/setup.d.ts.map +1 -0
  44. package/dist/commands/local/setup.js +55 -0
  45. package/dist/commands/local/setup.js.map +1 -0
  46. package/dist/commands/local/vscode.d.ts +17 -0
  47. package/dist/commands/local/vscode.d.ts.map +1 -0
  48. package/dist/commands/local/vscode.js +94 -0
  49. package/dist/commands/local/vscode.js.map +1 -0
  50. package/dist/commands/update-package-json.d.ts +12 -0
  51. package/dist/commands/update-package-json.d.ts.map +1 -0
  52. package/dist/commands/update-package-json.js +82 -0
  53. package/dist/commands/update-package-json.js.map +1 -0
  54. package/dist/commands/version/apply.d.ts +16 -0
  55. package/dist/commands/version/apply.d.ts.map +1 -0
  56. package/dist/commands/version/apply.js +120 -0
  57. package/dist/commands/version/apply.js.map +1 -0
  58. package/dist/commands/version/ci.d.ts +12 -0
  59. package/dist/commands/version/ci.d.ts.map +1 -0
  60. package/dist/commands/version/ci.js +67 -0
  61. package/dist/commands/version/ci.js.map +1 -0
  62. package/dist/commands/version/prepare.d.ts +19 -0
  63. package/dist/commands/version/prepare.d.ts.map +1 -0
  64. package/dist/commands/version/prepare.js +153 -0
  65. package/dist/commands/version/prepare.js.map +1 -0
  66. package/dist/core/colorify.d.ts +21 -0
  67. package/dist/core/colorify.d.ts.map +1 -0
  68. package/dist/core/colorify.js +56 -0
  69. package/dist/core/colorify.js.map +1 -0
  70. package/dist/core/index.d.ts +4 -0
  71. package/dist/core/index.d.ts.map +1 -0
  72. package/dist/core/index.js +3 -0
  73. package/dist/core/index.js.map +1 -0
  74. package/dist/core/types.d.ts +181 -0
  75. package/dist/core/types.d.ts.map +1 -0
  76. package/dist/core/types.js +5 -0
  77. package/dist/core/types.js.map +1 -0
  78. package/dist/core/wrapshell.d.ts +19 -0
  79. package/dist/core/wrapshell.d.ts.map +1 -0
  80. package/dist/core/wrapshell.js +323 -0
  81. package/dist/core/wrapshell.js.map +1 -0
  82. package/dist/entities/affected/affected.d.ts +4 -0
  83. package/dist/entities/affected/affected.d.ts.map +1 -0
  84. package/dist/entities/affected/affected.js +20 -0
  85. package/dist/entities/affected/affected.js.map +1 -0
  86. package/dist/entities/affected/affected.test.d.ts +2 -0
  87. package/dist/entities/affected/affected.test.d.ts.map +1 -0
  88. package/dist/entities/affected/affected.test.js +305 -0
  89. package/dist/entities/affected/affected.test.js.map +1 -0
  90. package/dist/entities/affected/index.d.ts +2 -0
  91. package/dist/entities/affected/index.d.ts.map +1 -0
  92. package/dist/entities/affected/index.js +2 -0
  93. package/dist/entities/affected/index.js.map +1 -0
  94. package/dist/entities/branch/branch.d.ts +8 -0
  95. package/dist/entities/branch/branch.d.ts.map +1 -0
  96. package/dist/entities/branch/branch.js +74 -0
  97. package/dist/entities/branch/branch.js.map +1 -0
  98. package/dist/entities/branch/branch.test.d.ts +2 -0
  99. package/dist/entities/branch/branch.test.d.ts.map +1 -0
  100. package/dist/entities/branch/branch.test.js +316 -0
  101. package/dist/entities/branch/branch.test.js.map +1 -0
  102. package/dist/entities/branch/branch.types.d.ts +6 -0
  103. package/dist/entities/branch/branch.types.d.ts.map +1 -0
  104. package/dist/entities/branch/branch.types.js +2 -0
  105. package/dist/entities/branch/branch.types.js.map +1 -0
  106. package/dist/entities/branch/index.d.ts +3 -0
  107. package/dist/entities/branch/index.d.ts.map +1 -0
  108. package/dist/entities/branch/index.js +3 -0
  109. package/dist/entities/branch/index.js.map +1 -0
  110. package/dist/entities/commit/commit.d.ts +15 -0
  111. package/dist/entities/commit/commit.d.ts.map +1 -0
  112. package/dist/entities/commit/commit.js +196 -0
  113. package/dist/entities/commit/commit.js.map +1 -0
  114. package/dist/entities/commit/commit.test.d.ts +26 -0
  115. package/dist/entities/commit/commit.test.d.ts.map +1 -0
  116. package/dist/entities/commit/commit.test.js +550 -0
  117. package/dist/entities/commit/commit.test.js.map +1 -0
  118. package/dist/entities/commit/commit.types.d.ts +49 -0
  119. package/dist/entities/commit/commit.types.d.ts.map +1 -0
  120. package/dist/entities/commit/commit.types.js +31 -0
  121. package/dist/entities/commit/commit.types.js.map +1 -0
  122. package/dist/entities/commit/index.d.ts +3 -0
  123. package/dist/entities/commit/index.d.ts.map +1 -0
  124. package/dist/entities/commit/index.js +3 -0
  125. package/dist/entities/commit/index.js.map +1 -0
  126. package/dist/entities/commit/pr.d.ts +11 -0
  127. package/dist/entities/commit/pr.d.ts.map +1 -0
  128. package/dist/entities/commit/pr.js +201 -0
  129. package/dist/entities/commit/pr.js.map +1 -0
  130. package/dist/entities/commit/pr.test.d.ts +2 -0
  131. package/dist/entities/commit/pr.test.d.ts.map +1 -0
  132. package/dist/entities/commit/pr.test.js +782 -0
  133. package/dist/entities/commit/pr.test.js.map +1 -0
  134. package/dist/entities/compose/compose.d.ts +18 -0
  135. package/dist/entities/compose/compose.d.ts.map +1 -0
  136. package/dist/entities/compose/compose.js +197 -0
  137. package/dist/entities/compose/compose.js.map +1 -0
  138. package/dist/entities/compose/compose.test.d.ts +2 -0
  139. package/dist/entities/compose/compose.test.d.ts.map +1 -0
  140. package/dist/entities/compose/compose.test.js +406 -0
  141. package/dist/entities/compose/compose.test.js.map +1 -0
  142. package/dist/entities/compose/compose.types.d.ts +77 -0
  143. package/dist/entities/compose/compose.types.d.ts.map +1 -0
  144. package/dist/entities/compose/compose.types.js +2 -0
  145. package/dist/entities/compose/compose.types.js.map +1 -0
  146. package/dist/entities/compose/index.d.ts +3 -0
  147. package/dist/entities/compose/index.d.ts.map +1 -0
  148. package/dist/entities/compose/index.js +3 -0
  149. package/dist/entities/compose/index.js.map +1 -0
  150. package/dist/entities/entities.shell.d.ts +29 -0
  151. package/dist/entities/entities.shell.d.ts.map +1 -0
  152. package/dist/entities/entities.shell.js +27 -0
  153. package/dist/entities/entities.shell.js.map +1 -0
  154. package/dist/entities/entities.shell.test.d.ts +2 -0
  155. package/dist/entities/entities.shell.test.d.ts.map +1 -0
  156. package/dist/entities/entities.shell.test.js +23 -0
  157. package/dist/entities/entities.shell.test.js.map +1 -0
  158. package/dist/entities/index.d.ts +12 -0
  159. package/dist/entities/index.d.ts.map +1 -0
  160. package/dist/entities/index.js +12 -0
  161. package/dist/entities/index.js.map +1 -0
  162. package/dist/entities/intershell-config/intershell-config.d.ts +11 -0
  163. package/dist/entities/intershell-config/intershell-config.d.ts.map +1 -0
  164. package/dist/entities/intershell-config/intershell-config.default.d.ts +188 -0
  165. package/dist/entities/intershell-config/intershell-config.default.d.ts.map +1 -0
  166. package/dist/entities/intershell-config/intershell-config.default.js +225 -0
  167. package/dist/entities/intershell-config/intershell-config.default.js.map +1 -0
  168. package/dist/entities/intershell-config/intershell-config.js +132 -0
  169. package/dist/entities/intershell-config/intershell-config.js.map +1 -0
  170. package/dist/entities/intershell-config/intershell-config.test.d.ts +2 -0
  171. package/dist/entities/intershell-config/intershell-config.test.d.ts.map +1 -0
  172. package/dist/entities/intershell-config/intershell-config.test.js +102 -0
  173. package/dist/entities/intershell-config/intershell-config.test.js.map +1 -0
  174. package/dist/entities/intershell-config/intershell-config.types.d.ts +103 -0
  175. package/dist/entities/intershell-config/intershell-config.types.d.ts.map +1 -0
  176. package/dist/entities/intershell-config/intershell-config.types.js +2 -0
  177. package/dist/entities/intershell-config/intershell-config.types.js.map +1 -0
  178. package/dist/entities/package/index.d.ts +4 -0
  179. package/dist/entities/package/index.d.ts.map +1 -0
  180. package/dist/entities/package/index.js +4 -0
  181. package/dist/entities/package/index.js.map +1 -0
  182. package/dist/entities/package/package.d.ts +49 -0
  183. package/dist/entities/package/package.d.ts.map +1 -0
  184. package/dist/entities/package/package.js +234 -0
  185. package/dist/entities/package/package.js.map +1 -0
  186. package/dist/entities/package/package.shell.d.ts +48 -0
  187. package/dist/entities/package/package.shell.d.ts.map +1 -0
  188. package/dist/entities/package/package.shell.js +118 -0
  189. package/dist/entities/package/package.shell.js.map +1 -0
  190. package/dist/entities/package/package.test.d.ts +23 -0
  191. package/dist/entities/package/package.test.d.ts.map +1 -0
  192. package/dist/entities/package/package.test.js +637 -0
  193. package/dist/entities/package/package.test.js.map +1 -0
  194. package/dist/entities/package/package.types.d.ts +48 -0
  195. package/dist/entities/package/package.types.d.ts.map +1 -0
  196. package/dist/entities/package/package.types.js +2 -0
  197. package/dist/entities/package/package.types.js.map +1 -0
  198. package/dist/entities/package-changelog/index.d.ts +4 -0
  199. package/dist/entities/package-changelog/index.d.ts.map +1 -0
  200. package/dist/entities/package-changelog/index.js +4 -0
  201. package/dist/entities/package-changelog/index.js.map +1 -0
  202. package/dist/entities/package-changelog/package-changelog.d.ts +20 -0
  203. package/dist/entities/package-changelog/package-changelog.d.ts.map +1 -0
  204. package/dist/entities/package-changelog/package-changelog.js +59 -0
  205. package/dist/entities/package-changelog/package-changelog.js.map +1 -0
  206. package/dist/entities/package-changelog/package-changelog.types.d.ts +25 -0
  207. package/dist/entities/package-changelog/package-changelog.types.d.ts.map +1 -0
  208. package/dist/entities/package-changelog/package-changelog.types.js +2 -0
  209. package/dist/entities/package-changelog/package-changelog.types.js.map +1 -0
  210. package/dist/entities/package-changelog/template.d.ts +20 -0
  211. package/dist/entities/package-changelog/template.d.ts.map +1 -0
  212. package/dist/entities/package-changelog/template.default.d.ts +10 -0
  213. package/dist/entities/package-changelog/template.default.d.ts.map +1 -0
  214. package/dist/entities/package-changelog/template.default.js +85 -0
  215. package/dist/entities/package-changelog/template.default.js.map +1 -0
  216. package/dist/entities/package-changelog/template.js +90 -0
  217. package/dist/entities/package-changelog/template.js.map +1 -0
  218. package/dist/entities/package-commits/dependency-analyzer.d.ts +35 -0
  219. package/dist/entities/package-commits/dependency-analyzer.d.ts.map +1 -0
  220. package/dist/entities/package-commits/dependency-analyzer.js +169 -0
  221. package/dist/entities/package-commits/dependency-analyzer.js.map +1 -0
  222. package/dist/entities/package-commits/dependency-analyzer.test.d.ts +2 -0
  223. package/dist/entities/package-commits/dependency-analyzer.test.d.ts.map +1 -0
  224. package/dist/entities/package-commits/dependency-analyzer.test.js +25 -0
  225. package/dist/entities/package-commits/dependency-analyzer.test.js.map +1 -0
  226. package/dist/entities/package-commits/index.d.ts +3 -0
  227. package/dist/entities/package-commits/index.d.ts.map +1 -0
  228. package/dist/entities/package-commits/index.js +3 -0
  229. package/dist/entities/package-commits/index.js.map +1 -0
  230. package/dist/entities/package-commits/package-commits.d.ts +33 -0
  231. package/dist/entities/package-commits/package-commits.d.ts.map +1 -0
  232. package/dist/entities/package-commits/package-commits.js +149 -0
  233. package/dist/entities/package-commits/package-commits.js.map +1 -0
  234. package/dist/entities/package-commits/package-commits.test.d.ts +2 -0
  235. package/dist/entities/package-commits/package-commits.test.d.ts.map +1 -0
  236. package/dist/entities/package-commits/package-commits.test.js +40 -0
  237. package/dist/entities/package-commits/package-commits.test.js.map +1 -0
  238. package/dist/entities/package-tags/index.d.ts +2 -0
  239. package/dist/entities/package-tags/index.d.ts.map +1 -0
  240. package/dist/entities/package-tags/index.js +2 -0
  241. package/dist/entities/package-tags/index.js.map +1 -0
  242. package/dist/entities/package-tags/package-tags.d.ts +24 -0
  243. package/dist/entities/package-tags/package-tags.d.ts.map +1 -0
  244. package/dist/entities/package-tags/package-tags.js +197 -0
  245. package/dist/entities/package-tags/package-tags.js.map +1 -0
  246. package/dist/entities/package-tags/package-tags.test.d.ts +2 -0
  247. package/dist/entities/package-tags/package-tags.test.d.ts.map +1 -0
  248. package/dist/entities/package-tags/package-tags.test.js +60 -0
  249. package/dist/entities/package-tags/package-tags.test.js.map +1 -0
  250. package/dist/entities/package-version/index.d.ts +3 -0
  251. package/dist/entities/package-version/index.d.ts.map +1 -0
  252. package/dist/entities/package-version/index.js +3 -0
  253. package/dist/entities/package-version/index.js.map +1 -0
  254. package/dist/entities/package-version/package-version.d.ts +16 -0
  255. package/dist/entities/package-version/package-version.d.ts.map +1 -0
  256. package/dist/entities/package-version/package-version.js +166 -0
  257. package/dist/entities/package-version/package-version.js.map +1 -0
  258. package/dist/entities/package-version/package-version.test.d.ts +2 -0
  259. package/dist/entities/package-version/package-version.test.d.ts.map +1 -0
  260. package/dist/entities/package-version/package-version.test.js +113 -0
  261. package/dist/entities/package-version/package-version.test.js.map +1 -0
  262. package/dist/entities/package-version/package-version.types.d.ts +31 -0
  263. package/dist/entities/package-version/package-version.types.d.ts.map +1 -0
  264. package/dist/entities/package-version/package-version.types.js +2 -0
  265. package/dist/entities/package-version/package-version.types.js.map +1 -0
  266. package/dist/entities/tag/index.d.ts +3 -0
  267. package/dist/entities/tag/index.d.ts.map +1 -0
  268. package/dist/entities/tag/index.js +3 -0
  269. package/dist/entities/tag/index.js.map +1 -0
  270. package/dist/entities/tag/tag.d.ts +24 -0
  271. package/dist/entities/tag/tag.d.ts.map +1 -0
  272. package/dist/entities/tag/tag.js +168 -0
  273. package/dist/entities/tag/tag.js.map +1 -0
  274. package/dist/entities/tag/tag.test.d.ts +2 -0
  275. package/dist/entities/tag/tag.test.d.ts.map +1 -0
  276. package/dist/entities/tag/tag.test.js +638 -0
  277. package/dist/entities/tag/tag.test.js.map +1 -0
  278. package/dist/entities/tag/tag.types.d.ts +35 -0
  279. package/dist/entities/tag/tag.types.d.ts.map +1 -0
  280. package/dist/entities/tag/tag.types.js +2 -0
  281. package/dist/entities/tag/tag.types.js.map +1 -0
  282. package/dist/index.d.ts +3 -0
  283. package/dist/index.d.ts.map +1 -0
  284. package/dist/index.js +6 -0
  285. package/dist/index.js.map +1 -0
  286. package/package.json +73 -0
  287. package/src/commands/ci/act.ts +95 -0
  288. package/src/commands/ci/attach-affected.ts +93 -0
  289. package/src/commands/ci/attach-service-ports.ts +31 -0
  290. package/src/commands/commit-check.ts +124 -0
  291. package/src/commands/commit.ts +103 -0
  292. package/src/commands/dev/check.ts +117 -0
  293. package/src/commands/dev/cleanup.ts +34 -0
  294. package/src/commands/dev/rm.ts +66 -0
  295. package/src/commands/dev/setup.ts +48 -0
  296. package/src/commands/local/cleanup.ts +74 -0
  297. package/src/commands/local/setup.ts +68 -0
  298. package/src/commands/local/vscode.ts +118 -0
  299. package/src/commands/update-package-json.ts +104 -0
  300. package/src/commands/version/apply.ts +156 -0
  301. package/src/commands/version/ci.ts +85 -0
  302. package/src/commands/version/prepare.ts +217 -0
  303. package/src/core/colorify.ts +61 -0
  304. package/src/core/index.ts +3 -0
  305. package/src/core/types.ts +262 -0
  306. package/src/core/wrapshell.ts +388 -0
  307. package/src/entities/affected/affected.test.ts +427 -0
  308. package/src/entities/affected/affected.ts +22 -0
  309. package/src/entities/affected/index.ts +1 -0
  310. package/src/entities/branch/branch.test.ts +348 -0
  311. package/src/entities/branch/branch.ts +89 -0
  312. package/src/entities/branch/branch.types.ts +5 -0
  313. package/src/entities/branch/index.ts +2 -0
  314. package/src/entities/commit/commit.test.ts +769 -0
  315. package/src/entities/commit/commit.ts +245 -0
  316. package/src/entities/commit/commit.types.ts +81 -0
  317. package/src/entities/commit/index.ts +2 -0
  318. package/src/entities/commit/pr.test.ts +860 -0
  319. package/src/entities/commit/pr.ts +241 -0
  320. package/src/entities/compose/compose.test.ts +496 -0
  321. package/src/entities/compose/compose.ts +251 -0
  322. package/src/entities/compose/compose.types.ts +88 -0
  323. package/src/entities/compose/index.ts +2 -0
  324. package/src/entities/entities.shell.test.ts +35 -0
  325. package/src/entities/entities.shell.ts +81 -0
  326. package/src/entities/index.ts +11 -0
  327. package/src/entities/intershell-config/intershell-config.default.ts +229 -0
  328. package/src/entities/intershell-config/intershell-config.test.ts +117 -0
  329. package/src/entities/intershell-config/intershell-config.ts +143 -0
  330. package/src/entities/intershell-config/intershell-config.types.ts +118 -0
  331. package/src/entities/package/index.ts +3 -0
  332. package/src/entities/package/package.shell.ts +124 -0
  333. package/src/entities/package/package.test.ts +830 -0
  334. package/src/entities/package/package.ts +267 -0
  335. package/src/entities/package/package.types.ts +49 -0
  336. package/src/entities/package-changelog/index.ts +3 -0
  337. package/src/entities/package-changelog/package-changelog.ts +81 -0
  338. package/src/entities/package-changelog/package-changelog.types.ts +30 -0
  339. package/src/entities/package-changelog/template.default.ts +109 -0
  340. package/src/entities/package-changelog/template.ts +118 -0
  341. package/src/entities/package-commits/dependency-analyzer.test.ts +29 -0
  342. package/src/entities/package-commits/dependency-analyzer.ts +194 -0
  343. package/src/entities/package-commits/index.ts +2 -0
  344. package/src/entities/package-commits/package-commits.test.ts +44 -0
  345. package/src/entities/package-commits/package-commits.ts +191 -0
  346. package/src/entities/package-tags/index.ts +1 -0
  347. package/src/entities/package-tags/package-tags.test.ts +73 -0
  348. package/src/entities/package-tags/package-tags.ts +234 -0
  349. package/src/entities/package-version/index.ts +2 -0
  350. package/src/entities/package-version/package-version.test.ts +141 -0
  351. package/src/entities/package-version/package-version.ts +234 -0
  352. package/src/entities/package-version/package-version.types.ts +35 -0
  353. package/src/entities/tag/index.ts +2 -0
  354. package/src/entities/tag/tag.test.ts +844 -0
  355. package/src/entities/tag/tag.ts +208 -0
  356. package/src/entities/tag/tag.types.ts +37 -0
  357. package/src/index.ts +7 -0
@@ -0,0 +1,427 @@
1
+ import { beforeEach, describe, expect, it, mock } from "bun:test";
2
+ import type { $ } from "bun";
3
+
4
+ describe("EntityAffected", async () => {
5
+ beforeEach(async () => {
6
+ // Import and mock entitiesShell methods directly
7
+ const { entitiesShell } = await import("../entities.shell");
8
+
9
+ // Mock turboRunBuild directly
10
+ entitiesShell.turboRunBuild = mock(
11
+ () =>
12
+ ({
13
+ exitCode: 0,
14
+ json: () => Promise.resolve({ packages: ["package1", "package2"] }),
15
+ text: () => Promise.resolve('{"packages":["package1","package2"]}'),
16
+ }) as unknown as $.ShellPromise,
17
+ );
18
+ });
19
+
20
+ describe("getAffectedPackages", () => {
21
+ it("should call EntityTag.getBaseCommitSha with correct parameters", async () => {
22
+ // Import and mock EntityTag first
23
+ const { EntityTag } = await import("../tag");
24
+
25
+ // Store original method
26
+ const originalGetBaseCommitSha = EntityTag.getBaseCommitSha;
27
+
28
+ // Mock EntityTag.getBaseCommitSha
29
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
30
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
31
+
32
+ // Now import EntityAffected after mocking
33
+ const { EntityAffected } = await import("./affected");
34
+
35
+ // Act
36
+ await EntityAffected.getAffectedPackages("custom-sha").catch(() => undefined);
37
+
38
+ // Assert
39
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith("custom-sha");
40
+
41
+ // Restore original method
42
+ EntityTag.getBaseCommitSha = originalGetBaseCommitSha;
43
+ });
44
+
45
+ it("should call EntityTag.getBaseCommitSha with undefined when no baseSha provided", async () => {
46
+ // Import and mock EntityTag first
47
+ const { EntityTag } = await import("../tag");
48
+
49
+ // Store original method
50
+ const originalGetBaseCommitSha = EntityTag.getBaseCommitSha;
51
+
52
+ // Mock EntityTag.getBaseCommitSha
53
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
54
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
55
+
56
+ // Now import EntityAffected after mocking
57
+ const { EntityAffected } = await import("./affected");
58
+
59
+ // Act
60
+ await EntityAffected.getAffectedPackages().catch(() => undefined);
61
+
62
+ // Assert
63
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith(undefined);
64
+
65
+ // Restore original method
66
+ EntityTag.getBaseCommitSha = originalGetBaseCommitSha;
67
+ });
68
+
69
+ it("should handle EntityTag.getBaseCommitSha throwing an error", async () => {
70
+ // Import and mock EntityTag first
71
+ const { EntityTag } = await import("../tag");
72
+
73
+ // Store original method
74
+ const originalGetBaseCommitSha = EntityTag.getBaseCommitSha;
75
+
76
+ // Mock EntityTag.getBaseCommitSha to throw error
77
+ const mockGetBaseTagSha = mock(() => Promise.reject(new Error("Failed to get base tag SHA")));
78
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
79
+
80
+ // Now import EntityAffected after mocking
81
+ const { EntityAffected } = await import("./affected");
82
+
83
+ // Act & Assert
84
+ expect(EntityAffected.getAffectedPackages()).rejects.toThrow("Failed to get base tag SHA");
85
+
86
+ // Restore original method
87
+ EntityTag.getBaseCommitSha = originalGetBaseCommitSha;
88
+ });
89
+ });
90
+
91
+ describe("function structure and behavior", () => {
92
+ it("should have getAffectedPackages function", async () => {
93
+ // Import fresh EntityAffected module
94
+ const { EntityAffected } = await import("./affected");
95
+
96
+ expect(EntityAffected.getAffectedPackages).toBeDefined();
97
+ expect(typeof EntityAffected.getAffectedPackages).toBe("function");
98
+ });
99
+
100
+ it("should return a promise", async () => {
101
+ // Import and mock EntityTag first
102
+ const { EntityTag } = await import("../tag");
103
+
104
+ // Store original method
105
+ const originalGetBaseCommitSha = EntityTag.getBaseCommitSha;
106
+
107
+ // Mock the EntityTag to prevent actual execution
108
+ const mockGetBaseTagSha = mock(() => Promise.resolve("test-sha"));
109
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
110
+
111
+ // Now import EntityAffected after mocking
112
+ const { EntityAffected } = await import("./affected");
113
+
114
+ const result = EntityAffected.getAffectedPackages();
115
+ expect(result).toBeInstanceOf(Promise);
116
+
117
+ // Restore original method
118
+ EntityTag.getBaseCommitSha = originalGetBaseCommitSha;
119
+ });
120
+
121
+ it("should accept optional baseSha parameter", async () => {
122
+ // Import fresh EntityAffected module
123
+ const { EntityAffected } = await import("./affected");
124
+
125
+ // This test verifies the function signature
126
+ // The function has 2 parameters: baseSha (optional) and to (with default value)
127
+ // But function.length only counts parameters before the first default value, so it's 1
128
+ expect(EntityAffected.getAffectedPackages.length).toBe(1);
129
+ });
130
+
131
+ it("should accept optional to parameter with default value", async () => {
132
+ // Import fresh EntityAffected module
133
+ const { EntityAffected } = await import("./affected");
134
+
135
+ // This test verifies the function signature
136
+ // The function has 2 parameters: baseSha (optional) and to (with default value)
137
+ // But function.length only counts parameters before the first default value, so it's 1
138
+ expect(EntityAffected.getAffectedPackages.length).toBe(1);
139
+ });
140
+ });
141
+
142
+ describe("parameter handling", () => {
143
+ it("should handle string baseSha parameter", async () => {
144
+ // Import EntityAffected first
145
+ const { EntityAffected } = await import("./affected");
146
+
147
+ // Now import EntityTag and mock its method
148
+ const { EntityTag } = await import("../tag");
149
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
150
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
151
+
152
+ // Act
153
+ await EntityAffected.getAffectedPackages("test-sha").catch(() => undefined);
154
+
155
+ // Assert
156
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith("test-sha");
157
+ });
158
+
159
+ it("should handle undefined baseSha parameter", async () => {
160
+ // Import EntityAffected first
161
+ const { EntityAffected } = await import("./affected");
162
+
163
+ // Now import EntityTag and mock its method
164
+ const { EntityTag } = await import("../tag");
165
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
166
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
167
+
168
+ // Act
169
+ await EntityAffected.getAffectedPackages().catch(() => undefined);
170
+
171
+ // Assert
172
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith(undefined);
173
+ });
174
+
175
+ it("should handle custom to parameter", async () => {
176
+ // Import EntityAffected first
177
+ const { EntityAffected } = await import("./affected");
178
+
179
+ // Now import EntityTag and mock its method
180
+ const { EntityTag } = await import("../tag");
181
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
182
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
183
+
184
+ // Act
185
+ await EntityAffected.getAffectedPackages("test-sha", "custom-branch").catch(() => undefined);
186
+
187
+ // Assert
188
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith("test-sha");
189
+ });
190
+
191
+ it("should use HEAD as default to parameter", async () => {
192
+ // Import EntityAffected first
193
+ const { EntityAffected } = await import("./affected");
194
+
195
+ // Now import EntityTag and mock its method
196
+ const { EntityTag } = await import("../tag");
197
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
198
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
199
+
200
+ // Act
201
+ await EntityAffected.getAffectedPackages("test-sha").catch(() => undefined);
202
+
203
+ // Assert
204
+ expect(mockGetBaseTagSha).toHaveBeenCalledWith("test-sha");
205
+ });
206
+ });
207
+
208
+ describe("successful execution", () => {
209
+ it("should return affected packages from turbo output", async () => {
210
+ // Import and mock EntityTag first
211
+ const { EntityTag } = await import("../tag");
212
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
213
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
214
+
215
+ // Import and mock entitiesShell
216
+ const { entitiesShell } = await import("../entities.shell");
217
+ const mockTurboRunBuild = mock(
218
+ () =>
219
+ ({
220
+ text: () =>
221
+ Promise.resolve(
222
+ JSON.stringify({
223
+ tasks: [
224
+ { package: "package1" },
225
+ { package: "package2" },
226
+ { package: "//" }, // root package should be filtered out
227
+ ],
228
+ }),
229
+ ),
230
+ }) as unknown as $.ShellPromise,
231
+ );
232
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
233
+ args: string[],
234
+ ) => $.ShellPromise;
235
+
236
+ // Now import EntityAffected after mocking
237
+ const { EntityAffected } = await import("./affected");
238
+
239
+ // Act
240
+ const result = await EntityAffected.getAffectedPackages("test-sha");
241
+
242
+ // Assert
243
+ expect(result).toEqual(["package1", "package2"]);
244
+ expect(mockTurboRunBuild).toHaveBeenCalledWith(["--filter=...[resolved-sha...HEAD]"]);
245
+ });
246
+
247
+ it("should handle empty tasks array", async () => {
248
+ // Import and mock EntityTag first
249
+ const { EntityTag } = await import("../tag");
250
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
251
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
252
+
253
+ // Import and mock entitiesShell
254
+ const { entitiesShell } = await import("../entities.shell");
255
+ const mockTurboRunBuild = mock(
256
+ () =>
257
+ ({
258
+ text: () =>
259
+ Promise.resolve(
260
+ JSON.stringify({
261
+ tasks: [],
262
+ }),
263
+ ),
264
+ }) as unknown as $.ShellPromise,
265
+ );
266
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
267
+ args: string[],
268
+ ) => $.ShellPromise;
269
+
270
+ // Now import EntityAffected after mocking
271
+ const { EntityAffected } = await import("./affected");
272
+
273
+ // Act
274
+ const result = await EntityAffected.getAffectedPackages("test-sha");
275
+
276
+ // Assert
277
+ expect(result).toEqual([]);
278
+ });
279
+
280
+ it("should handle missing tasks property", async () => {
281
+ // Import and mock EntityTag first
282
+ const { EntityTag } = await import("../tag");
283
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
284
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
285
+
286
+ // Import and mock entitiesShell
287
+ const { entitiesShell } = await import("../entities.shell");
288
+ const mockTurboRunBuild = mock(
289
+ () =>
290
+ ({
291
+ text: () =>
292
+ Promise.resolve(
293
+ JSON.stringify({
294
+ packages: ["package1", "package2"],
295
+ }),
296
+ ),
297
+ }) as unknown as $.ShellPromise,
298
+ );
299
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
300
+ args: string[],
301
+ ) => $.ShellPromise;
302
+
303
+ // Now import EntityAffected after mocking
304
+ const { EntityAffected } = await import("./affected");
305
+
306
+ // Act
307
+ const result = await EntityAffected.getAffectedPackages("test-sha");
308
+
309
+ // Assert
310
+ expect(result).toEqual([]);
311
+ });
312
+
313
+ it("should filter out root package and undefined values", async () => {
314
+ // Import and mock EntityTag first
315
+ const { EntityTag } = await import("../tag");
316
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
317
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
318
+
319
+ // Import and mock entitiesShell
320
+ const { entitiesShell } = await import("../entities.shell");
321
+ const mockTurboRunBuild = mock(() => ({
322
+ text: () =>
323
+ Promise.resolve(
324
+ JSON.stringify({
325
+ tasks: [
326
+ { package: "package1" },
327
+ { package: "//" }, // root package should be filtered out
328
+ { package: "" }, // empty string should be filtered out
329
+ { package: undefined }, // undefined should be filtered out
330
+ { package: "package2" },
331
+ ],
332
+ }),
333
+ ),
334
+ }));
335
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
336
+ args: string[],
337
+ ) => $.ShellPromise;
338
+
339
+ // Now import EntityAffected after mocking
340
+ const { EntityAffected } = await import("./affected");
341
+
342
+ // Act
343
+ const result = await EntityAffected.getAffectedPackages("test-sha");
344
+
345
+ // Assert
346
+ expect(result).toEqual(["package1", "package2"]);
347
+ });
348
+ });
349
+
350
+ describe("error handling", () => {
351
+ it("should propagate EntityTag.getBaseCommitSha errors", async () => {
352
+ // Import EntityAffected first
353
+ const { EntityAffected } = await import("./affected");
354
+
355
+ // Now import EntityTag and mock its method
356
+ const { EntityTag } = await import("../tag");
357
+ const mockGetBaseTagSha = mock(() => Promise.reject(new Error("Custom error message")));
358
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
359
+
360
+ // Act & Assert
361
+ expect(EntityAffected.getAffectedPackages()).rejects.toThrow("Custom error message");
362
+ });
363
+
364
+ it("should handle different error types from EntityTag.getBaseCommitSha", async () => {
365
+ // Import EntityAffected first
366
+ const { EntityAffected } = await import("./affected");
367
+
368
+ // Now import EntityTag and mock its method
369
+ const { EntityTag } = await import("../tag");
370
+ const mockGetBaseTagSha = mock(() => Promise.reject(new TypeError("Type error")));
371
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
372
+
373
+ // Act & Assert
374
+ expect(EntityAffected.getAffectedPackages()).rejects.toThrow("Type error");
375
+ });
376
+
377
+ it("should handle turbo command errors and return empty array", async () => {
378
+ // Import and mock EntityTag first
379
+ const { EntityTag } = await import("../tag");
380
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
381
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
382
+
383
+ // Import and mock entitiesShell
384
+ const { entitiesShell } = await import("../entities.shell");
385
+ const mockTurboRunBuild = mock(() => ({
386
+ text: () => Promise.reject(new Error("Turbo command failed")),
387
+ }));
388
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
389
+ args: string[],
390
+ ) => $.ShellPromise;
391
+
392
+ // Now import EntityAffected after mocking
393
+ const { EntityAffected } = await import("./affected");
394
+
395
+ // Act
396
+ const result = await EntityAffected.getAffectedPackages("test-sha");
397
+
398
+ // Assert
399
+ expect(result).toEqual([]);
400
+ });
401
+
402
+ it("should handle JSON parsing errors and return empty array", async () => {
403
+ // Import and mock EntityTag first
404
+ const { EntityTag } = await import("../tag");
405
+ const mockGetBaseTagSha = mock(() => Promise.resolve("resolved-sha"));
406
+ EntityTag.getBaseCommitSha = mockGetBaseTagSha;
407
+
408
+ // Import and mock entitiesShell
409
+ const { entitiesShell } = await import("../entities.shell");
410
+ const mockTurboRunBuild = mock(() => ({
411
+ text: () => Promise.resolve("invalid json"),
412
+ }));
413
+ entitiesShell.turboRunBuild = mockTurboRunBuild as unknown as (
414
+ args: string[],
415
+ ) => $.ShellPromise;
416
+
417
+ // Now import EntityAffected after mocking
418
+ const { EntityAffected } = await import("./affected");
419
+
420
+ // Act
421
+ const result = await EntityAffected.getAffectedPackages("test-sha");
422
+
423
+ // Assert
424
+ expect(result).toEqual([]);
425
+ });
426
+ });
427
+ });
@@ -0,0 +1,22 @@
1
+ import { entitiesShell } from "../entities.shell";
2
+
3
+ export const EntityAffected = {
4
+ async getAffectedPackages(baseSha?: string, to = "HEAD"): Promise<string[]> {
5
+ const { EntityTag } = await import("../tag");
6
+ const fromSha = await EntityTag.getBaseCommitSha(baseSha);
7
+
8
+ try {
9
+ const result = await entitiesShell.turboRunBuild([`--filter=...[${fromSha}...${to}]`]).text();
10
+ const turboOutput = JSON.parse(result);
11
+
12
+ const packages = turboOutput.tasks?.map((task: { package: string }) => task.package) || [];
13
+
14
+ // Filter out root package and undefined values
15
+ return packages.filter((pkg: string) => pkg && pkg !== "//");
16
+ } catch (error) {
17
+ console.warn(`Failed to get affected packages via turbo: ${error}`);
18
+ // Fallback: return empty array
19
+ return [];
20
+ }
21
+ },
22
+ };
@@ -0,0 +1 @@
1
+ export * from "./affected";