difit 4.0.1 → 4.0.3
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.
- package/README.ja.md +2 -1
- package/README.ko.md +2 -1
- package/README.md +2 -1
- package/README.zh.md +2 -1
- package/dist/cli/index.js +40 -28
- package/dist/cli/index.test.js +187 -116
- package/dist/cli/tuiDeprecation.d.ts +3 -0
- package/dist/cli/tuiDeprecation.js +16 -0
- package/dist/cli/tuiDeprecation.test.d.ts +1 -0
- package/dist/cli/tuiDeprecation.test.js +16 -0
- package/dist/cli/utils.d.ts +1 -0
- package/dist/cli/utils.js +17 -0
- package/dist/client/assets/_basePickBy-hOr-yGsE.js +1 -0
- package/dist/client/assets/_baseUniq-b7bzdUSn.js +1 -0
- package/dist/client/assets/arc-D65wG9gm.js +1 -0
- package/dist/client/assets/architecture-PBZL5I3N-DUNTzy9d.js +1 -0
- package/dist/client/assets/architectureDiagram-2XIMDMQ5-BOmef_aT.js +36 -0
- package/dist/client/assets/array-DOVTz2Mq.js +1 -0
- package/dist/client/assets/blockDiagram-WCTKOSBZ-CuovjbLp.js +132 -0
- package/dist/client/assets/c4Diagram-IC4MRINW-l2hgU0UG.js +10 -0
- package/dist/client/assets/channel-BBMOf_Bn.js +1 -0
- package/dist/client/assets/chunk-4BX2VUAB-Bh2XMPGo.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-r9BRoqNs.js +1 -0
- package/dist/client/assets/chunk-7E7YKBS2-BUy3or4g.js +1 -0
- package/dist/client/assets/chunk-7R4GIKGN-C7ClNgvP.js +80 -0
- package/dist/client/assets/chunk-C72U2L5F-_P9RrDdo.js +1 -0
- package/dist/client/assets/chunk-EGIJ26TM-D-xQ2sZ-.js +1 -0
- package/dist/client/assets/{chunk-FMBD7UC4-BSa8SHgd.js → chunk-FMBD7UC4-OuP8NjEM.js} +2 -2
- package/dist/client/assets/chunk-GEFDOKGD-noJ9o8LM.js +2 -0
- package/dist/client/assets/chunk-GLR3WWYH-DVK9OjRZ.js +2 -0
- package/dist/client/assets/chunk-HHEYEP7N-C1QyKuQs.js +1 -0
- package/dist/client/assets/chunk-JSJVCQXG-2AjhqYcu.js +1 -0
- package/dist/client/assets/chunk-KX2RTZJC-tMPTaDcx.js +1 -0
- package/dist/client/assets/chunk-KYZI473N-CGwu81pT.js +53 -0
- package/dist/client/assets/chunk-L3YUKLVL-DFNfIVVw.js +1 -0
- package/dist/client/assets/chunk-MX3YWQON-BnSlIBhe.js +1 -0
- package/dist/client/assets/chunk-NQ4KR5QH-CpfTlpaZ.js +220 -0
- package/dist/client/assets/chunk-O4XLMI2P-BDGKGscp.js +7 -0
- package/dist/client/assets/chunk-OZEHJAEY-3OAEqm17.js +1 -0
- package/dist/client/assets/chunk-PQ6SQG4A-DfQjNfPX.js +1 -0
- package/dist/client/assets/chunk-PU5JKC2W-DRiL1iN6.js +70 -0
- package/dist/client/assets/chunk-QZHKN3VN-DBD5yPlw.js +1 -0
- package/dist/client/assets/chunk-R5LLSJPH-dkcbq1pR.js +1 -0
- package/dist/client/assets/chunk-WL4C6EOR-BeCB6d6F.js +189 -0
- package/dist/client/assets/chunk-XIRO2GV7-BxmEO1Vi.js +1 -0
- package/dist/client/assets/chunk-XPW4576I-jm7TiixU.js +32 -0
- package/dist/client/assets/chunk-XZSTWKYB-BGKYCy46.js +94 -0
- package/dist/client/assets/chunk-YBOYWFTD-C9faLjdm.js +1 -0
- package/dist/client/assets/classDiagram-VBA2DB6C-Depk8rxx.js +1 -0
- package/dist/client/assets/classDiagram-v2-RAHNMMFH-DHvQPm8y.js +1 -0
- package/dist/client/assets/clone-DuY6BQEm.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-BWD5TWFn.js +1 -0
- package/dist/client/assets/cytoscape.esm-B3gzQ1NF.js +321 -0
- package/dist/client/assets/dagre-Dd1VxucU.js +1 -0
- package/dist/client/assets/dagre-KLK3FWXG-BJFTyMud.js +4 -0
- package/dist/client/assets/defaultLocale-Ck2Xxk-C.js +1 -0
- package/dist/client/assets/diagram-E7M64L7V-eWdHIl72.js +24 -0
- package/dist/client/assets/diagram-IFDJBPK2-C1-sqK0o.js +43 -0
- package/dist/client/assets/diagram-P4PSJMXO-DHeUNvSg.js +24 -0
- package/dist/client/assets/dist-FLbYR5UU.js +1 -0
- package/dist/client/assets/erDiagram-INFDFZHY-CX8FAWmU.js +70 -0
- package/dist/client/assets/flowDiagram-PKNHOUZH-DgBnUaHH.js +162 -0
- package/dist/client/assets/ganttDiagram-A5KZAMGK-C331HQ-y.js +292 -0
- package/dist/client/assets/gitGraph-HDMCJU4V-DPGoIMlm.js +1 -0
- package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-zEXLThxN.js +65 -0
- package/dist/client/assets/graphlib-WkJoBgka.js +1 -0
- package/dist/client/assets/index-BGPkswtu.js +79 -0
- package/dist/client/assets/index-Cq_APK7Y.css +2 -0
- package/dist/client/assets/info-3K5VOQVL-CYdIfRwG.js +1 -0
- package/dist/client/assets/infoDiagram-LFFYTUFH-CKx11_2a.js +2 -0
- package/dist/client/assets/init-Bft5Ffpj.js +1 -0
- package/dist/client/assets/isArrayLikeObject-icl0H0jo.js +1 -0
- package/dist/client/assets/isEmpty-Du8sNmkE.js +1 -0
- package/dist/client/assets/ishikawaDiagram-PHBUUO56-BlZMQgOe.js +70 -0
- package/dist/client/assets/journeyDiagram-4ABVD52K-C3p_p4rn.js +139 -0
- package/dist/client/assets/kanban-definition-K7BYSVSG-4XJPQF50.js +89 -0
- package/dist/client/assets/katex-BJrMXEjr.js +261 -0
- package/dist/client/assets/line-Bb6xn3n_.js +1 -0
- package/dist/client/assets/linear-BPttYRJr.js +1 -0
- package/dist/client/assets/math-CNhlSIO3.js +1 -0
- package/dist/client/assets/mermaid-parser.core-CjY9NqXx.js +4 -0
- package/dist/client/assets/mermaid.core-B0ynITdC.js +11 -0
- package/dist/client/assets/mindmap-definition-YRQLILUH-Dya2e4tr.js +68 -0
- package/dist/client/assets/ordinal-DIg8h6NI.js +1 -0
- package/dist/client/assets/packet-RMMSAZCW-D7vTTuAT.js +1 -0
- package/dist/client/assets/path-DfRbCp9y.js +1 -0
- package/dist/client/assets/pie-UPGHQEXC-ptFuye_f.js +1 -0
- package/dist/client/assets/pieDiagram-SKSYHLDU-MZ74L9cN.js +30 -0
- package/dist/client/assets/{prism-bash-DTkDXsAh.js → prism-bash-6uMTC0Q2.js} +1 -1
- package/dist/client/assets/prism-csharp-Dkc2OSmh.js +1 -0
- package/dist/client/assets/prism-dart-iZy_wlz-.js +1 -0
- package/dist/client/assets/prism-elixir-BIzI9WJK.js +1 -0
- package/dist/client/assets/prism-hcl-Bx2FGBKG.js +1 -0
- package/dist/client/assets/prism-java-DBXf7fH0.js +1 -0
- package/dist/client/assets/prism-markup-templating-DS0ksKLt.js +1 -0
- package/dist/client/assets/prism-perl-BlhPiMfT.js +1 -0
- package/dist/client/assets/prism-php-DVtOAJsW.js +1 -0
- package/dist/client/assets/{prism-protobuf-DiQ_z8B5.js → prism-protobuf-BUsrNVvv.js} +1 -1
- package/dist/client/assets/prism-ruby-Saes64I6.js +1 -0
- package/dist/client/assets/{prism-scala-BjNo2HkN.js → prism-scala-ANOINMog.js} +1 -1
- package/dist/client/assets/prism-solidity-C5Mx5y66.js +1 -0
- package/dist/client/assets/{prism-sql-AgAyy5H_.js → prism-sql-D5pwK0Dp.js} +1 -1
- package/dist/client/assets/{prism-vim-uciLQ2PQ.js → prism-vim-BSZSu-gX.js} +1 -1
- package/dist/client/assets/quadrantDiagram-337W2JSQ-Da_T39nG.js +7 -0
- package/dist/client/assets/radar-KQ55EAFF-BR1_ZPLF.js +1 -0
- package/dist/client/assets/requirementDiagram-Z7DCOOCP-DzlKWGt3.js +73 -0
- package/dist/client/assets/rough.esm-KjoEK0it.js +1 -0
- package/dist/client/assets/sankeyDiagram-WA2Y5GQK-BPketwK-.js +10 -0
- package/dist/client/assets/sequenceDiagram-2WXFIKYE-geDrMLZ_.js +145 -0
- package/dist/client/assets/src-BuTVwZtT.js +1 -0
- package/dist/client/assets/stateDiagram-RAJIS63D-DOLTjnid.js +1 -0
- package/dist/client/assets/stateDiagram-v2-FVOUBMTO-BIjVI5d6.js +1 -0
- package/dist/client/assets/timeline-definition-YZTLITO2-Cy6Qm4Pd.js +61 -0
- package/dist/client/assets/treemap-KZPCXAKY-Bw93Vsua.js +1 -0
- package/dist/client/assets/vennDiagram-LZ73GAT5-UUQN9akd.js +34 -0
- package/dist/client/assets/xychartDiagram-JWTSCODW-DiTicxdS.js +7 -0
- package/dist/client/index.html +2 -2
- package/dist/server/git-diff-tui.d.ts +2 -2
- package/dist/server/git-diff-tui.js +12 -7
- package/dist/server/git-diff-tui.test.js +18 -2
- package/dist/server/git-diff.d.ts +3 -2
- package/dist/server/git-diff.js +29 -6
- package/dist/server/git-diff.test.js +52 -3
- package/dist/server/server.d.ts +2 -3
- package/dist/server/server.js +80 -55
- package/dist/server/server.test.js +110 -60
- package/dist/tui/App.d.ts +2 -2
- package/dist/tui/App.js +4 -3
- package/dist/types/diff.d.ts +8 -0
- package/dist/utils/commentImports.js +3 -2
- package/dist/utils/createId.d.ts +1 -0
- package/dist/utils/createId.js +5 -0
- package/dist/utils/createId.test.d.ts +1 -0
- package/dist/utils/createId.test.js +48 -0
- package/dist/utils/diffSelection.d.ts +6 -0
- package/dist/utils/diffSelection.js +30 -0
- package/package.json +5 -5
- package/dist/client/assets/_basePickBy-ChXFkTMC.js +0 -1
- package/dist/client/assets/_baseUniq-Mj_sFFQW.js +0 -1
- package/dist/client/assets/arc-BMA6S9F1.js +0 -1
- package/dist/client/assets/architectureDiagram-2XIMDMQ5-0uiM_v5K.js +0 -36
- package/dist/client/assets/blockDiagram-WCTKOSBZ-CM7ZLL6F.js +0 -132
- package/dist/client/assets/c4Diagram-IC4MRINW-DKtCnVwn.js +0 -10
- package/dist/client/assets/channel-D057yzDp.js +0 -1
- package/dist/client/assets/chunk-4BX2VUAB-Wsl8DxEB.js +0 -1
- package/dist/client/assets/chunk-55IACEB6-CHm9X5i7.js +0 -1
- package/dist/client/assets/chunk-JSJVCQXG-Cpk76oJ3.js +0 -1
- package/dist/client/assets/chunk-KX2RTZJC-D8YvfZVu.js +0 -1
- package/dist/client/assets/chunk-NQ4KR5QH-BogviJOv.js +0 -220
- package/dist/client/assets/chunk-QZHKN3VN-DwLJYu26.js +0 -1
- package/dist/client/assets/chunk-WL4C6EOR-BFDpGxW2.js +0 -189
- package/dist/client/assets/classDiagram-VBA2DB6C---D4iOts.js +0 -1
- package/dist/client/assets/classDiagram-v2-RAHNMMFH---D4iOts.js +0 -1
- package/dist/client/assets/clone-xSR3otEf.js +0 -1
- package/dist/client/assets/cose-bilkent-S5V4N54A-oEosZ_5y.js +0 -1
- package/dist/client/assets/cytoscape.esm-5J0xJHOV.js +0 -321
- package/dist/client/assets/dagre-KLK3FWXG-gFld4u1H.js +0 -4
- package/dist/client/assets/defaultLocale-DX6XiGOO.js +0 -1
- package/dist/client/assets/diagram-E7M64L7V-gJq3kSrf.js +0 -24
- package/dist/client/assets/diagram-IFDJBPK2-BsUm_q22.js +0 -43
- package/dist/client/assets/diagram-P4PSJMXO-juB-sfcR.js +0 -24
- package/dist/client/assets/erDiagram-INFDFZHY-Dn77qXAt.js +0 -70
- package/dist/client/assets/flowDiagram-PKNHOUZH-DtmvDYdN.js +0 -162
- package/dist/client/assets/ganttDiagram-A5KZAMGK-BlDaKLbQ.js +0 -292
- package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DeAAeuMS.js +0 -65
- package/dist/client/assets/graph-NX9gBP47.js +0 -1
- package/dist/client/assets/index-VxkpzDXr.css +0 -1
- package/dist/client/assets/index-kJdw4DY-.js +0 -98
- package/dist/client/assets/infoDiagram-LFFYTUFH-CAaX023c.js +0 -2
- package/dist/client/assets/init-Gi6I4Gst.js +0 -1
- package/dist/client/assets/ishikawaDiagram-PHBUUO56-CmiTQStv.js +0 -70
- package/dist/client/assets/journeyDiagram-4ABVD52K-B0SHC7mz.js +0 -139
- package/dist/client/assets/kanban-definition-K7BYSVSG-IfRdhzz7.js +0 -89
- package/dist/client/assets/katex-C-M49wc6.js +0 -261
- package/dist/client/assets/layout-l3OdNQhJ.js +0 -1
- package/dist/client/assets/linear-CQ0hx5Qs.js +0 -1
- package/dist/client/assets/mermaid.core-DqlPTabt.js +0 -249
- package/dist/client/assets/mindmap-definition-YRQLILUH-DIgSmG_f.js +0 -68
- package/dist/client/assets/ordinal-Cboi1Yqb.js +0 -1
- package/dist/client/assets/pieDiagram-SKSYHLDU-FzM5qoIB.js +0 -30
- package/dist/client/assets/prism-csharp-DCfUUOUs.js +0 -1
- package/dist/client/assets/prism-dart-MjriiaMt.js +0 -1
- package/dist/client/assets/prism-elixir-riuOL1mm.js +0 -1
- package/dist/client/assets/prism-hcl-CizuX1s4.js +0 -1
- package/dist/client/assets/prism-java-DYCKrDUh.js +0 -1
- package/dist/client/assets/prism-markup-templating-Ct1xsyfA.js +0 -1
- package/dist/client/assets/prism-perl-BJwBYR3Y.js +0 -1
- package/dist/client/assets/prism-php-BMhFuA7y.js +0 -1
- package/dist/client/assets/prism-ruby-Bcu0cDEh.js +0 -1
- package/dist/client/assets/prism-solidity-DDDs3w-w.js +0 -1
- package/dist/client/assets/quadrantDiagram-337W2JSQ-BBrApyD7.js +0 -7
- package/dist/client/assets/requirementDiagram-Z7DCOOCP-CLXiwUaA.js +0 -73
- package/dist/client/assets/sankeyDiagram-WA2Y5GQK-9Y3Ly5qe.js +0 -10
- package/dist/client/assets/sequenceDiagram-2WXFIKYE-DEpX1BA5.js +0 -145
- package/dist/client/assets/stateDiagram-RAJIS63D-Ck3ullwA.js +0 -1
- package/dist/client/assets/stateDiagram-v2-FVOUBMTO-X6UiDsar.js +0 -1
- package/dist/client/assets/timeline-definition-YZTLITO2-CMezf3XV.js +0 -61
- package/dist/client/assets/treemap-KZPCXAKY-DqrcV0gQ.js +0 -162
- package/dist/client/assets/vennDiagram-LZ73GAT5-eQg945Fz.js +0 -34
- package/dist/client/assets/xychartDiagram-JWTSCODW-_hqdXeX1.js +0 -7
package/README.ja.md
CHANGED
|
@@ -140,13 +140,14 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | --------------- | ------------------------------------------------------------------------------------------ |
|
|
141
141
|
| `<target>` | HEAD | コミットハッシュ、タグ、HEAD~n、ブランチ、または特別な引数 |
|
|
142
142
|
| `[compare-with]` | - | 比較対象の2番目のコミット(2つの間のdiffを表示) |
|
|
143
|
+
| `--merge-base` | false | diff 計算前に `git merge-base` で基準側を解決する(Git revision モード専用) |
|
|
143
144
|
| `--pr <url>` | - | レビューするGitHub PRのURL(例:https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 起動時に初期コメントを注入(複数指定可。JSON object または array を受け付ける) |
|
|
145
146
|
| `--port` | 4966 | 優先ポート。使用中の場合は+1にフォールバック |
|
|
146
147
|
| `--host` | 127.0.0.1 | サーバーをバインドするホストアドレス(外部からアクセスしたい場合は0.0.0.0を指定) |
|
|
147
148
|
| `--no-open` | false | ブラウザを自動的に開かない |
|
|
148
149
|
| `--mode` | split | 表示モード。`unified`または`split` |
|
|
149
|
-
| `--tui`
|
|
150
|
+
| `--tui` (deprecated) | false | WebUIの代わりにターミナルUIを使用 |
|
|
150
151
|
| `--clean` | false | 起動時に既存コメントと閲覧済みファイルをすべてクリア |
|
|
151
152
|
| `--include-untracked` | false | diffにuntrackedファイルを自動的に含める(`.`または`working`のみ有効) |
|
|
152
153
|
| `--keep-alive` | false | ブラウザ切断後もサーバーを終了せず起動したままにする(Ctrl+Cで手動停止) |
|
package/README.ko.md
CHANGED
|
@@ -140,13 +140,14 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | -------------- | --------------------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | 커밋 해시, 태그, HEAD~n, 브랜치 또는 특수 인수 |
|
|
142
142
|
| `[compare-with]` | - | 비교할 선택적 두 번째 커밋 (둘 사이의 diff 표시) |
|
|
143
|
+
| `--merge-base` | false | diff 전에 `git merge-base` 로 기준 쪽을 해석 (Git revision 모드 전용) |
|
|
143
144
|
| `--pr <url>` | - | 검토할 GitHub PR URL (예: https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 초기 코멘트 주입 (반복 가능; JSON object 또는 array 허용) |
|
|
145
146
|
| `--port` | 4966 | 선호 포트; 사용 중인 경우 +1로 대체 |
|
|
146
147
|
| `--host` | 127.0.0.1 | 서버를 바인딩할 호스트 주소 (외부 액세스는 0.0.0.0 사용) |
|
|
147
148
|
| `--no-open` | false | 브라우저를 자동으로 열지 않음 |
|
|
148
149
|
| `--mode` | split | 표시 모드: `unified` 또는 `split` |
|
|
149
|
-
| `--tui`
|
|
150
|
+
| `--tui` (deprecated) | false | WebUI 대신 터미널 UI 모드 사용 |
|
|
150
151
|
| `--clean` | false | 시작 시 모든 기존 코멘트와 열람된 파일 표시 초기화 |
|
|
151
152
|
| `--include-untracked` | false | diff에 untracked 파일 자동 포함 (`.` 또는 `working`에서만 유효) |
|
|
152
153
|
| `--keep-alive` | false | 브라우저 연결이 끊겨도 서버 유지 (Ctrl+C로 수동 종료) |
|
package/README.md
CHANGED
|
@@ -140,13 +140,14 @@ Stdin mode is selected with intent-first rules:
|
|
|
140
140
|
| --------------------- | --------------- | ------------------------------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | Commit hash, tag, HEAD~n, branch, or special arguments |
|
|
142
142
|
| `[compare-with]` | - | Optional second commit to compare with (shows diff between the two) |
|
|
143
|
+
| `--merge-base` | false | Resolve the base revision with `git merge-base` before diffing (Git revision mode only) |
|
|
143
144
|
| `--pr <url>` | - | GitHub PR URL to review (e.g., https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | Inject initial comments (repeatable; accepts a JSON object or array) |
|
|
145
146
|
| `--port` | 4966 | Preferred port; falls back to +1 if occupied |
|
|
146
147
|
| `--host` | 127.0.0.1 | Host address to bind server to (use 0.0.0.0 for external access) |
|
|
147
148
|
| `--no-open` | false | Don't automatically open browser |
|
|
148
149
|
| `--mode` | split | Display mode: `unified` or `split` |
|
|
149
|
-
| `--tui`
|
|
150
|
+
| `--tui` (deprecated) | false | Use terminal UI mode instead of WebUI |
|
|
150
151
|
| `--clean` | false | Clear all existing comments and viewed files on startup |
|
|
151
152
|
| `--include-untracked` | false | Automatically include untracked files in diff (only with `.` or `working`) |
|
|
152
153
|
| `--keep-alive` | false | Keep server running after browser disconnects (stop manually with Ctrl+C) |
|
package/README.zh.md
CHANGED
|
@@ -140,13 +140,14 @@ git diff --cached | difit -
|
|
|
140
140
|
| --------------------- | -------------- | --------------------------------------------------------------------------------- |
|
|
141
141
|
| `<target>` | HEAD | 提交哈希、标签、HEAD~n、分支或特殊参数 |
|
|
142
142
|
| `[compare-with]` | - | 要比较的可选第二个提交(显示两者之间的差异) |
|
|
143
|
+
| `--merge-base` | false | 在 diff 前先用 `git merge-base` 解析基准 revision(仅限 Git revision 模式) |
|
|
143
144
|
| `--pr <url>` | - | 要审查的 GitHub PR URL(例如:https://github.com/owner/repo/pull/123) |
|
|
144
145
|
| `--comment <json>` | - | 注入初始评论(可重复指定;接受 JSON object 或 array) |
|
|
145
146
|
| `--port` | 4966 | 首选端口;如果被占用则回退到 +1 |
|
|
146
147
|
| `--host` | 127.0.0.1 | 绑定服务器的主机地址(使用 0.0.0.0 进行外部访问) |
|
|
147
148
|
| `--no-open` | false | 不自动打开浏览器 |
|
|
148
149
|
| `--mode` | split | 显示模式:`unified` 或 `split` |
|
|
149
|
-
| `--tui`
|
|
150
|
+
| `--tui` (deprecated) | false | 使用终端 UI 模式而不是 WebUI |
|
|
150
151
|
| `--clean` | false | 启动时清除所有现有评论和已查看的文件 |
|
|
151
152
|
| `--include-untracked` | false | 自动将 untracked 文件包含在 diff 中(仅在 `.` 或 `working` 时有效) |
|
|
152
153
|
| `--keep-alive` | false | 浏览器断开后保持服务器运行(使用 Ctrl+C 手动停止) |
|
package/dist/cli/index.js
CHANGED
|
@@ -4,14 +4,33 @@ import React from 'react';
|
|
|
4
4
|
import { simpleGit } from 'simple-git';
|
|
5
5
|
import pkg from '../../package.json' with { type: 'json' };
|
|
6
6
|
import { startServer } from '../server/server.js';
|
|
7
|
+
import { createDiffSelection } from '../utils/diffSelection.js';
|
|
7
8
|
import { DiffMode } from '../types/watch.js';
|
|
8
9
|
import { DEFAULT_DIFF_VIEW_MODE, normalizeDiffViewMode } from '../utils/diffMode.js';
|
|
9
10
|
import { shouldReadStdin, findUntrackedFiles, markFilesIntentToAdd, promptUser, parseCommentOptions, validateDiffArguments, getGitRoot, } from './utils.js';
|
|
10
11
|
import { getPrPatch, getPrCommentImports } from './github.js';
|
|
12
|
+
import { warnAboutTuiDeprecation } from './tuiDeprecation.js';
|
|
11
13
|
function isSpecialArg(arg) {
|
|
12
14
|
return arg === 'working' || arg === 'staged' || arg === '.';
|
|
13
15
|
}
|
|
14
|
-
function
|
|
16
|
+
function resolveDiffSelection(commitish, compareWith, mergeBase) {
|
|
17
|
+
let baseCommitish;
|
|
18
|
+
if (compareWith) {
|
|
19
|
+
baseCommitish = compareWith;
|
|
20
|
+
}
|
|
21
|
+
else if (commitish === 'working') {
|
|
22
|
+
baseCommitish = 'staged';
|
|
23
|
+
}
|
|
24
|
+
else if (isSpecialArg(commitish)) {
|
|
25
|
+
baseCommitish = 'HEAD';
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
baseCommitish = commitish + '^';
|
|
29
|
+
}
|
|
30
|
+
return createDiffSelection(baseCommitish, commitish, mergeBase ? 'merge-base' : undefined);
|
|
31
|
+
}
|
|
32
|
+
function determineDiffMode(selection, compareWith) {
|
|
33
|
+
const { targetCommitish } = selection;
|
|
15
34
|
// If comparing specific commits/branches (not involving HEAD), no watching needed
|
|
16
35
|
// Exception: allow watching when targetCommitish is '.' even with compareWith
|
|
17
36
|
if (compareWith && targetCommitish !== 'HEAD' && targetCommitish !== '.') {
|
|
@@ -47,6 +66,7 @@ program
|
|
|
47
66
|
.option('--include-untracked', 'automatically include untracked files in diff')
|
|
48
67
|
.option('--keep-alive', 'keep server running even after browser disconnects')
|
|
49
68
|
.option('--context <lines>', 'number of context lines shown around each change', parseInt)
|
|
69
|
+
.option('--merge-base', 'resolve the base revision with git merge-base before diffing (Git revision mode only)')
|
|
50
70
|
.action(async (commitish, compareWith, options) => {
|
|
51
71
|
try {
|
|
52
72
|
let stdinDiff;
|
|
@@ -71,6 +91,10 @@ program
|
|
|
71
91
|
console.error('Error: --pr option cannot be used with positional arguments');
|
|
72
92
|
process.exit(1);
|
|
73
93
|
}
|
|
94
|
+
if (options.mergeBase) {
|
|
95
|
+
console.error('Error: --merge-base option cannot be used with --pr');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
74
98
|
if (options.tui) {
|
|
75
99
|
console.error('Error: --pr option cannot be used with --tui');
|
|
76
100
|
process.exit(1);
|
|
@@ -108,6 +132,10 @@ program
|
|
|
108
132
|
console.error('Error: --context option cannot be used with stdin diff');
|
|
109
133
|
process.exit(1);
|
|
110
134
|
}
|
|
135
|
+
if (options.mergeBase) {
|
|
136
|
+
console.error('Error: --merge-base option cannot be used with stdin diff');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
111
139
|
// Read unified diff from stdin
|
|
112
140
|
stdinDiff = await readStdin();
|
|
113
141
|
if (!stdinDiff.trim()) {
|
|
@@ -145,27 +173,12 @@ program
|
|
|
145
173
|
// If not in a git repository, fall back to process.cwd()
|
|
146
174
|
repoPath = undefined;
|
|
147
175
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// If compareWith is provided, use it as base
|
|
153
|
-
baseCommitish = compareWith;
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
// Handle special arguments
|
|
157
|
-
if (commitish === 'working') {
|
|
158
|
-
// working compares working directory with staging area
|
|
159
|
-
baseCommitish = 'staged';
|
|
160
|
-
}
|
|
161
|
-
else if (isSpecialArg(commitish)) {
|
|
162
|
-
baseCommitish = 'HEAD';
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
baseCommitish = commitish + '^';
|
|
166
|
-
}
|
|
176
|
+
const selection = resolveDiffSelection(commitish, compareWith, options.mergeBase);
|
|
177
|
+
if (options.mergeBase && isSpecialArg(selection.baseCommitish)) {
|
|
178
|
+
console.error(`Error: --merge-base requires a commit-ish base, but resolved base was "${selection.baseCommitish}"`);
|
|
179
|
+
process.exit(1);
|
|
167
180
|
}
|
|
168
|
-
if (
|
|
181
|
+
if (selection.targetCommitish === 'working' || selection.targetCommitish === '.') {
|
|
169
182
|
const git = simpleGit(repoPath);
|
|
170
183
|
await handleUntrackedFiles(git, options.includeUntracked);
|
|
171
184
|
}
|
|
@@ -180,26 +193,25 @@ program
|
|
|
180
193
|
console.error('Try running the command directly in your terminal without piping.');
|
|
181
194
|
process.exit(1);
|
|
182
195
|
}
|
|
196
|
+
await warnAboutTuiDeprecation();
|
|
183
197
|
// Dynamic import for TUI mode
|
|
184
198
|
const { render } = await import('ink');
|
|
185
199
|
const { default: TuiApp } = await import('../tui/App.js');
|
|
186
200
|
render(React.createElement(TuiApp, {
|
|
187
|
-
|
|
188
|
-
baseCommitish,
|
|
201
|
+
selection,
|
|
189
202
|
mode: options.mode,
|
|
190
203
|
repoPath,
|
|
191
204
|
contextLines: options.context,
|
|
192
205
|
}));
|
|
193
206
|
return;
|
|
194
207
|
}
|
|
195
|
-
const validation = validateDiffArguments(targetCommitish, compareWith);
|
|
208
|
+
const validation = validateDiffArguments(selection.targetCommitish, compareWith);
|
|
196
209
|
if (!validation.valid) {
|
|
197
210
|
console.error(`Error: ${validation.error}`);
|
|
198
211
|
process.exit(1);
|
|
199
212
|
}
|
|
200
213
|
const { url, port, isEmpty } = await startServer({
|
|
201
|
-
|
|
202
|
-
baseCommitish,
|
|
214
|
+
selection,
|
|
203
215
|
preferredPort: options.port,
|
|
204
216
|
host: options.host,
|
|
205
217
|
openBrowser: options.open,
|
|
@@ -207,12 +219,12 @@ program
|
|
|
207
219
|
clearComments: options.clean,
|
|
208
220
|
keepAlive: options.keepAlive,
|
|
209
221
|
contextLines: options.context,
|
|
210
|
-
diffMode: determineDiffMode(
|
|
222
|
+
diffMode: determineDiffMode(selection, compareWith),
|
|
211
223
|
repoPath,
|
|
212
224
|
...(commentImports.length > 0 ? { commentImports } : {}),
|
|
213
225
|
});
|
|
214
226
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
215
|
-
console.log(`📋 Reviewing: ${targetCommitish}`);
|
|
227
|
+
console.log(`📋 Reviewing: ${selection.targetCommitish}`);
|
|
216
228
|
if (options.keepAlive) {
|
|
217
229
|
console.log('🔒 Keep-alive mode: server will stay running after browser disconnects');
|
|
218
230
|
}
|