jj-plus 0.10.10

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 (404) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +102 -0
  3. package/assets/jj-plus-icon.png +0 -0
  4. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  5. package/dist/bin.cjs +112 -0
  6. package/dist/bin.cjs.map +1 -0
  7. package/dist/cli/options.cjs +376 -0
  8. package/dist/cli/options.cjs.map +1 -0
  9. package/dist/cli/timeline-json.cjs +29 -0
  10. package/dist/cli/timeline-json.cjs.map +1 -0
  11. package/dist/extension/blame-codelens.cjs +228 -0
  12. package/dist/extension/blame-codelens.cjs.map +1 -0
  13. package/dist/extension/command-runner.cjs +99 -0
  14. package/dist/extension/command-runner.cjs.map +1 -0
  15. package/dist/extension/constants.cjs +56 -0
  16. package/dist/extension/constants.cjs.map +1 -0
  17. package/dist/extension/editor-extra-features.cjs +464 -0
  18. package/dist/extension/editor-extra-features.cjs.map +1 -0
  19. package/dist/extension/history-adapters.cjs +702 -0
  20. package/dist/extension/history-adapters.cjs.map +1 -0
  21. package/dist/extension/index.cjs +657 -0
  22. package/dist/extension/index.cjs.map +1 -0
  23. package/dist/extension/repo-timeline-panel.cjs +402 -0
  24. package/dist/extension/repo-timeline-panel.cjs.map +1 -0
  25. package/dist/extension/resolve-file-path.cjs +16 -0
  26. package/dist/extension/resolve-file-path.cjs.map +1 -0
  27. package/dist/extension/revision-diff-nav.cjs +169 -0
  28. package/dist/extension/revision-diff-nav.cjs.map +1 -0
  29. package/dist/extension/settings.cjs +41 -0
  30. package/dist/extension/settings.cjs.map +1 -0
  31. package/dist/extension/timeline-at-line.cjs +72 -0
  32. package/dist/extension/timeline-at-line.cjs.map +1 -0
  33. package/dist/extension/timeline-panel.cjs +1113 -0
  34. package/dist/extension/timeline-panel.cjs.map +1 -0
  35. package/dist/extension/timeline-service.cjs +1154 -0
  36. package/dist/extension/timeline-service.cjs.map +1 -0
  37. package/dist/extension/uri-utils.cjs +75 -0
  38. package/dist/extension/uri-utils.cjs.map +1 -0
  39. package/dist/package.cjs +11 -0
  40. package/dist/package.cjs.map +1 -0
  41. package/dist/shared/blame.cjs +211 -0
  42. package/dist/shared/blame.cjs.map +1 -0
  43. package/dist/shared/diff-content-search.cjs +23 -0
  44. package/dist/shared/diff-content-search.cjs.map +1 -0
  45. package/dist/shared/diff-helpers.cjs +12 -0
  46. package/dist/shared/diff-helpers.cjs.map +1 -0
  47. package/dist/shared/diff-stats.cjs +129 -0
  48. package/dist/shared/diff-stats.cjs.map +1 -0
  49. package/dist/shared/file-oplog.cjs +82 -0
  50. package/dist/shared/file-oplog.cjs.map +1 -0
  51. package/dist/shared/history-helpers.cjs +257 -0
  52. package/dist/shared/history-helpers.cjs.map +1 -0
  53. package/dist/shared/history-search.cjs +85 -0
  54. package/dist/shared/history-search.cjs.map +1 -0
  55. package/dist/shared/jj-revset-suggestions.cjs +41 -0
  56. package/dist/shared/jj-revset-suggestions.cjs.map +1 -0
  57. package/dist/shared/line-history.cjs +181 -0
  58. package/dist/shared/line-history.cjs.map +1 -0
  59. package/dist/shared/list-file-revisions.cjs +36 -0
  60. package/dist/shared/list-file-revisions.cjs.map +1 -0
  61. package/dist/shared/non-textual-details.cjs +43 -0
  62. package/dist/shared/non-textual-details.cjs.map +1 -0
  63. package/dist/shared/resolve-file-path.cjs +14 -0
  64. package/dist/shared/resolve-file-path.cjs.map +1 -0
  65. package/dist/shared/revision-diff-availability.cjs +18 -0
  66. package/dist/shared/revision-diff-availability.cjs.map +1 -0
  67. package/dist/shared/revision-diff-pair.cjs +42 -0
  68. package/dist/shared/revision-diff-pair.cjs.map +1 -0
  69. package/dist/shared/revset.cjs +16 -0
  70. package/dist/shared/revset.cjs.map +1 -0
  71. package/dist/shared/timeline-model.cjs +29 -0
  72. package/dist/shared/timeline-model.cjs.map +1 -0
  73. package/dist/standalone/server.cjs +1733 -0
  74. package/dist/standalone/server.cjs.map +1 -0
  75. package/dist/webview/timeline-template.cjs +214 -0
  76. package/dist/webview/timeline-template.cjs.map +1 -0
  77. package/package.json +320 -0
  78. package/webview-dist/assets/worker-DuV13XDT.js +161 -0
  79. package/webview-dist/chunks/abap-CLvhMVsD.js +1 -0
  80. package/webview-dist/chunks/actionscript-3-Cs6JJXT5.js +1 -0
  81. package/webview-dist/chunks/ada-C5qYipkI.js +1 -0
  82. package/webview-dist/chunks/ahk-CA9gdOdF.js +1 -0
  83. package/webview-dist/chunks/ahk2-_6rzW9BS.js +1 -0
  84. package/webview-dist/chunks/andromeeda-vGVdxbeo.js +1 -0
  85. package/webview-dist/chunks/angular-html-DTpR04n4.js +1 -0
  86. package/webview-dist/chunks/angular-ts-BCtbMvbl.js +1 -0
  87. package/webview-dist/chunks/apache-U0d_L8uA.js +1 -0
  88. package/webview-dist/chunks/apex-KFGFyKwG.js +1 -0
  89. package/webview-dist/chunks/apl-BMZuN1Ql.js +1 -0
  90. package/webview-dist/chunks/applescript-CCn79oCD.js +1 -0
  91. package/webview-dist/chunks/ara-4CJ0cIlV.js +1 -0
  92. package/webview-dist/chunks/asciidoc-SCjQUq34.js +1 -0
  93. package/webview-dist/chunks/asm-Cmm7eHzH.js +1 -0
  94. package/webview-dist/chunks/astro-DrbV4Z7r.js +1 -0
  95. package/webview-dist/chunks/aurora-x-CDeNXAV0.js +1 -0
  96. package/webview-dist/chunks/awk-BWXHIvNe.js +1 -0
  97. package/webview-dist/chunks/ayu-dark-DluEY0Gj.js +1 -0
  98. package/webview-dist/chunks/ayu-light-C3h-C4tm.js +1 -0
  99. package/webview-dist/chunks/ayu-mirage-Bqwy1Gya.js +1 -0
  100. package/webview-dist/chunks/ballerina-B7ZEbQpA.js +1 -0
  101. package/webview-dist/chunks/bat-qdxAdBWQ.js +1 -0
  102. package/webview-dist/chunks/beancount-D-usSTwE.js +1 -0
  103. package/webview-dist/chunks/berry-DKpUyyne.js +1 -0
  104. package/webview-dist/chunks/bibtex-Ci_nEsc7.js +1 -0
  105. package/webview-dist/chunks/bicep-CUHmPFLl.js +1 -0
  106. package/webview-dist/chunks/bird2-CYIUgYqB.js +1 -0
  107. package/webview-dist/chunks/blade-oPV8S6rR.js +1 -0
  108. package/webview-dist/chunks/bsl-_VjlB9mv.js +1 -0
  109. package/webview-dist/chunks/c-DYf-3tob.js +1 -0
  110. package/webview-dist/chunks/c3-D0apG41V.js +1 -0
  111. package/webview-dist/chunks/cadence-CQ2zXKGN.js +1 -0
  112. package/webview-dist/chunks/cairo-DLTphjLi.js +1 -0
  113. package/webview-dist/chunks/catppuccin-frappe-C9Q5zVZY.js +1 -0
  114. package/webview-dist/chunks/catppuccin-latte-CtsyrtPq.js +1 -0
  115. package/webview-dist/chunks/catppuccin-macchiato-R8nAf1vR.js +1 -0
  116. package/webview-dist/chunks/catppuccin-mocha-DjuaAJKi.js +1 -0
  117. package/webview-dist/chunks/chapel-DY-WYB1D.js +1 -0
  118. package/webview-dist/chunks/clarity-CtfBBspg.js +1 -0
  119. package/webview-dist/chunks/clojure-DqKBuwfJ.js +1 -0
  120. package/webview-dist/chunks/cmake-Bj61d0ZC.js +1 -0
  121. package/webview-dist/chunks/cobol-DvdX_6CO.js +1 -0
  122. package/webview-dist/chunks/codeowners-C8r90Shi.js +1 -0
  123. package/webview-dist/chunks/codeql-oeQT6MSM.js +1 -0
  124. package/webview-dist/chunks/coffee-C1kO7jr_.js +1 -0
  125. package/webview-dist/chunks/common-lisp-Cv5bFMCO.js +1 -0
  126. package/webview-dist/chunks/coq-DuBRPxYg.js +1 -0
  127. package/webview-dist/chunks/cpp-CoSarUrI.js +1 -0
  128. package/webview-dist/chunks/crystal-SLJeZ5EP.js +1 -0
  129. package/webview-dist/chunks/csharp-oqKa8noW.js +1 -0
  130. package/webview-dist/chunks/css-cfScyrSP.js +1 -0
  131. package/webview-dist/chunks/csv-Dx-8-gkx.js +1 -0
  132. package/webview-dist/chunks/cue-CE9AQfxI.js +1 -0
  133. package/webview-dist/chunks/cypher-ClKdZ_lG.js +1 -0
  134. package/webview-dist/chunks/d-qD-0Kul2.js +1 -0
  135. package/webview-dist/chunks/dark-plus-Cs2F2srj.js +1 -0
  136. package/webview-dist/chunks/dart-CnvKMtbv.js +1 -0
  137. package/webview-dist/chunks/dax-BkyTk9wS.js +1 -0
  138. package/webview-dist/chunks/desktop-Dlh5hvp9.js +1 -0
  139. package/webview-dist/chunks/diff-woXpYk--.js +1 -0
  140. package/webview-dist/chunks/docker-IyjqRm3v.js +1 -0
  141. package/webview-dist/chunks/dotenv-_5a1GRtc.js +1 -0
  142. package/webview-dist/chunks/dracula-BHWKrbxM.js +1 -0
  143. package/webview-dist/chunks/dracula-soft-5eyTD99u.js +1 -0
  144. package/webview-dist/chunks/dream-maker-DW3nJb8Q.js +1 -0
  145. package/webview-dist/chunks/edge-lvBr3t3s.js +1 -0
  146. package/webview-dist/chunks/elixir-BLoPe0KG.js +1 -0
  147. package/webview-dist/chunks/elm-BveBINBn.js +1 -0
  148. package/webview-dist/chunks/emacs-lisp-c_oH4hRZ.js +1 -0
  149. package/webview-dist/chunks/erb-Bmf8z4ph.js +1 -0
  150. package/webview-dist/chunks/erlang-Cphh6RMH.js +1 -0
  151. package/webview-dist/chunks/everforest-dark-sB-x3p7T.js +1 -0
  152. package/webview-dist/chunks/everforest-light-Df2xbC6M.js +1 -0
  153. package/webview-dist/chunks/fennel-DQxkIbk2.js +1 -0
  154. package/webview-dist/chunks/fish-BJitypiv.js +1 -0
  155. package/webview-dist/chunks/fluent-C03EYrpw.js +1 -0
  156. package/webview-dist/chunks/fortran-fixed-form-DEKoE2YW.js +1 -0
  157. package/webview-dist/chunks/fortran-free-form-CYNrtFtB.js +1 -0
  158. package/webview-dist/chunks/fsharp-D13ZGOAj.js +1 -0
  159. package/webview-dist/chunks/gdresource-xMC7jr7x.js +1 -0
  160. package/webview-dist/chunks/gdscript-DYvRD3hg.js +1 -0
  161. package/webview-dist/chunks/gdshader-CBce3t8t.js +1 -0
  162. package/webview-dist/chunks/genie-CV2tkWYe.js +1 -0
  163. package/webview-dist/chunks/gherkin-DExj1W_8.js +1 -0
  164. package/webview-dist/chunks/git-commit-BSykSTBG.js +1 -0
  165. package/webview-dist/chunks/git-rebase-BBii7GBM.js +1 -0
  166. package/webview-dist/chunks/github-dark-C-LZuMrd.js +1 -0
  167. package/webview-dist/chunks/github-dark-default-DXG-b-1a.js +1 -0
  168. package/webview-dist/chunks/github-dark-dimmed-Bx1FflLF.js +1 -0
  169. package/webview-dist/chunks/github-dark-high-contrast-B_tTalzw.js +1 -0
  170. package/webview-dist/chunks/github-light-EUqPIrTm.js +1 -0
  171. package/webview-dist/chunks/github-light-default-BXViO-2h.js +1 -0
  172. package/webview-dist/chunks/github-light-high-contrast-B68TUdTA.js +1 -0
  173. package/webview-dist/chunks/gleam-CSRkHgEL.js +1 -0
  174. package/webview-dist/chunks/glimmer-js-CuCPna-X.js +1 -0
  175. package/webview-dist/chunks/glimmer-ts-DNAjZNDK.js +1 -0
  176. package/webview-dist/chunks/glsl-COQvRxdz.js +1 -0
  177. package/webview-dist/chunks/gn-ilITqXS6.js +1 -0
  178. package/webview-dist/chunks/gnuplot-7GGW24-e.js +1 -0
  179. package/webview-dist/chunks/go-rLFTqkRN.js +1 -0
  180. package/webview-dist/chunks/graphql-1cKCVreZ.js +1 -0
  181. package/webview-dist/chunks/groovy-CacY0gHj.js +1 -0
  182. package/webview-dist/chunks/gruvbox-dark-hard-C820rvS2.js +1 -0
  183. package/webview-dist/chunks/gruvbox-dark-medium-BPjhmG05.js +1 -0
  184. package/webview-dist/chunks/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  185. package/webview-dist/chunks/gruvbox-light-hard-BC_s9l72.js +1 -0
  186. package/webview-dist/chunks/gruvbox-light-medium-BAWPOn9u.js +1 -0
  187. package/webview-dist/chunks/gruvbox-light-soft-BSMLrYjP.js +1 -0
  188. package/webview-dist/chunks/hack-7CXYxWGO.js +1 -0
  189. package/webview-dist/chunks/haml-CeE16iG9.js +1 -0
  190. package/webview-dist/chunks/handlebars-CLm7Miue.js +1 -0
  191. package/webview-dist/chunks/haskell-D8IpX4py.js +1 -0
  192. package/webview-dist/chunks/haxe-C8oCnwJJ.js +1 -0
  193. package/webview-dist/chunks/hcl-Dh228itO.js +1 -0
  194. package/webview-dist/chunks/hjson-CxZEssPk.js +1 -0
  195. package/webview-dist/chunks/hlsl-Cvrh5tZx.js +1 -0
  196. package/webview-dist/chunks/horizon-CE9ld1lL.js +1 -0
  197. package/webview-dist/chunks/horizon-bright-DSNQnXHK.js +1 -0
  198. package/webview-dist/chunks/houston-CsvMBhTu.js +1 -0
  199. package/webview-dist/chunks/html-EbCri-_j.js +1 -0
  200. package/webview-dist/chunks/html-derivative-DGcE2kQi.js +1 -0
  201. package/webview-dist/chunks/http-DpnqgCg2.js +1 -0
  202. package/webview-dist/chunks/hurl-B6NGpamo.js +1 -0
  203. package/webview-dist/chunks/hxml-Dcm88srW.js +1 -0
  204. package/webview-dist/chunks/hy-CZbG8q4J.js +1 -0
  205. package/webview-dist/chunks/imba-DsUTQ-LC.js +1 -0
  206. package/webview-dist/chunks/ini-B5eOa1yu.js +1 -0
  207. package/webview-dist/chunks/java-ZkUoUSJy.js +1 -0
  208. package/webview-dist/chunks/javascript-DLd0EIw7.js +1 -0
  209. package/webview-dist/chunks/jinja-WhIqNp3q.js +1 -0
  210. package/webview-dist/chunks/jison-CIn1t7S8.js +1 -0
  211. package/webview-dist/chunks/json-AHG_JuKN.js +1 -0
  212. package/webview-dist/chunks/json5-BR5RXkoi.js +1 -0
  213. package/webview-dist/chunks/jsonc-CYpm1nAK.js +1 -0
  214. package/webview-dist/chunks/jsonl-CmCQp5Yx.js +1 -0
  215. package/webview-dist/chunks/jsonnet-CJTPZ8u_.js +1 -0
  216. package/webview-dist/chunks/jssm-DXw9l8Rf.js +1 -0
  217. package/webview-dist/chunks/jsx-BLy2KGb2.js +1 -0
  218. package/webview-dist/chunks/julia-XrhdGMY0.js +1 -0
  219. package/webview-dist/chunks/just-CiO9rOBq.js +1 -0
  220. package/webview-dist/chunks/kanagawa-dragon-Bozd7klA.js +1 -0
  221. package/webview-dist/chunks/kanagawa-lotus-BmuOG9ZW.js +1 -0
  222. package/webview-dist/chunks/kanagawa-wave-BML5mF2J.js +1 -0
  223. package/webview-dist/chunks/kdl-CsD5j6eV.js +1 -0
  224. package/webview-dist/chunks/kotlin-DhhofPvG.js +1 -0
  225. package/webview-dist/chunks/kusto-C7mF5XQf.js +1 -0
  226. package/webview-dist/chunks/laserwave-C_8bwKvT.js +1 -0
  227. package/webview-dist/chunks/latex-4tqdYtbu.js +1 -0
  228. package/webview-dist/chunks/lean-CewbzKMR.js +1 -0
  229. package/webview-dist/chunks/less-DVTAwKKz.js +1 -0
  230. package/webview-dist/chunks/light-plus-DVQuIRkW.js +1 -0
  231. package/webview-dist/chunks/liquid-BiiWRCLG.js +1 -0
  232. package/webview-dist/chunks/llvm-DqHOMS-s.js +1 -0
  233. package/webview-dist/chunks/log-BNLmms1o.js +1 -0
  234. package/webview-dist/chunks/logo-Cluzi2Zq.js +1 -0
  235. package/webview-dist/chunks/lua-BPFdS2Mc.js +1 -0
  236. package/webview-dist/chunks/luau-C2pBCSgt.js +1 -0
  237. package/webview-dist/chunks/make-Dixweg8N.js +1 -0
  238. package/webview-dist/chunks/markdown-BYOwaDjH.js +1 -0
  239. package/webview-dist/chunks/marko-BLi1Yy1V.js +1 -0
  240. package/webview-dist/chunks/material-theme-Bm3Qr25_.js +1 -0
  241. package/webview-dist/chunks/material-theme-darker-2IIEA8gg.js +1 -0
  242. package/webview-dist/chunks/material-theme-lighter-uhdI0v04.js +1 -0
  243. package/webview-dist/chunks/material-theme-ocean-CHQ94UKr.js +1 -0
  244. package/webview-dist/chunks/material-theme-palenight-B5W6OYN7.js +1 -0
  245. package/webview-dist/chunks/matlab-D7qyCx1q.js +1 -0
  246. package/webview-dist/chunks/mdc-Dx-qyM1x.js +1 -0
  247. package/webview-dist/chunks/mdx-DQZ5AkYe.js +1 -0
  248. package/webview-dist/chunks/mermaid-BxpfTIzt.js +1 -0
  249. package/webview-dist/chunks/min-dark-BSWPekZh.js +1 -0
  250. package/webview-dist/chunks/min-light-DDpmG2fV.js +1 -0
  251. package/webview-dist/chunks/mipsasm-BMqwQI7S.js +1 -0
  252. package/webview-dist/chunks/mojo-fg40_ntQ.js +1 -0
  253. package/webview-dist/chunks/monokai-B_bV9PQ9.js +1 -0
  254. package/webview-dist/chunks/moonbit-DgjMoLWr.js +1 -0
  255. package/webview-dist/chunks/move-BYnGhZoM.js +1 -0
  256. package/webview-dist/chunks/narrat-_X_XdTYD.js +1 -0
  257. package/webview-dist/chunks/nextflow-BJtWHP5T.js +1 -0
  258. package/webview-dist/chunks/nextflow-groovy-DJMQeKeT.js +1 -0
  259. package/webview-dist/chunks/nginx-rnpjAIVq.js +1 -0
  260. package/webview-dist/chunks/night-owl-DhmEMT88.js +1 -0
  261. package/webview-dist/chunks/night-owl-light-eJ-hLW7d.js +1 -0
  262. package/webview-dist/chunks/nim-kKTJ2fIs.js +1 -0
  263. package/webview-dist/chunks/nix-IvuFDN5E.js +1 -0
  264. package/webview-dist/chunks/nord-Cb4Vim4T.js +1 -0
  265. package/webview-dist/chunks/nsis-CjNLYCLg.js +1 -0
  266. package/webview-dist/chunks/nushell-DHYfO66s.js +1 -0
  267. package/webview-dist/chunks/objective-c-D1A_Heim.js +1 -0
  268. package/webview-dist/chunks/objective-cpp-BsSzOQcm.js +1 -0
  269. package/webview-dist/chunks/ocaml-O90oeIOV.js +1 -0
  270. package/webview-dist/chunks/odin-B1RWQWA5.js +1 -0
  271. package/webview-dist/chunks/one-dark-pro-CLwyXe_n.js +1 -0
  272. package/webview-dist/chunks/one-light-D7Lr4KcI.js +1 -0
  273. package/webview-dist/chunks/openscad-BUDT5pXO.js +1 -0
  274. package/webview-dist/chunks/org-BGWCjkJX.js +1 -0
  275. package/webview-dist/chunks/pascal-4ZHwLPI5.js +1 -0
  276. package/webview-dist/chunks/perl-DEimDILQ.js +1 -0
  277. package/webview-dist/chunks/php-QnaNN--1.js +1 -0
  278. package/webview-dist/chunks/pierre-dark-CpLgRqie.js +1 -0
  279. package/webview-dist/chunks/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  280. package/webview-dist/chunks/pierre-dark-soft-kZQmAZld.js +1 -0
  281. package/webview-dist/chunks/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  282. package/webview-dist/chunks/pierre-dark-vibrant-CpQYzh95.js +1 -0
  283. package/webview-dist/chunks/pierre-light-CoaEpmwp.js +1 -0
  284. package/webview-dist/chunks/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  285. package/webview-dist/chunks/pierre-light-soft-lWLdNTOI.js +1 -0
  286. package/webview-dist/chunks/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  287. package/webview-dist/chunks/pierre-light-vibrant-D80Fkn33.js +1 -0
  288. package/webview-dist/chunks/pkl-ot-7Btpt.js +1 -0
  289. package/webview-dist/chunks/plastic-DQwYfKfQ.js +1 -0
  290. package/webview-dist/chunks/plsql-DGHpHOYJ.js +1 -0
  291. package/webview-dist/chunks/po-BiJDBrnU.js +1 -0
  292. package/webview-dist/chunks/poimandres-DRFjx7u4.js +1 -0
  293. package/webview-dist/chunks/polar-C7UOKdEL.js +1 -0
  294. package/webview-dist/chunks/postcss-BXeXVLqQ.js +1 -0
  295. package/webview-dist/chunks/powerquery-DNMTfnFr.js +1 -0
  296. package/webview-dist/chunks/powershell-CCSX75yM.js +1 -0
  297. package/webview-dist/chunks/prisma-DMgNhnYS.js +1 -0
  298. package/webview-dist/chunks/prolog-iXnhIJG7.js +1 -0
  299. package/webview-dist/chunks/proto-DB4EqR-F.js +1 -0
  300. package/webview-dist/chunks/pug-D5rsKmMX.js +1 -0
  301. package/webview-dist/chunks/puppet-CDv2pdJW.js +1 -0
  302. package/webview-dist/chunks/purescript-9MfHhQsQ.js +1 -0
  303. package/webview-dist/chunks/python-gzcpVVnB.js +1 -0
  304. package/webview-dist/chunks/qml-wvbZb8UE.js +1 -0
  305. package/webview-dist/chunks/qmldir-DCQb3MpD.js +1 -0
  306. package/webview-dist/chunks/qss-Fe1Jh2GI.js +1 -0
  307. package/webview-dist/chunks/r-BNyBFaU1.js +1 -0
  308. package/webview-dist/chunks/racket-DcIDlBhZ.js +1 -0
  309. package/webview-dist/chunks/raku-B3gFvitq.js +1 -0
  310. package/webview-dist/chunks/razor-bKaHS6Kz.js +1 -0
  311. package/webview-dist/chunks/rbs-C0MpOrj4.js +1 -0
  312. package/webview-dist/chunks/red-DX1BQOs8.js +1 -0
  313. package/webview-dist/chunks/reg-CRGYupPL.js +1 -0
  314. package/webview-dist/chunks/regexp-B-mZuWUh.js +1 -0
  315. package/webview-dist/chunks/rel-BtDbiS_P.js +1 -0
  316. package/webview-dist/chunks/riscv-Ckw8ddFX.js +1 -0
  317. package/webview-dist/chunks/ron-VUp2lXgN.js +1 -0
  318. package/webview-dist/chunks/rose-pine-aMsaMD1D.js +1 -0
  319. package/webview-dist/chunks/rose-pine-dawn-8PwUyIlP.js +1 -0
  320. package/webview-dist/chunks/rose-pine-moon-DO-qXg-I.js +1 -0
  321. package/webview-dist/chunks/rosmsg-CAekHB0j.js +1 -0
  322. package/webview-dist/chunks/rst-Qq8ybXHe.js +1 -0
  323. package/webview-dist/chunks/ruby-U659LEwU.js +1 -0
  324. package/webview-dist/chunks/rust-Cfkwpbl8.js +1 -0
  325. package/webview-dist/chunks/sas-C4NtLApe.js +1 -0
  326. package/webview-dist/chunks/sass-DXrisJhu.js +1 -0
  327. package/webview-dist/chunks/scala-BiFt_7mu.js +1 -0
  328. package/webview-dist/chunks/scheme-DQCgrYNe.js +1 -0
  329. package/webview-dist/chunks/scss-KAaA4sHk.js +1 -0
  330. package/webview-dist/chunks/sdbl-bTVj8UrX.js +1 -0
  331. package/webview-dist/chunks/shaderlab-TOUzSsQk.js +1 -0
  332. package/webview-dist/chunks/shellscript-_7bOVsRC.js +1 -0
  333. package/webview-dist/chunks/shellsession-Bs_5k0qk.js +1 -0
  334. package/webview-dist/chunks/slack-dark-DnToyrRv.js +1 -0
  335. package/webview-dist/chunks/slack-ochin-B2OO5cIa.js +1 -0
  336. package/webview-dist/chunks/smalltalk-BHpQb5nM.js +1 -0
  337. package/webview-dist/chunks/smithy-Dgaz7aur.js +1 -0
  338. package/webview-dist/chunks/snazzy-light-4G7pJPwS.js +1 -0
  339. package/webview-dist/chunks/solarized-dark-UdsmMDCL.js +1 -0
  340. package/webview-dist/chunks/solarized-light-C1IUL_tW.js +1 -0
  341. package/webview-dist/chunks/solidity-Bj7E1mRn.js +1 -0
  342. package/webview-dist/chunks/soy-C5iuoFCh.js +1 -0
  343. package/webview-dist/chunks/sparql-D_iOobhT.js +1 -0
  344. package/webview-dist/chunks/splunk-BC2Px7Mm.js +1 -0
  345. package/webview-dist/chunks/sql-JX305rZh.js +1 -0
  346. package/webview-dist/chunks/ssh-config-BgfXC-Er.js +1 -0
  347. package/webview-dist/chunks/stata-2Rtik3TV.js +1 -0
  348. package/webview-dist/chunks/stylus-B6D30XZt.js +1 -0
  349. package/webview-dist/chunks/surrealql-IvpiLAIH.js +1 -0
  350. package/webview-dist/chunks/svelte-DeZcV_1u.js +1 -0
  351. package/webview-dist/chunks/swift-CyEgAFGc.js +1 -0
  352. package/webview-dist/chunks/synthwave-84-nFMaYfgc.js +1 -0
  353. package/webview-dist/chunks/system-verilog-Dh5ihWbf.js +1 -0
  354. package/webview-dist/chunks/systemd-BxMlprV5.js +1 -0
  355. package/webview-dist/chunks/talonscript-CohzipZa.js +1 -0
  356. package/webview-dist/chunks/tasl-DMoTqEGO.js +1 -0
  357. package/webview-dist/chunks/tcl-CZd0xW_V.js +1 -0
  358. package/webview-dist/chunks/templ-CcwjPXJr.js +1 -0
  359. package/webview-dist/chunks/terraform-DswuEJGm.js +1 -0
  360. package/webview-dist/chunks/tex-CZYHgHl8.js +1 -0
  361. package/webview-dist/chunks/tokyo-night-oM2G3aXe.js +1 -0
  362. package/webview-dist/chunks/toml-CcmNWLt0.js +1 -0
  363. package/webview-dist/chunks/ts-tags-DPINfEO_.js +1 -0
  364. package/webview-dist/chunks/tsv-sltzmVWM.js +1 -0
  365. package/webview-dist/chunks/tsx-Dq7pSIyE.js +1 -0
  366. package/webview-dist/chunks/turtle-ByJddavk.js +1 -0
  367. package/webview-dist/chunks/twig-DFpC8yDL.js +1 -0
  368. package/webview-dist/chunks/typescript-CN-guYmK.js +1 -0
  369. package/webview-dist/chunks/typespec-BRdr0IET.js +1 -0
  370. package/webview-dist/chunks/typst-hgW4q6mN.js +1 -0
  371. package/webview-dist/chunks/v-DBj4K9d_.js +1 -0
  372. package/webview-dist/chunks/vala-zf12oZj6.js +1 -0
  373. package/webview-dist/chunks/vb-DOwzaHZ0.js +1 -0
  374. package/webview-dist/chunks/verilog-B2gwz-sJ.js +1 -0
  375. package/webview-dist/chunks/vesper-DdrHHSXu.js +1 -0
  376. package/webview-dist/chunks/vhdl-BroJfC0k.js +1 -0
  377. package/webview-dist/chunks/viml-DvXPmvsu.js +1 -0
  378. package/webview-dist/chunks/vitesse-black-fwtXNY1n.js +1 -0
  379. package/webview-dist/chunks/vitesse-dark-BZCL-v6S.js +1 -0
  380. package/webview-dist/chunks/vitesse-light-VbXTXTou.js +1 -0
  381. package/webview-dist/chunks/vue-Dkz9ntel.js +1 -0
  382. package/webview-dist/chunks/vue-html-Dg8LQ5v3.js +1 -0
  383. package/webview-dist/chunks/vue-vine-CIEXICEN.js +1 -0
  384. package/webview-dist/chunks/vyper-CgoNMtux.js +1 -0
  385. package/webview-dist/chunks/wasm-BnjxR4X6.js +1 -0
  386. package/webview-dist/chunks/wasm-ByWQv1Qj.js +1 -0
  387. package/webview-dist/chunks/wenyan-C8pVoKbM.js +1 -0
  388. package/webview-dist/chunks/wgsl-BsKzXJz4.js +1 -0
  389. package/webview-dist/chunks/wikitext-ClFFjSW2.js +1 -0
  390. package/webview-dist/chunks/wit-DdvCle-K.js +1 -0
  391. package/webview-dist/chunks/wolfram-DLL8P-h_.js +1 -0
  392. package/webview-dist/chunks/worker-D52zl71O.js +1 -0
  393. package/webview-dist/chunks/worker-pool-lOjh8Q2A.js +1543 -0
  394. package/webview-dist/chunks/xml-X7YOen_c.js +1 -0
  395. package/webview-dist/chunks/xsl-h4d_Px-X.js +1 -0
  396. package/webview-dist/chunks/yaml-BRDpsfaj.js +1 -0
  397. package/webview-dist/chunks/zenscript-BnlCZFoB.js +1 -0
  398. package/webview-dist/chunks/zig-CMLA9XwU.js +1 -0
  399. package/webview-dist/index.html +18 -0
  400. package/webview-dist/pierre-worker-portable.js +13633 -0
  401. package/webview-dist/repo-timeline-app.js +7 -0
  402. package/webview-dist/repo-timeline.html +14 -0
  403. package/webview-dist/timeline-app.css +2 -0
  404. package/webview-dist/timeline-app.js +85 -0
