diffity 0.1.0 → 0.1.2

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 (478) hide show
  1. package/dist/index.js +1081 -0
  2. package/dist/ui/assets/abap-BdImnpbu.js +1 -0
  3. package/dist/ui/assets/actionscript-3-CoDkCxhg.js +1 -0
  4. package/dist/ui/assets/ada-bCR0ucgS.js +1 -0
  5. package/dist/ui/assets/andromeeda-C4gqWexZ.js +1 -0
  6. package/dist/ui/assets/angular-html-DA-rfuFy.js +1 -0
  7. package/dist/ui/assets/angular-ts-BrjP3tb8.js +1 -0
  8. package/dist/ui/assets/apache-Pmp26Uib.js +1 -0
  9. package/dist/ui/assets/apex-D8_7TLub.js +1 -0
  10. package/dist/ui/assets/apl-CORt7UWP.js +1 -0
  11. package/dist/ui/assets/applescript-Co6uUVPk.js +1 -0
  12. package/dist/ui/assets/ara-BRHolxvo.js +1 -0
  13. package/dist/ui/assets/asciidoc-Ve4PFQV2.js +1 -0
  14. package/dist/ui/assets/asm-D_Q5rh1f.js +1 -0
  15. package/dist/ui/assets/astro-HNnZUWAn.js +1 -0
  16. package/dist/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
  17. package/dist/ui/assets/awk-DMzUqQB5.js +1 -0
  18. package/dist/ui/assets/ayu-dark-DYE7WIF3.js +1 -0
  19. package/dist/ui/assets/ayu-light-BA47KaF1.js +1 -0
  20. package/dist/ui/assets/ayu-mirage-32ctXXKs.js +1 -0
  21. package/dist/ui/assets/ballerina-BFfxhgS-.js +1 -0
  22. package/dist/ui/assets/bat-BkioyH1T.js +1 -0
  23. package/dist/ui/assets/beancount-k_qm7-4y.js +1 -0
  24. package/dist/ui/assets/berry-uYugtg8r.js +1 -0
  25. package/dist/ui/assets/bibtex-CHM0blh-.js +1 -0
  26. package/dist/ui/assets/bicep-Bmn6On1c.js +1 -0
  27. package/dist/ui/assets/bird2-BIv1doCn.js +1 -0
  28. package/dist/ui/assets/blade-BjGOyj-B.js +1 -0
  29. package/dist/ui/assets/bsl-BO_Y6i37.js +1 -0
  30. package/dist/ui/assets/c-BIGW1oBm.js +1 -0
  31. package/dist/ui/assets/c3-eo99z4R2.js +1 -0
  32. package/dist/ui/assets/cadence-Bv_4Rxtq.js +1 -0
  33. package/dist/ui/assets/cairo-KRGpt6FW.js +1 -0
  34. package/dist/ui/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  35. package/dist/ui/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  36. package/dist/ui/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  37. package/dist/ui/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  38. package/dist/ui/assets/clarity-D53aC0YG.js +1 -0
  39. package/dist/ui/assets/clojure-P80f7IUj.js +1 -0
  40. package/dist/ui/assets/cmake-D1j8_8rp.js +1 -0
  41. package/dist/ui/assets/cobol-nBiQ_Alo.js +1 -0
  42. package/dist/ui/assets/codeowners-Bp6g37R7.js +1 -0
  43. package/dist/ui/assets/codeql-DsOJ9woJ.js +1 -0
  44. package/dist/ui/assets/coffee-Ch7k5sss.js +1 -0
  45. package/dist/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
  46. package/dist/ui/assets/coq-DkFqJrB1.js +1 -0
  47. package/dist/ui/assets/cpp-CofmeUqb.js +1 -0
  48. package/dist/ui/assets/crystal-DNxU26gB.js +1 -0
  49. package/dist/ui/assets/csharp-COcwbKMJ.js +1 -0
  50. package/dist/ui/assets/css-CLj8gQPS.js +1 -0
  51. package/dist/ui/assets/csv-fuZLfV_i.js +1 -0
  52. package/dist/ui/assets/cue-D82EKSYY.js +1 -0
  53. package/dist/ui/assets/cypher-COkxafJQ.js +1 -0
  54. package/dist/ui/assets/d-85-TOEBH.js +1 -0
  55. package/dist/ui/assets/dark-plus-C3mMm8J8.js +1 -0
  56. package/dist/ui/assets/dart-bE4Kk8sk.js +1 -0
  57. package/dist/ui/assets/dax-CEL-wOlO.js +1 -0
  58. package/dist/ui/assets/desktop-BmXAJ9_W.js +1 -0
  59. package/dist/ui/assets/diff-D97Zzqfu.js +1 -0
  60. package/dist/ui/assets/docker-BcOcwvcX.js +1 -0
  61. package/dist/ui/assets/dotenv-Da5cRb03.js +1 -0
  62. package/dist/ui/assets/dracula-BzJJZx-M.js +1 -0
  63. package/dist/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
  64. package/dist/ui/assets/dream-maker-BtqSS_iP.js +1 -0
  65. package/dist/ui/assets/edge-FbVlp4U3.js +1 -0
  66. package/dist/ui/assets/elixir-CkH2-t6x.js +1 -0
  67. package/dist/ui/assets/elm-DbKCFpqz.js +1 -0
  68. package/dist/ui/assets/emacs-lisp-CXvaQtF9.js +1 -0
  69. package/dist/ui/assets/erb-BYCe7drp.js +1 -0
  70. package/dist/ui/assets/erlang-DsQrWhSR.js +1 -0
  71. package/dist/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
  72. package/dist/ui/assets/everforest-light-C8M2exoo.js +1 -0
  73. package/dist/ui/assets/fennel-BYunw83y.js +1 -0
  74. package/dist/ui/assets/fish-BvzEVeQv.js +1 -0
  75. package/dist/ui/assets/fluent-C4IJs8-o.js +1 -0
  76. package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  77. package/dist/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
  78. package/dist/ui/assets/fsharp-CXgrBDvD.js +1 -0
  79. package/dist/ui/assets/gdresource-BOOCDP_w.js +1 -0
  80. package/dist/ui/assets/gdscript-C5YyOfLZ.js +1 -0
  81. package/dist/ui/assets/gdshader-DkwncUOv.js +1 -0
  82. package/dist/ui/assets/genie-D0YGMca9.js +1 -0
  83. package/dist/ui/assets/gherkin-DyxjwDmM.js +1 -0
  84. package/dist/ui/assets/git-commit-F4YmCXRG.js +1 -0
  85. package/dist/ui/assets/git-rebase-r7XF79zn.js +1 -0
  86. package/dist/ui/assets/github-dark-DHJKELXO.js +1 -0
  87. package/dist/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
  88. package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  89. package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  90. package/dist/ui/assets/github-light-DAi9KRSo.js +1 -0
  91. package/dist/ui/assets/github-light-default-D7oLnXFd.js +1 -0
  92. package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  93. package/dist/ui/assets/gleam-BspZqrRM.js +1 -0
  94. package/dist/ui/assets/glimmer-js-ByusRIyA.js +1 -0
  95. package/dist/ui/assets/glimmer-ts-BfAWNZQY.js +1 -0
  96. package/dist/ui/assets/glsl-DplSGwfg.js +1 -0
  97. package/dist/ui/assets/gn-n2N0HUVH.js +1 -0
  98. package/dist/ui/assets/gnuplot-DdkO51Og.js +1 -0
  99. package/dist/ui/assets/go-C27-OAKa.js +1 -0
  100. package/dist/ui/assets/graphql-ChdNCCLP.js +1 -0
  101. package/dist/ui/assets/groovy-gcz8RCvz.js +1 -0
  102. package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  103. package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  104. package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  105. package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  106. package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  107. package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  108. package/dist/ui/assets/hack-i7_Ulhet.js +1 -0
  109. package/dist/ui/assets/haml-D5jkg6IW.js +1 -0
  110. package/dist/ui/assets/handlebars-BpdQsYii.js +1 -0
  111. package/dist/ui/assets/haskell-Df6bDoY_.js +1 -0
  112. package/dist/ui/assets/haxe-CzTSHFRz.js +1 -0
  113. package/dist/ui/assets/hcl-BWvSN4gD.js +1 -0
  114. package/dist/ui/assets/hjson-D5-asLiD.js +1 -0
  115. package/dist/ui/assets/hlsl-D3lLCCz7.js +1 -0
  116. package/dist/ui/assets/horizon-BUw7H-hv.js +1 -0
  117. package/dist/ui/assets/horizon-bright-CUuTKBJd.js +1 -0
  118. package/dist/ui/assets/houston-DnULxvSX.js +1 -0
  119. package/dist/ui/assets/html-derivative-DlHx6ybY.js +1 -0
  120. package/dist/ui/assets/html-pp8916En.js +1 -0
  121. package/dist/ui/assets/http-jrhK8wxY.js +1 -0
  122. package/dist/ui/assets/hurl-irOxFIW8.js +1 -0
  123. package/dist/ui/assets/hxml-Bvhsp5Yf.js +1 -0
  124. package/dist/ui/assets/hy-DFXneXwc.js +1 -0
  125. package/dist/ui/assets/imba-DGztddWO.js +1 -0
  126. package/dist/ui/assets/index-B2RHRT_g.css +1 -0
  127. package/dist/ui/assets/index-BUq0B-nJ.js +198 -0
  128. package/dist/ui/assets/ini-BEwlwnbL.js +1 -0
  129. package/dist/ui/assets/java-CylS5w8V.js +1 -0
  130. package/dist/ui/assets/javascript-wDzz0qaB.js +1 -0
  131. package/dist/ui/assets/jinja-f2NsQr07.js +1 -0
  132. package/dist/ui/assets/jison-wvAkD_A8.js +1 -0
  133. package/dist/ui/assets/json-Cp-IABpG.js +1 -0
  134. package/dist/ui/assets/json5-C9tS-k6U.js +1 -0
  135. package/dist/ui/assets/jsonc-Des-eS-w.js +1 -0
  136. package/dist/ui/assets/jsonl-DcaNXYhu.js +1 -0
  137. package/dist/ui/assets/jsonnet-DFQXde-d.js +1 -0
  138. package/dist/ui/assets/jssm-C2t-YnRu.js +1 -0
  139. package/dist/ui/assets/jsx-g9-lgVsj.js +1 -0
  140. package/dist/ui/assets/julia-CxzCAyBv.js +1 -0
  141. package/dist/ui/assets/just-VxiPbLrw.js +1 -0
  142. package/dist/ui/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  143. package/dist/ui/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  144. package/dist/ui/assets/kanagawa-wave-DWedfzmr.js +1 -0
  145. package/dist/ui/assets/kdl-DV7GczEv.js +1 -0
  146. package/dist/ui/assets/kotlin-BdnUsdx6.js +1 -0
  147. package/dist/ui/assets/kusto-wEQ09or8.js +1 -0
  148. package/dist/ui/assets/laserwave-DUszq2jm.js +1 -0
  149. package/dist/ui/assets/latex-CWtU0Tv5.js +1 -0
  150. package/dist/ui/assets/lean-BZvkOJ9d.js +1 -0
  151. package/dist/ui/assets/less-B1dDrJ26.js +1 -0
  152. package/dist/ui/assets/light-plus-B7mTdjB0.js +1 -0
  153. package/dist/ui/assets/liquid-C0sCDyMI.js +1 -0
  154. package/dist/ui/assets/llvm-DjAJT7YJ.js +1 -0
  155. package/dist/ui/assets/log-2UxHyX5q.js +1 -0
  156. package/dist/ui/assets/logo-BtOb2qkB.js +1 -0
  157. package/dist/ui/assets/lua-BaeVxFsk.js +1 -0
  158. package/dist/ui/assets/luau-C-HG3fhB.js +1 -0
  159. package/dist/ui/assets/make-CHLpvVh8.js +1 -0
  160. package/dist/ui/assets/markdown-Cvjx9yec.js +1 -0
  161. package/dist/ui/assets/marko-DjSrsDqO.js +1 -0
  162. package/dist/ui/assets/material-theme-D5KoaKCx.js +1 -0
  163. package/dist/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
  164. package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  165. package/dist/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
  166. package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  167. package/dist/ui/assets/matlab-D7o27uSR.js +1 -0
  168. package/dist/ui/assets/mdc-DTYItulj.js +1 -0
  169. package/dist/ui/assets/mdx-Cmh6b_Ma.js +1 -0
  170. package/dist/ui/assets/mermaid-mWjccvbQ.js +1 -0
  171. package/dist/ui/assets/min-dark-CafNBF8u.js +1 -0
  172. package/dist/ui/assets/min-light-CTRr51gU.js +1 -0
  173. package/dist/ui/assets/mipsasm-CKIfxQSi.js +1 -0
  174. package/dist/ui/assets/mojo-rZm6bMo-.js +1 -0
  175. package/dist/ui/assets/monokai-D4h5O-jR.js +1 -0
  176. package/dist/ui/assets/moonbit-_H4v1dQx.js +1 -0
  177. package/dist/ui/assets/move-IF9eRakj.js +1 -0
  178. package/dist/ui/assets/narrat-DRg8JJMk.js +1 -0
  179. package/dist/ui/assets/nextflow-C-mBbutL.js +1 -0
  180. package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  181. package/dist/ui/assets/nginx-BpAMiNFr.js +1 -0
  182. package/dist/ui/assets/night-owl-C39BiMTA.js +1 -0
  183. package/dist/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
  184. package/dist/ui/assets/nim-BIad80T-.js +1 -0
  185. package/dist/ui/assets/nix-CwoSXNpI.js +1 -0
  186. package/dist/ui/assets/nord-Ddv68eIx.js +1 -0
  187. package/dist/ui/assets/nushell-Cz2AlsmD.js +1 -0
  188. package/dist/ui/assets/objective-c-DXmwc3jG.js +1 -0
  189. package/dist/ui/assets/objective-cpp-CLxacb5B.js +1 -0
  190. package/dist/ui/assets/ocaml-C0hk2d4L.js +1 -0
  191. package/dist/ui/assets/odin-BBf5iR-q.js +1 -0
  192. package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  193. package/dist/ui/assets/one-light-C3Wv6jpd.js +1 -0
  194. package/dist/ui/assets/openscad-C4EeE6gA.js +1 -0
  195. package/dist/ui/assets/pascal-D93ZcfNL.js +1 -0
  196. package/dist/ui/assets/perl-NvoQZIq0.js +1 -0
  197. package/dist/ui/assets/php-R6g_5hLQ.js +1 -0
  198. package/dist/ui/assets/pkl-u5AG7uiY.js +1 -0
  199. package/dist/ui/assets/plastic-3e1v2bzS.js +1 -0
  200. package/dist/ui/assets/plsql-ChMvpjG-.js +1 -0
  201. package/dist/ui/assets/po-BTJTHyun.js +1 -0
  202. package/dist/ui/assets/poimandres-CS3Unz2-.js +1 -0
  203. package/dist/ui/assets/polar-C0HS_06l.js +1 -0
  204. package/dist/ui/assets/postcss-CXtECtnM.js +1 -0
  205. package/dist/ui/assets/powerquery-CEu0bR-o.js +1 -0
  206. package/dist/ui/assets/powershell-Dpen1YoG.js +1 -0
  207. package/dist/ui/assets/prisma-Dd19v3D-.js +1 -0
  208. package/dist/ui/assets/prolog-CbFg5uaA.js +1 -0
  209. package/dist/ui/assets/proto-C7zT0LnQ.js +1 -0
  210. package/dist/ui/assets/pug-DKIMFp6K.js +1 -0
  211. package/dist/ui/assets/puppet-BMWR74SV.js +1 -0
  212. package/dist/ui/assets/purescript-CklMAg4u.js +1 -0
  213. package/dist/ui/assets/python-B6aJPvgy.js +1 -0
  214. package/dist/ui/assets/qml-3beO22l8.js +1 -0
  215. package/dist/ui/assets/qmldir-C8lEn-DE.js +1 -0
  216. package/dist/ui/assets/qss-IeuSbFQv.js +1 -0
  217. package/dist/ui/assets/r-Dspwwk_N.js +1 -0
  218. package/dist/ui/assets/racket-BqYA7rlc.js +1 -0
  219. package/dist/ui/assets/raku-DXvB9xmW.js +1 -0
  220. package/dist/ui/assets/razor-BDqjjVU7.js +1 -0
  221. package/dist/ui/assets/red-bN70gL4F.js +1 -0
  222. package/dist/ui/assets/reg-C-SQnVFl.js +1 -0
  223. package/dist/ui/assets/regexp-CDVJQ6XC.js +1 -0
  224. package/dist/ui/assets/rel-C3B-1QV4.js +1 -0
  225. package/dist/ui/assets/riscv-BM1_JUlF.js +1 -0
  226. package/dist/ui/assets/ron-D8l8udqQ.js +1 -0
  227. package/dist/ui/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  228. package/dist/ui/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  229. package/dist/ui/assets/rose-pine-qdsjHGoJ.js +1 -0
  230. package/dist/ui/assets/rosmsg-BJDFO7_C.js +1 -0
  231. package/dist/ui/assets/rst-CRjBmOyv.js +1 -0
  232. package/dist/ui/assets/ruby-Wjq7vjNf.js +1 -0
  233. package/dist/ui/assets/rust-B1yitclQ.js +1 -0
  234. package/dist/ui/assets/sas-cz2c8ADy.js +1 -0
  235. package/dist/ui/assets/sass-Cj5Yp3dK.js +1 -0
  236. package/dist/ui/assets/scala-C151Ov-r.js +1 -0
  237. package/dist/ui/assets/scheme-C98Dy4si.js +1 -0
  238. package/dist/ui/assets/scss-D5BDwBP9.js +1 -0
  239. package/dist/ui/assets/sdbl-DVxCFoDh.js +1 -0
  240. package/dist/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
  241. package/dist/ui/assets/shellscript-Yzrsuije.js +1 -0
  242. package/dist/ui/assets/shellsession-BADoaaVG.js +1 -0
  243. package/dist/ui/assets/slack-dark-BthQWCQV.js +1 -0
  244. package/dist/ui/assets/slack-ochin-DqwNpetd.js +1 -0
  245. package/dist/ui/assets/smalltalk-BERRCDM3.js +1 -0
  246. package/dist/ui/assets/snazzy-light-Bw305WKR.js +1 -0
  247. package/dist/ui/assets/solarized-dark-DXbdFlpD.js +1 -0
  248. package/dist/ui/assets/solarized-light-L9t79GZl.js +1 -0
  249. package/dist/ui/assets/solidity-rGO070M0.js +1 -0
  250. package/dist/ui/assets/soy-8wufbnw4.js +1 -0
  251. package/dist/ui/assets/sparql-rVzFXLq3.js +1 -0
  252. package/dist/ui/assets/splunk-BtCnVYZw.js +1 -0
  253. package/dist/ui/assets/sql-BLtJtn59.js +1 -0
  254. package/dist/ui/assets/ssh-config-_ykCGR6B.js +1 -0
  255. package/dist/ui/assets/stata-BH5u7GGu.js +1 -0
  256. package/dist/ui/assets/stylus-BEDo0Tqx.js +1 -0
  257. package/dist/ui/assets/surrealql-Bq5Q-fJD.js +1 -0
  258. package/dist/ui/assets/svelte-Cy7k_4gC.js +1 -0
  259. package/dist/ui/assets/swift-D82vCrfD.js +1 -0
  260. package/dist/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
  261. package/dist/ui/assets/system-verilog-CnnmHF94.js +1 -0
  262. package/dist/ui/assets/systemd-4A_iFExJ.js +1 -0
  263. package/dist/ui/assets/talonscript-CkByrt1z.js +1 -0
  264. package/dist/ui/assets/tasl-QIJgUcNo.js +1 -0
  265. package/dist/ui/assets/tcl-dwOrl1Do.js +1 -0
  266. package/dist/ui/assets/templ-DhtptRzy.js +1 -0
  267. package/dist/ui/assets/terraform-BETggiCN.js +1 -0
  268. package/dist/ui/assets/tex-idrVyKtj.js +1 -0
  269. package/dist/ui/assets/tokyo-night-hegEt444.js +1 -0
  270. package/dist/ui/assets/toml-vGWfd6FD.js +1 -0
  271. package/dist/ui/assets/ts-tags-DQrlYJgV.js +1 -0
  272. package/dist/ui/assets/tsv-B_m7g4N7.js +1 -0
  273. package/dist/ui/assets/tsx-COt5Ahok.js +1 -0
  274. package/dist/ui/assets/turtle-BsS91CYL.js +1 -0
  275. package/dist/ui/assets/twig-xg9kU7Mw.js +1 -0
  276. package/dist/ui/assets/typescript-BPQ3VLAy.js +1 -0
  277. package/dist/ui/assets/typespec-CAFt9gP4.js +1 -0
  278. package/dist/ui/assets/typst-DHCkPAjA.js +1 -0
  279. package/dist/ui/assets/v-BcVCzyr7.js +1 -0
  280. package/dist/ui/assets/vala-CsfeWuGM.js +1 -0
  281. package/dist/ui/assets/vb-D17OF-Vu.js +1 -0
  282. package/dist/ui/assets/verilog-BQ8w6xss.js +1 -0
  283. package/dist/ui/assets/vesper-DU1UobuO.js +1 -0
  284. package/dist/ui/assets/vhdl-CeAyd5Ju.js +1 -0
  285. package/dist/ui/assets/viml-CJc9bBzg.js +1 -0
  286. package/dist/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
  287. package/dist/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
  288. package/dist/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
  289. package/dist/ui/assets/vue-D2xRrEX4.js +1 -0
  290. package/dist/ui/assets/vue-html-AaS7Mt5G.js +1 -0
  291. package/dist/ui/assets/vue-vine-BoDAl6tE.js +1 -0
  292. package/dist/ui/assets/vyper-CDx5xZoG.js +1 -0
  293. package/dist/ui/assets/wasm-CG6Dc4jp.js +1 -0
  294. package/dist/ui/assets/wasm-MzD3tlZU.js +1 -0
  295. package/dist/ui/assets/wenyan-BV7otONQ.js +1 -0
  296. package/dist/ui/assets/wgsl-Dx-B1_4e.js +1 -0
  297. package/dist/ui/assets/wikitext-BhOHFoWU.js +1 -0
  298. package/dist/ui/assets/wit-5i3qLPDT.js +1 -0
  299. package/dist/ui/assets/wolfram-lXgVvXCa.js +1 -0
  300. package/dist/ui/assets/xml-sdJ4AIDG.js +1 -0
  301. package/dist/ui/assets/xsl-CtQFsRM5.js +1 -0
  302. package/dist/ui/assets/yaml-Buea-lGh.js +1 -0
  303. package/dist/ui/assets/zenscript-DVFEvuxE.js +1 -0
  304. package/dist/ui/assets/zig-VOosw3JB.js +1 -0
  305. package/{packages → dist}/ui/index.html +2 -1
  306. package/package.json +37 -18
  307. package/.claude/settings.local.json +0 -11
  308. package/LICENSE +0 -21
  309. package/README.md +0 -71
  310. package/development.md +0 -156
  311. package/packages/cli/build.js +0 -38
  312. package/packages/cli/package.json +0 -51
  313. package/packages/cli/src/agent.ts +0 -187
  314. package/packages/cli/src/db.ts +0 -58
  315. package/packages/cli/src/index.ts +0 -196
  316. package/packages/cli/src/review-routes.ts +0 -150
  317. package/packages/cli/src/server.ts +0 -370
  318. package/packages/cli/src/session.ts +0 -48
  319. package/packages/cli/src/threads.ts +0 -238
  320. package/packages/cli/tsconfig.json +0 -13
  321. package/packages/git/package.json +0 -24
  322. package/packages/git/src/commits.ts +0 -28
  323. package/packages/git/src/diff.ts +0 -97
  324. package/packages/git/src/exec.ts +0 -35
  325. package/packages/git/src/index.ts +0 -5
  326. package/packages/git/src/repo.ts +0 -63
  327. package/packages/git/src/status.ts +0 -9
  328. package/packages/git/src/types.ts +0 -12
  329. package/packages/git/tsconfig.json +0 -9
  330. package/packages/parser/package.json +0 -26
  331. package/packages/parser/src/index.ts +0 -12
  332. package/packages/parser/src/parse.ts +0 -299
  333. package/packages/parser/src/types.ts +0 -52
  334. package/packages/parser/src/word-diff.ts +0 -155
  335. package/packages/parser/tests/fixtures/binary-deleted.diff +0 -4
  336. package/packages/parser/tests/fixtures/binary-file.diff +0 -4
  337. package/packages/parser/tests/fixtures/binary-modified.diff +0 -3
  338. package/packages/parser/tests/fixtures/copied-file.diff +0 -12
  339. package/packages/parser/tests/fixtures/deleted-file.diff +0 -9
  340. package/packages/parser/tests/fixtures/empty.diff +0 -0
  341. package/packages/parser/tests/fixtures/hunk-with-context.diff +0 -12
  342. package/packages/parser/tests/fixtures/mode-change-with-content.diff +0 -10
  343. package/packages/parser/tests/fixtures/mode-change.diff +0 -3
  344. package/packages/parser/tests/fixtures/multi-file.diff +0 -22
  345. package/packages/parser/tests/fixtures/new-file.diff +0 -9
  346. package/packages/parser/tests/fixtures/no-newline.diff +0 -10
  347. package/packages/parser/tests/fixtures/renamed-file.diff +0 -12
  348. package/packages/parser/tests/fixtures/single-file-additions.diff +0 -11
  349. package/packages/parser/tests/fixtures/single-file-deletions.diff +0 -11
  350. package/packages/parser/tests/fixtures/single-file-mixed.diff +0 -15
  351. package/packages/parser/tests/fixtures/single-file-multi-hunk.diff +0 -22
  352. package/packages/parser/tests/fixtures/spaces-in-path.diff +0 -9
  353. package/packages/parser/tests/fixtures/submodule.diff +0 -7
  354. package/packages/parser/tests/fixtures/unicode-content.diff +0 -11
  355. package/packages/parser/tests/parse.test.ts +0 -312
  356. package/packages/parser/tests/word-diff-integration.test.ts +0 -52
  357. package/packages/parser/tests/word-diff.test.ts +0 -121
  358. package/packages/parser/tsconfig.json +0 -10
  359. package/packages/skills/diffity-resolve/SKILL.md +0 -55
  360. package/packages/skills/diffity-review/SKILL.md +0 -74
  361. package/packages/skills/diffity-start/SKILL.md +0 -25
  362. package/packages/ui/package.json +0 -35
  363. package/packages/ui/src/app.tsx +0 -14
  364. package/packages/ui/src/components/comment-bubble.tsx +0 -78
  365. package/packages/ui/src/components/comment-form-row.tsx +0 -58
  366. package/packages/ui/src/components/comment-form.tsx +0 -78
  367. package/packages/ui/src/components/comment-line-number.tsx +0 -60
  368. package/packages/ui/src/components/comment-thread.tsx +0 -209
  369. package/packages/ui/src/components/commit-list.tsx +0 -100
  370. package/packages/ui/src/components/dashboard.tsx +0 -84
  371. package/packages/ui/src/components/diff-line.tsx +0 -90
  372. package/packages/ui/src/components/diff-page.tsx +0 -332
  373. package/packages/ui/src/components/diff-stats.tsx +0 -20
  374. package/packages/ui/src/components/diff-view.tsx +0 -278
  375. package/packages/ui/src/components/expand-row.tsx +0 -45
  376. package/packages/ui/src/components/file-block.tsx +0 -536
  377. package/packages/ui/src/components/file-tree-item.tsx +0 -84
  378. package/packages/ui/src/components/file-tree.tsx +0 -72
  379. package/packages/ui/src/components/general-comments.tsx +0 -174
  380. package/packages/ui/src/components/hunk-block-split.tsx +0 -357
  381. package/packages/ui/src/components/hunk-block.tsx +0 -161
  382. package/packages/ui/src/components/hunk-header.tsx +0 -144
  383. package/packages/ui/src/components/hunk-with-gap.tsx +0 -113
  384. package/packages/ui/src/components/icons/arrow-down-icon.tsx +0 -7
  385. package/packages/ui/src/components/icons/arrow-up-icon.tsx +0 -7
  386. package/packages/ui/src/components/icons/check-circle-icon.tsx +0 -8
  387. package/packages/ui/src/components/icons/check-icon.tsx +0 -9
  388. package/packages/ui/src/components/icons/chevron-down-icon.tsx +0 -11
  389. package/packages/ui/src/components/icons/chevron-icon.tsx +0 -20
  390. package/packages/ui/src/components/icons/chevron-up-down-icon.tsx +0 -7
  391. package/packages/ui/src/components/icons/chevron-up-icon.tsx +0 -11
  392. package/packages/ui/src/components/icons/comment-icon.tsx +0 -9
  393. package/packages/ui/src/components/icons/copy-icon.tsx +0 -10
  394. package/packages/ui/src/components/icons/eye-icon.tsx +0 -10
  395. package/packages/ui/src/components/icons/eye-off-icon.tsx +0 -12
  396. package/packages/ui/src/components/icons/file-icon.tsx +0 -7
  397. package/packages/ui/src/components/icons/folder-icon.tsx +0 -19
  398. package/packages/ui/src/components/icons/git-branch-icon.tsx +0 -13
  399. package/packages/ui/src/components/icons/keyboard-icon.tsx +0 -13
  400. package/packages/ui/src/components/icons/moon-icon.tsx +0 -9
  401. package/packages/ui/src/components/icons/plus-icon.tsx +0 -9
  402. package/packages/ui/src/components/icons/search-icon.tsx +0 -10
  403. package/packages/ui/src/components/icons/sidebar-icon.tsx +0 -10
  404. package/packages/ui/src/components/icons/spinner.tsx +0 -7
  405. package/packages/ui/src/components/icons/split-view-icon.tsx +0 -10
  406. package/packages/ui/src/components/icons/sun-icon.tsx +0 -17
  407. package/packages/ui/src/components/icons/trash-icon.tsx +0 -11
  408. package/packages/ui/src/components/icons/undo-icon.tsx +0 -9
  409. package/packages/ui/src/components/icons/unified-view-icon.tsx +0 -12
  410. package/packages/ui/src/components/icons/x-icon.tsx +0 -10
  411. package/packages/ui/src/components/line-number-cell.tsx +0 -18
  412. package/packages/ui/src/components/markdown-content.tsx +0 -139
  413. package/packages/ui/src/components/orphaned-threads.tsx +0 -80
  414. package/packages/ui/src/components/overview-file-list.tsx +0 -57
  415. package/packages/ui/src/components/render-expansion-rows.tsx +0 -47
  416. package/packages/ui/src/components/shortcut-modal.tsx +0 -93
  417. package/packages/ui/src/components/sidebar.tsx +0 -80
  418. package/packages/ui/src/components/skeleton.tsx +0 -9
  419. package/packages/ui/src/components/stale-diff-banner.tsx +0 -21
  420. package/packages/ui/src/components/summary-bar.tsx +0 -39
  421. package/packages/ui/src/components/toolbar.tsx +0 -246
  422. package/packages/ui/src/components/ui/badge.tsx +0 -17
  423. package/packages/ui/src/components/ui/confirm-dialog.tsx +0 -52
  424. package/packages/ui/src/components/ui/icon-button.tsx +0 -23
  425. package/packages/ui/src/components/ui/status-badge.tsx +0 -57
  426. package/packages/ui/src/components/ui/thread-badge.tsx +0 -35
  427. package/packages/ui/src/components/word-diff.tsx +0 -126
  428. package/packages/ui/src/hooks/use-comment-actions.ts +0 -97
  429. package/packages/ui/src/hooks/use-commits.ts +0 -12
  430. package/packages/ui/src/hooks/use-copy.ts +0 -18
  431. package/packages/ui/src/hooks/use-diff-staleness.ts +0 -58
  432. package/packages/ui/src/hooks/use-diff.ts +0 -12
  433. package/packages/ui/src/hooks/use-highlighter.ts +0 -190
  434. package/packages/ui/src/hooks/use-info.ts +0 -12
  435. package/packages/ui/src/hooks/use-keyboard.ts +0 -55
  436. package/packages/ui/src/hooks/use-line-selection.ts +0 -157
  437. package/packages/ui/src/hooks/use-overview.ts +0 -12
  438. package/packages/ui/src/hooks/use-review-threads.ts +0 -12
  439. package/packages/ui/src/hooks/use-search-params.ts +0 -26
  440. package/packages/ui/src/hooks/use-theme.ts +0 -34
  441. package/packages/ui/src/hooks/use-thread-navigation.ts +0 -43
  442. package/packages/ui/src/lib/api.ts +0 -232
  443. package/packages/ui/src/lib/cn.ts +0 -6
  444. package/packages/ui/src/lib/context-expansion.ts +0 -122
  445. package/packages/ui/src/lib/diff-utils.ts +0 -268
  446. package/packages/ui/src/lib/dom-utils.ts +0 -13
  447. package/packages/ui/src/lib/file-tree.ts +0 -122
  448. package/packages/ui/src/lib/query-client.ts +0 -10
  449. package/packages/ui/src/lib/render-content.tsx +0 -23
  450. package/packages/ui/src/lib/syntax-token.ts +0 -4
  451. package/packages/ui/src/main.tsx +0 -14
  452. package/packages/ui/src/queries/commits.ts +0 -9
  453. package/packages/ui/src/queries/diff.ts +0 -9
  454. package/packages/ui/src/queries/file.ts +0 -10
  455. package/packages/ui/src/queries/info.ts +0 -9
  456. package/packages/ui/src/queries/overview.ts +0 -9
  457. package/packages/ui/src/styles/app.css +0 -178
  458. package/packages/ui/src/types/comment.ts +0 -61
  459. package/packages/ui/src/vite-env.d.ts +0 -1
  460. package/packages/ui/tests/context-expansion.test.ts +0 -279
  461. package/packages/ui/tests/diff-utils.test.ts +0 -409
  462. package/packages/ui/tsconfig.json +0 -14
  463. package/packages/ui/vite.config.ts +0 -23
  464. package/scripts/build-skills.ts +0 -26
  465. package/scripts/build.ts +0 -15
  466. package/scripts/dev.ts +0 -32
  467. package/scripts/lib/transformers/claude-code.ts +0 -11
  468. package/scripts/lib/transformers/codex.ts +0 -17
  469. package/scripts/lib/transformers/cursor.ts +0 -17
  470. package/scripts/lib/transformers/index.ts +0 -3
  471. package/scripts/lib/utils.ts +0 -70
  472. package/scripts/link-dev.ts +0 -54
  473. package/skills/diffity-resolve/SKILL.md +0 -55
  474. package/skills/diffity-review/SKILL.md +0 -74
  475. package/skills/diffity-start/SKILL.md +0 -27
  476. package/tsconfig.json +0 -22
  477. /package/{packages/ui/public → dist/ui}/brand.svg +0 -0
  478. /package/{packages/ui/public → dist/ui}/favicon.svg +0 -0
