@slopus/beer 0.1.1

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 (304) hide show
  1. package/README.md +24 -0
  2. package/bin/beer.js +2 -0
  3. package/dist/apps/bootstrap.d.ts +5 -0
  4. package/dist/apps/bootstrap.d.ts.map +1 -0
  5. package/dist/apps/bootstrap.js +170 -0
  6. package/dist/apps/bootstrap.js.map +1 -0
  7. package/dist/commands/bootstrapCommand.d.ts +6 -0
  8. package/dist/commands/bootstrapCommand.d.ts.map +1 -0
  9. package/dist/commands/bootstrapCommand.js +16 -0
  10. package/dist/commands/bootstrapCommand.js.map +1 -0
  11. package/dist/main.d.ts +2 -0
  12. package/dist/main.d.ts.map +1 -0
  13. package/dist/main.js +17 -0
  14. package/dist/main.js.map +1 -0
  15. package/dist/modules/ai/aiOutputExtract.d.ts +6 -0
  16. package/dist/modules/ai/aiOutputExtract.d.ts.map +1 -0
  17. package/dist/modules/ai/aiOutputExtract.js +16 -0
  18. package/dist/modules/ai/aiOutputExtract.js.map +1 -0
  19. package/dist/modules/ai/aiOutputExtract.spec.d.ts +2 -0
  20. package/dist/modules/ai/aiOutputExtract.spec.d.ts.map +1 -0
  21. package/dist/modules/ai/aiOutputExtract.spec.js +25 -0
  22. package/dist/modules/ai/aiOutputExtract.spec.js.map +1 -0
  23. package/dist/modules/ai/aiReadmeGenerate.d.ts +18 -0
  24. package/dist/modules/ai/aiReadmeGenerate.d.ts.map +1 -0
  25. package/dist/modules/ai/aiReadmeGenerate.js +23 -0
  26. package/dist/modules/ai/aiReadmeGenerate.js.map +1 -0
  27. package/dist/modules/ai/aiReadmeGenerate.spec.d.ts +2 -0
  28. package/dist/modules/ai/aiReadmeGenerate.spec.d.ts.map +1 -0
  29. package/dist/modules/ai/aiReadmeGenerate.spec.js +27 -0
  30. package/dist/modules/ai/aiReadmeGenerate.spec.js.map +1 -0
  31. package/dist/modules/ai/generate.d.ts +28 -0
  32. package/dist/modules/ai/generate.d.ts.map +1 -0
  33. package/dist/modules/ai/generate.js +132 -0
  34. package/dist/modules/ai/generate.js.map +1 -0
  35. package/dist/modules/ai/generate.spec.d.ts +2 -0
  36. package/dist/modules/ai/generate.spec.d.ts.map +1 -0
  37. package/dist/modules/ai/generate.spec.js +53 -0
  38. package/dist/modules/ai/generate.spec.js.map +1 -0
  39. package/dist/modules/ai/generateFile.d.ts +14 -0
  40. package/dist/modules/ai/generateFile.d.ts.map +1 -0
  41. package/dist/modules/ai/generateFile.js +56 -0
  42. package/dist/modules/ai/generateFile.js.map +1 -0
  43. package/dist/modules/ai/generateFile.spec.d.ts +2 -0
  44. package/dist/modules/ai/generateFile.spec.d.ts.map +1 -0
  45. package/dist/modules/ai/generateFile.spec.js +60 -0
  46. package/dist/modules/ai/generateFile.spec.js.map +1 -0
  47. package/dist/modules/ai/generateText.d.ts +9 -0
  48. package/dist/modules/ai/generateText.d.ts.map +1 -0
  49. package/dist/modules/ai/generateText.js +12 -0
  50. package/dist/modules/ai/generateText.js.map +1 -0
  51. package/dist/modules/ai/generateText.spec.d.ts +2 -0
  52. package/dist/modules/ai/generateText.spec.d.ts.map +1 -0
  53. package/dist/modules/ai/generateText.spec.js +28 -0
  54. package/dist/modules/ai/generateText.spec.js.map +1 -0
  55. package/dist/modules/ai/providerGenerate.d.ts +29 -0
  56. package/dist/modules/ai/providerGenerate.d.ts.map +1 -0
  57. package/dist/modules/ai/providerGenerate.js +144 -0
  58. package/dist/modules/ai/providerGenerate.js.map +1 -0
  59. package/dist/modules/ai/providerGenerate.spec.d.ts +2 -0
  60. package/dist/modules/ai/providerGenerate.spec.d.ts.map +1 -0
  61. package/dist/modules/ai/providerGenerate.spec.js +85 -0
  62. package/dist/modules/ai/providerGenerate.spec.js.map +1 -0
  63. package/dist/modules/ai/providerGenerate.unit.spec.d.ts +2 -0
  64. package/dist/modules/ai/providerGenerate.unit.spec.d.ts.map +1 -0
  65. package/dist/modules/ai/providerGenerate.unit.spec.js +49 -0
  66. package/dist/modules/ai/providerGenerate.unit.spec.js.map +1 -0
  67. package/dist/modules/beer/beerDevFolderResolve.d.ts +5 -0
  68. package/dist/modules/beer/beerDevFolderResolve.d.ts.map +1 -0
  69. package/dist/modules/beer/beerDevFolderResolve.js +9 -0
  70. package/dist/modules/beer/beerDevFolderResolve.js.map +1 -0
  71. package/dist/modules/beer/beerDevFolderResolve.spec.d.ts +2 -0
  72. package/dist/modules/beer/beerDevFolderResolve.spec.d.ts.map +1 -0
  73. package/dist/modules/beer/beerDevFolderResolve.spec.js +10 -0
  74. package/dist/modules/beer/beerDevFolderResolve.spec.js.map +1 -0
  75. package/dist/modules/beer/beerOriginalPathResolve.d.ts +5 -0
  76. package/dist/modules/beer/beerOriginalPathResolve.d.ts.map +1 -0
  77. package/dist/modules/beer/beerOriginalPathResolve.js +8 -0
  78. package/dist/modules/beer/beerOriginalPathResolve.js.map +1 -0
  79. package/dist/modules/beer/beerOriginalPathResolve.spec.d.ts +2 -0
  80. package/dist/modules/beer/beerOriginalPathResolve.spec.d.ts.map +1 -0
  81. package/dist/modules/beer/beerOriginalPathResolve.spec.js +10 -0
  82. package/dist/modules/beer/beerOriginalPathResolve.spec.js.map +1 -0
  83. package/dist/modules/beer/beerSettingsPathResolve.d.ts +5 -0
  84. package/dist/modules/beer/beerSettingsPathResolve.d.ts.map +1 -0
  85. package/dist/modules/beer/beerSettingsPathResolve.js +9 -0
  86. package/dist/modules/beer/beerSettingsPathResolve.js.map +1 -0
  87. package/dist/modules/beer/beerSettingsPathResolve.spec.d.ts +2 -0
  88. package/dist/modules/beer/beerSettingsPathResolve.spec.d.ts.map +1 -0
  89. package/dist/modules/beer/beerSettingsPathResolve.spec.js +10 -0
  90. package/dist/modules/beer/beerSettingsPathResolve.spec.js.map +1 -0
  91. package/dist/modules/beer/beerSettingsRead.d.ts +6 -0
  92. package/dist/modules/beer/beerSettingsRead.d.ts.map +1 -0
  93. package/dist/modules/beer/beerSettingsRead.js +28 -0
  94. package/dist/modules/beer/beerSettingsRead.js.map +1 -0
  95. package/dist/modules/beer/beerSettingsTypes.d.ts +12 -0
  96. package/dist/modules/beer/beerSettingsTypes.d.ts.map +1 -0
  97. package/dist/modules/beer/beerSettingsTypes.js +2 -0
  98. package/dist/modules/beer/beerSettingsTypes.js.map +1 -0
  99. package/dist/modules/beer/beerSettingsWrite.d.ts +6 -0
  100. package/dist/modules/beer/beerSettingsWrite.d.ts.map +1 -0
  101. package/dist/modules/beer/beerSettingsWrite.js +10 -0
  102. package/dist/modules/beer/beerSettingsWrite.js.map +1 -0
  103. package/dist/modules/context/contextGet.d.ts +7 -0
  104. package/dist/modules/context/contextGet.d.ts.map +1 -0
  105. package/dist/modules/context/contextGet.js +12 -0
  106. package/dist/modules/context/contextGet.js.map +1 -0
  107. package/dist/modules/context/contextGetOrInitialize.d.ts +7 -0
  108. package/dist/modules/context/contextGetOrInitialize.d.ts.map +1 -0
  109. package/dist/modules/context/contextGetOrInitialize.js +12 -0
  110. package/dist/modules/context/contextGetOrInitialize.js.map +1 -0
  111. package/dist/modules/context/contextInitialize.d.ts +7 -0
  112. package/dist/modules/context/contextInitialize.d.ts.map +1 -0
  113. package/dist/modules/context/contextInitialize.js +25 -0
  114. package/dist/modules/context/contextInitialize.js.map +1 -0
  115. package/dist/modules/context/contextInitialize.spec.d.ts +2 -0
  116. package/dist/modules/context/contextInitialize.spec.d.ts.map +1 -0
  117. package/dist/modules/context/contextInitialize.spec.js +77 -0
  118. package/dist/modules/context/contextInitialize.spec.js.map +1 -0
  119. package/dist/modules/context/contextTypes.d.ts +21 -0
  120. package/dist/modules/context/contextTypes.d.ts.map +1 -0
  121. package/dist/modules/context/contextTypes.js +2 -0
  122. package/dist/modules/context/contextTypes.js.map +1 -0
  123. package/dist/modules/git/gitPush.d.ts +6 -0
  124. package/dist/modules/git/gitPush.d.ts.map +1 -0
  125. package/dist/modules/git/gitPush.js +9 -0
  126. package/dist/modules/git/gitPush.js.map +1 -0
  127. package/dist/modules/git/gitRemoteEnsure.d.ts +6 -0
  128. package/dist/modules/git/gitRemoteEnsure.d.ts.map +1 -0
  129. package/dist/modules/git/gitRemoteEnsure.js +20 -0
  130. package/dist/modules/git/gitRemoteEnsure.js.map +1 -0
  131. package/dist/modules/git/gitRepoCheckout.d.ts +6 -0
  132. package/dist/modules/git/gitRepoCheckout.d.ts.map +1 -0
  133. package/dist/modules/git/gitRepoCheckout.js +15 -0
  134. package/dist/modules/git/gitRepoCheckout.js.map +1 -0
  135. package/dist/modules/git/gitRepoCheckout.spec.d.ts +2 -0
  136. package/dist/modules/git/gitRepoCheckout.spec.d.ts.map +1 -0
  137. package/dist/modules/git/gitRepoCheckout.spec.js +33 -0
  138. package/dist/modules/git/gitRepoCheckout.spec.js.map +1 -0
  139. package/dist/modules/git/gitStageAndCommit.d.ts +6 -0
  140. package/dist/modules/git/gitStageAndCommit.d.ts.map +1 -0
  141. package/dist/modules/git/gitStageAndCommit.js +18 -0
  142. package/dist/modules/git/gitStageAndCommit.js.map +1 -0
  143. package/dist/modules/github/githubCliEnsure.d.ts +6 -0
  144. package/dist/modules/github/githubCliEnsure.d.ts.map +1 -0
  145. package/dist/modules/github/githubCliEnsure.js +13 -0
  146. package/dist/modules/github/githubCliEnsure.js.map +1 -0
  147. package/dist/modules/github/githubOwnerChoicesGet.d.ts +5 -0
  148. package/dist/modules/github/githubOwnerChoicesGet.d.ts.map +1 -0
  149. package/dist/modules/github/githubOwnerChoicesGet.js +20 -0
  150. package/dist/modules/github/githubOwnerChoicesGet.js.map +1 -0
  151. package/dist/modules/github/githubRepoCreate.d.ts +6 -0
  152. package/dist/modules/github/githubRepoCreate.d.ts.map +1 -0
  153. package/dist/modules/github/githubRepoCreate.js +17 -0
  154. package/dist/modules/github/githubRepoCreate.js.map +1 -0
  155. package/dist/modules/github/githubRepoExists.d.ts +5 -0
  156. package/dist/modules/github/githubRepoExists.d.ts.map +1 -0
  157. package/dist/modules/github/githubRepoExists.js +9 -0
  158. package/dist/modules/github/githubRepoExists.js.map +1 -0
  159. package/dist/modules/github/githubRepoNameResolve.d.ts +17 -0
  160. package/dist/modules/github/githubRepoNameResolve.d.ts.map +1 -0
  161. package/dist/modules/github/githubRepoNameResolve.js +34 -0
  162. package/dist/modules/github/githubRepoNameResolve.js.map +1 -0
  163. package/dist/modules/github/githubRepoNameResolve.spec.d.ts +2 -0
  164. package/dist/modules/github/githubRepoNameResolve.spec.d.ts.map +1 -0
  165. package/dist/modules/github/githubRepoNameResolve.spec.js +37 -0
  166. package/dist/modules/github/githubRepoNameResolve.spec.js.map +1 -0
  167. package/dist/modules/github/githubRepoParse.d.ts +7 -0
  168. package/dist/modules/github/githubRepoParse.d.ts.map +1 -0
  169. package/dist/modules/github/githubRepoParse.js +35 -0
  170. package/dist/modules/github/githubRepoParse.js.map +1 -0
  171. package/dist/modules/github/githubRepoParse.spec.d.ts +2 -0
  172. package/dist/modules/github/githubRepoParse.spec.d.ts.map +1 -0
  173. package/dist/modules/github/githubRepoParse.spec.js +17 -0
  174. package/dist/modules/github/githubRepoParse.spec.js.map +1 -0
  175. package/dist/modules/github/githubRepoStatusGet.d.ts +7 -0
  176. package/dist/modules/github/githubRepoStatusGet.d.ts.map +1 -0
  177. package/dist/modules/github/githubRepoStatusGet.js +21 -0
  178. package/dist/modules/github/githubRepoStatusGet.js.map +1 -0
  179. package/dist/modules/github/githubRepoUrlBuild.d.ts +5 -0
  180. package/dist/modules/github/githubRepoUrlBuild.d.ts.map +1 -0
  181. package/dist/modules/github/githubRepoUrlBuild.js +7 -0
  182. package/dist/modules/github/githubRepoUrlBuild.js.map +1 -0
  183. package/dist/modules/github/githubTypes.d.ts +8 -0
  184. package/dist/modules/github/githubTypes.d.ts.map +1 -0
  185. package/dist/modules/github/githubTypes.js +2 -0
  186. package/dist/modules/github/githubTypes.js.map +1 -0
  187. package/dist/modules/github/githubViewerGet.d.ts +5 -0
  188. package/dist/modules/github/githubViewerGet.d.ts.map +1 -0
  189. package/dist/modules/github/githubViewerGet.js +14 -0
  190. package/dist/modules/github/githubViewerGet.js.map +1 -0
  191. package/dist/modules/prompt/promptConfirm.d.ts +6 -0
  192. package/dist/modules/prompt/promptConfirm.d.ts.map +1 -0
  193. package/dist/modules/prompt/promptConfirm.js +23 -0
  194. package/dist/modules/prompt/promptConfirm.js.map +1 -0
  195. package/dist/modules/prompt/promptInput.d.ts +6 -0
  196. package/dist/modules/prompt/promptInput.d.ts.map +1 -0
  197. package/dist/modules/prompt/promptInput.js +14 -0
  198. package/dist/modules/prompt/promptInput.js.map +1 -0
  199. package/dist/modules/providers/providerDetect.d.ts +6 -0
  200. package/dist/modules/providers/providerDetect.d.ts.map +1 -0
  201. package/dist/modules/providers/providerDetect.js +43 -0
  202. package/dist/modules/providers/providerDetect.js.map +1 -0
  203. package/dist/modules/providers/providerDetect.spec.d.ts +2 -0
  204. package/dist/modules/providers/providerDetect.spec.d.ts.map +1 -0
  205. package/dist/modules/providers/providerDetect.spec.js +76 -0
  206. package/dist/modules/providers/providerDetect.spec.js.map +1 -0
  207. package/dist/modules/providers/providerModelSelect.d.ts +12 -0
  208. package/dist/modules/providers/providerModelSelect.d.ts.map +1 -0
  209. package/dist/modules/providers/providerModelSelect.js +134 -0
  210. package/dist/modules/providers/providerModelSelect.js.map +1 -0
  211. package/dist/modules/providers/providerModelSelect.spec.d.ts +2 -0
  212. package/dist/modules/providers/providerModelSelect.spec.d.ts.map +1 -0
  213. package/dist/modules/providers/providerModelSelect.spec.js +68 -0
  214. package/dist/modules/providers/providerModelSelect.spec.js.map +1 -0
  215. package/dist/modules/providers/providerModelsGet.d.ts +7 -0
  216. package/dist/modules/providers/providerModelsGet.d.ts.map +1 -0
  217. package/dist/modules/providers/providerModelsGet.js +100 -0
  218. package/dist/modules/providers/providerModelsGet.js.map +1 -0
  219. package/dist/modules/providers/providerModelsGet.spec.d.ts +2 -0
  220. package/dist/modules/providers/providerModelsGet.spec.d.ts.map +1 -0
  221. package/dist/modules/providers/providerModelsGet.spec.js +88 -0
  222. package/dist/modules/providers/providerModelsGet.spec.js.map +1 -0
  223. package/dist/modules/providers/providerPriorityList.d.ts +6 -0
  224. package/dist/modules/providers/providerPriorityList.d.ts.map +1 -0
  225. package/dist/modules/providers/providerPriorityList.js +16 -0
  226. package/dist/modules/providers/providerPriorityList.js.map +1 -0
  227. package/dist/modules/providers/providerPriorityList.spec.d.ts +2 -0
  228. package/dist/modules/providers/providerPriorityList.spec.d.ts.map +1 -0
  229. package/dist/modules/providers/providerPriorityList.spec.js +19 -0
  230. package/dist/modules/providers/providerPriorityList.spec.js.map +1 -0
  231. package/dist/modules/providers/providerTypes.d.ts +21 -0
  232. package/dist/modules/providers/providerTypes.d.ts.map +1 -0
  233. package/dist/modules/providers/providerTypes.js +2 -0
  234. package/dist/modules/providers/providerTypes.js.map +1 -0
  235. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.d.ts +17 -0
  236. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.d.ts.map +1 -0
  237. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.js +88 -0
  238. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.js.map +1 -0
  239. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.d.ts +2 -0
  240. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.d.ts.map +1 -0
  241. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.js +70 -0
  242. package/dist/modules/sandbox/sandboxInferenceFilesystemPolicy.spec.js.map +1 -0
  243. package/dist/modules/sandbox/sandboxInferenceGet.d.ts +12 -0
  244. package/dist/modules/sandbox/sandboxInferenceGet.d.ts.map +1 -0
  245. package/dist/modules/sandbox/sandboxInferenceGet.js +18 -0
  246. package/dist/modules/sandbox/sandboxInferenceGet.js.map +1 -0
  247. package/dist/modules/sandbox/sandboxInferenceGet.spec.d.ts +2 -0
  248. package/dist/modules/sandbox/sandboxInferenceGet.spec.d.ts.map +1 -0
  249. package/dist/modules/sandbox/sandboxInferenceGet.spec.js +65 -0
  250. package/dist/modules/sandbox/sandboxInferenceGet.spec.js.map +1 -0
  251. package/dist/modules/sandbox/sandboxInferenceTypes.d.ts +7 -0
  252. package/dist/modules/sandbox/sandboxInferenceTypes.d.ts.map +1 -0
  253. package/dist/modules/sandbox/sandboxInferenceTypes.js +2 -0
  254. package/dist/modules/sandbox/sandboxInferenceTypes.js.map +1 -0
  255. package/dist/modules/sandbox/sandboxTypes.d.ts +4 -0
  256. package/dist/modules/sandbox/sandboxTypes.d.ts.map +1 -0
  257. package/dist/modules/sandbox/sandboxTypes.js +2 -0
  258. package/dist/modules/sandbox/sandboxTypes.js.map +1 -0
  259. package/dist/modules/util/commandRun.d.ts +22 -0
  260. package/dist/modules/util/commandRun.d.ts.map +1 -0
  261. package/dist/modules/util/commandRun.js +112 -0
  262. package/dist/modules/util/commandRun.js.map +1 -0
  263. package/dist/modules/util/commandRun.spec.d.ts +2 -0
  264. package/dist/modules/util/commandRun.spec.d.ts.map +1 -0
  265. package/dist/modules/util/commandRun.spec.js +43 -0
  266. package/dist/modules/util/commandRun.spec.js.map +1 -0
  267. package/dist/modules/util/pathResolveFromInitCwd.d.ts +6 -0
  268. package/dist/modules/util/pathResolveFromInitCwd.d.ts.map +1 -0
  269. package/dist/modules/util/pathResolveFromInitCwd.js +10 -0
  270. package/dist/modules/util/pathResolveFromInitCwd.js.map +1 -0
  271. package/dist/release/releaseRun.d.ts +6 -0
  272. package/dist/release/releaseRun.d.ts.map +1 -0
  273. package/dist/release/releaseRun.js +153 -0
  274. package/dist/release/releaseRun.js.map +1 -0
  275. package/dist/release/releaseVersionIncrement.d.ts +7 -0
  276. package/dist/release/releaseVersionIncrement.d.ts.map +1 -0
  277. package/dist/release/releaseVersionIncrement.js +23 -0
  278. package/dist/release/releaseVersionIncrement.js.map +1 -0
  279. package/dist/release/releaseVersionIncrement.spec.d.ts +2 -0
  280. package/dist/release/releaseVersionIncrement.spec.d.ts.map +1 -0
  281. package/dist/release/releaseVersionIncrement.spec.js +20 -0
  282. package/dist/release/releaseVersionIncrement.spec.js.map +1 -0
  283. package/dist/release/releaseVersionPrompt.d.ts +6 -0
  284. package/dist/release/releaseVersionPrompt.d.ts.map +1 -0
  285. package/dist/release/releaseVersionPrompt.js +55 -0
  286. package/dist/release/releaseVersionPrompt.js.map +1 -0
  287. package/dist/text/all.txt +85 -0
  288. package/dist/text/text.d.ts +7 -0
  289. package/dist/text/text.d.ts.map +1 -0
  290. package/dist/text/text.js +34 -0
  291. package/dist/text/text.js.map +1 -0
  292. package/dist/types.d.ts +6 -0
  293. package/dist/types.d.ts.map +1 -0
  294. package/dist/types.js +2 -0
  295. package/dist/types.js.map +1 -0
  296. package/dist/workflows/steps/generateCommitMessage.d.ts +13 -0
  297. package/dist/workflows/steps/generateCommitMessage.d.ts.map +1 -0
  298. package/dist/workflows/steps/generateCommitMessage.js +25 -0
  299. package/dist/workflows/steps/generateCommitMessage.js.map +1 -0
  300. package/dist/workflows/steps/generateCommitMessage.spec.d.ts +2 -0
  301. package/dist/workflows/steps/generateCommitMessage.spec.d.ts.map +1 -0
  302. package/dist/workflows/steps/generateCommitMessage.spec.js +28 -0
  303. package/dist/workflows/steps/generateCommitMessage.spec.js.map +1 -0
  304. package/package.json +38 -0
