pr-merge-queue 0.0.0-stage → 0.0.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 (331) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +125 -2
  3. package/dist/claim-pr/claim-pr.d.mts +45 -0
  4. package/dist/claim-pr/claim-pr.d.mts.map +1 -0
  5. package/dist/claim-pr/claim-pr.mjs +217 -0
  6. package/dist/claim-pr/claim-pr.mjs.map +1 -0
  7. package/dist/claim-pr/index.d.mts +2 -0
  8. package/dist/claim-pr/index.d.mts.map +1 -0
  9. package/dist/claim-pr/index.mjs +2 -0
  10. package/dist/claim-pr/index.mjs.map +1 -0
  11. package/dist/cmd/claim-pr.d.mts +3 -0
  12. package/dist/cmd/claim-pr.d.mts.map +1 -0
  13. package/dist/cmd/claim-pr.mjs +20 -0
  14. package/dist/cmd/claim-pr.mjs.map +1 -0
  15. package/dist/cmd/open-pr.d.mts +3 -0
  16. package/dist/cmd/open-pr.d.mts.map +1 -0
  17. package/dist/cmd/open-pr.mjs +20 -0
  18. package/dist/cmd/open-pr.mjs.map +1 -0
  19. package/dist/cmd/pr-report.d.mts +3 -0
  20. package/dist/cmd/pr-report.d.mts.map +1 -0
  21. package/dist/cmd/pr-report.mjs +20 -0
  22. package/dist/cmd/pr-report.mjs.map +1 -0
  23. package/dist/cmd/push-fixed-pr.d.mts +3 -0
  24. package/dist/cmd/push-fixed-pr.d.mts.map +1 -0
  25. package/dist/cmd/push-fixed-pr.mjs +20 -0
  26. package/dist/cmd/push-fixed-pr.mjs.map +1 -0
  27. package/dist/cmd/report-unowned-prs.d.mts +3 -0
  28. package/dist/cmd/report-unowned-prs.d.mts.map +1 -0
  29. package/dist/cmd/report-unowned-prs.mjs +20 -0
  30. package/dist/cmd/report-unowned-prs.mjs.map +1 -0
  31. package/dist/cmd/unblock-prs.d.mts +3 -0
  32. package/dist/cmd/unblock-prs.d.mts.map +1 -0
  33. package/dist/cmd/unblock-prs.mjs +19 -0
  34. package/dist/cmd/unblock-prs.mjs.map +1 -0
  35. package/dist/entry-point.d.mts +3 -0
  36. package/dist/entry-point.d.mts.map +1 -0
  37. package/dist/entry-point.mjs +3 -0
  38. package/dist/entry-point.mjs.map +1 -0
  39. package/dist/lib/cli-args.d.mts +27 -0
  40. package/dist/lib/cli-args.d.mts.map +1 -0
  41. package/dist/lib/cli-args.mjs +55 -0
  42. package/dist/lib/cli-args.mjs.map +1 -0
  43. package/dist/lib/github-api.d.mts +153 -0
  44. package/dist/lib/github-api.d.mts.map +1 -0
  45. package/dist/lib/github-api.mjs +291 -0
  46. package/dist/lib/github-api.mjs.map +1 -0
  47. package/dist/lib/index.d.mts +7 -0
  48. package/dist/lib/index.d.mts.map +1 -0
  49. package/dist/lib/index.mjs +7 -0
  50. package/dist/lib/index.mjs.map +1 -0
  51. package/dist/lib/json.d.mts +12 -0
  52. package/dist/lib/json.d.mts.map +1 -0
  53. package/dist/lib/json.mjs +28 -0
  54. package/dist/lib/json.mjs.map +1 -0
  55. package/dist/lib/log.d.mts +10 -0
  56. package/dist/lib/log.d.mts.map +1 -0
  57. package/dist/lib/log.mjs +13 -0
  58. package/dist/lib/log.mjs.map +1 -0
  59. package/dist/lib/shell.d.mts +18 -0
  60. package/dist/lib/shell.d.mts.map +1 -0
  61. package/dist/lib/shell.mjs +42 -0
  62. package/dist/lib/shell.mjs.map +1 -0
  63. package/dist/lib/time.d.mts +17 -0
  64. package/dist/lib/time.d.mts.map +1 -0
  65. package/dist/lib/time.mjs +35 -0
  66. package/dist/lib/time.mjs.map +1 -0
  67. package/dist/open-pr/github.d.mts +72 -0
  68. package/dist/open-pr/github.d.mts.map +1 -0
  69. package/dist/open-pr/github.mjs +249 -0
  70. package/dist/open-pr/github.mjs.map +1 -0
  71. package/dist/open-pr/index.d.mts +6 -0
  72. package/dist/open-pr/index.d.mts.map +1 -0
  73. package/dist/open-pr/index.mjs +6 -0
  74. package/dist/open-pr/index.mjs.map +1 -0
  75. package/dist/open-pr/main.d.mts +36 -0
  76. package/dist/open-pr/main.d.mts.map +1 -0
  77. package/dist/open-pr/main.mjs +204 -0
  78. package/dist/open-pr/main.mjs.map +1 -0
  79. package/dist/open-pr/options.d.mts +20 -0
  80. package/dist/open-pr/options.d.mts.map +1 -0
  81. package/dist/open-pr/options.mjs +66 -0
  82. package/dist/open-pr/options.mjs.map +1 -0
  83. package/dist/open-pr/steps.d.mts +23 -0
  84. package/dist/open-pr/steps.d.mts.map +1 -0
  85. package/dist/open-pr/steps.mjs +38 -0
  86. package/dist/open-pr/steps.mjs.map +1 -0
  87. package/dist/open-pr/types.d.mts +179 -0
  88. package/dist/open-pr/types.d.mts.map +1 -0
  89. package/dist/open-pr/types.mjs +20 -0
  90. package/dist/open-pr/types.mjs.map +1 -0
  91. package/dist/pr-report/github.d.mts +59 -0
  92. package/dist/pr-report/github.d.mts.map +1 -0
  93. package/dist/pr-report/github.mjs +561 -0
  94. package/dist/pr-report/github.mjs.map +1 -0
  95. package/dist/pr-report/index.d.mts +8 -0
  96. package/dist/pr-report/index.d.mts.map +1 -0
  97. package/dist/pr-report/index.mjs +8 -0
  98. package/dist/pr-report/index.mjs.map +1 -0
  99. package/dist/pr-report/linked-issues.d.mts +15 -0
  100. package/dist/pr-report/linked-issues.d.mts.map +1 -0
  101. package/dist/pr-report/linked-issues.mjs +39 -0
  102. package/dist/pr-report/linked-issues.mjs.map +1 -0
  103. package/dist/pr-report/main.d.mts +42 -0
  104. package/dist/pr-report/main.d.mts.map +1 -0
  105. package/dist/pr-report/main.mjs +163 -0
  106. package/dist/pr-report/main.mjs.map +1 -0
  107. package/dist/pr-report/options.d.mts +36 -0
  108. package/dist/pr-report/options.d.mts.map +1 -0
  109. package/dist/pr-report/options.mjs +90 -0
  110. package/dist/pr-report/options.mjs.map +1 -0
  111. package/dist/pr-report/queue.d.mts +28 -0
  112. package/dist/pr-report/queue.d.mts.map +1 -0
  113. package/dist/pr-report/queue.mjs +74 -0
  114. package/dist/pr-report/queue.mjs.map +1 -0
  115. package/dist/pr-report/render.d.mts +14 -0
  116. package/dist/pr-report/render.d.mts.map +1 -0
  117. package/dist/pr-report/render.mjs +318 -0
  118. package/dist/pr-report/render.mjs.map +1 -0
  119. package/dist/pr-report/repo-settings.d.mts +12 -0
  120. package/dist/pr-report/repo-settings.d.mts.map +1 -0
  121. package/dist/pr-report/repo-settings.mjs +22 -0
  122. package/dist/pr-report/repo-settings.mjs.map +1 -0
  123. package/dist/push-fixed-pr/index.d.mts +2 -0
  124. package/dist/push-fixed-pr/index.d.mts.map +1 -0
  125. package/dist/push-fixed-pr/index.mjs +2 -0
  126. package/dist/push-fixed-pr/index.mjs.map +1 -0
  127. package/dist/push-fixed-pr/push-fixed-pr.d.mts +54 -0
  128. package/dist/push-fixed-pr/push-fixed-pr.d.mts.map +1 -0
  129. package/dist/push-fixed-pr/push-fixed-pr.mjs +172 -0
  130. package/dist/push-fixed-pr/push-fixed-pr.mjs.map +1 -0
  131. package/dist/report-unowned-prs/index.d.mts +2 -0
  132. package/dist/report-unowned-prs/index.d.mts.map +1 -0
  133. package/dist/report-unowned-prs/index.mjs +2 -0
  134. package/dist/report-unowned-prs/index.mjs.map +1 -0
  135. package/dist/report-unowned-prs/report-unowned-prs.d.mts +49 -0
  136. package/dist/report-unowned-prs/report-unowned-prs.d.mts.map +1 -0
  137. package/dist/report-unowned-prs/report-unowned-prs.mjs +127 -0
  138. package/dist/report-unowned-prs/report-unowned-prs.mjs.map +1 -0
  139. package/dist/tsconfig.json +1 -0
  140. package/dist/unblock-prs/auto-fix.d.mts +45 -0
  141. package/dist/unblock-prs/auto-fix.d.mts.map +1 -0
  142. package/dist/unblock-prs/auto-fix.mjs +207 -0
  143. package/dist/unblock-prs/auto-fix.mjs.map +1 -0
  144. package/dist/unblock-prs/checks.d.mts +307 -0
  145. package/dist/unblock-prs/checks.d.mts.map +1 -0
  146. package/dist/unblock-prs/checks.mjs +372 -0
  147. package/dist/unblock-prs/checks.mjs.map +1 -0
  148. package/dist/unblock-prs/claims.d.mts +21 -0
  149. package/dist/unblock-prs/claims.d.mts.map +1 -0
  150. package/dist/unblock-prs/claims.mjs +23 -0
  151. package/dist/unblock-prs/claims.mjs.map +1 -0
  152. package/dist/unblock-prs/config.d.mts +487 -0
  153. package/dist/unblock-prs/config.d.mts.map +1 -0
  154. package/dist/unblock-prs/config.mjs +119 -0
  155. package/dist/unblock-prs/config.mjs.map +1 -0
  156. package/dist/unblock-prs/constants.d.mts +28 -0
  157. package/dist/unblock-prs/constants.d.mts.map +1 -0
  158. package/dist/unblock-prs/constants.mjs +28 -0
  159. package/dist/unblock-prs/constants.mjs.map +1 -0
  160. package/dist/unblock-prs/demotions.d.mts +42 -0
  161. package/dist/unblock-prs/demotions.d.mts.map +1 -0
  162. package/dist/unblock-prs/demotions.mjs +50 -0
  163. package/dist/unblock-prs/demotions.mjs.map +1 -0
  164. package/dist/unblock-prs/github.d.mts +739 -0
  165. package/dist/unblock-prs/github.d.mts.map +1 -0
  166. package/dist/unblock-prs/github.mjs +626 -0
  167. package/dist/unblock-prs/github.mjs.map +1 -0
  168. package/dist/unblock-prs/index.d.mts +25 -0
  169. package/dist/unblock-prs/index.d.mts.map +1 -0
  170. package/dist/unblock-prs/index.mjs +25 -0
  171. package/dist/unblock-prs/index.mjs.map +1 -0
  172. package/dist/unblock-prs/labels.d.mts +49 -0
  173. package/dist/unblock-prs/labels.d.mts.map +1 -0
  174. package/dist/unblock-prs/labels.mjs +49 -0
  175. package/dist/unblock-prs/labels.mjs.map +1 -0
  176. package/dist/unblock-prs/main.d.mts +179 -0
  177. package/dist/unblock-prs/main.d.mts.map +1 -0
  178. package/dist/unblock-prs/main.mjs +640 -0
  179. package/dist/unblock-prs/main.mjs.map +1 -0
  180. package/dist/unblock-prs/merge-after.d.mts +46 -0
  181. package/dist/unblock-prs/merge-after.d.mts.map +1 -0
  182. package/dist/unblock-prs/merge-after.mjs +65 -0
  183. package/dist/unblock-prs/merge-after.mjs.map +1 -0
  184. package/dist/unblock-prs/options.d.mts +35 -0
  185. package/dist/unblock-prs/options.d.mts.map +1 -0
  186. package/dist/unblock-prs/options.mjs +88 -0
  187. package/dist/unblock-prs/options.mjs.map +1 -0
  188. package/dist/unblock-prs/owner.d.mts +32 -0
  189. package/dist/unblock-prs/owner.d.mts.map +1 -0
  190. package/dist/unblock-prs/owner.mjs +63 -0
  191. package/dist/unblock-prs/owner.mjs.map +1 -0
  192. package/dist/unblock-prs/quiet.d.mts +21 -0
  193. package/dist/unblock-prs/quiet.d.mts.map +1 -0
  194. package/dist/unblock-prs/quiet.mjs +42 -0
  195. package/dist/unblock-prs/quiet.mjs.map +1 -0
  196. package/dist/unblock-prs/rebase.d.mts +120 -0
  197. package/dist/unblock-prs/rebase.d.mts.map +1 -0
  198. package/dist/unblock-prs/rebase.mjs +576 -0
  199. package/dist/unblock-prs/rebase.mjs.map +1 -0
  200. package/dist/unblock-prs/release.d.mts +62 -0
  201. package/dist/unblock-prs/release.d.mts.map +1 -0
  202. package/dist/unblock-prs/release.mjs +94 -0
  203. package/dist/unblock-prs/release.mjs.map +1 -0
  204. package/dist/unblock-prs/set-aside-comment.d.mts +20 -0
  205. package/dist/unblock-prs/set-aside-comment.d.mts.map +1 -0
  206. package/dist/unblock-prs/set-aside-comment.mjs +93 -0
  207. package/dist/unblock-prs/set-aside-comment.mjs.map +1 -0
  208. package/dist/unblock-prs/set-aside-detail.d.mts +41 -0
  209. package/dist/unblock-prs/set-aside-detail.d.mts.map +1 -0
  210. package/dist/unblock-prs/set-aside-detail.mjs +56 -0
  211. package/dist/unblock-prs/set-aside-detail.mjs.map +1 -0
  212. package/dist/unblock-prs/skips.d.mts +85 -0
  213. package/dist/unblock-prs/skips.d.mts.map +1 -0
  214. package/dist/unblock-prs/skips.mjs +141 -0
  215. package/dist/unblock-prs/skips.mjs.map +1 -0
  216. package/dist/unblock-prs/stack.d.mts +98 -0
  217. package/dist/unblock-prs/stack.d.mts.map +1 -0
  218. package/dist/unblock-prs/stack.mjs +141 -0
  219. package/dist/unblock-prs/stack.mjs.map +1 -0
  220. package/dist/unblock-prs/triage.d.mts +28 -0
  221. package/dist/unblock-prs/triage.d.mts.map +1 -0
  222. package/dist/unblock-prs/triage.mjs +396 -0
  223. package/dist/unblock-prs/triage.mjs.map +1 -0
  224. package/dist/unblock-prs/types.d.mts +793 -0
  225. package/dist/unblock-prs/types.d.mts.map +1 -0
  226. package/dist/unblock-prs/types.mjs +26 -0
  227. package/dist/unblock-prs/types.mjs.map +1 -0
  228. package/dist/unblock-prs/util.d.mts +23 -0
  229. package/dist/unblock-prs/util.d.mts.map +1 -0
  230. package/dist/unblock-prs/util.mjs +60 -0
  231. package/dist/unblock-prs/util.mjs.map +1 -0
  232. package/dist/unblock-prs/version-pr.d.mts +57 -0
  233. package/dist/unblock-prs/version-pr.d.mts.map +1 -0
  234. package/dist/unblock-prs/version-pr.mjs +79 -0
  235. package/dist/unblock-prs/version-pr.mjs.map +1 -0
  236. package/dist/unblock-prs/watch.d.mts +17 -0
  237. package/dist/unblock-prs/watch.d.mts.map +1 -0
  238. package/dist/unblock-prs/watch.mjs +128 -0
  239. package/dist/unblock-prs/watch.mjs.map +1 -0
  240. package/package.json +118 -3
  241. package/src/claim-pr/claim-pr.mts +380 -0
  242. package/src/claim-pr/claim-pr.test.mts +176 -0
  243. package/src/claim-pr/index.mts +1 -0
  244. package/src/cmd/claim-pr.mts +32 -0
  245. package/src/cmd/open-pr.mts +28 -0
  246. package/src/cmd/pr-report.mts +28 -0
  247. package/src/cmd/push-fixed-pr.mts +36 -0
  248. package/src/cmd/report-unowned-prs.mts +37 -0
  249. package/src/cmd/unblock-prs.mts +24 -0
  250. package/src/entry-point.mts +3 -0
  251. package/src/lib/cli-args.mts +86 -0
  252. package/src/lib/cli-args.test.mts +92 -0
  253. package/src/lib/github-api.mts +463 -0
  254. package/src/lib/github-api.test.mts +40 -0
  255. package/src/lib/index.mts +6 -0
  256. package/src/lib/json.mts +43 -0
  257. package/src/lib/json.test.mts +34 -0
  258. package/src/lib/log.mts +19 -0
  259. package/src/lib/log.test.mts +45 -0
  260. package/src/lib/shell.mts +52 -0
  261. package/src/lib/time.mts +49 -0
  262. package/src/open-pr/README.md +237 -0
  263. package/src/open-pr/github.mts +444 -0
  264. package/src/open-pr/index.mts +5 -0
  265. package/src/open-pr/main.mts +327 -0
  266. package/src/open-pr/options.mts +101 -0
  267. package/src/open-pr/options.test.mts +67 -0
  268. package/src/open-pr/steps.mts +57 -0
  269. package/src/open-pr/steps.test.mts +59 -0
  270. package/src/open-pr/types.mts +42 -0
  271. package/src/pr-report/README.md +244 -0
  272. package/src/pr-report/github.mts +911 -0
  273. package/src/pr-report/index.mts +7 -0
  274. package/src/pr-report/linked-issues.mts +51 -0
  275. package/src/pr-report/linked-issues.test.mts +65 -0
  276. package/src/pr-report/main.mts +257 -0
  277. package/src/pr-report/options.mts +140 -0
  278. package/src/pr-report/queue.mts +125 -0
  279. package/src/pr-report/render.mts +428 -0
  280. package/src/pr-report/render.test.mts +379 -0
  281. package/src/pr-report/repo-settings.mts +34 -0
  282. package/src/push-fixed-pr/index.mts +1 -0
  283. package/src/push-fixed-pr/push-fixed-pr.mts +276 -0
  284. package/src/push-fixed-pr/push-fixed-pr.test.mts +228 -0
  285. package/src/report-unowned-prs/index.mts +1 -0
  286. package/src/report-unowned-prs/report-unowned-prs.mts +190 -0
  287. package/src/report-unowned-prs/report-unowned-prs.test.mts +87 -0
  288. package/src/unblock-prs/README.md +1616 -0
  289. package/src/unblock-prs/auto-fix.mts +334 -0
  290. package/src/unblock-prs/auto-fix.test.mts +159 -0
  291. package/src/unblock-prs/checks.mts +538 -0
  292. package/src/unblock-prs/checks.test.mts +507 -0
  293. package/src/unblock-prs/claims.mts +33 -0
  294. package/src/unblock-prs/claims.test.mts +64 -0
  295. package/src/unblock-prs/config.mts +187 -0
  296. package/src/unblock-prs/config.schema.json +71 -0
  297. package/src/unblock-prs/config.test.mts +139 -0
  298. package/src/unblock-prs/constants.mts +33 -0
  299. package/src/unblock-prs/demotions.mts +73 -0
  300. package/src/unblock-prs/demotions.test.mts +100 -0
  301. package/src/unblock-prs/github.mts +1042 -0
  302. package/src/unblock-prs/github.test.mts +84 -0
  303. package/src/unblock-prs/index.mts +24 -0
  304. package/src/unblock-prs/labels.mts +70 -0
  305. package/src/unblock-prs/main.mts +1051 -0
  306. package/src/unblock-prs/merge-after.mts +117 -0
  307. package/src/unblock-prs/merge-after.test.mts +120 -0
  308. package/src/unblock-prs/options.mts +157 -0
  309. package/src/unblock-prs/owner.mts +91 -0
  310. package/src/unblock-prs/owner.test.mts +114 -0
  311. package/src/unblock-prs/quiet.mts +62 -0
  312. package/src/unblock-prs/quiet.test.mts +175 -0
  313. package/src/unblock-prs/rebase.mts +962 -0
  314. package/src/unblock-prs/release.mts +149 -0
  315. package/src/unblock-prs/release.test.mts +209 -0
  316. package/src/unblock-prs/set-aside-comment.mts +143 -0
  317. package/src/unblock-prs/set-aside-comment.test.mts +148 -0
  318. package/src/unblock-prs/set-aside-detail.mts +82 -0
  319. package/src/unblock-prs/set-aside-detail.test.mts +131 -0
  320. package/src/unblock-prs/skips.mts +215 -0
  321. package/src/unblock-prs/skips.test.mts +280 -0
  322. package/src/unblock-prs/stack.mts +220 -0
  323. package/src/unblock-prs/stack.test.mts +449 -0
  324. package/src/unblock-prs/triage.mts +669 -0
  325. package/src/unblock-prs/triage.test.mts +100 -0
  326. package/src/unblock-prs/types.mts +358 -0
  327. package/src/unblock-prs/util.mts +78 -0
  328. package/src/unblock-prs/util.test.mts +26 -0
  329. package/src/unblock-prs/version-pr.mts +112 -0
  330. package/src/unblock-prs/version-pr.test.mts +78 -0
  331. package/src/unblock-prs/watch.mts +219 -0