@@ -1,28 +0,0 @@
1
- import { exec } from './exec.js';
2
- import type { Commit } from './types.js';
3
-
4
- interface CommitQuery {
5
- count: number;
6
- skip?: number;
7
- search?: string;
8
- }
9
-
10
- export function getRecentCommits(query: CommitQuery): Commit[] {
11
- const { count, skip = 0, search } = query;
12
-
13
- const args = [`-n ${count}`, `--skip=${skip}`, '--format="%H|%h|%s|%cr"'];
14
- if (search) {
15
- args.push(`--grep=${search}`, '-i');
16
- }
17
-
18
- const output = exec(`git log ${args.join(' ')}`);
19
-
20
- if (!output) {
21
- return [];
22
- }
23
-
24
- return output.split('\n').map((line) => {
25
- const [hash, shortHash, message, relativeDate] = line.split('|');
26
- return { hash, shortHash, message, relativeDate };
27
- });
28
- }
@@ -1,97 +0,0 @@
1
- import { exec, execLarge, execLines, execWithStdin } from './exec.js';
2
-
3
- export function getDiff(args: string[] = []): string {
4
- const cmd = ['git', 'diff', ...args].join(' ');
5
- return execLarge(cmd);
6
- }
7
-
8
- export function getUntrackedFiles(): string[] {
9
- return execLines('git ls-files --others --exclude-standard');
10
- }
11
-
12
- export function getUntrackedDiff(files: string[]): string {
13
- const diffs: string[] = [];
14
-
15
- for (const file of files) {
16
- try {
17
- execLarge(`git diff --no-index -- /dev/null "${file}"`);
18
- } catch (err: unknown) {
19
- const error = err as { stdout?: string; status?: number };
20
- if (error.status === 1 && error.stdout) {
21
- diffs.push(error.stdout);
22
- }
23
- }
24
- }
25
-
26
- return diffs.join('\n');
27
- }
28
-
29
- export function resolveRef(ref: string, extraArgs: string[] = []): string {
30
- switch (ref) {
31
- case 'staged': {
32
- return getDiff(['--staged', ...extraArgs]);
33
- }
34
- case 'unstaged': {
35
- return getDiff(extraArgs);
36
- }
37
- case 'working': {
38
- return getDiff(['HEAD', ...extraArgs]);
39
- }
40
- case 'untracked': {
41
- const files = getUntrackedFiles();
42
- if (files.length === 0) {
43
- return '';
44
- }
45
- return getUntrackedDiff(files);
46
- }
47
- case 'work': {
48
- let raw = getDiff(['HEAD', ...extraArgs]);
49
- const untrackedFiles = getUntrackedFiles();
50
- if (untrackedFiles.length > 0) {
51
- raw += '\n' + getUntrackedDiff(untrackedFiles);
52
- }
53
- return raw;
54
- }
55
- default: {
56
- return getDiff([ref, ...extraArgs]);
57
- }
58
- }
59
- }
60
-
61
- export function revertFile(filePath: string, isUntracked: boolean): void {
62
- if (isUntracked) {
63
- exec(`rm "${filePath}"`);
64
- } else {
65
- exec(`git checkout HEAD -- "${filePath}"`);
66
- }
67
- }
68
-
69
- export function revertHunk(patch: string): void {
70
- execWithStdin('git apply --reverse --unidiff-zero', patch);
71
- }
72
-
73
- export function getDiffStat(args: string[] = []): string {
74
- const cmd = ['git', 'diff', '--stat', ...args].join(' ');
75
- try {
76
- return execLarge(cmd);
77
- } catch {
78
- return '';
79
- }
80
- }
81
-
82
- export function getMergeBase(a: string, b: string): string {
83
- return exec(`git merge-base ${a} ${b}`);
84
- }
85
-
86
- export function getFileContent(path: string, ref = 'HEAD'): string {
87
- return exec(`git show ${ref}:${path}`);
88
- }
89
-
90
- export function getFileLineCount(path: string, ref = 'HEAD'): number | null {
91
- try {
92
- const content = exec(`git show ${ref}:${path}`);
93
- return content.split('\n').length;
94
- } catch {
95
- return null;
96
- }
97
- }
@@ -1,35 +0,0 @@
1
- import { execSync, type StdioOptions } from 'node:child_process';
2
-
3
- const STDIO: StdioOptions = ['pipe', 'pipe', 'pipe'];
4
-
5
- export function execWithStdin(cmd: string, input: string): string {
6
- return execSync(cmd, {
7
- encoding: 'utf-8',
8
- stdio: STDIO,
9
- input,
10
- maxBuffer: 50 * 1024 * 1024,
11
- });
12
- }
13
-
14
- export function exec(cmd: string): string {
15
- return execSync(cmd, {
16
- encoding: 'utf-8',
17
- stdio: STDIO,
18
- }).trim();
19
- }
20
-
21
- export function execLarge(cmd: string): string {
22
- return execSync(cmd, {
23
- encoding: 'utf-8',
24
- stdio: STDIO,
25
- maxBuffer: 50 * 1024 * 1024,
26
- });
27
- }
28
-
29
- export function execLines(cmd: string): string[] {
30
- const output = exec(cmd);
31
- if (!output) {
32
- return [];
33
- }
34
- return output.split('\n');
35
- }
@@ -1,5 +0,0 @@
1
- export type { Commit, RepoInfo } from './types.js';
2
- export { isGitRepo, getRepoRoot, getRepoName, getCurrentBranch, getRepoInfo, getHeadHash, getDiffityDir, getDiffityDirPath, isActionableRef } from './repo.js';
3
- export { getDiff, getDiffStat, getUntrackedFiles, getUntrackedDiff, getFileContent, getFileLineCount, getMergeBase, resolveRef, revertFile, revertHunk } from './diff.js';
4
- export { getStagedFiles, getUnstagedFiles } from './status.js';
5
- export { getRecentCommits } from './commits.js';
@@ -1,63 +0,0 @@
1
- import { execSync } from 'node:child_process';
2
- import { createHash } from 'node:crypto';
3
- import { mkdirSync } from 'node:fs';
4
- import { join } from 'node:path';
5
- import { homedir } from 'node:os';
6
- import { exec } from './exec.js';
7
- import type { RepoInfo } from './types.js';
8
-
9
- export function isGitRepo(): boolean {
10
- try {
11
- execSync('git rev-parse --is-inside-work-tree', { stdio: 'pipe' });
12
- return true;
13
- } catch {
14
- return false;
15
- }
16
- }
17
-
18
- export function getRepoRoot(): string {
19
- return exec('git rev-parse --show-toplevel');
20
- }
21
-
22
- export function getRepoName(): string {
23
- const root = getRepoRoot();
24
- return root.split('/').pop() || root;
25
- }
26
-
27
- export function getCurrentBranch(): string {
28
- try {
29
- return exec('git rev-parse --abbrev-ref HEAD');
30
- } catch {
31
- return 'HEAD';
32
- }
33
- }
34
-
35
- export function getRepoInfo(): RepoInfo {
36
- return {
37
- name: getRepoName(),
38
- branch: getCurrentBranch(),
39
- root: getRepoRoot(),
40
- };
41
- }
42
-
43
- export function getHeadHash(): string {
44
- return exec('git rev-parse HEAD');
45
- }
46
-
47
- export function getDiffityDirPath(): string {
48
- const repoRoot = getRepoRoot();
49
- const hash = createHash('sha256').update(repoRoot).digest('hex').slice(0, 12);
50
- return join(homedir(), '.diffity', hash);
51
- }
52
-
53
- export function getDiffityDir(): string {
54
- const dir = getDiffityDirPath();
55
- mkdirSync(dir, { recursive: true });
56
- return dir;
57
- }
58
-
59
- const ACTIONABLE_REFS = new Set(['work', 'staged', 'unstaged', 'working', 'untracked']);
60
-
61
- export function isActionableRef(ref?: string): boolean {
62
- return !!ref && ACTIONABLE_REFS.has(ref);
63
- }
@@ -1,9 +0,0 @@
1
- import { execLines } from './exec.js';
2
-
3
- export function getStagedFiles(): string[] {
4
- return execLines('git diff --staged --name-only');
5
- }
6
-
7
- export function getUnstagedFiles(): string[] {
8
- return execLines('git diff --name-only');
9
- }
@@ -1,12 +0,0 @@
1
- export interface Commit {
2
- hash: string;
3
- shortHash: string;
4
- message: string;
5
- relativeDate: string;
6
- }
7
-
8
- export interface RepoInfo {
9
- name: string;
10
- branch: string;
11
- root: string;
12
- }
@@ -1,9 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src",
6
- "composite": true
7
- },
8
- "include": ["src/**/*.ts"]
9
- }
@@ -1,26 +0,0 @@
1
- {
2
- "name": "@diffity/parser",
3
- "version": "0.1.0",
4
- "type": "module",
5
- "main": "./dist/index.js",
6
- "types": "./dist/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "import": "./dist/index.js",
10
- "types": "./dist/index.d.ts"
11
- }
12
- },
13
- "scripts": {
14
- "build": "tsc",
15
- "dev": "tsc --watch",
16
- "test": "vitest run",
17
- "test:watch": "vitest"
18
- },
19
- "files": [
20
- "dist"
21
- ],
22
- "devDependencies": {
23
- "typescript": "^5.9.3",
24
- "vitest": "^4.1.0"
25
- }
26
- }
@@ -1,12 +0,0 @@
1
- export { parseDiff } from './parse.js';
2
- export { computeWordDiff } from './word-diff.js';
3
- export type {
4
- DiffFile,
5
- DiffHunk,
6
- DiffLine,
7
- DiffLineType,
8
- FileStatus,
9
- LineDiffType,
10
- ParsedDiff,
11
- WordDiffSegment,
12
- } from './types.js';
@@ -1,299 +0,0 @@
1
- import type {
2
- DiffFile,
3
- DiffHunk,
4
- DiffLine,
5
- DiffLineType,
6
- FileStatus,
7
- ParsedDiff,
8
- } from './types.js';
9
- import { computeWordDiff } from './word-diff.js';
10
-
11
- const DIFF_HEADER_RE = /^diff --git a\/(.*) b\/(.*)$/;
12
- const HUNK_HEADER_RE = /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@(.*)$/;
13
- const OLD_FILE_RE = /^--- (.+)$/;
14
- const NEW_FILE_RE = /^\+\+\+ (.+)$/;
15
- const SIMILARITY_RE = /^similarity index (\d+)%$/;
16
- const RENAME_FROM_RE = /^rename from (.+)$/;
17
- const RENAME_TO_RE = /^rename to (.+)$/;
18
- const COPY_FROM_RE = /^copy from (.+)$/;
19
- const COPY_TO_RE = /^copy to (.+)$/;
20
- const OLD_MODE_RE = /^old mode (\d+)$/;
21
- const NEW_MODE_RE = /^new mode (\d+)$/;
22
- const NEW_FILE_MODE_RE = /^new file mode (\d+)$/;
23
- const DELETED_FILE_MODE_RE = /^deleted file mode (\d+)$/;
24
- const BINARY_RE = /^Binary files (.+) and (.+) differ$/;
25
- const NO_NEWLINE_RE = /^\$/;
26
-
27
- function stripPrefix(path: string): string {
28
- if (path === '/dev/null') {
29
- return path;
30
- }
31
- if (path.startsWith('a/') || path.startsWith('b/')) {
32
- return path.slice(2);
33
- }
34
- return path;
35
- }
36
-
37
- function attachWordDiffs(hunk: DiffHunk): void {
38
- const lines = hunk.lines;
39
- let i = 0;
40
-
41
- while (i < lines.length) {
42
- if (lines[i].type === 'delete') {
43
- const deleteStart = i;
44
- while (i < lines.length && lines[i].type === 'delete') {
45
- i++;
46
- }
47
- const deleteEnd = i;
48
-
49
- const addStart = i;
50
- while (i < lines.length && lines[i].type === 'add') {
51
- i++;
52
- }
53
- const addEnd = i;
54
-
55
- const deleteCount = deleteEnd - deleteStart;
56
- const addCount = addEnd - addStart;
57
-
58
- if (deleteCount > 0 && addCount > 0) {
59
- const pairCount = Math.min(deleteCount, addCount);
60
- for (let p = 0; p < pairCount; p++) {
61
- const delLine = lines[deleteStart + p];
62
- const addLine = lines[addStart + p];
63
- const segments = computeWordDiff(delLine.content, addLine.content);
64
- delLine.wordDiff = segments;
65
- addLine.wordDiff = segments;
66
- }
67
- }
68
- } else {
69
- i++;
70
- }
71
- }
72
- }
73
-
74
- export function parseDiff(raw: string): ParsedDiff {
75
- const lines = raw.split('\n');
76
- const files: DiffFile[] = [];
77
- let currentFile: DiffFile | null = null;
78
- let currentHunk: DiffHunk | null = null;
79
- let oldLineNum = 0;
80
- let newLineNum = 0;
81
- let i = 0;
82
-
83
- while (i < lines.length) {
84
- const line = lines[i];
85
-
86
- const diffMatch = line.match(DIFF_HEADER_RE);
87
- if (diffMatch) {
88
- if (currentFile) {
89
- files.push(currentFile);
90
- }
91
- currentFile = {
92
- oldPath: diffMatch[1],
93
- newPath: diffMatch[2],
94
- status: 'modified',
95
- hunks: [],
96
- additions: 0,
97
- deletions: 0,
98
- isBinary: false,
99
- };
100
- currentHunk = null;
101
- i++;
102
- continue;
103
- }
104
-
105
- if (!currentFile) {
106
- i++;
107
- continue;
108
- }
109
-
110
- const oldModeMatch = line.match(OLD_MODE_RE);
111
- if (oldModeMatch) {
112
- currentFile.oldMode = oldModeMatch[1];
113
- i++;
114
- continue;
115
- }
116
-
117
- const newModeMatch = line.match(NEW_MODE_RE);
118
- if (newModeMatch) {
119
- currentFile.newMode = newModeMatch[1];
120
- i++;
121
- continue;
122
- }
123
-
124
- const newFileModeMatch = line.match(NEW_FILE_MODE_RE);
125
- if (newFileModeMatch) {
126
- currentFile.newMode = newFileModeMatch[1];
127
- currentFile.status = 'added';
128
- i++;
129
- continue;
130
- }
131
-
132
- const deletedFileModeMatch = line.match(DELETED_FILE_MODE_RE);
133
- if (deletedFileModeMatch) {
134
- currentFile.oldMode = deletedFileModeMatch[1];
135
- currentFile.status = 'deleted';
136
- i++;
137
- continue;
138
- }
139
-
140
- const similarityMatch = line.match(SIMILARITY_RE);
141
- if (similarityMatch) {
142
- currentFile.similarityIndex = parseInt(similarityMatch[1], 10);
143
- i++;
144
- continue;
145
- }
146
-
147
- const renameFromMatch = line.match(RENAME_FROM_RE);
148
- if (renameFromMatch) {
149
- currentFile.oldPath = renameFromMatch[1];
150
- currentFile.status = 'renamed';
151
- i++;
152
- continue;
153
- }
154
-
155
- const renameToMatch = line.match(RENAME_TO_RE);
156
- if (renameToMatch) {
157
- currentFile.newPath = renameToMatch[1];
158
- currentFile.status = 'renamed';
159
- i++;
160
- continue;
161
- }
162
-
163
- const copyFromMatch = line.match(COPY_FROM_RE);
164
- if (copyFromMatch) {
165
- currentFile.oldPath = copyFromMatch[1];
166
- currentFile.status = 'copied';
167
- i++;
168
- continue;
169
- }
170
-
171
- const copyToMatch = line.match(COPY_TO_RE);
172
- if (copyToMatch) {
173
- currentFile.newPath = copyToMatch[1];
174
- currentFile.status = 'copied';
175
- i++;
176
- continue;
177
- }
178
-
179
- const oldFileMatch = line.match(OLD_FILE_RE);
180
- if (oldFileMatch) {
181
- const path = stripPrefix(oldFileMatch[1]);
182
- currentFile.oldPath = path;
183
- if (path === '/dev/null') {
184
- currentFile.status = 'added';
185
- }
186
- i++;
187
- continue;
188
- }
189
-
190
- const newFileMatch = line.match(NEW_FILE_RE);
191
- if (newFileMatch) {
192
- const path = stripPrefix(newFileMatch[1]);
193
- currentFile.newPath = path;
194
- if (path === '/dev/null') {
195
- currentFile.status = 'deleted';
196
- }
197
- i++;
198
- continue;
199
- }
200
-
201
- const binaryMatch = line.match(BINARY_RE);
202
- if (binaryMatch) {
203
- currentFile.isBinary = true;
204
- i++;
205
- continue;
206
- }
207
-
208
- const hunkMatch = line.match(HUNK_HEADER_RE);
209
- if (hunkMatch) {
210
- currentHunk = {
211
- header: line,
212
- oldStart: parseInt(hunkMatch[1], 10),
213
- oldCount: hunkMatch[2] !== undefined ? parseInt(hunkMatch[2], 10) : 1,
214
- newStart: parseInt(hunkMatch[3], 10),
215
- newCount: hunkMatch[4] !== undefined ? parseInt(hunkMatch[4], 10) : 1,
216
- context: hunkMatch[5]?.trim() || undefined,
217
- lines: [],
218
- };
219
- currentFile.hunks.push(currentHunk);
220
- oldLineNum = currentHunk.oldStart;
221
- newLineNum = currentHunk.newStart;
222
- i++;
223
- continue;
224
- }
225
-
226
- if (NO_NEWLINE_RE.test(line)) {
227
- if (currentHunk && currentHunk.lines.length > 0) {
228
- currentHunk.lines[currentHunk.lines.length - 1].noNewline = true;
229
- }
230
- i++;
231
- continue;
232
- }
233
-
234
- if (currentHunk) {
235
- const prefix = line[0];
236
- const content = line.slice(1);
237
-
238
- if (prefix === '+') {
239
- const diffLine: DiffLine = {
240
- type: 'add',
241
- content,
242
- oldLineNumber: null,
243
- newLineNumber: newLineNum,
244
- };
245
- currentHunk.lines.push(diffLine);
246
- currentFile.additions++;
247
- newLineNum++;
248
- } else if (prefix === '-') {
249
- const diffLine: DiffLine = {
250
- type: 'delete',
251
- content,
252
- oldLineNumber: oldLineNum,
253
- newLineNumber: null,
254
- };
255
- currentHunk.lines.push(diffLine);
256
- currentFile.deletions++;
257
- oldLineNum++;
258
- } else if (prefix === ' ') {
259
- const diffLine: DiffLine = {
260
- type: 'context',
261
- content: content || '',
262
- oldLineNumber: oldLineNum,
263
- newLineNumber: newLineNum,
264
- };
265
- currentHunk.lines.push(diffLine);
266
- oldLineNum++;
267
- newLineNum++;
268
- }
269
- }
270
-
271
- i++;
272
- }
273
-
274
- if (currentFile) {
275
- files.push(currentFile);
276
- }
277
-
278
- for (const file of files) {
279
- for (const hunk of file.hunks) {
280
- attachWordDiffs(hunk);
281
- }
282
- }
283
-
284
- let totalAdditions = 0;
285
- let totalDeletions = 0;
286
- for (const file of files) {
287
- totalAdditions += file.additions;
288
- totalDeletions += file.deletions;
289
- }
290
-
291
- return {
292
- files,
293
- stats: {
294
- totalAdditions,
295
- totalDeletions,
296
- filesChanged: files.length,
297
- },
298
- };
299
- }
@@ -1,52 +0,0 @@
1
- export type FileStatus = 'added' | 'deleted' | 'modified' | 'renamed' | 'copied';
2
-
3
- export type LineDiffType = 'equal' | 'insert' | 'delete';
4
-
5
- export interface WordDiffSegment {
6
- text: string;
7
- type: LineDiffType;
8
- }
9
-
10
- export type DiffLineType = 'add' | 'delete' | 'context';
11
-
12
- export interface DiffLine {
13
- type: DiffLineType;
14
- content: string;
15
- oldLineNumber: number | null;
16
- newLineNumber: number | null;
17
- noNewline?: boolean;
18
- wordDiff?: WordDiffSegment[];
19
- }
20
-
21
- export interface DiffHunk {
22
- header: string;
23
- oldStart: number;
24
- oldCount: number;
25
- newStart: number;
26
- newCount: number;
27
- context?: string;
28
- lines: DiffLine[];
29
- }
30
-
31
- export interface DiffFile {
32
- oldPath: string;
33
- newPath: string;
34
- status: FileStatus;
35
- hunks: DiffHunk[];
36
- additions: number;
37
- deletions: number;
38
- isBinary: boolean;
39
- oldMode?: string;
40
- newMode?: string;
41
- similarityIndex?: number;
42
- oldFileLineCount?: number;
43
- }
44
-
45
- export interface ParsedDiff {
46
- files: DiffFile[];
47
- stats: {
48
- totalAdditions: number;
49
- totalDeletions: number;
50
- filesChanged: number;
51
- };
52
- }