@@ -0,0 +1,43 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { afterAll, beforeEach, describe, expect, it, vi } from "vitest";
3
+ const spawnMock = vi.hoisted(() => vi.fn());
4
+ vi.mock("node:child_process", () => ({
5
+ spawn: spawnMock
6
+ }));
7
+ import { commandRun } from "@/modules/util/commandRun.js";
8
+ function spawnSuccessChild() {
9
+ const child = new EventEmitter();
10
+ child.stdout = new EventEmitter();
11
+ child.stderr = new EventEmitter();
12
+ child.stdin = {
13
+ write: () => undefined,
14
+ end: () => undefined
15
+ };
16
+ child.kill = () => undefined;
17
+ queueMicrotask(() => {
18
+ child.emit("close", 0);
19
+ });
20
+ return child;
21
+ }
22
+ describe("commandRun", () => {
23
+ const initCwd = process.env.INIT_CWD;
24
+ beforeEach(() => {
25
+ spawnMock.mockReset();
26
+ process.env.INIT_CWD = "/tmp/holdmybeer-invocation";
27
+ spawnMock.mockImplementation(() => spawnSuccessChild());
28
+ });
29
+ it("uses INIT_CWD as default cwd when options.cwd is not provided", async () => {
30
+ await commandRun("echo", ["ok"]);
31
+ expect(spawnMock).toHaveBeenCalledTimes(1);
32
+ expect(spawnMock.mock.calls[0]?.[2]?.cwd).toBe("/tmp/holdmybeer-invocation");
33
+ });
34
+ it("uses explicit options.cwd when provided", async () => {
35
+ await commandRun("echo", ["ok"], { cwd: "/tmp/explicit-cwd" });
36
+ expect(spawnMock).toHaveBeenCalledTimes(1);
37
+ expect(spawnMock.mock.calls[0]?.[2]?.cwd).toBe("/tmp/explicit-cwd");
38
+ });
39
+ afterAll(() => {
40
+ process.env.INIT_CWD = initCwd;
41
+ });
42
+ });
43
+ //# sourceMappingURL=commandRun.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandRun.spec.js","sourceRoot":"","sources":["../../../sources/modules/util/commandRun.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAExE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAE5C,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,KAAK,EAAE,SAAS;CACjB,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,SAAS,iBAAiB;IAMxB,MAAM,KAAK,GAAG,IAAI,YAAY,EAK7B,CAAC;IAEF,KAAK,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAClC,KAAK,CAAC,KAAK,GAAG;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;QACtB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;KACrB,CAAC;IACF,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;IAE7B,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAErC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,4BAA4B,CAAC;QACpD,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resolves a path using INIT_CWD when invoked through Yarn.
3
+ * Falls back to process.cwd() for direct execution.
4
+ */
5
+ export declare function pathResolveFromInitCwd(inputPath: string): string;
6
+ //# sourceMappingURL=pathResolveFromInitCwd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathResolveFromInitCwd.d.ts","sourceRoot":"","sources":["../../../sources/modules/util/pathResolveFromInitCwd.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE"}
@@ -0,0 +1,10 @@
1
+ import path from "node:path";
2
+ /**
3
+ * Resolves a path using INIT_CWD when invoked through Yarn.
4
+ * Falls back to process.cwd() for direct execution.
5
+ */
6
+ export function pathResolveFromInitCwd(inputPath) {
7
+ const baseDir = process.env.INIT_CWD ?? process.cwd();
8
+ return path.resolve(baseDir, inputPath);
9
+ }
10
+ //# sourceMappingURL=pathResolveFromInitCwd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathResolveFromInitCwd.js","sourceRoot":"","sources":["../../../sources/modules/util/pathResolveFromInitCwd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Runs the holdmybeer publish flow from repository root.
3
+ * Expects: clean git working tree and npm credentials already configured.
4
+ */
5
+ export declare function releaseRun(): Promise<void>;
6
+ //# sourceMappingURL=releaseRun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseRun.d.ts","sourceRoot":"","sources":["../../sources/release/releaseRun.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqEhD"}
@@ -0,0 +1,153 @@
1
+ import { spawn } from "node:child_process";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { beerLog, text } from "@text";
6
+ import { commandRun } from "@/modules/util/commandRun.js";
7
+ import { releaseVersionPrompt } from "@/release/releaseVersionPrompt.js";
8
+ const scriptDirectory = dirname(fileURLToPath(import.meta.url));
9
+ const packageDirectory = resolve(scriptDirectory, "../..");
10
+ const repositoryDirectory = resolve(packageDirectory, "../..");
11
+ const packageManifestPath = resolve(packageDirectory, "package.json");
12
+ const packageManifestRelativePath = "packages/holdmybeer/package.json";
13
+ const npmRegistry = "https://registry.npmjs.org/";
14
+ /**
15
+ * Runs the holdmybeer publish flow from repository root.
16
+ * Expects: clean git working tree and npm credentials already configured.
17
+ */
18
+ export async function releaseRun() {
19
+ beerLog("release_start");
20
+ await releaseWorkingTreeAssertClean();
21
+ beerLog("release_git_clean");
22
+ const currentVersion = releasePackageVersionRead();
23
+ const nextVersion = await releaseVersionPrompt(currentVersion, process.argv[2], process.argv[3]);
24
+ const commitMessage = `chore(release): holdmybeer ${nextVersion}`;
25
+ const tagName = `holdmybeer@${nextVersion}`;
26
+ let releaseCommitHash = null;
27
+ let tagCreated = false;
28
+ beerLog("release_version_current", { version: currentVersion });
29
+ beerLog("release_version_selected", { version: nextVersion });
30
+ await releaseTagMissingAssert(tagName);
31
+ try {
32
+ beerLog("release_install");
33
+ await releaseCommandRun("yarn", ["install", "--frozen-lockfile"], repositoryDirectory);
34
+ beerLog("release_version_bump", { version: nextVersion });
35
+ await releaseCommandRun("npm", [
36
+ "version",
37
+ nextVersion,
38
+ "--no-git-tag-version",
39
+ "--registry",
40
+ npmRegistry,
41
+ "--no-package-lock"
42
+ ], packageDirectory, releaseNpmEnv());
43
+ beerLog("release_commit_creating", { version: nextVersion });
44
+ await releaseCommandRun("git", ["add", packageManifestRelativePath], repositoryDirectory);
45
+ await releaseCommandRun("git", ["commit", "-m", commitMessage], repositoryDirectory);
46
+ releaseCommitHash = await releaseCommandOutput("git", ["rev-parse", "HEAD"], repositoryDirectory);
47
+ beerLog("release_test");
48
+ await releaseCommandRun("yarn", ["test"], repositoryDirectory);
49
+ beerLog("release_build");
50
+ await releaseCommandRun("yarn", ["build"], repositoryDirectory);
51
+ beerLog("release_tag_creating", { tag: tagName });
52
+ await releaseCommandRun("git", ["tag", tagName], repositoryDirectory);
53
+ tagCreated = true;
54
+ await releasePublish();
55
+ }
56
+ catch (error) {
57
+ await releaseRollback(releaseCommitHash, tagName, tagCreated);
58
+ throw error;
59
+ }
60
+ beerLog("release_push_commit");
61
+ await releaseCommandRun("git", ["push", "origin", "HEAD"], repositoryDirectory);
62
+ beerLog("release_push_tag", { tag: tagName });
63
+ await releaseCommandRun("git", ["push", "origin", tagName], repositoryDirectory);
64
+ beerLog("release_done");
65
+ }
66
+ async function releaseWorkingTreeAssertClean() {
67
+ const status = await commandRun("git", ["status", "--porcelain"], {
68
+ cwd: repositoryDirectory
69
+ });
70
+ if (status.stdout.trim().length > 0) {
71
+ throw new Error(text["error_release_git_dirty"]);
72
+ }
73
+ }
74
+ function releasePackageVersionRead() {
75
+ const raw = readFileSync(packageManifestPath, "utf8");
76
+ const parsed = JSON.parse(raw);
77
+ const version = parsed.version?.trim();
78
+ if (!version) {
79
+ throw new Error(text["error_release_version_missing"]);
80
+ }
81
+ return version;
82
+ }
83
+ async function releaseTagMissingAssert(tagName) {
84
+ const output = await releaseCommandOutput("git", ["tag", "--list", "--format=%(refname:strip=2)", tagName], repositoryDirectory);
85
+ if (output.split("\n").some((line) => line.trim() === tagName)) {
86
+ throw new Error(text["error_release_tag_exists"]);
87
+ }
88
+ }
89
+ async function releaseCommandRun(command, args, cwd, env = {}) {
90
+ await commandRun(command, args, {
91
+ cwd,
92
+ env,
93
+ onStdoutText: (line) => process.stdout.write(line),
94
+ onStderrText: (line) => process.stderr.write(line)
95
+ });
96
+ }
97
+ async function releaseCommandOutput(command, args, cwd) {
98
+ const result = await commandRun(command, args, {
99
+ cwd,
100
+ onStderrText: (line) => process.stderr.write(line)
101
+ });
102
+ return result.stdout.trim();
103
+ }
104
+ function releaseNpmEnv() {
105
+ return {
106
+ npm_config_package_lock: "false",
107
+ NPM_CONFIG_PACKAGE_LOCK: "false"
108
+ };
109
+ }
110
+ async function releaseRollback(releaseCommitHash, tagName, tagCreated) {
111
+ if (!releaseCommitHash) {
112
+ return;
113
+ }
114
+ beerLog("release_rollback_start");
115
+ if (tagCreated) {
116
+ beerLog("release_rollback_tag", { tag: tagName });
117
+ await releaseCommandRun("git", ["tag", "-d", tagName], repositoryDirectory);
118
+ }
119
+ beerLog("release_rollback_commit");
120
+ await releaseCommandRun("git", ["reset", "--hard", `${releaseCommitHash}^`], repositoryDirectory);
121
+ }
122
+ async function releasePublish() {
123
+ beerLog("release_publish");
124
+ const publishArgs = [
125
+ "publish",
126
+ "--access",
127
+ "public",
128
+ "--registry",
129
+ npmRegistry,
130
+ "--no-package-lock"
131
+ ];
132
+ await releaseCommandRunInteractive("npm", publishArgs, packageDirectory, releaseNpmEnv());
133
+ }
134
+ async function releaseCommandRunInteractive(command, args, cwd, env = {}) {
135
+ const exitCode = await new Promise((resolve, reject) => {
136
+ const child = spawn(command, args, {
137
+ cwd,
138
+ stdio: "inherit",
139
+ env: { ...process.env, ...env }
140
+ });
141
+ child.on("error", (error) => {
142
+ reject(error);
143
+ });
144
+ child.on("close", (code) => {
145
+ resolve(code ?? 1);
146
+ });
147
+ });
148
+ if (exitCode !== 0) {
149
+ throw new Error(`Command failed (${exitCode}): ${command} ${args.join(" ")}`);
150
+ }
151
+ }
152
+ await releaseRun();
153
+ //# sourceMappingURL=releaseRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseRun.js","sourceRoot":"","sources":["../../sources/release/releaseRun.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type ReleaseVersionIncrementKind = "major" | "minor" | "patch";
2
+ /**
3
+ * Increments a semantic version using major, minor, or patch semantics.
4
+ * Expects: value is a valid semantic version.
5
+ */
6
+ export declare function releaseVersionIncrement(value: string, kind: ReleaseVersionIncrementKind): string;
7
+ //# sourceMappingURL=releaseVersionIncrement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionIncrement.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,2BAA2B,GAChC,MAAM,CAkBR"}
@@ -0,0 +1,23 @@
1
+ const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
2
+ /**
3
+ * Increments a semantic version using major, minor, or patch semantics.
4
+ * Expects: value is a valid semantic version.
5
+ */
6
+ export function releaseVersionIncrement(value, kind) {
7
+ const match = SEMVER_PATTERN.exec(value.trim());
8
+ if (!match) {
9
+ throw new Error(`Invalid semantic version: ${value}`);
10
+ }
11
+ const major = Number(match[1]);
12
+ const minor = Number(match[2]);
13
+ const patch = Number(match[3]);
14
+ switch (kind) {
15
+ case "major":
16
+ return `${major + 1}.0.0`;
17
+ case "minor":
18
+ return `${major}.${minor + 1}.0`;
19
+ case "patch":
20
+ return `${major}.${minor}.${patch + 1}`;
21
+ }
22
+ }
23
+ //# sourceMappingURL=releaseVersionIncrement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionIncrement.js","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAClB,2HAA2H,CAAC;AAI9H;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,IAAiC;IAEjC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=releaseVersionIncrement.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionIncrement.spec.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { releaseVersionIncrement } from "./releaseVersionIncrement.js";
3
+ describe("releaseVersionIncrement", () => {
4
+ it("increments patch versions", () => {
5
+ expect(releaseVersionIncrement("1.2.3", "patch")).toBe("1.2.4");
6
+ });
7
+ it("increments minor versions and resets patch", () => {
8
+ expect(releaseVersionIncrement("1.2.3", "minor")).toBe("1.3.0");
9
+ });
10
+ it("increments major versions and resets minor and patch", () => {
11
+ expect(releaseVersionIncrement("1.2.3", "major")).toBe("2.0.0");
12
+ });
13
+ it("accepts prerelease inputs and returns stable increments", () => {
14
+ expect(releaseVersionIncrement("1.2.3-beta.1+build.42", "patch")).toBe("1.2.4");
15
+ });
16
+ it("throws for invalid semver values", () => {
17
+ expect(() => releaseVersionIncrement("v1.2.3", "patch")).toThrow("Invalid semantic version: v1.2.3");
18
+ });
19
+ });
20
+ //# sourceMappingURL=releaseVersionIncrement.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionIncrement.spec.js","sourceRoot":"","sources":["../../sources/release/releaseVersionIncrement.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,uBAAuB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CACpE,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAC9D,kCAAkC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resolves the next package version using patch/minor/major/custom mode.
3
+ * Expects: currentVersion is a valid semantic version.
4
+ */
5
+ export declare function releaseVersionPrompt(currentVersion: string, modeArg?: string, customVersionArg?: string): Promise<string>;
6
+ //# sourceMappingURL=releaseVersionPrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionPrompt.d.ts","sourceRoot":"","sources":["../../sources/release/releaseVersionPrompt.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
@@ -0,0 +1,55 @@
1
+ import { text, textFormat } from "@text";
2
+ import { promptInput } from "@/modules/prompt/promptInput.js";
3
+ import { releaseVersionIncrement } from "@/release/releaseVersionIncrement.js";
4
+ const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
5
+ /**
6
+ * Resolves the next package version using patch/minor/major/custom mode.
7
+ * Expects: currentVersion is a valid semantic version.
8
+ */
9
+ export async function releaseVersionPrompt(currentVersion, modeArg, customVersionArg) {
10
+ const nextVersions = {
11
+ patch: releaseVersionIncrement(currentVersion, "patch"),
12
+ minor: releaseVersionIncrement(currentVersion, "minor"),
13
+ major: releaseVersionIncrement(currentVersion, "major")
14
+ };
15
+ const mode = await releaseVersionModeResolve(modeArg, nextVersions.patch);
16
+ if (mode !== "custom") {
17
+ return nextVersions[mode];
18
+ }
19
+ const customVersion = await releaseVersionCustomResolve(customVersionArg, nextVersions.patch);
20
+ const normalizedVersion = customVersion.trim();
21
+ if (!SEMVER_PATTERN.test(normalizedVersion)) {
22
+ throw new Error(textFormat(text["error_release_version_invalid"], {
23
+ version: normalizedVersion
24
+ }));
25
+ }
26
+ if (normalizedVersion === currentVersion) {
27
+ throw new Error(text["error_release_version_same"]);
28
+ }
29
+ return normalizedVersion;
30
+ }
31
+ async function releaseVersionModeResolve(modeArg, patchVersion) {
32
+ if (!modeArg && !process.stdin.isTTY) {
33
+ throw new Error(text["error_release_mode_required_non_tty"]);
34
+ }
35
+ const modeInput = modeArg?.trim().toLowerCase() ||
36
+ (await promptInput(textFormat(text["prompt_release_mode"], { patch: patchVersion }), "patch"))
37
+ .trim()
38
+ .toLowerCase();
39
+ if (!releaseVersionModeIsValid(modeInput)) {
40
+ throw new Error(textFormat(text["error_release_mode_invalid"], { mode: modeInput }));
41
+ }
42
+ return modeInput;
43
+ }
44
+ async function releaseVersionCustomResolve(customVersionArg, patchVersion) {
45
+ const value = customVersionArg?.trim() ||
46
+ (await promptInput(text["prompt_release_custom"], patchVersion)).trim();
47
+ if (!value) {
48
+ throw new Error(text["error_release_custom_missing"]);
49
+ }
50
+ return value;
51
+ }
52
+ function releaseVersionModeIsValid(value) {
53
+ return value === "patch" || value === "minor" || value === "major" || value === "custom";
54
+ }
55
+ //# sourceMappingURL=releaseVersionPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseVersionPrompt.js","sourceRoot":"","sources":["../../sources/release/releaseVersionPrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ # Bootstrap
2
+
3
+ bootstrap_start = 🚀 Starting bootstrap
4
+ bootstrap_github_check = 🔐 Checking GitHub CLI authentication
5
+ bootstrap_settings_loaded = ⚙️ Loaded settings: {path}
6
+ bootstrap_settings_saved = 💾 Saved settings: {path}
7
+ bootstrap_detected_providers = 🔎 Detected providers: {providers}
8
+ bootstrap_detected_models = 🧩 Detected models: {models}
9
+ bootstrap_invalid_repo = ❌ Invalid repository format — try owner/repo or a GitHub URL
10
+ bootstrap_repo_not_found = ❌ Repository not found or inaccessible: {repo}
11
+ bootstrap_source_selected = 📦 Selected source repo: {repo}
12
+ bootstrap_publish_owners = 🌐 Publish owner options: {owners}
13
+ bootstrap_repo_collision = ⚠️ {requested} already contains code — using {resolved}
14
+ bootstrap_publish_selected = 🚀 Selected publish repo: {repo}
15
+ bootstrap_repo_creating = 🆕 Creating repository: {repo} ({visibility})
16
+ bootstrap_original_checkout_start = 📥 Checking out source repository
17
+ bootstrap_original_checkout = 📥 Checked out original source to: {path}
18
+ bootstrap_readme_generating = 🧠 Generating README.md
19
+ bootstrap_readme_generated = 📝 Generated README.md with {provider}
20
+ bootstrap_commit_generating = 🧠 Generating initial commit message
21
+ bootstrap_commit_ready = 💬 Generated commit message: {message}
22
+ bootstrap_remote_ensuring = 🔗 Ensuring git remote origin: {url}
23
+ bootstrap_commit_creating = 🧾 Creating initial commit
24
+ bootstrap_no_changes = ✅ No changes to commit
25
+ bootstrap_commit_created = ✅ Created initial commit
26
+ bootstrap_push_start = ⬆️ Pushing to {remote}/{branch}
27
+ bootstrap_push_done = ✅ Push complete
28
+ bootstrap_source_repo = 📦 Source repo: {repo}
29
+ bootstrap_publish_repo = 🚀 Publish repo: {repo}
30
+ bootstrap_settings_path = ⚙️ Settings: {path}
31
+ bootstrap_readme_provider = 📝 README provider: {provider}
32
+ bootstrap_commit_message = 💬 Commit message: {message}
33
+ bootstrap_skipping_source = ✔️ Source repo already set: {repo}
34
+ bootstrap_skipping_publish = ✔️ Publish repo already set: {repo}
35
+
36
+ # Release
37
+
38
+ release_start = 🚀 Starting release
39
+ release_git_clean = ✅ Git working tree is clean
40
+ release_version_current = 🏷️ Current version: {version}
41
+ release_version_selected = 🧭 Selected version: {version}
42
+ release_install = 📦 Installing dependencies
43
+ release_version_bump = 🔢 Bumping version to {version}
44
+ release_commit_creating = 🧾 Creating release commit for {version}
45
+ release_test = 🧪 Running tests
46
+ release_build = 🏗️ Building package
47
+ release_tag_creating = 🏷️ Creating tag {tag}
48
+ release_publish = 📤 Publishing @slopus/beer to npm
49
+ release_push_commit = ⬆️ Pushing release commit
50
+ release_push_tag = ⬆️ Pushing tag {tag}
51
+ release_rollback_start = ↩️ Release failed, rolling back git changes
52
+ release_rollback_tag = 🏷️ Removing tag {tag}
53
+ release_rollback_commit = 🧹 Reverting release commit
54
+ release_done = ✅ Release completed
55
+
56
+ # Prompts
57
+
58
+ prompt_source_repo = 📦 Source repository (GitHub URL or owner/repo)
59
+ prompt_publish_owner = 🌐 Publish owner/org
60
+ prompt_publish_repo_name = 🏷️ Publish repository name
61
+ prompt_create_repo = 🆕 Repository {repo} does not exist. Create it now?
62
+ prompt_create_private = 🔐 Create as private repository?
63
+ prompt_release_mode = Select release increment (patch/minor/major/custom). patch -> {patch}
64
+ prompt_release_custom = Enter custom semantic version
65
+
66
+ # Errors
67
+
68
+ error_gh_required = ❌ GitHub CLI (gh) is required — install it and authenticate with `gh auth login`
69
+ error_gh_user_resolve = ❌ Unable to resolve authenticated GitHub user from gh
70
+ error_repo_status_check = ❌ Unable to check repository status for {repo}: {detail}
71
+ error_command_timeout = ⏰ Command timed out after {ms}ms: {command}
72
+ error_command_failed = 💥 Command failed ({code}): {command}
73
+ error_context_not_initialized = ❌ Context is not initialized — run contextInitialize() first
74
+ error_repo_name_invalid = ❌ Publish repository name is invalid
75
+ error_repo_name_exhausted = ❌ Unable to resolve an available publish repository name after 100 attempts
76
+ error_bootstrap_cancelled = 🚫 Bootstrap cancelled — publish repository is required
77
+ error_source_dir_invalid = ❌ Source directory does not exist or is not a directory: {dir}
78
+ error_release_git_dirty = ❌ Release requires a clean git working tree. Commit pending changes first.
79
+ error_release_mode_invalid = ❌ Invalid release mode: {mode}. Use patch, minor, major, or custom.
80
+ error_release_mode_required_non_tty = ❌ Release mode is required in non-interactive shells. Use: yarn release -- <patch|minor|major|custom> [version]
81
+ error_release_custom_missing = ❌ Custom version is required for custom release mode.
82
+ error_release_version_invalid = ❌ Invalid semantic version: {version}
83
+ error_release_version_same = ❌ New version must differ from current version.
84
+ error_release_version_missing = ❌ Could not read current version from packages/holdmybeer/package.json
85
+ error_release_tag_exists = ❌ Release tag already exists. Delete the existing tag or choose a different version.
@@ -0,0 +1,7 @@
1
+ /** All user-facing text strings, keyed by identifier. */
2
+ export declare const text: Record<string, string>;
3
+ /** Replaces {key} placeholders in a template with provided values. */
4
+ export declare function textFormat(template: string, values: Record<string, string | number>): string;
5
+ /** Logs a message with optional template substitution. */
6
+ export declare function beerLog(key: string, values?: Record<string, string | number>): void;
7
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../sources/text/text.ts"],"names":[],"mappings":"AAsBA,yDAAyD;AACzD,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEvC,CAAC;AAEF,sEAAsE;AACtE,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACtC,MAAM,CAKR;AAED,0DAA0D;AAC1D,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACvC,IAAI,CAON"}
@@ -0,0 +1,34 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import path from "node:path";
4
+ /** Parses key = value lines from a text catalog, skipping comments and blanks. */
5
+ function textParse(raw) {
6
+ const entries = {};
7
+ for (const line of raw.split("\n")) {
8
+ const trimmed = line.trim();
9
+ if (!trimmed || trimmed.startsWith("#"))
10
+ continue;
11
+ const eq = trimmed.indexOf("=");
12
+ if (eq === -1)
13
+ continue;
14
+ entries[trimmed.slice(0, eq).trim()] = trimmed.slice(eq + 1).trim();
15
+ }
16
+ return entries;
17
+ }
18
+ const txtPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "all.txt");
19
+ /** All user-facing text strings, keyed by identifier. */
20
+ export const text = textParse(readFileSync(txtPath, "utf-8"));
21
+ /** Replaces {key} placeholders in a template with provided values. */
22
+ export function textFormat(template, values) {
23
+ return template.replace(/\{(\w+)\}/g, (_, k) => String(values[k] ?? `{${k}}`));
24
+ }
25
+ /** Logs a message with optional template substitution. */
26
+ export function beerLog(key, values) {
27
+ const template = text[key];
28
+ if (!template) {
29
+ console.log(key);
30
+ return;
31
+ }
32
+ console.log(values ? textFormat(template, values) : template);
33
+ }
34
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../sources/text/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,kFAAkF;AAClF,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,SAAS,CACV,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,IAAI,GAA2B,SAAS,CACnD,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAC/B,CAAC;AAEF,sEAAsE;AACtE,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,MAAuC;IAEvC,OAAO,QAAQ,CAAC,OAAO,CACrB,YAAY,EACZ,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,OAAO,CACrB,GAAW,EACX,MAAwC;IAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type { BeerSettings, ProviderDetection } from "@/modules/beer/beerSettingsTypes.js";
2
+ export type { Context, ContextInferTextInput } from "@/modules/context/contextTypes.js";
3
+ export type { GitHubRepoRef, GitHubRepoStatus } from "@/modules/github/githubTypes.js";
4
+ export type { ProviderId, ProviderModel, ProviderModelSelectionMode } from "@/modules/providers/providerTypes.js";
5
+ export type { InferenceWritePolicy } from "@/modules/sandbox/sandboxInferenceTypes.js";
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC3F,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACvF,YAAY,EACV,UAAU,EACV,aAAa,EACb,0BAA0B,EAC3B,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../sources/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { Context } from "@/types";
2
+ export interface GenerateCommitMessageOptions {
3
+ showProgress?: boolean;
4
+ }
5
+ /**
6
+ * Generates an Angular-style initial commit message for bootstrap workflow.
7
+ * Expects: sourceFullName is a valid owner/repo string.
8
+ */
9
+ export declare function generateCommitMessage(context: Context, sourceFullName: string, options?: GenerateCommitMessageOptions): Promise<{
10
+ provider?: string;
11
+ text: string;
12
+ }>;
13
+ //# sourceMappingURL=generateCommitMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCommitMessage.d.ts","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9C"}
@@ -0,0 +1,25 @@
1
+ import { generate } from "@/modules/ai/generate.js";
2
+ /**
3
+ * Generates an Angular-style initial commit message for bootstrap workflow.
4
+ * Expects: sourceFullName is a valid owner/repo string.
5
+ */
6
+ export async function generateCommitMessage(context, sourceFullName, options = {}) {
7
+ const prompt = [
8
+ "Generate one Angular-style git commit message for initial bootstrap.",
9
+ "Return a single line only.",
10
+ `Context: bootstrap project for source repository ${sourceFullName}.`
11
+ ].join("\n");
12
+ const result = await generate(context, prompt, {
13
+ showProgress: options.showProgress,
14
+ modelSelectionMode: "fast"
15
+ });
16
+ const firstLine = result.text.split("\n")[0]?.trim();
17
+ if (!firstLine) {
18
+ throw new Error("Inference returned empty commit message.");
19
+ }
20
+ return {
21
+ provider: result.provider,
22
+ text: firstLine
23
+ };
24
+ }
25
+ //# sourceMappingURL=generateCommitMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCommitMessage.js","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAMpD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAgB,EAChB,cAAsB,EACtB,UAAwC,EAAE;IAE1C,MAAM,MAAM,GAAG;QACb,sEAAsE;QACtE,4BAA4B;QAC5B,oDAAoD,cAAc,GAAG;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;QAC7C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,kBAAkB,EAAE,MAAM;KAC3B,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generateCommitMessage.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCommitMessage.spec.d.ts","sourceRoot":"","sources":["../../../sources/workflows/steps/generateCommitMessage.spec.ts"],"names":[],"mappings":""}