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,251 @@
1
+ import { EntityAffected } from "../affected";
2
+ import { EntityPackage } from "../package";
3
+ import type {
4
+ ComposeData,
5
+ ComposeValidationResult,
6
+ EntityAffectedService,
7
+ NetworkDefinition,
8
+ PortMapping,
9
+ ServiceDefinition,
10
+ ServiceDependencyGraph,
11
+ ServiceHealth,
12
+ ServiceInfo,
13
+ VolumeDefinition,
14
+ } from "./compose.types";
15
+
16
+ type TemporaryBunYamlTypeSinceThisIsNotTypedYet = {
17
+ YAML: {
18
+ parse: (input: string) => Record<string, unknown>;
19
+ };
20
+ };
21
+
22
+ const allPackages = await EntityPackage.getAllPackages();
23
+
24
+ export class EntityCompose {
25
+ private readonly composePath: string;
26
+ private compose: ComposeData | undefined;
27
+
28
+ constructor(composePath: string) {
29
+ this.composePath = composePath;
30
+ }
31
+
32
+ async validate(): Promise<ComposeValidationResult> {
33
+ const compose = await this.getCompose();
34
+ const errors = [];
35
+
36
+ if (!compose.services || Object.keys(compose.services).length === 0) {
37
+ errors.push({
38
+ code: "NO_SERVICES",
39
+ message: "At least one service must be defined",
40
+ });
41
+ }
42
+
43
+ // Check each service has required configuration
44
+ for (const [name, service] of Object.entries(compose.services)) {
45
+ if (!service.image && !service.build) {
46
+ errors.push({
47
+ code: "NO_IMAGE_OR_BUILD",
48
+ message: "Service must have either image or build configuration",
49
+ service: name,
50
+ });
51
+ }
52
+ }
53
+
54
+ return {
55
+ isValid: errors.length === 0,
56
+ errors,
57
+ };
58
+ }
59
+
60
+ async getCompose(): Promise<ComposeData> {
61
+ this.compose =
62
+ this.compose || EntityCompose.parseDockerCompose(await Bun.file(this.composePath).text());
63
+ return this.compose;
64
+ }
65
+
66
+ async getServices(): Promise<ServiceInfo[]> {
67
+ const compose = await this.getCompose();
68
+ const services: ServiceInfo[] = [];
69
+
70
+ for (const [name, service] of Object.entries(compose.services)) {
71
+ const ports = EntityCompose.parsePortMappings(service.ports || []);
72
+ const environment = EntityCompose.parseEnvironment(service.environment);
73
+
74
+ services.push({
75
+ name,
76
+ image: service.image,
77
+ ports,
78
+ environment,
79
+ volumes: service.volumes || [],
80
+ dependencies: service.depends_on || [],
81
+ health: {
82
+ name,
83
+ status: "unknown",
84
+ checks: 0,
85
+ failures: 0,
86
+ },
87
+ });
88
+ }
89
+
90
+ return services;
91
+ }
92
+
93
+ async getServiceHealth(): Promise<ServiceHealth[]> {
94
+ const compose = await this.getCompose();
95
+ return Object.keys(compose.services).map((name) => ({
96
+ name,
97
+ status: "healthy" as const,
98
+ checks: 10,
99
+ failures: 0,
100
+ lastCheck: new Date(),
101
+ }));
102
+ }
103
+
104
+ async getServiceDependencies(): Promise<ServiceDependencyGraph> {
105
+ const compose = await this.getCompose();
106
+ const services = Object.keys(compose.services);
107
+ const dependencies: Record<string, string[]> = {};
108
+
109
+ for (const [name, service] of Object.entries(compose.services)) {
110
+ dependencies[name] = service.depends_on || [];
111
+ }
112
+
113
+ return {
114
+ services,
115
+ dependencies,
116
+ };
117
+ }
118
+
119
+ async getServiceUrls(): Promise<Record<string, string>> {
120
+ const mappings = await this.getPortMappings();
121
+ return Object.fromEntries(mappings.map((m) => [m.host, `http://localhost:${m.host}`]));
122
+ }
123
+
124
+ async getPortMappings(): Promise<PortMapping[]> {
125
+ const compose = await this.getCompose();
126
+ const mappings: PortMapping[] = [];
127
+
128
+ for (const service of Object.values(compose.services)) {
129
+ if (service.ports) {
130
+ mappings.push(...EntityCompose.parsePortMappings(service.ports));
131
+ }
132
+ }
133
+
134
+ return mappings;
135
+ }
136
+
137
+ async getAffectedServices(baseSha?: string, to?: string): Promise<EntityAffectedService[]> {
138
+ try {
139
+ const keys = await EntityAffected.getAffectedPackages(baseSha, to);
140
+ const serviceMap = new Map<string, EntityAffectedService>();
141
+ const affectedServices = new Set<string>();
142
+
143
+ const services = await this.getServices();
144
+
145
+ // Find services associated with affected packages
146
+ for (const service of services) {
147
+ const associatedPackage = allPackages.find(
148
+ (p) => p.replace(/^@repo\//, "") === service.name,
149
+ );
150
+
151
+ if (keys.some((k: string) => k === associatedPackage)) {
152
+ affectedServices.add(service.name);
153
+ serviceMap.set(service.name, {
154
+ name: service.name,
155
+ port: service.ports[0]?.host,
156
+ });
157
+
158
+ // Add dependencies
159
+ if (service.dependencies) {
160
+ for (const dep of service.dependencies) {
161
+ affectedServices.add(dep);
162
+ }
163
+ }
164
+ }
165
+ }
166
+
167
+ // Add all affected services to the map
168
+ for (const serviceName of affectedServices) {
169
+ if (!serviceMap.has(serviceName)) {
170
+ const devService = services.find((s) => s.name === serviceName);
171
+ if (devService) {
172
+ serviceMap.set(serviceName, {
173
+ name: devService.name,
174
+ port: devService.ports[0]?.host,
175
+ });
176
+ }
177
+ }
178
+ }
179
+
180
+ return Array.from(serviceMap.values());
181
+ } catch (error) {
182
+ throw new Error(`Failed to get affected services: ${error}`);
183
+ }
184
+ }
185
+
186
+ static parseDockerCompose(input: string): ComposeData {
187
+ const parsed = (Bun as unknown as TemporaryBunYamlTypeSinceThisIsNotTypedYet).YAML.parse(input);
188
+
189
+ if (parsed.services) {
190
+ for (const [, service] of Object.entries(parsed.services)) {
191
+ if (service.ports && Array.isArray(service.ports)) {
192
+ (service as Record<string, unknown>).ports = service.ports.map((port: unknown) =>
193
+ typeof port === "string" ? port : String(port),
194
+ );
195
+ }
196
+
197
+ if (service.environment && Array.isArray(service.environment)) {
198
+ const envObj: Record<string, string> = {};
199
+ for (const env of service.environment) {
200
+ if (typeof env === "string" && env.includes("=")) {
201
+ const [key, ...valueParts] = env.split("=");
202
+ envObj[key] = valueParts.join("=");
203
+ }
204
+ }
205
+ (service as Record<string, unknown>).environment = envObj;
206
+ }
207
+ }
208
+ }
209
+
210
+ return {
211
+ version: (parsed.version as string) || "3.8",
212
+ services: (parsed.services as Record<string, ServiceDefinition>) || {},
213
+ networks: (parsed.networks as Record<string, NetworkDefinition>) || {},
214
+ volumes: (parsed.volumes as Record<string, VolumeDefinition>) || {},
215
+ validation: {
216
+ isValid: true,
217
+ errors: [],
218
+ },
219
+ };
220
+ }
221
+
222
+ public static parsePortMappings(ports: string[]): PortMapping[] {
223
+ return ports.map((port) => {
224
+ const [host, container] = port.split(":").map(Number);
225
+ return {
226
+ host: host ?? container,
227
+ container: container ?? host,
228
+ protocol: "tcp" as const,
229
+ };
230
+ });
231
+ }
232
+
233
+ public static parseEnvironment(env?: Record<string, string> | string[]): Record<string, string> {
234
+ if (!env) return {};
235
+
236
+ if (Array.isArray(env)) {
237
+ const result: Record<string, string> = {};
238
+ for (const item of env) {
239
+ if (typeof item === "string" && item.includes("=")) {
240
+ const [key, ...valueParts] = item.split("=");
241
+ if (key && valueParts.length > 0) {
242
+ result[key] = valueParts.join("=");
243
+ }
244
+ }
245
+ }
246
+ return result;
247
+ }
248
+
249
+ return env;
250
+ }
251
+ }
@@ -0,0 +1,88 @@
1
+ export interface ComposeData {
2
+ readonly version: string;
3
+ readonly services: Record<string, ServiceDefinition>;
4
+ readonly networks: Record<string, NetworkDefinition>;
5
+ readonly volumes: Record<string, VolumeDefinition>;
6
+ readonly validation: ComposeValidationResult;
7
+ }
8
+
9
+ export interface ServiceDefinition {
10
+ readonly image?: string;
11
+ readonly build?: string | BuildDefinition;
12
+ readonly ports?: string[];
13
+ readonly environment?: Record<string, string> | string[];
14
+ readonly volumes?: string[];
15
+ readonly depends_on?: string[];
16
+ readonly networks?: string[];
17
+ readonly restart?: string;
18
+ readonly command?: string | string[];
19
+ readonly entrypoint?: string | string[];
20
+ }
21
+
22
+ export interface BuildDefinition {
23
+ readonly context: string;
24
+ readonly dockerfile?: string;
25
+ readonly args?: Record<string, string>;
26
+ }
27
+
28
+ export interface NetworkDefinition {
29
+ readonly driver?: string;
30
+ readonly external?: boolean;
31
+ }
32
+
33
+ export interface VolumeDefinition {
34
+ readonly driver?: string;
35
+ readonly external?: boolean;
36
+ }
37
+
38
+ export interface ServiceInfo {
39
+ readonly name: string;
40
+ readonly image?: string;
41
+ readonly ports: PortMapping[];
42
+ readonly environment: Record<string, string>;
43
+ readonly volumes: string[];
44
+ readonly dependencies: string[];
45
+ readonly health: ServiceHealth;
46
+ }
47
+
48
+ export interface PortMapping {
49
+ readonly host: number;
50
+ readonly container: number;
51
+ readonly protocol: "tcp" | "udp";
52
+ }
53
+
54
+ export interface ServiceHealth {
55
+ readonly name: string;
56
+ readonly status: "healthy" | "unhealthy" | "starting" | "unknown";
57
+ readonly checks: number;
58
+ readonly failures: number;
59
+ readonly lastCheck?: Date;
60
+ }
61
+
62
+ export interface ServiceDependencyGraph {
63
+ readonly services: string[];
64
+ readonly dependencies: Record<string, string[]>;
65
+ }
66
+
67
+ export interface PortConflict {
68
+ readonly port: number;
69
+ readonly services: string[];
70
+ readonly severity: "error" | "warning";
71
+ }
72
+
73
+ export interface EntityAffectedService {
74
+ readonly name: string;
75
+ readonly port?: number;
76
+ }
77
+
78
+ export interface ComposeValidationResult {
79
+ readonly isValid: boolean;
80
+ readonly errors: ComposeValidationError[];
81
+ }
82
+
83
+ export interface ComposeValidationError {
84
+ readonly code: string;
85
+ readonly message: string;
86
+ readonly service?: string;
87
+ readonly field?: string;
88
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./compose";
2
+ export * from "./compose.types";
@@ -0,0 +1,35 @@
1
+ import { expect, mock, test } from "bun:test";
2
+ import type { $ } from "bun";
3
+
4
+ test("entitiesShell should be defined", async () => {
5
+ const { entitiesShell } = await import("./entities.shell");
6
+ expect(entitiesShell).toBeDefined();
7
+ });
8
+
9
+ test("entitiesShell methods can be mocked individually", async () => {
10
+ const { entitiesShell } = await import("./entities.shell");
11
+
12
+ // Mock individual methods directly
13
+ entitiesShell.turboRunBuild = mock(
14
+ () =>
15
+ ({
16
+ exitCode: 0,
17
+ json: () => Promise.resolve({ packages: ["test-package"] }),
18
+ }) as unknown as $.ShellPromise,
19
+ );
20
+
21
+ entitiesShell.runBiomeCheck = mock(
22
+ () =>
23
+ ({
24
+ exitCode: 0,
25
+ text: () => "biome check completed",
26
+ }) as unknown as $.ShellPromise,
27
+ );
28
+
29
+ // Test that mocks work
30
+ const result = await entitiesShell.turboRunBuild(["--filter=test"]).json();
31
+ expect(result.packages).toEqual(["test-package"]);
32
+
33
+ const biomeResult = await entitiesShell.runBiomeCheck("test-file.ts");
34
+ expect(biomeResult.text()).toBe("biome check completed");
35
+ });
@@ -0,0 +1,81 @@
1
+ import { $ } from "bun";
2
+
3
+ type EntitiesShell = {
4
+ touch: (filePath: string) => ReturnType<typeof $>;
5
+
6
+ gitStatus: () => ReturnType<typeof $>;
7
+
8
+ gitRevParse: (ref: string) => ReturnType<typeof $>;
9
+ gitFirstCommit: () => ReturnType<typeof $>;
10
+
11
+ gitLogHashes: (args: string[]) => ReturnType<typeof $>;
12
+
13
+ gitShow: (hash: string) => ReturnType<typeof $>;
14
+ gitShowNameOnly: (hash: string) => ReturnType<typeof $>;
15
+ gitShowPackageJsonAtTag: (tag: string, packagePath: string) => ReturnType<typeof $>;
16
+
17
+ gitDiff: (file: string) => ReturnType<typeof $>;
18
+ gitBranchShowCurrent: () => ReturnType<typeof $>;
19
+
20
+ gitTag: (tagName: string, message: string, options: { force?: string }) => ReturnType<typeof $>;
21
+ gitTagList: (prefix: string) => ReturnType<typeof $>;
22
+ gitTagLatest: (prefix: string) => ReturnType<typeof $>;
23
+ gitTagInfo: (tagName: string) => ReturnType<typeof $>;
24
+ gitTagExists: (tagName: string) => ReturnType<typeof $>;
25
+ gitPushTag: (tagName: string) => ReturnType<typeof $>;
26
+ gitDeleteTag: (tagName: string) => ReturnType<typeof $>;
27
+
28
+ gitMergeBaseIsAncestor: (ancestor: string, descendant: string) => ReturnType<typeof $>;
29
+
30
+ gitCheckout: (tagName: string) => ReturnType<typeof $>;
31
+
32
+ turboRunBuild: (args: string[]) => ReturnType<typeof $>;
33
+
34
+ runBiomeCheck: (filePath: string) => ReturnType<typeof $>;
35
+ };
36
+
37
+ export const entitiesShell: EntitiesShell = {
38
+ touch: (filePath: string) => $`touch ${filePath}`.quiet().nothrow(),
39
+
40
+ gitStatus: () => $`git status --porcelain`.quiet().nothrow(),
41
+
42
+ gitRevParse: (ref: string) => $`git rev-parse ${ref}`.quiet().nothrow(),
43
+ gitFirstCommit: () => $`git rev-list --max-parents=0 HEAD`.nothrow().quiet(),
44
+
45
+ gitLogHashes: (args: string[]) =>
46
+ $`git log --pretty=format:"%H" ${args.join(" ")}`.quiet().nothrow(),
47
+
48
+ gitShow: (hash: string) =>
49
+ $`git show --format="%H%n%an%n%ad%n%s%n%B" --no-patch ${hash}`.quiet().nothrow(),
50
+ gitShowNameOnly: (hash: string) => $`git show --name-only --format="" ${hash}`.quiet().nothrow(),
51
+ gitShowPackageJsonAtTag: (tag: string, packagePath: string) =>
52
+ $`git show ${tag}:${packagePath}`.quiet().nothrow(),
53
+
54
+ gitDiff: (file: string) => $`git diff --cached -- ${file}`.quiet().nothrow(),
55
+ gitBranchShowCurrent: () => $`git branch --show-current`.quiet().nothrow(),
56
+
57
+ gitTag: (tagName: string, message: string, options: { force?: string }) =>
58
+ $`git tag ${options.force} -a ${tagName} -m "${message}"`.quiet().nothrow(),
59
+ gitTagList: (prefix: string) =>
60
+ $`git tag --list "${prefix}*" --sort=-version:refname`.quiet().nothrow(),
61
+ gitTagLatest: (prefix: string) =>
62
+ $`git tag --sort=-version:refname --list "${prefix}*" | head -1`.nothrow().quiet(),
63
+ gitTagInfo: (tagName: string) =>
64
+ $`git tag -l --format='%(creatordate:iso8601)%0a%(contents:subject)' ${tagName}`
65
+ .quiet()
66
+ .nothrow(),
67
+ gitTagExists: (tagName: string) => $`git tag --list ${tagName}`.quiet().nothrow(),
68
+ gitPushTag: (tagName: string) => $`git push origin ${tagName}`.quiet().nothrow(),
69
+ gitDeleteTag: (tagName: string) => $`git tag -d ${tagName}`.quiet().nothrow(),
70
+
71
+ gitMergeBaseIsAncestor: (ancestor: string, descendant: string) =>
72
+ $`git merge-base --is-ancestor ${ancestor} ${descendant}`.quiet().nothrow(),
73
+
74
+ gitCheckout: (tagName: string) => $`git checkout ${tagName}`.quiet().nothrow(),
75
+
76
+ turboRunBuild: (args: string[]) =>
77
+ $`bunx turbo run build ${args.join(" ")} --dry-run=json`.nothrow(),
78
+
79
+ runBiomeCheck: (filePath: string) =>
80
+ $`bun biome check --write --no-errors-on-unmatched ${filePath}`.quiet().nothrow(),
81
+ };
@@ -0,0 +1,11 @@
1
+ export * from "./affected";
2
+ export * from "./branch";
3
+ export * from "./commit";
4
+ export * from "./compose";
5
+ export * from "./intershell-config/intershell-config.default";
6
+ export * from "./package";
7
+ export * from "./package-changelog";
8
+ export * from "./package-commits";
9
+ export * from "./package-tags";
10
+ export * from "./package-version";
11
+ export * from "./tag";
@@ -0,0 +1,229 @@
1
+ import type { IConfig } from "./intershell-config.types";
2
+
3
+ export * from "./intershell-config.types";
4
+
5
+ export const defaultConfig = {
6
+ commit: {
7
+ conventional: {
8
+ type: {
9
+ list: [
10
+ {
11
+ type: "feat",
12
+ label: "Features",
13
+ description: "A new feature",
14
+ category: "features" as const,
15
+ emoji: "🚀",
16
+ badgeColor: "00D4AA",
17
+ breakingAllowed: true,
18
+ },
19
+ {
20
+ type: "fix",
21
+ label: "Bug Fixes",
22
+ description: "A bug fix",
23
+ category: "bugfixes" as const,
24
+ emoji: "🐛",
25
+ badgeColor: "EF4444",
26
+ breakingAllowed: true,
27
+ },
28
+ {
29
+ type: "docs",
30
+ label: "Documentation",
31
+ description: "Documentation only changes",
32
+ category: "documentation" as const,
33
+ emoji: "📚",
34
+ badgeColor: "646CFF",
35
+ breakingAllowed: false,
36
+ },
37
+ {
38
+ type: "style",
39
+ label: "Style",
40
+ description: "Changes that do not affect the meaning of the code",
41
+ category: "refactoring" as const,
42
+ emoji: "🎨",
43
+ badgeColor: "8B5CF6",
44
+ breakingAllowed: false,
45
+ },
46
+ {
47
+ type: "refactor",
48
+ label: "Refactoring",
49
+ description: "A code change that neither fixes a bug nor adds a feature",
50
+ category: "refactoring" as const,
51
+ emoji: "🔧",
52
+ badgeColor: "007ACC",
53
+ breakingAllowed: true,
54
+ },
55
+ {
56
+ type: "perf",
57
+ label: "Performance",
58
+ description: "A code change that improves performance",
59
+ category: "refactoring" as const,
60
+ emoji: "⚡",
61
+ badgeColor: "60a5fa",
62
+ breakingAllowed: true,
63
+ },
64
+ {
65
+ type: "test",
66
+ label: "Testing",
67
+ description: "Adding missing tests or correcting existing tests",
68
+ category: "infrastructure" as const,
69
+ emoji: "🧪",
70
+ badgeColor: "10B981",
71
+ breakingAllowed: false,
72
+ },
73
+ {
74
+ type: "ci",
75
+ label: "CI/CD",
76
+ description: "Changes to CI configuration files and scripts",
77
+ category: "infrastructure" as const,
78
+ emoji: "👷",
79
+ badgeColor: "2496ED",
80
+ breakingAllowed: false,
81
+ },
82
+ {
83
+ type: "chore",
84
+ label: "Chores",
85
+ description: "Other changes that don't modify src or test files",
86
+ category: "other" as const,
87
+ emoji: "🔨",
88
+ badgeColor: "495057",
89
+ breakingAllowed: false,
90
+ },
91
+ {
92
+ type: "revert",
93
+ label: "Revert",
94
+ description: "Reverts a previous commit",
95
+ category: "other" as const,
96
+ emoji: "⏪",
97
+ badgeColor: "DC2626",
98
+ breakingAllowed: true,
99
+ },
100
+ {
101
+ type: "merge",
102
+ label: "Merge",
103
+ description: "Merge commits (pull requests, branches)",
104
+ category: "other" as const,
105
+ emoji: "🔀",
106
+ badgeColor: "6B7280",
107
+ breakingAllowed: false,
108
+ },
109
+ {
110
+ type: "deps",
111
+ label: "Dependencies",
112
+ description: "Dependency updates and changes",
113
+ category: "dependencies" as const,
114
+ emoji: "📦",
115
+ badgeColor: "059669",
116
+ breakingAllowed: true,
117
+ },
118
+ {
119
+ type: "other",
120
+ label: "Other",
121
+ description: "Other types of changes",
122
+ category: "other" as const,
123
+ emoji: "⚠️",
124
+ badgeColor: "6B7280",
125
+ breakingAllowed: false,
126
+ },
127
+ {
128
+ type: "release",
129
+ label: "Release",
130
+ description: "Release version changes",
131
+ category: "other" as const,
132
+ emoji: "🚀",
133
+ badgeColor: "059669",
134
+ breakingAllowed: false,
135
+ },
136
+ ] as const,
137
+ },
138
+ scopes: {
139
+ list: [],
140
+ },
141
+ description: {
142
+ minLength: 3,
143
+ maxLength: 72,
144
+ shouldNotEndWithPeriod: true,
145
+ shouldNotStartWithType: true,
146
+ },
147
+ bodyLines: {
148
+ minLength: 3,
149
+ maxLength: 120,
150
+ },
151
+ },
152
+ staged: [
153
+ {
154
+ filePattern: [
155
+ /\.vscode\/.*/,
156
+ /coverage\/.*/,
157
+ /dist\/.*/,
158
+ /node_modules\/.*/,
159
+ /\.env/,
160
+ /\.act/,
161
+ ],
162
+ description: "development files should not be manually committed",
163
+ },
164
+ {
165
+ filePattern: [/CHANGELOG.md/],
166
+ disabled: process.env.CI === "true",
167
+ description:
168
+ "CHANGELOG.md should be auto-generated by 'bun run version:prepare' and 'bun run version:apply'",
169
+ },
170
+ {
171
+ filePattern: [/package.json/],
172
+ contentPattern: [
173
+ /^[+-].*"version":\s*"[^"]+"/m, // Manual version changes
174
+ ],
175
+ ignore: { mode: "create" },
176
+ disabled: process.env.CI === "true",
177
+ description:
178
+ "package.json version should be auto-generated by 'bun run version:prepare' and 'bun run version:apply'",
179
+ },
180
+ ],
181
+ },
182
+ package: {
183
+ selectiveVersioning: {
184
+ enabled: true,
185
+ description: "Enforce selective versioning based on private field",
186
+ },
187
+ semanticVersioning: {
188
+ enabled: true,
189
+ description: "Ensure versions follow semantic versioning format",
190
+ },
191
+ description: {
192
+ enabled: true,
193
+ description: "Require descriptions for versioned packages",
194
+ },
195
+ },
196
+ branch: {
197
+ defaultBranch: "main",
198
+ name: {
199
+ minLength: 1,
200
+ maxLength: 100,
201
+ allowedCharacters: /^[a-zA-Z0-9\-_/.]+$/,
202
+ noConsecutiveSeparators: true,
203
+ noLeadingTrailingSeparators: true,
204
+ },
205
+ prefixes: [
206
+ "feature",
207
+ "fix",
208
+ "hotfix",
209
+ "release",
210
+ "docs",
211
+ "refactor",
212
+ "ci",
213
+ "chore",
214
+ "wip",
215
+ "renovate",
216
+ ],
217
+ },
218
+ tag: {
219
+ name: {
220
+ enabled: true,
221
+ description: "Validate tag name structure and content",
222
+ minLength: 1,
223
+ maxLength: 100,
224
+ allowedCharacters: /^[a-zA-Z0-9\-_.]+$/,
225
+ noSpaces: true,
226
+ noSpecialChars: false,
227
+ },
228
+ },
229
+ } as const satisfies IConfig;