@@ -0,0 +1,249 @@
1
+
2
+ import dedent from 'dedent';
3
+ import { closingKeywordIssuesIn, inheritStartAfter, isSafeRefName, parseMergeAfter, waitsFor, } from 'pr-report-core';
4
+ import { Arr, Result } from 'ts-data-forge';
5
+ import * as t from 'ts-fortress';
6
+ import { git, graphql, resolveRepo, resolveToken, rest, sh, } from '../lib/index.mjs';
7
+ import { PullRequestListResponseSchema, PullRequestResponseSchema, toPullRequest, } from './types.mjs';
8
+
9
+
10
+
11
+
12
+ export const preflight = async () => {
13
+ const token = await resolveToken();
14
+ if (Result.isErr(token)) {
15
+ return token;
16
+ }
17
+ const repo = await resolveRepo();
18
+ if (Result.isErr(repo)) {
19
+ return repo;
20
+ }
21
+ const api = { repo: repo.value, token: token.value };
22
+ const branch = await readRefName('git rev-parse --abbrev-ref HEAD');
23
+ if (Result.isErr(branch)) {
24
+ return branch;
25
+ }
26
+ if (branch.value === 'HEAD') {
27
+ return Result.err('HEAD is detached; check a branch out first');
28
+ }
29
+ const repository = await rest(api, 'GET', '', t.record({ default_branch: t.string() }));
30
+ if (Result.isErr(repository)) {
31
+ return Result.err(`cannot read the repository: ${repository.value}`);
32
+ }
33
+ const defaultBranch = repository.value.default_branch;
34
+ if (branch.value === defaultBranch) {
35
+ return Result.err(`the current branch is ${branch.value}, which is what pull requests target; make a branch first`);
36
+ }
37
+ return Result.ok({ api, branch: branch.value, defaultBranch });
38
+ };
39
+
40
+ export const lastCommitSubject = async () => {
41
+ const subject = await git('git log -1 --format=%s');
42
+ if (Result.isErr(subject)) {
43
+ return subject;
44
+ }
45
+ const trimmed = subject.value.trim();
46
+ return trimmed === ''
47
+ ? Result.err('the branch tip has no commit subject to use as a title')
48
+ : Result.ok(trimmed);
49
+ };
50
+
51
+ export const pushBranch = async (branch) => {
52
+ const pushed = await git(`git push -u origin ${sh(branch)}`);
53
+ return Result.isErr(pushed) ? pushed : Result.ok(undefined);
54
+ };
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+ export const findOpenPullRequest = async (api, branch) => {
63
+ const listed = await rest(api, 'GET', '/pulls', PullRequestListResponseSchema, {
64
+ query: {
65
+ state: 'open',
66
+ per_page: '1',
67
+ head: `${api.repo.owner}:${branch}`,
68
+ },
69
+ });
70
+ if (Result.isErr(listed)) {
71
+ return listed;
72
+ }
73
+ const [found] = listed.value;
74
+
75
+
76
+ return Result.ok(found === undefined ? undefined : toPullRequest(found));
77
+ };
78
+
79
+
80
+
81
+
82
+
83
+
84
+ export const findStackParent = async (api, base) => {
85
+ const listed = await rest(api, 'GET', '/pulls', PullRequestListResponseSchema, {
86
+ query: {
87
+ state: 'open',
88
+ per_page: '2',
89
+ head: `${api.repo.owner}:${base}`,
90
+ },
91
+ });
92
+ if (Result.isErr(listed)) {
93
+ return listed;
94
+ }
95
+ const [parent, second] = listed.value;
96
+ return parent === undefined
97
+ ? Result.err(`${base} is neither the default branch nor the branch of an open pull request; a stacked pull request targets the branch of the one below it`)
98
+ : second === undefined
99
+ ? Result.ok(parent.number)
100
+ : Result.err(`${base} is the branch of more than one open pull request (#${parent.number}, #${second.number}), so which one this is stacked on cannot be told`);
101
+ };
102
+
103
+
104
+
105
+
106
+ export const containsBase = async (base) => {
107
+ const fetched = await git(`git fetch --quiet origin ${sh(`+refs/heads/${base}:refs/remotes/origin/${base}`)}`);
108
+ if (Result.isErr(fetched)) {
109
+ return Result.err(`cannot fetch ${base}: ${fetched.value}`);
110
+ }
111
+ const contained = await git(`git merge-base --is-ancestor ${sh(`origin/${base}`)} HEAD`);
112
+ return Result.isErr(contained)
113
+ ? Result.err(`the branch does not contain the tip of ${base}; rebase it onto origin/${base} first, or its diff will carry that layer's old commits`)
114
+ : Result.ok(undefined);
115
+ };
116
+ export const viewPullRequest = async (api, prNumber) => {
117
+ const viewed = await rest(api, 'GET', `/pulls/${prNumber}`, PullRequestResponseSchema);
118
+ return Result.isErr(viewed) ? viewed : Result.ok(toPullRequest(viewed.value));
119
+ };
120
+
121
+
122
+
123
+
124
+
125
+ export const createPullRequest = async ({ api, branch, base, title, body, }) => {
126
+ const created = await rest(api, 'POST', '/pulls', t.record({ number: t.number() }), { body: { head: branch, base, title, body, draft: false } });
127
+ return Result.isErr(created) ? created : Result.ok(created.value.number);
128
+ };
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+ export const missingInheritedOrder = async (api, prNumber, alsoDeclared) => {
140
+ const viewed = await rest(api, 'GET', `/pulls/${prNumber}`, BodiesSchema, {
141
+ withBodyHtml: true,
142
+ });
143
+ if (Result.isErr(viewed)) {
144
+ return viewed;
145
+ }
146
+ const body = viewed.value.body ?? '';
147
+ const closes = closingKeywordIssuesIn(api.repo, viewed.value.body_html ?? '');
148
+ const mut_startAfter = new Map();
149
+ for (const issue of closes) {
150
+ const read = await rest(api, 'GET', `/issues/${issue}`, IssueSchema);
151
+ if (Result.isErr(read)) {
152
+ return read;
153
+ }
154
+
155
+ if (read.value.state !== 'open' || read.value.pull_request !== undefined) {
156
+ continue;
157
+ }
158
+ const blockedBy = await blockedByOf(api, issue, read.value);
159
+ if (Result.isErr(blockedBy)) {
160
+ return blockedBy;
161
+ }
162
+ mut_startAfter.set(issue, waitsFor(read.value.body ?? '', blockedBy.value));
163
+ }
164
+ if (!Array.from(mut_startAfter.values()).some(Arr.isNonEmpty)) {
165
+ return Result.ok({ body, missing: [] });
166
+ }
167
+ const open = await rest(api, 'GET', '/pulls', BodiesListSchema, {
168
+ query: { state: 'open', per_page: '100' },
169
+ withBodyHtml: true,
170
+ });
171
+ if (Result.isErr(open)) {
172
+ return open;
173
+ }
174
+ const others = open.value.filter(({ number }) => number !== prNumber);
175
+ const inherited = inheritStartAfter({
176
+ pulls: Arr.toUnshifted({
177
+ number: prNumber,
178
+ closes: Array.from(mut_startAfter.keys()),
179
+ })(others.map(({ number, body_html: html }) => ({
180
+ number,
181
+ closes: closingKeywordIssuesIn(api.repo, html ?? ''),
182
+ }))),
183
+ startAfterOf: mut_startAfter,
184
+ openIssues: new Set(),
185
+ });
186
+ const declared = new Set(parseMergeAfter(body).concat(alsoDeclared));
187
+ return Result.ok({
188
+ body,
189
+ missing: (inherited.get(prNumber)?.mergeAfter ?? []).filter((number) => !declared.has(number)),
190
+ });
191
+ };
192
+ export const updateBody = async (api, prNumber, body) => {
193
+ const updated = await rest(api, 'PATCH', `/pulls/${prNumber}`, t.unknown(), {
194
+ body: { body },
195
+ });
196
+ return Result.isErr(updated) ? updated : Result.ok(undefined);
197
+ };
198
+ const BodiesSchema = t.record({
199
+ number: t.number(),
200
+ body: t.union([t.string(), t.nullType]),
201
+ body_html: t.optional(t.union([t.string(), t.nullType])),
202
+ });
203
+ const BodiesListSchema = t.array(BodiesSchema);
204
+
205
+ const IssueSchema = t.record({
206
+ state: t.string(),
207
+ body: t.union([t.string(), t.nullType]),
208
+ pull_request: t.optional(t.record({})),
209
+
210
+ issue_dependencies_summary: t.optional(t.record({ total_blocked_by: t.number() })),
211
+ });
212
+
213
+
214
+
215
+
216
+
217
+ const blockedByOf = async (api, issue, read) => {
218
+ if ((read.issue_dependencies_summary?.total_blocked_by ?? 0) === 0) {
219
+ return Result.ok([]);
220
+ }
221
+ const listed = await rest(api, 'GET', `/issues/${issue}/dependencies/blocked_by`, t.array(t.record({ number: t.number(), repository_url: t.string() })), { query: { per_page: '100' } });
222
+ const own = `https://api.github.com/repos/${api.repo.owner}/${api.repo.name}`.toLowerCase();
223
+ return Result.map(listed, (blocking) => blocking
224
+ .filter(({ repository_url: url }) => url.toLowerCase() === own)
225
+ .map(({ number }) => number));
226
+ };
227
+
228
+
229
+
230
+
231
+
232
+ export const markReady = async (api, nodeId) => graphql(api, dedent `
233
+ mutation ($id: ID!) {
234
+ markPullRequestReadyForReview(input: { pullRequestId: $id }) {
235
+ clientMutationId
236
+ }
237
+ }
238
+ `, { id: nodeId });
239
+ const readRefName = async (command) => {
240
+ const read = await git(command);
241
+ if (Result.isErr(read)) {
242
+ return Result.err(`${command} failed: ${read.value}`);
243
+ }
244
+ const name = read.value.trim();
245
+ return isSafeRefName(name)
246
+ ? Result.ok(name)
247
+ : Result.err(`unexpected branch name: ${JSON.stringify(name)}`);
248
+ };
249
+ //# sourceMappingURL=github.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.mjs","sourceRoot":"","sources":["../../src/open-pr/github.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './github.mjs';
2
+ export * from './main.mjs';
3
+ export * from './options.mjs';
4
+ export * from './steps.mjs';
5
+ export * from './types.mjs';
6
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/open-pr/index.mts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './github.mjs';
2
+ export * from './main.mjs';
3
+ export * from './options.mjs';
4
+ export * from './steps.mjs';
5
+ export * from './types.mjs';
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/open-pr/index.mts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { Result } from 'ts-data-forge';
2
+ import type { Options } from './options.mjs';
3
+ /**
4
+ * Opens the pull request for the current branch the way this repository wants
5
+ * one opened: push, create it ready for review, add `skip-ci`, then
6
+ * `auto-rebase`.
7
+ *
8
+ * **It never arms auto-merge.** `unblock-prs` does, when it picks the pull
9
+ * request — once the author has queued it with `merge-queued`, and once it is
10
+ * onto the default branch. Armed any earlier, it would merge the moment its
11
+ * checks went green, reviewed or not; and a stacked one, onto a branch no
12
+ * ruleset covers, the moment nothing held it, into the layer below. So
13
+ * `skip-ci` holds the checks and nothing is armed until the queue says so.
14
+ *
15
+ * Every step is skipped when it is already done, so a run that failed part
16
+ * way through is finished by running it again rather than unpicked.
17
+ *
18
+ * **`auto-rebase` goes on every layer, stacked or not.** `unblock-prs` keeps
19
+ * only a pull request based on the default branch on its tip, so on a layer
20
+ * above it does nothing until the layer below merges and GitHub moves this
21
+ * one onto the default branch — the moment it is needed, and one at which
22
+ * nothing would add it. It goes on after `skip-ci`, so that its own `labeled`
23
+ * run finds the checks held.
24
+ *
25
+ * **A `--base` other than the default branch stacks it** on the open pull
26
+ * request that branch is from, which has to exist and which the branch has to
27
+ * contain, and declares that one with `Merge-After:` as well.
28
+ *
29
+ * **What the issues it closes start after is declared too**: the open pull
30
+ * requests their `Start-After:` comes to (`docs/issue-start-after.md`),
31
+ * written into the body's `Merge-After:` once GitHub has read which issues
32
+ * the body closes. The readers inherit it without, so the body is saying
33
+ * what they already derive.
34
+ */
35
+ export declare const openPullRequest: (options: Options) => Promise<Result<string, string>>;
36
+ //# sourceMappingURL=main.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.mts","sourceRoot":"","sources":["../../src/open-pr/main.mts"],"names":[],"mappings":"AAEA,OAAO,EAAO,MAAM,EAAmB,MAAM,eAAe,CAAC;AAe7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,eAAe,YACjB,OAAO,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4FhC,CAAC"}
@@ -0,0 +1,204 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import { AUTO_REBASE_LABEL, SKIP_CI_LABEL } from 'pr-report-core';
3
+ import { Arr, Result, unknownToString } from 'ts-data-forge';
4
+ import { addLabel, log } from '../lib/index.mjs';
5
+ import { containsBase, createPullRequest, findOpenPullRequest, findStackParent, lastCommitSubject, markReady, missingInheritedOrder, preflight, pushBranch, updateBody, viewPullRequest, } from './github.mjs';
6
+ import { mergeAfterTrailer, withInheritedMergeAfter, withStackParent, } from './steps.mjs';
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+ export const openPullRequest = async (options) => {
40
+ const context = await preflight();
41
+ if (Result.isErr(context)) {
42
+ return context;
43
+ }
44
+ const { api, branch, defaultBranch } = context.value;
45
+ const base = options.base ?? defaultBranch;
46
+ const parent = base === defaultBranch ? undefined : await stackOn(api, base);
47
+ if (parent !== undefined && Result.isErr(parent)) {
48
+ return parent;
49
+ }
50
+ const mergeAfter = withStackParent(options.mergeAfter, parent?.value);
51
+ if (options.dryRun) {
52
+ return dryRun(api, branch, base, options, parent?.value, mergeAfter);
53
+ }
54
+ const pushed = await pushBranch(branch);
55
+ if (Result.isErr(pushed)) {
56
+ return Result.err(`cannot push: ${pushed.value}`);
57
+ }
58
+ log(`pushed ${branch}`);
59
+ const existing = await findOpenPullRequest(api, branch);
60
+ if (Result.isErr(existing)) {
61
+ return existing;
62
+ }
63
+ const prNumber = existing.value === undefined
64
+ ? await open(api, branch, base, options, mergeAfter)
65
+ : Result.ok(existing.value.number);
66
+ if (Result.isErr(prNumber)) {
67
+ return prNumber;
68
+ }
69
+
70
+
71
+ const created = await viewPullRequest(api, prNumber.value);
72
+ if (Result.isErr(created)) {
73
+ return created;
74
+ }
75
+ if (created.value.isDraft) {
76
+ const ready = await markReady(api, created.value.nodeId);
77
+ if (Result.isErr(ready)) {
78
+ return Result.err(`cannot mark it ready for review: ${ready.value}`);
79
+ }
80
+ log(`#${prNumber.value}: marked ready for review`);
81
+ }
82
+ const carried = await carryStartAfter(api, prNumber.value, mergeAfter);
83
+ if (Result.isErr(carried)) {
84
+ return carried;
85
+ }
86
+ const labelled = await addLabel(api, prNumber.value, SKIP_CI_LABEL);
87
+ if (Result.isErr(labelled)) {
88
+ return Result.err(`cannot add ${SKIP_CI_LABEL}: ${labelled.value}`);
89
+ }
90
+ log(`#${prNumber.value}: ${SKIP_CI_LABEL} is on`);
91
+ const autoRebase = await addLabel(api, prNumber.value, AUTO_REBASE_LABEL);
92
+ if (Result.isErr(autoRebase)) {
93
+ return Result.err(`cannot add ${AUTO_REBASE_LABEL}: ${autoRebase.value}`);
94
+ }
95
+ log(`#${prNumber.value}: ${AUTO_REBASE_LABEL} is on`);
96
+ return Result.ok([
97
+ `#${prNumber.value}: opened, ${SKIP_CI_LABEL} and ${AUTO_REBASE_LABEL} on, auto-merge left unarmed.`,
98
+ `Once it is reviewed, add merge-queued: unblock-prs arms auto-merge when it picks it${parent === undefined ? '' : `, which is once #${parent.value} has merged`}.`,
99
+ ].join('\n'));
100
+ };
101
+
102
+
103
+
104
+
105
+
106
+
107
+ const carryStartAfter = async (api, prNumber, declared) => {
108
+ const order = await missingInheritedOrder(api, prNumber, declared);
109
+ if (Result.isErr(order)) {
110
+ return Result.err(`cannot read the issues it closes: ${order.value}`);
111
+ }
112
+ const { body, missing } = order.value;
113
+ if (!Arr.isNonEmpty(missing)) {
114
+ return Result.ok(undefined);
115
+ }
116
+ const updated = await updateBody(api, prNumber, withInheritedMergeAfter(body, missing));
117
+ if (Result.isErr(updated)) {
118
+ return Result.err(`cannot write the inherited order: ${updated.value}`);
119
+ }
120
+ log(`#${prNumber}: ${mergeAfterTrailer(missing) ?? ''}, from the Start-After of the issues it closes`);
121
+ return Result.ok(undefined);
122
+ };
123
+
124
+
125
+
126
+
127
+
128
+ const stackOn = async (api, base) => {
129
+ const parent = await findStackParent(api, base);
130
+ if (Result.isErr(parent)) {
131
+ return parent;
132
+ }
133
+ const contained = await containsBase(base);
134
+ if (Result.isErr(contained)) {
135
+ return contained;
136
+ }
137
+ log(`stacking on #${parent.value} (${base})`);
138
+ return parent;
139
+ };
140
+ const open = async (api, branch, base, options, mergeAfter) => {
141
+ const title = await resolveTitle(options);
142
+ if (Result.isErr(title)) {
143
+ return title;
144
+ }
145
+ const body = await resolveBody(options, mergeAfter);
146
+ if (Result.isErr(body)) {
147
+ return body;
148
+ }
149
+ const created = await createPullRequest({
150
+ api,
151
+ branch,
152
+ base,
153
+ title: title.value,
154
+ body: body.value,
155
+ });
156
+ if (Result.isErr(created)) {
157
+ return Result.err(`cannot create the pull request: ${created.value}`);
158
+ }
159
+ log(`#${created.value}: opened against ${base}`);
160
+ return created;
161
+ };
162
+ const resolveTitle = async (options) => options.title === undefined ? lastCommitSubject() : Result.ok(options.title);
163
+ const resolveBody = async (options, mergeAfter) => {
164
+ const trailer = mergeAfterTrailer(mergeAfter);
165
+ if (options.bodyFile === undefined) {
166
+ return Result.ok(trailer === undefined ? '' : `${trailer}\n`);
167
+ }
168
+ const read = await Result.fromPromise(
169
+
170
+
171
+ fs.readFile(options.bodyFile, 'utf8'));
172
+ if (Result.isErr(read)) {
173
+ return Result.err(`cannot read ${options.bodyFile}: ${unknownToString(read.value)}`);
174
+ }
175
+
176
+
177
+ return Result.ok(trailer === undefined ? read.value : `${trailer}\n\n${read.value}`);
178
+ };
179
+ const dryRun = async (api, branch, base, options, parent, mergeAfter) => {
180
+ const existing = await findOpenPullRequest(api, branch);
181
+ if (Result.isErr(existing)) {
182
+ return existing;
183
+ }
184
+ const title = await resolveTitle(options);
185
+ const trailer = mergeAfterTrailer(mergeAfter);
186
+ const steps = [
187
+ `push ${branch} to origin`,
188
+ existing.value === undefined
189
+ ? `open a pull request against ${base} titled ${JSON.stringify(Result.isOk(title) ? title.value : '(unreadable)')}`
190
+ : `#${existing.value.number} is open already; leave it as it is`,
191
+ existing.value?.isDraft === true
192
+ ? `#${existing.value.number}: mark it ready for review`
193
+ : undefined,
194
+ `add ${SKIP_CI_LABEL}`,
195
+ `add ${AUTO_REBASE_LABEL}`,
196
+ parent === undefined
197
+ ? 'leave auto-merge unarmed: unblock-prs arms it when it picks it'
198
+ : `leave auto-merge unarmed: it is stacked on #${parent}, and unblock-prs arms it when it picks it, after #${parent} merges`,
199
+ trailer === undefined ? undefined : `declare ${trailer}`,
200
+ 'add to Merge-After the open pull requests the issues it closes start after, if the body does not name them',
201
+ ].filter((step) => step !== undefined);
202
+ return Result.ok(Arr.toUnshifted('Would:')(steps.map((step) => ` - ${step}`)).join('\n'));
203
+ };
204
+ //# sourceMappingURL=main.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.mjs","sourceRoot":"","sources":["../../src/open-pr/main.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /** What the command line says, and how it is read. */
2
+ import { Result } from 'ts-data-forge';
3
+ export type Options = Readonly<{
4
+ /** The pull request title; the branch's last commit subject when absent. */
5
+ title: string | undefined;
6
+ /** A file to take the body from; only the trailer, or nothing, when absent. */
7
+ bodyFile: string | undefined;
8
+ /**
9
+ * What to target; the repository's default branch when absent. Another
10
+ * open pull request's branch stacks it on that pull request.
11
+ */
12
+ base: string | undefined;
13
+ /** Pull requests to declare with `Merge-After:`, in the order given. */
14
+ mergeAfter: readonly number[];
15
+ /** Say what would be done, and touch nothing. */
16
+ dryRun: boolean;
17
+ }>;
18
+ export declare const HELP: string;
19
+ export declare const parseOptions: (args: readonly string[]) => Result<Options | 'help', string>;
20
+ //# sourceMappingURL=options.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.mts","sourceRoot":"","sources":["../../src/open-pr/options.mts"],"names":[],"mappings":"AAAA,sDAAsD;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC7B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,wEAAwE;IACxE,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAEH,eAAO,MAAM,IAAI,QAsBL,CAAC;AAEb,eAAO,MAAM,YAAY,SACjB,SAAS,MAAM,EAAE,KACtB,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,MAAM,CAgCjC,CAAC"}
@@ -0,0 +1,66 @@
1
+
2
+ import { SKIP_CI_LABEL } from 'pr-report-core';
3
+ import { Result } from 'ts-data-forge';
4
+ import { parseCommandArgs, pullRequestNumber } from '../lib/index.mjs';
5
+ export const HELP = [
6
+ 'Usage: open-pr [options]',
7
+ '',
8
+ 'Opens the pull request for the current branch the way this repository',
9
+ 'wants one opened: push, create it ready for review, and add the',
10
+ `${SKIP_CI_LABEL} label. It never arms auto-merge: unblock-prs does, when it`,
11
+ 'picks the pull request once it is labelled merge-queued.',
12
+ '',
13
+ 'Re-running is safe: each step is skipped when it is already done, so a run',
14
+ 'that failed part way through is finished by running it again.',
15
+ '',
16
+ 'The description is yours to write — say in it which checks you ran, since',
17
+ `while ${SKIP_CI_LABEL} is on they are the only checks the branch gets.`,
18
+ '',
19
+ 'Options:',
20
+ ' --title <text> pull request title (default: the last commit subject)',
21
+ ' --body-file <path> file to take the body from (default: the trailer alone)',
22
+ ' --base <branch> what to target (default: the repository default branch);',
23
+ ' the branch of an open pull request stacks it on that one',
24
+ ' --merge-after <number> declare a predecessor; repeat for several',
25
+ ' --dry-run say what would be done, and touch nothing',
26
+ ' -h, --help show this help',
27
+ ].join('\n');
28
+ export const parseOptions = (args) => {
29
+ const parsed = parseCommandArgs(args, {
30
+ title: { type: 'string' },
31
+ 'body-file': { type: 'string' },
32
+ base: { type: 'string' },
33
+ 'merge-after': { type: 'string', multiple: true },
34
+ 'dry-run': { type: 'boolean', default: false },
35
+ });
36
+ if (Result.isErr(parsed)) {
37
+ return parsed;
38
+ }
39
+ if (parsed.value === 'help') {
40
+ return Result.ok('help');
41
+ }
42
+ const values = parsed.value;
43
+ const mergeAfter = parseMergeAfter(values['merge-after'] ?? []);
44
+ if (Result.isErr(mergeAfter)) {
45
+ return mergeAfter;
46
+ }
47
+ return Result.ok({
48
+ title: values.title,
49
+ bodyFile: values['body-file'],
50
+ base: values.base,
51
+ mergeAfter: mergeAfter.value,
52
+ dryRun: values['dry-run'],
53
+ });
54
+ };
55
+ const parseMergeAfter = (raw) => {
56
+ const mut_numbers = [];
57
+ for (const value of raw) {
58
+ const number = pullRequestNumber(value);
59
+ if (number === undefined) {
60
+ return Result.err(`--merge-after must be a pull request number, got ${JSON.stringify(value)}`);
61
+ }
62
+ mut_numbers.push(number);
63
+ }
64
+ return Result.ok(mut_numbers);
65
+ };
66
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../src/open-pr/options.mts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkBvE,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,0BAA0B;IAC1B,EAAE;IACF,uEAAuE;IACvE,iEAAiE;IACjE,GAAG,aAAa,6DAA6D;IAC7E,0DAA0D;IAC1D,EAAE;IACF,4EAA4E;IAC5E,+DAA+D;IAC/D,EAAE;IACF,2EAA2E;IAC3E,SAAS,aAAa,kDAAkD;IACxE,EAAE;IACF,UAAU;IACV,iFAAiF;IACjF,mFAAmF;IACnF,oFAAoF;IACpF,oFAAoF;IACpF,qEAAqE;IACrE,qEAAqE;IACrE,0CAA0C;CAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAuB,EACW,EAAE;IACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE;QACpC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;KAC/C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAE5B,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,GAAsB,EACa,EAAE;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC,GAAG,CACf,oDAAoD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;AAChC,CAAC,CAAC"}