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,576 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ import * as os from 'node:os';
8
+ import * as path from 'node:path';
9
+ import { isSafeRefName, MERGE_QUEUED_LABEL, SKIP_CI_LABEL, stackDescendants, } from 'pr-report-core';
10
+ import { Arr, isRecord, Result } from 'ts-data-forge';
11
+ import { git, log, removeLabel, sh } from '../lib/index.mjs';
12
+ import { armAutoMerge, mergedHeadOf, readBaseChanges, remoteSha, removeWorktree, viewPullRequest, } from './github.mjs';
13
+ import { isMergeQueued, isSkipCiLabelled } from './labels.mjs';
14
+ import { describeCommandFailure, describeConflict, } from './set-aside-detail.mjs';
15
+ import { withSkip } from './skips.mjs';
16
+ import { autoRebaseTargets, restackable, retargetedFrom, retargetedLayers, stackParentsOf, } from './stack.mjs';
17
+ import { lastLines, stopRequested } from './util.mjs';
18
+ import { isVersionPullRequest } from './version-pr.mjs';
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+ const rebaseAndPush = async (pr, target) => {
32
+ const branch = pr.headRefName;
33
+ const worktreeDir = path.join(os.tmpdir(), 'unblock-prs', `pr-${pr.number}`);
34
+ const rebaseFailed = (detail) => Result.err({ reason: 'rebase-failed', detail });
35
+
36
+ await removeWorktree(worktreeDir);
37
+ const fetched = await git(Arr.toUnshifted('git fetch --quiet origin')(Arr.toPushed(target.fetch, branch).map(sh)).join(' '));
38
+ if (Result.isErr(fetched)) {
39
+ return rebaseFailed(`fetch failed: ${fetched.value}`);
40
+ }
41
+ const remoteHead = await git(`git rev-parse ${sh(`origin/${branch}`)}`);
42
+ if (Result.isErr(remoteHead)) {
43
+ return rebaseFailed(`cannot resolve origin/${branch}: ${remoteHead.value}`);
44
+ }
45
+ if (remoteHead.value.trim() !== pr.headRefOid) {
46
+ return Result.ok({ kind: 'moved' });
47
+ }
48
+ const added = await git(`git worktree add --detach ${sh(worktreeDir)} ${sh(pr.headRefOid)}`);
49
+ if (Result.isErr(added)) {
50
+ return rebaseFailed(`checkout failed: ${added.value}`);
51
+ }
52
+ const result = await rebaseInWorktree(pr, target, worktreeDir);
53
+ await removeWorktree(worktreeDir);
54
+ return result;
55
+ };
56
+
57
+
58
+
59
+
60
+
61
+
62
+ const rebaseInWorktree = async (pr, target, worktreeDir) => {
63
+ const branch = pr.headRefName;
64
+ const rebaseFailed = (detail, output) => Result.err({
65
+ reason: 'rebase-failed',
66
+ detail,
67
+ ...(output === undefined ? {} : { output }),
68
+ });
69
+ const { upstream } = target;
70
+ const contained = upstream !== undefined &&
71
+ Result.isOk(await git(`git merge-base --is-ancestor ${sh(upstream.sha)} HEAD`, worktreeDir));
72
+ if (!contained && upstream?.required === true) {
73
+ return rebaseFailed(`it does not contain ${upstream.sha.slice(0, 10)}, the head it was stacked on, so which commits are its own cannot be told`);
74
+ }
75
+ const rebased = await git(contained
76
+ ? `git rebase --onto ${sh(target.onto)} ${sh(upstream.sha)}`
77
+ : `git rebase ${sh(target.onto)}`, worktreeDir);
78
+ if (Result.isErr(rebased)) {
79
+ const conflicted = await git('git diff --name-only --diff-filter=U', worktreeDir);
80
+ await git('git rebase --abort', worktreeDir);
81
+ return rebaseFailed(describeConflict(Result.isOk(conflicted)
82
+ ? conflicted.value.split('\n').filter((line) => line !== '')
83
+ : [], lastLines(rebased.value, 5), target.onto), rebased.value);
84
+ }
85
+ const newHead = await git('git rev-parse HEAD', worktreeDir);
86
+ if (Result.isErr(newHead)) {
87
+ return rebaseFailed(`cannot read the rebased head: ${newHead.value}`);
88
+ }
89
+ const sha = newHead.value.trim();
90
+ if (sha === pr.headRefOid) {
91
+ return Result.ok({ kind: 'rebased', head: sha });
92
+ }
93
+ const ontoHead = await git(`git rev-parse ${sh(target.onto)}`, worktreeDir);
94
+ if (Result.isOk(ontoHead) && sha === ontoHead.value.trim()) {
95
+
96
+
97
+
98
+
99
+
100
+ return Result.err({
101
+ reason: 'already-in-base',
102
+ detail: `every commit is already in ${target.onto}; the pull request has nothing left to merge`,
103
+ });
104
+ }
105
+ const pushed = await pushLeased(branch, sha, pr.headRefOid, worktreeDir);
106
+ if (Result.isErr(pushed)) {
107
+ return Result.err({
108
+ reason: 'push-failed',
109
+ detail: `push refused: ${lastLines(pushed.value, 5)}`,
110
+ output: pushed.value,
111
+ });
112
+ }
113
+ return Result.ok(pushed.value === 'moved'
114
+ ? { kind: 'moved' }
115
+ : { kind: 'rebased', head: sha });
116
+ };
117
+
118
+
119
+
120
+
121
+
122
+
123
+ export const pushLeased = async (branch, sha, lease, cwd) => {
124
+
125
+
126
+
127
+ const pushed = await git(`git push --force-with-lease=${sh(`${branch}:${lease}`)} origin ${sh(`${sha}:refs/heads/${branch}`)}`, cwd);
128
+ if (Result.isOk(pushed)) {
129
+ return Result.ok('pushed');
130
+ }
131
+
132
+
133
+ const remoteHeadNow = await remoteSha(branch);
134
+ return Result.isOk(remoteHeadNow) && remoteHeadNow.value !== lease
135
+ ? Result.ok('moved')
136
+ : Result.err(pushed.value);
137
+ };
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+ export const advance = async (api, pr, defaultBranch, plan) => {
178
+ if (isVersionPullRequest(pr, defaultBranch)) {
179
+ if (!isSkipCiLabelled(pr)) {
180
+
181
+
182
+ return Result.ok({ kind: 'stale-merge-state' });
183
+ }
184
+ if (plan.arm) {
185
+ const armed = await armOnPick(api, pr, pr.headRefOid, defaultBranch);
186
+ if (Result.isErr(armed) || armed.value === 'moved') {
187
+ return Result.isErr(armed) ? armed : Result.ok({ kind: 'moved' });
188
+ }
189
+ }
190
+ const unlabelled = await removeSkipCiLabel(api, pr, pr.headRefOid);
191
+ return Result.isErr(unlabelled)
192
+ ? unlabelled
193
+ : Result.ok(unlabelled.value === 'moved'
194
+ ? { kind: 'moved' }
195
+ : { kind: 'advanced', head: pr.headRefOid });
196
+ }
197
+ const merged = await stackedOnMerged(api, pr, defaultBranch);
198
+ const rebased = await rebaseAndPush(pr, {
199
+ onto: `origin/${defaultBranch}`,
200
+ fetch: merged === undefined
201
+ ? [defaultBranch]
202
+ : [defaultBranch, `refs/pull/${merged.number}/head`],
203
+ upstream: merged === undefined
204
+ ? undefined
205
+ : { sha: merged.headSha, required: false },
206
+ });
207
+ if (Result.isErr(rebased)) {
208
+ return rebased;
209
+ }
210
+ if (rebased.value.kind === 'moved') {
211
+ return Result.ok({ kind: 'moved' });
212
+ }
213
+ const { head } = rebased.value;
214
+ if (head !== pr.headRefOid) {
215
+ await restack(pr, head, plan.descendants);
216
+ }
217
+ if (plan.arm) {
218
+ const armed = await armOnPick(api, pr, head, defaultBranch);
219
+ if (Result.isErr(armed) || armed.value === 'moved') {
220
+ return Result.isErr(armed) ? armed : Result.ok({ kind: 'moved' });
221
+ }
222
+ }
223
+ if (!isSkipCiLabelled(pr)) {
224
+ return head === pr.headRefOid
225
+ ? Result.ok({ kind: 'stale-merge-state' })
226
+ : Result.ok({ kind: 'advanced', head });
227
+ }
228
+ const removed = await removeSkipCiLabel(api, pr, head);
229
+ return Result.isErr(removed)
230
+ ? removed
231
+ : Result.ok(removed.value === 'moved'
232
+ ? { kind: 'moved' }
233
+ : { kind: 'advanced', head });
234
+ };
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+ export const restackRetargeted = async (api, before, pullRequests, defaultBranch, dryRun) => {
248
+ const stackParents = stackParentsOf(pullRequests, defaultBranch);
249
+ let mut_moved = false;
250
+ for (const layer of retargetedLayers(before, pullRequests, defaultBranch)) {
251
+ if (stopRequested()) {
252
+ break;
253
+ }
254
+ const outcome = await restackOffMerged(api, layer, defaultBranch, {
255
+ dryRun,
256
+ descendants: stackDescendants(stackParents, layer.pr.number).flatMap((number) => pullRequests.filter((pr) => pr.number === number)),
257
+ });
258
+ mut_moved ||= outcome !== 'untouched';
259
+ }
260
+ return mut_moved;
261
+ };
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+ export const restackBehind = async (pullRequests, defaultBranch, context) => {
275
+ const targets = autoRebaseTargets(pullRequests, defaultBranch, context);
276
+ if (!Arr.isNonEmpty(targets)) {
277
+ return { skipped: context.skipped, moved: false };
278
+ }
279
+ const fetched = await git(Arr.toUnshifted('git fetch --quiet origin')(Arr.toUnshifted(defaultBranch)(targets.map((pr) => pr.headRefName)).map(sh)).join(' '));
280
+ if (Result.isErr(fetched)) {
281
+ log(`Cannot fetch to see what is behind: ${lastLines(fetched.value, 2)}`);
282
+ return { skipped: context.skipped, moved: false };
283
+ }
284
+ const stackParents = stackParentsOf(pullRequests, defaultBranch);
285
+ let mut_skipped = context.skipped;
286
+ let mut_moved = false;
287
+ for (const pr of targets) {
288
+ if (stopRequested()) {
289
+ break;
290
+ }
291
+
292
+
293
+ const upToDate = await git(`git merge-base --is-ancestor ${sh(`origin/${defaultBranch}`)} ${sh(pr.headRefOid)}`);
294
+ if (Result.isOk(upToDate)) {
295
+ continue;
296
+ }
297
+ if (context.dryRun) {
298
+ log(`Would rebase #${pr.number} onto ${defaultBranch}; it is behind.`);
299
+ continue;
300
+ }
301
+ const rebased = await rebaseAndPush(pr, {
302
+ onto: `origin/${defaultBranch}`,
303
+ fetch: [defaultBranch],
304
+ upstream: undefined,
305
+ });
306
+ if (Result.isErr(rebased)) {
307
+ log(`#${pr.number}: behind ${defaultBranch}, and not rebased — ${rebased.value.detail}`);
308
+ mut_skipped = withSkip(mut_skipped, {
309
+ number: pr.number,
310
+ headSha: pr.headRefOid,
311
+ baseSha: context.baseSha,
312
+ reason: rebased.value.reason,
313
+ detail: rebased.value.detail,
314
+ ...(rebased.value.output === undefined
315
+ ? {}
316
+ : { output: rebased.value.output }),
317
+ });
318
+ continue;
319
+ }
320
+ if (rebased.value.kind === 'moved') {
321
+ mut_moved = true;
322
+ continue;
323
+ }
324
+ const { head } = rebased.value;
325
+ if (head === pr.headRefOid) {
326
+ continue;
327
+ }
328
+ mut_moved = true;
329
+ log(`#${pr.number}: was behind ${defaultBranch}; rebased at ${head.slice(0, 10)}.`);
330
+ await restack(pr, head, stackDescendants(stackParents, pr.number).flatMap((number) => pullRequests.filter((layer) => layer.number === number)));
331
+ }
332
+ return { skipped: mut_skipped, moved: mut_moved };
333
+ };
334
+
335
+
336
+
337
+
338
+
339
+ const removeSkipCiLabel = async (api, pr, head) => {
340
+ const failed = (detail, output) => Result.err({
341
+ reason: 'unlabel-failed',
342
+ detail,
343
+ ...(output === undefined ? {} : { output }),
344
+ });
345
+ const current = await viewPullRequest(api, pr.number);
346
+ if (Result.isErr(current)) {
347
+ return failed(`cannot re-read it before unlabelling: ${current.value}`);
348
+ }
349
+ if (current.value.state !== 'OPEN') {
350
+ return failed(`it is ${current.value.state} now`);
351
+ }
352
+ if (current.value.headRefOid !== head) {
353
+ return Result.ok('moved');
354
+ }
355
+ if (!isSkipCiLabelled(current.value)) {
356
+
357
+
358
+ return Result.ok('removed');
359
+ }
360
+ if (!isMergeQueued(current.value)) {
361
+ return failed(`${MERGE_QUEUED_LABEL} came off while it was rebasing`);
362
+ }
363
+ const removed = await removeLabel(api, pr.number, SKIP_CI_LABEL);
364
+ return Result.isErr(removed)
365
+ ? failed(`cannot remove ${SKIP_CI_LABEL}: ${describeCommandFailure(removed.value)}`, removed.value)
366
+ : Result.ok('removed');
367
+ };
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+ const stackedOnMerged = async (api, pr, defaultBranch) => {
376
+ const changes = await readBaseChanges(api, pr.number);
377
+ if (Result.isErr(changes)) {
378
+ log(`#${pr.number}: cannot read whether it came off a stack; rebasing by patch. (${lastLines(changes.value, 2)})`);
379
+ return undefined;
380
+ }
381
+ const from = retargetedFrom(changes.value, defaultBranch);
382
+ if (from === undefined || !isSafeRefName(from)) {
383
+ return undefined;
384
+ }
385
+ const merged = await mergedHeadOf(api, from);
386
+ if (Result.isErr(merged)) {
387
+ log(`#${pr.number}: cannot read what merged from ${from}; rebasing by patch. (${lastLines(merged.value, 2)})`);
388
+ return undefined;
389
+ }
390
+ return merged.value;
391
+ };
392
+
393
+
394
+
395
+
396
+
397
+ const restackOffMerged = async (api, { pr, from }, defaultBranch, plan) => {
398
+ const branch = from ?? (await retargetedFromTimeline(api, pr, defaultBranch));
399
+ if (branch === undefined || !isSafeRefName(branch)) {
400
+ return 'untouched';
401
+ }
402
+ const merged = await mergedHeadOf(api, branch);
403
+ if (Result.isErr(merged)) {
404
+ log(`#${pr.number}: cannot read what merged from ${branch}, so not rebasing it off that. (${lastLines(merged.value, 2)})`);
405
+ return 'untouched';
406
+ }
407
+
408
+
409
+ if (merged.value === undefined) {
410
+ return 'untouched';
411
+ }
412
+ const { number, headSha, mergeCommit } = merged.value;
413
+ const carried = await carries(pr, headSha, [
414
+ defaultBranch,
415
+ `refs/pull/${number}/head`,
416
+ ]);
417
+ if (Result.isErr(carried)) {
418
+ log(`#${pr.number}: cannot tell whether it still carries #${number}'s commits. (${lastLines(carried.value, 2)})`);
419
+ return 'untouched';
420
+ }
421
+
422
+ if (!carried.value) {
423
+ return 'untouched';
424
+ }
425
+ if (mergeCommit === undefined) {
426
+ log(`#${pr.number}: still carries #${number}'s commits, but GitHub does not say what #${number} merged as; leaving it.`);
427
+ return 'untouched';
428
+ }
429
+ if (plan.dryRun) {
430
+ log(`Would rebase #${pr.number} off #${number}'s commits, onto the squash commit ${mergeCommit.slice(0, 10)}.`);
431
+ return 'untouched';
432
+ }
433
+
434
+ const rebased = await rebaseAndPush(pr, {
435
+ onto: mergeCommit,
436
+ fetch: [],
437
+ upstream: { sha: headSha, required: true },
438
+ });
439
+ if (Result.isErr(rebased)) {
440
+ log(`#${pr.number}: still carries #${number}'s commits, and cannot be rebased off them — ${rebased.value.detail}`);
441
+ return 'untouched';
442
+ }
443
+ if (rebased.value.kind === 'moved') {
444
+ log(`#${pr.number}: not rebased off #${number}'s commits — its branch moved since the survey, so someone else is moving it.`);
445
+ return 'moved';
446
+ }
447
+ const { head } = rebased.value;
448
+ log(`#${pr.number}: came off #${number} still carrying its commits; rebased its own onto #${number}'s squash commit ${mergeCommit.slice(0, 10)}, at ${head.slice(0, 10)}.`);
449
+ await restack(pr, head, plan.descendants);
450
+ return 'restacked';
451
+ };
452
+
453
+
454
+
455
+
456
+ const retargetedFromTimeline = async (api, pr, defaultBranch) => {
457
+ const changes = await readBaseChanges(api, pr.number);
458
+ if (Result.isErr(changes)) {
459
+ log(`#${pr.number}: cannot read whether it came off a stack, so not rebasing it off one. (${lastLines(changes.value, 2)})`);
460
+ return undefined;
461
+ }
462
+ return retargetedFrom(changes.value, defaultBranch);
463
+ };
464
+
465
+
466
+
467
+
468
+ const carries = async (pr, sha, refspecs) => {
469
+ const fetched = await git(Arr.toUnshifted('git fetch --quiet origin')(Arr.toPushed(refspecs, pr.headRefName).map(sh)).join(' '));
470
+ if (Result.isErr(fetched)) {
471
+ return Result.err(fetched.value);
472
+ }
473
+ const contained = await git(`git merge-base --is-ancestor ${sh(sha)} ${sh(pr.headRefOid)}`);
474
+ return Result.ok(Result.isOk(contained));
475
+ };
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+ export const restack = async (pr, head, descendants) => {
486
+ const mut_moved = new Map([
487
+ [pr.headRefName, { from: pr.headRefOid, to: head }],
488
+ ]);
489
+ for (const layer of descendants) {
490
+ const below = mut_moved.get(layer.baseRefName);
491
+ if (below === undefined) {
492
+ log(`#${layer.number}: not restacked — the layer it is on, ${layer.baseRefName}, did not move.`);
493
+ continue;
494
+ }
495
+ const refused = restackable(layer);
496
+ if (refused !== undefined) {
497
+ log(`#${layer.number}: not restacked — ${refused}.`);
498
+ continue;
499
+ }
500
+ const moved = await rebaseAndPush(layer, {
501
+ onto: below.to,
502
+ fetch: [],
503
+ upstream: { sha: below.from, required: true },
504
+ });
505
+ if (Result.isErr(moved)) {
506
+ log(`#${layer.number}: not restacked onto ${layer.baseRefName} — ${moved.value.detail}`);
507
+ continue;
508
+ }
509
+ if (moved.value.kind === 'moved') {
510
+ log(`#${layer.number}: not restacked — its branch moved since the survey, so someone else is moving it.`);
511
+ continue;
512
+ }
513
+ log(`#${layer.number}: restacked onto ${layer.baseRefName} at ${below.to.slice(0, 10)}.`);
514
+ mut_moved.set(layer.headRefName, {
515
+ from: layer.headRefOid,
516
+ to: moved.value.head,
517
+ });
518
+ }
519
+ };
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+ export const armOnPick = async (api, pr, head, defaultBranch) => {
544
+ const failed = (detail, output) => Result.err({
545
+ reason: 'arm-failed',
546
+ detail,
547
+ ...(output === undefined ? {} : { output }),
548
+ });
549
+ const current = await viewPullRequest(api, pr.number);
550
+ if (Result.isErr(current)) {
551
+ return failed(`cannot re-read it before arming: ${current.value}`);
552
+ }
553
+ if (current.value.state === 'OPEN' && current.value.headRefOid !== head) {
554
+ return Result.ok('moved');
555
+ }
556
+ const refused = current.value.state !== 'OPEN'
557
+ ? `it is ${current.value.state} now`
558
+ : current.value.baseRefName !== defaultBranch
559
+ ? `its base is ${current.value.baseRefName} now`
560
+ : !isMergeQueued(current.value)
561
+ ? `${MERGE_QUEUED_LABEL} came off before it was armed`
562
+ : undefined;
563
+ if (refused !== undefined) {
564
+ return failed(`not arming auto-merge: ${refused}`);
565
+ }
566
+ if (isRecord(current.value.autoMergeRequest)) {
567
+ return Result.ok('armed');
568
+ }
569
+ const armed = await armAutoMerge(api, current.value.id);
570
+ if (Result.isErr(armed)) {
571
+ return failed(`cannot arm auto-merge: ${describeCommandFailure(armed.value)}`, armed.value);
572
+ }
573
+ log(`#${pr.number}: auto-merge armed.`);
574
+ return Result.ok('armed');
575
+ };
576
+ //# sourceMappingURL=rebase.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rebase.mjs","sourceRoot":"","sources":["../../src/unblock-prs/rebase.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Keeping to one released pull request without touching any other.
3
+ *
4
+ * A pull request labelled `merge-queued` without `skip-ci` is released: a push
5
+ * to it, or the label coming off, runs the full matrix. Only one of them can
6
+ * merge before `main` moves and puts the rest back to `BEHIND`, so a second
7
+ * released pull request is a matrix run to be thrown away.
8
+ *
9
+ * **This script puts `skip-ci` on a pull request only to give back the label
10
+ * it has just taken off**, yielding to another released in the same moment,
11
+ * and on no other pull request. It used to pause every other released one before releasing its own, which
12
+ * labelled pull requests nobody had handed it — the dependency update the bot
13
+ * opens released, one a person had just released on purpose. Now it keeps the
14
+ * rule from its own side only: triage watches one already in flight rather
15
+ * than picking another, and once its own is released it looks again, and when
16
+ * another of its pull requests was released in the same moment and goes
17
+ * first, it pauses its own ({@link yieldsTo}). A pull request someone else
18
+ * releases runs, and what that costs is a matrix, not a wrong merge.
19
+ *
20
+ * "In the same moment" is the whole of it: only one the survey saw paused by
21
+ * `skip-ci` is yielded to. One already released when the survey picked
22
+ * `target` and not in flight — waiting on its declared order, held by its
23
+ * review, conflicting, released by hand — is released on the next survey
24
+ * too, which picks `target` again, so yielding to it took `skip-ci` off and
25
+ * put it back on `target` for as long as the script ran.
26
+ */
27
+ import { type QueueOwner } from 'pr-report-core';
28
+ import { type ApiContext } from '../lib/index.mjs';
29
+ import type { PullRequest } from './types.mjs';
30
+ /**
31
+ * Looks again once `target` has been released, and when another pull request
32
+ * the worker owns was released in the same moment and goes first, pauses
33
+ * `target` — the one pull request this may label. `pausedAtSurvey` is the
34
+ * pull requests the survey that picked `target` saw labelled `skip-ci`.
35
+ * Resolves to whether `target` keeps its release.
36
+ */
37
+ export declare const settleAfterRelease: (api: ApiContext, target: PullRequest, owners: ReadonlyMap<number, QueueOwner>, pausedAtSurvey: ReadonlySet<number>, defaultBranch: string) => Promise<'kept' | 'yielded'>;
38
+ /**
39
+ * The pull request `target` should step back for, if any: another one the
40
+ * worker owns, paused when the survey ran (`pausedAtSurvey`) and released
41
+ * since, that goes first in {@link firstInReleaseOrder}. One set aside or
42
+ * claimed is a skill's or a person's and runs nothing until its fix is
43
+ * pushed, so it holds nothing back; counting it would stall the queue behind
44
+ * a pull request nobody is about to run. One released before the survey is
45
+ * not counted either: see the top of this file.
46
+ */
47
+ export declare const yieldsTo: (target: PullRequest, pullRequests: readonly PullRequest[], owners: ReadonlyMap<number, QueueOwner>, pausedAtSurvey: ReadonlySet<number>, defaultBranch: string) => PullRequest | undefined;
48
+ /**
49
+ * The open pull requests labelled `merge-queued` without `skip-ci`, other
50
+ * than `keep`. A draft, one without auto-merge and one on another base count
51
+ * as well: each runs a matrix when pushed to, and whether it could merge
52
+ * afterwards is a different question.
53
+ */
54
+ export declare const releasedExcept: (pullRequests: readonly PullRequest[], keep: number | undefined) => readonly PullRequest[];
55
+ /**
56
+ * Which of several released pull requests keeps its release: `priority:high`
57
+ * first and `priority:low` last, then the lowest number with the version pull
58
+ * request last — the order candidates are picked in, so that the skill,
59
+ * reading the same rule, settles it the same way.
60
+ */
61
+ export declare const firstInReleaseOrder: (released: readonly PullRequest[], defaultBranch: string) => PullRequest | undefined;
62
+ //# sourceMappingURL=release.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.mts","sourceRoot":"","sources":["../../src/unblock-prs/release.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAO,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QACxB,UAAU,UACP,WAAW,UACX,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,kBACvB,WAAW,CAAC,MAAM,CAAC,iBACpB,MAAM,KACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CA8B5B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,WACX,WAAW,gBACL,SAAS,WAAW,EAAE,UAC5B,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,kBACvB,WAAW,CAAC,MAAM,CAAC,iBACpB,MAAM,KACpB,WAAW,GAAG,SAehB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,iBACX,SAAS,WAAW,EAAE,QAC9B,MAAM,GAAG,SAAS,KACvB,SAAS,WAAW,EAOpB,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,aACpB,SAAS,WAAW,EAAE,iBACjB,MAAM,KACpB,WAAW,GAAG,SAShB,CAAC"}