@@ -0,0 +1,702 @@
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
+ require("./constants.cjs");
3
+ const require_history_helpers = require("../shared/history-helpers.cjs");
4
+ const require_revset = require("../shared/revset.cjs");
5
+ let node_path = require("node:path");
6
+ node_path = require_runtime.__toESM(node_path, 1);
7
+ //#region src/extension/history-adapters.ts
8
+ async function resolveHistoryAdapter(args) {
9
+ const { gitRoot, jjRoot } = await resolveRepositoryRoots(args);
10
+ if (require_history_helpers.resolvePreferredHistoryBackend({
11
+ workspacePath: args.workspacePath,
12
+ gitRoot,
13
+ jjRoot
14
+ }) === "jj") return createJjHistoryAdapter({ runner: args.runner });
15
+ return createGitHistoryAdapter({ runner: args.runner });
16
+ }
17
+ async function resolveHistoryWorkspacePath(args) {
18
+ const { gitRoot, jjRoot } = await resolveRepositoryRoots(args);
19
+ const preferredBackend = require_history_helpers.resolvePreferredHistoryBackend({
20
+ workspacePath: args.workspacePath,
21
+ gitRoot,
22
+ jjRoot
23
+ });
24
+ if (preferredBackend === "jj") return jjRoot || args.workspacePath;
25
+ if (preferredBackend === "git") return gitRoot || args.workspacePath;
26
+ return args.workspacePath;
27
+ }
28
+ async function resolveRepositoryRoots(args) {
29
+ const [gitResult, jjResult] = await Promise.allSettled([args.runner.runGit({
30
+ workspacePath: args.workspacePath,
31
+ args: ["rev-parse", "--show-toplevel"]
32
+ }), args.runner.runJj({
33
+ workspacePath: args.workspacePath,
34
+ args: ["root"]
35
+ })]);
36
+ return {
37
+ gitRoot: gitResult.status === "fulfilled" ? gitResult.value.stdout.trim() : void 0,
38
+ jjRoot: jjResult.status === "fulfilled" ? jjResult.value.stdout.trim() : void 0
39
+ };
40
+ }
41
+ function createGitHistoryAdapter(args) {
42
+ const { runner } = args;
43
+ return {
44
+ backend: "git",
45
+ async getFileRevisionHistory({ workspacePath, relativePath, limit, customRevset: _customRevset }) {
46
+ const { stdout } = await runner.runGit({
47
+ workspacePath,
48
+ args: [
49
+ "log",
50
+ "--follow",
51
+ "--decorate=short",
52
+ "--date=iso-strict",
53
+ "--format=%H%x09%ad%x09%an%x09%D%x09%s",
54
+ `--max-count=${limit ?? 200}`,
55
+ "--",
56
+ relativePath
57
+ ]
58
+ });
59
+ return stdout.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean).map(parseGitHistoryLine).toReversed();
60
+ },
61
+ async getRepositoryRevisionHistory({ workspacePath, limit }) {
62
+ const { stdout } = await runner.runGit({
63
+ workspacePath,
64
+ args: [
65
+ "log",
66
+ "--decorate=short",
67
+ "--date=iso-strict",
68
+ "--format=%H%x09%ad%x09%an%x09%D%x09%s",
69
+ `--max-count=${limit ?? 200}`
70
+ ]
71
+ });
72
+ return stdout.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean).map(parseGitHistoryLine).map((entry) => ({
73
+ ...entry,
74
+ touchesFile: false
75
+ })).toReversed();
76
+ },
77
+ async getRevisionDiff({ workspacePath, revision }) {
78
+ const { stdout } = await runner.runGit({
79
+ workspacePath,
80
+ args: [
81
+ "show",
82
+ "--format=",
83
+ "--find-renames",
84
+ revision
85
+ ]
86
+ });
87
+ return stdout;
88
+ },
89
+ async showFileAtRevision({ workspacePath, revset, filePath }) {
90
+ if (revset === "EMPTY") return "";
91
+ try {
92
+ const { stdout } = await runner.runGit({
93
+ workspacePath,
94
+ args: ["show", `${revset}:${filePath}`]
95
+ });
96
+ return stdout;
97
+ } catch (error) {
98
+ if (isMissingFileAtRevisionError(error)) return "";
99
+ throw error;
100
+ }
101
+ },
102
+ async resolvePreviousPath({ workspacePath, revision, currentPath }) {
103
+ return (await resolvePreviousGitPath({
104
+ runner,
105
+ workspacePath,
106
+ revision,
107
+ currentPath
108
+ }))?.fromPath || currentPath;
109
+ },
110
+ async listRevisionFiles({ workspacePath, revision, signal }) {
111
+ const { stdout } = await runner.runGit({
112
+ workspacePath,
113
+ args: [
114
+ "diff-tree",
115
+ "--root",
116
+ "--no-commit-id",
117
+ "--name-only",
118
+ "-r",
119
+ revision
120
+ ],
121
+ options: { signal }
122
+ });
123
+ return parseOutputLines(stdout);
124
+ },
125
+ async listRevisionTreeFiles({ workspacePath, revision, signal }) {
126
+ const { stdout } = await runner.runGit({
127
+ workspacePath,
128
+ args: [
129
+ "ls-tree",
130
+ "-r",
131
+ "--name-only",
132
+ revision
133
+ ],
134
+ options: { signal }
135
+ });
136
+ return parseOutputLines(stdout).toSorted((left, right) => left.localeCompare(right));
137
+ },
138
+ async listWorkingTreeFiles({ workspacePath, signal }) {
139
+ const files = /* @__PURE__ */ new Set();
140
+ try {
141
+ const { stdout } = await runner.runGit({
142
+ workspacePath,
143
+ args: [
144
+ "diff",
145
+ "--name-only",
146
+ "HEAD",
147
+ "--"
148
+ ],
149
+ options: { signal }
150
+ });
151
+ for (const relativePath of parseOutputLines(stdout)) files.add(relativePath);
152
+ } catch {}
153
+ return [...files].toSorted((left, right) => left.localeCompare(right));
154
+ },
155
+ async getRemoteBaseUrl({ workspacePath }) {
156
+ try {
157
+ const { stdout } = await runner.runGit({
158
+ workspacePath,
159
+ args: [
160
+ "remote",
161
+ "get-url",
162
+ "origin"
163
+ ]
164
+ });
165
+ return require_history_helpers.getGitHubRemoteBaseUrl(stdout);
166
+ } catch {
167
+ return;
168
+ }
169
+ },
170
+ async getSnapshotEntriesForFile() {
171
+ return [];
172
+ },
173
+ async buildRangeMultiDiffPlan({ workspacePath, fromEntry, toEntry, signal }) {
174
+ const changedFiles = toEntry.isWorkingTree ? await listGitChangedFiles({
175
+ runner,
176
+ workspacePath,
177
+ fromRevision: fromEntry.revision,
178
+ signal
179
+ }) : await listGitChangedFiles({
180
+ runner,
181
+ workspacePath,
182
+ fromRevision: fromEntry.revision,
183
+ toRevision: toEntry.revision,
184
+ signal
185
+ });
186
+ return {
187
+ title: `${fromEntry.shortRevision}..${toEntry.shortRevision}`,
188
+ files: changedFiles.map((relativePath) => ({
189
+ relativePath,
190
+ originalRevset: fromEntry.revision,
191
+ modifiedRevset: toEntry.isWorkingTree ? "@" : toEntry.revision,
192
+ backend: "git"
193
+ }))
194
+ };
195
+ },
196
+ async buildRevisionMultiDiffPlan({ workspacePath, entry, signal }) {
197
+ const files = parseOutputLines((await runner.runGit({
198
+ workspacePath,
199
+ args: [
200
+ "diff-tree",
201
+ "--root",
202
+ "--no-commit-id",
203
+ "--name-only",
204
+ "-r",
205
+ entry.revision
206
+ ],
207
+ options: { signal }
208
+ })).stdout);
209
+ const parentRevision = await resolveGitParentRevision({
210
+ runner,
211
+ workspacePath,
212
+ revision: entry.revision,
213
+ signal
214
+ });
215
+ return {
216
+ title: entry.shortRevision,
217
+ files: files.map((relativePath) => ({
218
+ relativePath,
219
+ originalRevset: parentRevision || "EMPTY",
220
+ modifiedRevset: entry.revision,
221
+ backend: "git"
222
+ }))
223
+ };
224
+ }
225
+ };
226
+ }
227
+ function createJjHistoryAdapter(args) {
228
+ const { runner } = args;
229
+ return {
230
+ backend: "jj",
231
+ async getFileRevisionHistory({ workspacePath, relativePath, limit, customRevset }) {
232
+ return collectJjFileRevisionHistory({
233
+ runner,
234
+ workspacePath,
235
+ relativePath,
236
+ limit: limit ?? 200,
237
+ customRevset
238
+ });
239
+ },
240
+ async getRepositoryRevisionHistory({ workspacePath, limit, customRevset }) {
241
+ const template = require_history_helpers.buildJjHistoryLogTemplate();
242
+ const { stdout } = await runner.runJj({
243
+ workspacePath,
244
+ args: [
245
+ "log",
246
+ "--no-graph",
247
+ "--limit",
248
+ String(limit ?? 200),
249
+ "-r",
250
+ customRevset?.trim() || "ancestors(@)",
251
+ "-T",
252
+ template
253
+ ]
254
+ });
255
+ return require_history_helpers.dedupeAdjacentEntriesByChangeId(stdout.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean).map(require_history_helpers.parseJjHistoryLine).map((entry) => ({
256
+ ...entry,
257
+ touchesFile: false
258
+ })).toReversed());
259
+ },
260
+ async getRevisionDiff({ workspacePath, revision }) {
261
+ const { stdout } = await runner.runJj({
262
+ workspacePath,
263
+ args: [
264
+ "diff",
265
+ "--git",
266
+ "-r",
267
+ revision
268
+ ]
269
+ });
270
+ return stdout;
271
+ },
272
+ async showFileAtRevision({ workspacePath, revset, filePath }) {
273
+ if (revset === "EMPTY") return "";
274
+ try {
275
+ const { stdout } = await runner.runJj({
276
+ workspacePath,
277
+ args: [
278
+ "file",
279
+ "show",
280
+ "-r",
281
+ revset,
282
+ require_history_helpers.toJjRootFileFileset(filePath)
283
+ ]
284
+ });
285
+ return stdout;
286
+ } catch (error) {
287
+ if (isMissingFileAtRevisionError(error)) return "";
288
+ throw error;
289
+ }
290
+ },
291
+ async resolvePreviousPath({ workspacePath, revision, currentPath }) {
292
+ try {
293
+ const { stdout } = await runner.runJj({
294
+ workspacePath,
295
+ args: [
296
+ "diff",
297
+ "--summary",
298
+ "-r",
299
+ revision
300
+ ]
301
+ });
302
+ const rename = require_history_helpers.parseJjSummaryRenameLines(stdout).find((entry) => entry.toPath === currentPath);
303
+ if (rename) return rename.fromPath;
304
+ } catch {}
305
+ const previousTransition = await resolvePreviousGitPath({
306
+ runner,
307
+ workspacePath,
308
+ revision,
309
+ currentPath
310
+ });
311
+ return shouldFollowPredecessorTransition(previousTransition) ? previousTransition.fromPath : currentPath;
312
+ },
313
+ async listRevisionFiles({ workspacePath, revision, signal }) {
314
+ const { stdout } = await runner.runJj({
315
+ workspacePath,
316
+ args: [
317
+ "diff",
318
+ "--name-only",
319
+ "-r",
320
+ revision
321
+ ],
322
+ options: { signal }
323
+ });
324
+ return parseOutputLines(stdout);
325
+ },
326
+ async listRevisionTreeFiles({ workspacePath, revision, signal }) {
327
+ const { stdout } = await runner.runJj({
328
+ workspacePath,
329
+ args: [
330
+ "file",
331
+ "list",
332
+ "-r",
333
+ revision
334
+ ],
335
+ options: { signal }
336
+ });
337
+ return parseOutputLines(stdout).toSorted((left, right) => left.localeCompare(right));
338
+ },
339
+ async listWorkingTreeFiles({ workspacePath, signal }) {
340
+ const { stdout } = await runner.runJj({
341
+ workspacePath,
342
+ args: [
343
+ "diff",
344
+ "--name-only",
345
+ "-r",
346
+ "@"
347
+ ],
348
+ options: { signal }
349
+ });
350
+ return parseOutputLines(stdout);
351
+ },
352
+ async getRemoteBaseUrl({ workspacePath }) {
353
+ try {
354
+ const { stdout } = await runner.runGit({
355
+ workspacePath,
356
+ args: [
357
+ "remote",
358
+ "get-url",
359
+ "origin"
360
+ ]
361
+ });
362
+ return require_history_helpers.getGitHubRemoteBaseUrl(stdout);
363
+ } catch {
364
+ return;
365
+ }
366
+ },
367
+ async getSnapshotEntriesForFile({ workspacePath, relativePath, entry }) {
368
+ if (!entry.changeId || entry.isWorkingTree || !entry.touchesFile) return [];
369
+ try {
370
+ const { stdout } = await runner.runJj({
371
+ workspacePath,
372
+ args: [
373
+ "evolog",
374
+ "--no-graph",
375
+ "--summary",
376
+ "--limit",
377
+ String(200),
378
+ "-r",
379
+ entry.revision
380
+ ]
381
+ });
382
+ return require_history_helpers.parseJjEvolutionSummaryEntries(stdout).filter((evolutionEntry) => require_history_helpers.parseJjSummaryChangedPaths(evolutionEntry.summaryLines).includes(relativePath)).map((evolutionEntry, evolutionIndex) => ({
383
+ id: `snapshot:${entry.changeId}:${evolutionEntry.operationId || evolutionEntry.changeKey || evolutionEntry.revision}:${evolutionIndex}`,
384
+ revision: evolutionEntry.revision,
385
+ shortRevision: require_history_helpers.normalizeSnapshotOperationKey(evolutionEntry.changeKey) || evolutionEntry.revision.slice(0, 8),
386
+ changeId: entry.changeId,
387
+ bookmarkNames: evolutionEntry.bookmarkNames,
388
+ authorDate: normalizeSnapshotAuthorDate(evolutionEntry.authorDate, entry.authorDate),
389
+ authorName: evolutionEntry.authorName || entry.authorName,
390
+ description: normalizeSnapshotDescription(evolutionEntry.description, evolutionEntry.operationDescription),
391
+ isWorkingTree: false,
392
+ touchesFile: true,
393
+ timestamp: parseSnapshotTimestamp(evolutionEntry.authorDate, entry.timestamp),
394
+ filePath: relativePath,
395
+ operationId: evolutionEntry.operationId,
396
+ operationIndex: evolutionEntry.operationIndex,
397
+ operationKey: evolutionEntry.changeKey
398
+ })).toReversed();
399
+ } catch {
400
+ return [];
401
+ }
402
+ },
403
+ async buildRangeMultiDiffPlan({ workspacePath, fromEntry, toEntry, signal }) {
404
+ let changedFiles = await listChangedJjFiles({
405
+ runner,
406
+ workspacePath,
407
+ base: fromEntry.revision,
408
+ target: toEntry.isWorkingTree ? "@" : toEntry.revision,
409
+ signal
410
+ });
411
+ let originalRevset = fromEntry.revision;
412
+ let modifiedRevset = toEntry.isWorkingTree ? "@" : toEntry.revision;
413
+ let title = `${fromEntry.shortRevision}..${toEntry.shortRevision}`;
414
+ if (!changedFiles.length && toEntry.isWorkingTree && fromEntry.revision !== modifiedRevset) {
415
+ const revisionFiles = await parseRevisionFilesForJj({
416
+ runner,
417
+ workspacePath,
418
+ revision: fromEntry.revision,
419
+ signal
420
+ });
421
+ if (revisionFiles.length) {
422
+ changedFiles = revisionFiles;
423
+ originalRevset = `${fromEntry.revision}-`;
424
+ modifiedRevset = fromEntry.revision;
425
+ title = fromEntry.shortRevision;
426
+ }
427
+ }
428
+ return {
429
+ title,
430
+ files: changedFiles.map((relativePath) => ({
431
+ relativePath,
432
+ originalRevset,
433
+ modifiedRevset,
434
+ backend: "jj"
435
+ }))
436
+ };
437
+ },
438
+ async buildRevisionMultiDiffPlan({ workspacePath, entry, entryIndex, comparisonSource, sourceEntries, signal }) {
439
+ const baseRevision = comparisonSource === "snapshot" ? sourceEntries[Math.max(0, entryIndex - 1)]?.revision || `${entry.revision}-` : `${entry.revision}-`;
440
+ const revisionFiles = comparisonSource === "snapshot" ? await listChangedJjFiles({
441
+ runner,
442
+ workspacePath,
443
+ base: baseRevision,
444
+ target: entry.revision,
445
+ signal
446
+ }) : await parseRevisionFilesForJj({
447
+ runner,
448
+ workspacePath,
449
+ revision: entry.revision,
450
+ signal
451
+ });
452
+ return {
453
+ title: entry.shortRevision,
454
+ files: revisionFiles.map((relativePath) => ({
455
+ relativePath,
456
+ originalRevset: baseRevision,
457
+ modifiedRevset: entry.revision,
458
+ backend: "jj"
459
+ }))
460
+ };
461
+ }
462
+ };
463
+ }
464
+ function parseGitHistoryLine(line) {
465
+ const [revision = "", authorDate = "", authorName = "", decorations = "", ...descriptionParts] = line.split(" ");
466
+ return {
467
+ id: revision,
468
+ revision,
469
+ shortRevision: revision.slice(0, 8),
470
+ branchNames: require_history_helpers.parseGitBranchNames(decorations),
471
+ changeId: void 0,
472
+ authorDate,
473
+ authorName: authorName || "Unknown author",
474
+ description: descriptionParts.join(" ") || "No description",
475
+ isWorkingTree: false,
476
+ touchesFile: true,
477
+ timestamp: Date.parse(authorDate) || 0
478
+ };
479
+ }
480
+ async function collectJjFileRevisionHistory(args) {
481
+ const ancestorLimitRevset = args.ancestorLimitRevset || "@";
482
+ const seenSegments = args.seenSegments || /* @__PURE__ */ new Set();
483
+ const segmentKey = `${args.relativePath}\u0000${ancestorLimitRevset}\u0000${args.customRevset || ""}`;
484
+ if (seenSegments.has(segmentKey)) return [];
485
+ seenSegments.add(segmentKey);
486
+ const segment = await loadJjFileHistorySegment(args.runner, args.workspacePath, args.relativePath, ancestorLimitRevset, args.limit, args.customRevset);
487
+ const previousSource = await resolvePreviousJjPath({
488
+ runner: args.runner,
489
+ workspacePath: args.workspacePath,
490
+ relativePath: args.relativePath,
491
+ segment
492
+ });
493
+ return mergeJjHistoryEntries(previousSource ? await collectJjFileRevisionHistory({
494
+ runner: args.runner,
495
+ workspacePath: args.workspacePath,
496
+ relativePath: previousSource.relativePath,
497
+ ancestorLimitRevset: previousSource.ancestorLimitRevset,
498
+ customRevset: args.customRevset,
499
+ seenSegments,
500
+ limit: args.limit
501
+ }) : [], segment.map(({ entry }) => entry));
502
+ }
503
+ async function loadJjFileHistorySegment(runner, workspacePath, relativePath, ancestorLimitRevset, limit, customRevset) {
504
+ const template = require_history_helpers.buildJjHistoryLogTemplate();
505
+ const { stdout } = await runner.runJj({
506
+ workspacePath,
507
+ args: [
508
+ "log",
509
+ "--no-graph",
510
+ "--reversed",
511
+ "--summary",
512
+ "--limit",
513
+ String(limit),
514
+ "-r",
515
+ require_revset.composeJjHistoryRevset({
516
+ defaultRevset: buildJjAncestorHistoryRevset(ancestorLimitRevset),
517
+ customRevset
518
+ }),
519
+ "-T",
520
+ template,
521
+ require_history_helpers.toJjRootFileFileset(relativePath)
522
+ ]
523
+ });
524
+ return parseJjHistoryEntriesWithSummary(stdout);
525
+ }
526
+ function parseJjHistoryEntriesWithSummary(output) {
527
+ const entries = [];
528
+ let currentEntry = null;
529
+ for (const rawLine of output.split(/\r?\n/u)) {
530
+ const line = rawLine.trim();
531
+ if (!line) continue;
532
+ if (line.includes(" ")) {
533
+ if (currentEntry) entries.push(currentEntry);
534
+ currentEntry = {
535
+ entry: require_history_helpers.parseJjHistoryLine(line),
536
+ summaryLines: []
537
+ };
538
+ continue;
539
+ }
540
+ if (currentEntry) currentEntry.summaryLines.push(line);
541
+ }
542
+ if (currentEntry) entries.push(currentEntry);
543
+ return entries;
544
+ }
545
+ function buildJjAncestorHistoryRevset(ancestorLimitRevset) {
546
+ return `ancestors(${ancestorLimitRevset})`;
547
+ }
548
+ async function resolvePreviousJjPath(args) {
549
+ const boundaryEntry = args.segment[0];
550
+ if (!boundaryEntry) return;
551
+ const boundarySummary = boundaryEntry.summaryLines.join("\n");
552
+ const rename = require_history_helpers.parseJjSummaryRenameLines(boundarySummary).find((entry) => entry.toPath === args.relativePath);
553
+ if (rename) return {
554
+ relativePath: rename.fromPath,
555
+ ancestorLimitRevset: `${boundaryEntry.entry.revision}-`
556
+ };
557
+ const previousTransition = await resolvePreviousGitPath({
558
+ runner: args.runner,
559
+ workspacePath: args.workspacePath,
560
+ revision: boundaryEntry.entry.revision,
561
+ currentPath: args.relativePath
562
+ });
563
+ if (!shouldFollowPredecessorTransition(previousTransition)) return;
564
+ return {
565
+ relativePath: previousTransition.fromPath,
566
+ ancestorLimitRevset: `${boundaryEntry.entry.revision}-`
567
+ };
568
+ }
569
+ function mergeJjHistoryEntries(...segments) {
570
+ const seenRevisions = /* @__PURE__ */ new Set();
571
+ const merged = [];
572
+ for (const segment of segments) for (const entry of segment) {
573
+ if (seenRevisions.has(entry.revision)) continue;
574
+ seenRevisions.add(entry.revision);
575
+ merged.push(entry);
576
+ }
577
+ return merged;
578
+ }
579
+ function parseOutputLines(output) {
580
+ return output.split(/\r?\n/u).map((line) => line.trim()).filter(Boolean);
581
+ }
582
+ function parseGitPathTransitionLines(output) {
583
+ return parseOutputLines(output).map((line) => {
584
+ const [status = "", fromPath = "", toPath = ""] = line.split(" ");
585
+ if (!status.startsWith("R") && !status.startsWith("C")) return null;
586
+ return fromPath && toPath ? {
587
+ fromPath,
588
+ toPath,
589
+ kind: status.startsWith("C") ? "copy" : "rename"
590
+ } : null;
591
+ }).filter((entry) => entry !== null);
592
+ }
593
+ function shouldFollowPredecessorTransition(transition) {
594
+ if (!transition) return false;
595
+ if (transition.kind === "rename") return true;
596
+ return node_path.default.basename(transition.fromPath) === node_path.default.basename(transition.toPath);
597
+ }
598
+ async function resolvePreviousGitPath(args) {
599
+ try {
600
+ const { stdout } = await args.runner.runGit({
601
+ workspacePath: args.workspacePath,
602
+ args: [
603
+ "diff-tree",
604
+ "--root",
605
+ "--no-commit-id",
606
+ "--name-status",
607
+ "--find-renames=1%",
608
+ "--find-copies=1%",
609
+ "--find-copies-harder",
610
+ "-r",
611
+ args.revision
612
+ ],
613
+ options: { signal: args.signal }
614
+ });
615
+ return parseGitPathTransitionLines(stdout).find((entry) => entry.toPath === args.currentPath);
616
+ } catch {
617
+ return;
618
+ }
619
+ }
620
+ function isMissingFileAtRevisionError(error) {
621
+ const message = error instanceof Error ? error.message : String(error);
622
+ return /exists on disk, but not in/i.test(message) || /path .* does not exist in/i.test(message) || /no such path/i.test(message) || /no matching entries/i.test(message) || /No such file or directory/i.test(message);
623
+ }
624
+ function normalizeSnapshotAuthorDate(authorDate, fallbackAuthorDate) {
625
+ const value = authorDate.trim();
626
+ if (value && !Number.isNaN(Date.parse(value))) return value;
627
+ return fallbackAuthorDate;
628
+ }
629
+ function parseSnapshotTimestamp(authorDate, fallbackTimestamp) {
630
+ const timestamp = Date.parse(authorDate);
631
+ return Number.isNaN(timestamp) ? fallbackTimestamp : timestamp;
632
+ }
633
+ function normalizeSnapshotDescription(description, operationDescription) {
634
+ const trimmed = String(description || "").trim();
635
+ if (!trimmed || trimmed === "(no description set)" || trimmed === "(empty) (no description set)") return operationDescription || "Snapshot";
636
+ return trimmed;
637
+ }
638
+ async function listGitChangedFiles(args) {
639
+ const commandArgs = args.toRevision ? [
640
+ "diff",
641
+ "--name-only",
642
+ args.fromRevision,
643
+ args.toRevision,
644
+ "--"
645
+ ] : [
646
+ "diff",
647
+ "--name-only",
648
+ args.fromRevision,
649
+ "--"
650
+ ];
651
+ const { stdout } = await args.runner.runGit({
652
+ workspacePath: args.workspacePath,
653
+ args: commandArgs,
654
+ options: { signal: args.signal }
655
+ });
656
+ return parseOutputLines(stdout);
657
+ }
658
+ async function resolveGitParentRevision(args) {
659
+ try {
660
+ const { stdout } = await args.runner.runGit({
661
+ workspacePath: args.workspacePath,
662
+ args: ["rev-parse", `${args.revision}^`],
663
+ options: { signal: args.signal }
664
+ });
665
+ return stdout.trim() || void 0;
666
+ } catch {
667
+ return;
668
+ }
669
+ }
670
+ async function listChangedJjFiles(args) {
671
+ const { stdout } = await args.runner.runJj({
672
+ workspacePath: args.workspacePath,
673
+ args: [
674
+ "diff",
675
+ "--name-only",
676
+ "--from",
677
+ args.base,
678
+ "--to",
679
+ args.target
680
+ ],
681
+ options: { signal: args.signal }
682
+ });
683
+ return parseOutputLines(stdout);
684
+ }
685
+ async function parseRevisionFilesForJj(args) {
686
+ const { stdout } = await args.runner.runJj({
687
+ workspacePath: args.workspacePath,
688
+ args: [
689
+ "diff",
690
+ "--name-only",
691
+ "-r",
692
+ args.revision
693
+ ],
694
+ options: { signal: args.signal }
695
+ });
696
+ return parseOutputLines(stdout);
697
+ }
698
+ //#endregion
699
+ exports.resolveHistoryAdapter = resolveHistoryAdapter;
700
+ exports.resolveHistoryWorkspacePath = resolveHistoryWorkspacePath;
701
+
702
+ //# sourceMappingURL=history-adapters.cjs.map