difit 4.0.7 → 5.0.1
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 +1 -3
- package/README.ko.md +1 -3
- package/README.md +6 -3
- package/README.zh.md +1 -3
- package/dist/cli/index.js +0 -39
- package/dist/cli/index.test.js +0 -374
- package/dist/cli/utils.d.ts +0 -2
- package/dist/cli/utils.js +1 -18
- package/dist/cli/utils.test.js +0 -16
- package/dist/client/assets/{arc-DX2p9X2Y.js → arc-47JvE2o4.js} +1 -1
- package/dist/client/assets/architecture-YZFGNWBL-CAofxL11.js +1 -0
- package/dist/client/assets/{architectureDiagram-Q4EWVU46-FixTWViB.js → architectureDiagram-Q4EWVU46-PEhI9x48.js} +1 -1
- package/dist/client/assets/{blockDiagram-DXYQGD6D-CUAMgGr9.js → blockDiagram-DXYQGD6D-SUrPMV8E.js} +1 -1
- package/dist/client/assets/{c4Diagram-AHTNJAMY-BM_HNNZe.js → c4Diagram-AHTNJAMY-BJ9pq9B3.js} +1 -1
- package/dist/client/assets/channel-DXpjokeU.js +1 -0
- package/dist/client/assets/{chunk-2KRD3SAO-DeT59g2K.js → chunk-2KRD3SAO-2O6hV_yw.js} +1 -1
- package/dist/client/assets/{chunk-336JU56O-CaGvJA86.js → chunk-336JU56O-C0NxME-U.js} +2 -2
- package/dist/client/assets/chunk-426QAEUC-DO73G5YJ.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-D9mNDl5f.js → chunk-4BX2VUAB-PjGa5t5G.js} +1 -1
- package/dist/client/assets/{chunk-4TB4RGXK-Df3b4HEG.js → chunk-4TB4RGXK-DKCtDLTf.js} +1 -1
- package/dist/client/assets/{chunk-55IACEB6-dCWLe_n4.js → chunk-55IACEB6-BUBhWZ5_.js} +1 -1
- package/dist/client/assets/{chunk-5FUZZQ4R-EScvXcSN.js → chunk-5FUZZQ4R-D52DoV-0.js} +1 -1
- package/dist/client/assets/{chunk-5PVQY5BW-ail-oj89.js → chunk-5PVQY5BW-Cpp0JjTq.js} +1 -1
- package/dist/client/assets/{chunk-67CJDMHE-CHeCIL1u.js → chunk-67CJDMHE-DFAAAXYj.js} +1 -1
- package/dist/client/assets/{chunk-7N4EOEYR-P0tNRVMZ.js → chunk-7N4EOEYR-DeLrWd_x.js} +1 -1
- package/dist/client/assets/{chunk-AA7GKIK3-DloBHWSo.js → chunk-AA7GKIK3-Pb9IU0o9.js} +1 -1
- package/dist/client/assets/{chunk-BSJP7CBP-CGLThsR8.js → chunk-BSJP7CBP-DvFe6BQg.js} +1 -1
- package/dist/client/assets/{chunk-CIAEETIT-rCt2IEMp.js → chunk-CIAEETIT-AytpwHlv.js} +1 -1
- package/dist/client/assets/{chunk-EDXVE4YY-DIJEIKIq.js → chunk-EDXVE4YY-DSprT5LQ.js} +1 -1
- package/dist/client/assets/{chunk-ENJZ2VHE-CdrdxFfV.js → chunk-ENJZ2VHE-DsQnPoSa.js} +1 -1
- package/dist/client/assets/{chunk-FMBD7UC4-BH_GgR9u.js → chunk-FMBD7UC4-CRzu5RUs.js} +1 -1
- package/dist/client/assets/{chunk-FOC6F5B3-D71VljSN.js → chunk-FOC6F5B3-GWMv90go.js} +1 -1
- package/dist/client/assets/{chunk-ICPOFSXX-2vcQKuhB.js → chunk-ICPOFSXX-LaB5P0SR.js} +1 -1
- package/dist/client/assets/{chunk-K5T4RW27-BWIFd7pZ.js → chunk-K5T4RW27-S036x5p5.js} +1 -1
- package/dist/client/assets/{chunk-KGLVRYIC-Ck8I8tdt.js → chunk-KGLVRYIC-DDzbiNrj.js} +1 -1
- package/dist/client/assets/{chunk-LIHQZDEY-Cc7TtI-w.js → chunk-LIHQZDEY-BoUwuY9Y.js} +1 -1
- package/dist/client/assets/{chunk-ORNJ4GCN-BMSqiphc.js → chunk-ORNJ4GCN-CopGHq93.js} +1 -1
- package/dist/client/assets/{chunk-OYMX7WX6-B5faFb53.js → chunk-OYMX7WX6-Do8-v0_P.js} +1 -1
- package/dist/client/assets/chunk-QZHKN3VN-BdzTLtlM.js +1 -0
- package/dist/client/assets/{chunk-U2HBQHQK-BILTfRyq.js → chunk-U2HBQHQK-CuugOH8t.js} +1 -1
- package/dist/client/assets/{chunk-X2U36JSP-D4-56gWx.js → chunk-X2U36JSP-ZX9AmJVa.js} +1 -1
- package/dist/client/assets/{chunk-XPW4576I-SxB401Zg.js → chunk-XPW4576I-DwqcIpF8.js} +1 -1
- package/dist/client/assets/{chunk-YZCP3GAM-CWXUVxFj.js → chunk-YZCP3GAM-w3hvGtGQ.js} +1 -1
- package/dist/client/assets/{chunk-ZZ45TVLE-CXjZua4f.js → chunk-ZZ45TVLE-CX35ksjr.js} +1 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-C9JPZQtl.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-BgDR8rt-.js +1 -0
- package/dist/client/assets/clone-BygUtDF6.js +1 -0
- package/dist/client/assets/{cose-bilkent-S5V4N54A-YToNpueF.js → cose-bilkent-S5V4N54A-DXfb_bs_.js} +1 -1
- package/dist/client/assets/{dagre-tvaMpP4D.js → dagre-BYBAH6EF.js} +1 -1
- package/dist/client/assets/{dagre-KV5264BT-QFYoTa0z.js → dagre-KV5264BT-Bj9WMi27.js} +1 -1
- package/dist/client/assets/{diagram-5BDNPKRD-DM0NNmEN.js → diagram-5BDNPKRD-DHnS0s39.js} +1 -1
- package/dist/client/assets/{diagram-G4DWMVQ6-TiLkMmwt.js → diagram-G4DWMVQ6-DdKcPnFw.js} +1 -1
- package/dist/client/assets/{diagram-MMDJMWI5-DM1ykqrB.js → diagram-MMDJMWI5-DfdNeC0p.js} +1 -1
- package/dist/client/assets/{diagram-TYMM5635-BEOLX1wr.js → diagram-TYMM5635-DwieVXZu.js} +1 -1
- package/dist/client/assets/{dist-CCBhd9az.js → dist-COv0rtkK.js} +1 -1
- package/dist/client/assets/{erDiagram-SMLLAGMA-DZcjZq6z.js → erDiagram-SMLLAGMA--nNfIX9m.js} +1 -1
- package/dist/client/assets/{flowDiagram-DWJPFMVM-B1AVT9es.js → flowDiagram-DWJPFMVM-BFk7GDSn.js} +1 -1
- package/dist/client/assets/{ganttDiagram-T4ZO3ILL-BCEXws9V.js → ganttDiagram-T4ZO3ILL-DlVKHIi_.js} +1 -1
- package/dist/client/assets/gitGraph-7Q5UKJZL-4fOTOOzG.js +1 -0
- package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-CVznBDOl.js → gitGraphDiagram-UUTBAWPF-ww35jb2y.js} +1 -1
- package/dist/client/assets/{graphlib-C4fWcyt1.js → graphlib-cvGsNSEN.js} +1 -1
- package/dist/client/assets/index-CrvsDrrA.js +79 -0
- package/dist/client/assets/{index-C16wNcPQ.css → index-v-PY_jQI.css} +1 -1
- package/dist/client/assets/info-OMHHGYJF-BcwRhjJb.js +1 -0
- package/dist/client/assets/{infoDiagram-42DDH7IO-D8Oxr-KJ.js → infoDiagram-42DDH7IO-CbZg29-f.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-BE9KniVE.js → ishikawaDiagram-UXIWVN3A-DbmLYe6W.js} +1 -1
- package/dist/client/assets/{journeyDiagram-VCZTEJTY-B3lGcz06.js → journeyDiagram-VCZTEJTY-m6lofB3D.js} +1 -1
- package/dist/client/assets/{kanban-definition-6JOO6SKY-Bs1QdB0j.js → kanban-definition-6JOO6SKY-zNyvW0z9.js} +1 -1
- package/dist/client/assets/{line-CO4-KhEq.js → line-DYCPrtIt.js} +1 -1
- package/dist/client/assets/{linear-CnaJKs0I.js → linear-BAKLx75z.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-CravK6bS.js → mermaid-parser.core-BGGMv1j6.js} +2 -2
- package/dist/client/assets/{mermaid.core-DTh9KJvF.js → mermaid.core-CMGQEZKx.js} +3 -3
- package/dist/client/assets/{mindmap-definition-QFDTVHPH-D2xU2hfX.js → mindmap-definition-QFDTVHPH-4Qsf3Hkp.js} +1 -1
- package/dist/client/assets/packet-4T2RLAQJ-LdDEUu30.js +1 -0
- package/dist/client/assets/pie-ZZUOXDRM-B-ezG4xa.js +1 -0
- package/dist/client/assets/{pieDiagram-DEJITSTG-CRX6y4IQ.js → pieDiagram-DEJITSTG-Cnlop37j.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-34T5L4WZ-K2HFp8O8.js → quadrantDiagram-34T5L4WZ-CLFb7OC8.js} +1 -1
- package/dist/client/assets/radar-PYXPWWZC-D66LzHfH.js +1 -0
- package/dist/client/assets/{requirementDiagram-MS252O5E-C-8AW0uI.js → requirementDiagram-MS252O5E-CFMEftHL.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-XADWPNL6-Bv-_ZFS5.js → sankeyDiagram-XADWPNL6-Bz_Rsg7k.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-FGHM5R23-Bk4QYIPk.js → sequenceDiagram-FGHM5R23-C_UnEheO.js} +1 -1
- package/dist/client/assets/{src-XMuEuFcU.js → src-D4dXpp2L.js} +1 -1
- package/dist/client/assets/{stateDiagram-FHFEXIEX-CI1G7zGC.js → stateDiagram-FHFEXIEX-D5jyXLVB.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-CTyQGCYc.js +1 -0
- package/dist/client/assets/{timeline-definition-GMOUNBTQ-CnXv8xHg.js → timeline-definition-GMOUNBTQ-BtgnceD7.js} +1 -1
- package/dist/client/assets/treeView-SZITEDCU-BsI_6Qwy.js +1 -0
- package/dist/client/assets/treemap-W4RFUUIX-CzaM5y4Y.js +1 -0
- package/dist/client/assets/{vennDiagram-DHZGUBPP-M5x471Ar.js → vennDiagram-DHZGUBPP-DWtzk4wH.js} +1 -1
- package/dist/client/assets/wardley-RL74JXVD-C1IHEcDw.js +1 -0
- package/dist/client/assets/{wardleyDiagram-NUSXRM2D-BG99uPNN.js → wardleyDiagram-NUSXRM2D-D88r6BkP.js} +1 -1
- package/dist/client/assets/{xychartDiagram-5P7HB3ND-DO7Upr9G.js → xychartDiagram-5P7HB3ND-DkXj8P_J.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/server.d.ts +0 -1
- package/dist/server/server.js +0 -3
- package/dist/server/server.test.js +0 -37
- package/dist/types/diff.d.ts +0 -12
- package/dist/utils/commentFormatting.test.js +0 -52
- package/package.json +4 -5
- package/dist/cli/tuiDeprecation.d.ts +0 -3
- package/dist/cli/tuiDeprecation.js +0 -16
- package/dist/cli/tuiDeprecation.test.d.ts +0 -1
- package/dist/cli/tuiDeprecation.test.js +0 -16
- package/dist/client/assets/architecture-YZFGNWBL-2zVtKbnG.js +0 -1
- package/dist/client/assets/channel-B_ddQhpW.js +0 -1
- package/dist/client/assets/chunk-426QAEUC-CMTCMPn4.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-B-G9G-FB.js +0 -1
- package/dist/client/assets/classDiagram-6PBFFD2Q-DnUQ2iGN.js +0 -1
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-Dwp5vuOB.js +0 -1
- package/dist/client/assets/clone-aWrl-obY.js +0 -1
- package/dist/client/assets/gitGraph-7Q5UKJZL-BE3Mcr-v.js +0 -1
- package/dist/client/assets/index-6LShOAAb.js +0 -79
- package/dist/client/assets/info-OMHHGYJF-CBpXVhw-.js +0 -1
- package/dist/client/assets/packet-4T2RLAQJ-abaJ3V5T.js +0 -1
- package/dist/client/assets/pie-ZZUOXDRM-B12dpA7V.js +0 -1
- package/dist/client/assets/radar-PYXPWWZC-BbBaJJN8.js +0 -1
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DQ0U-oto.js +0 -1
- package/dist/client/assets/treeView-SZITEDCU-CM0rCBUc.js +0 -1
- package/dist/client/assets/treemap-W4RFUUIX-CXoNE_rL.js +0 -1
- package/dist/client/assets/wardley-RL74JXVD-B_EtnvOk.js +0 -1
- package/dist/server/git-diff-tui.d.ts +0 -2
- package/dist/server/git-diff-tui.js +0 -100
- package/dist/server/git-diff-tui.test.d.ts +0 -1
- package/dist/server/git-diff-tui.test.js +0 -76
- package/dist/tui/App.d.ts +0 -10
- package/dist/tui/App.js +0 -92
- package/dist/tui/components/DiffViewer.d.ts +0 -8
- package/dist/tui/components/DiffViewer.js +0 -88
- package/dist/tui/components/FileList.d.ts +0 -8
- package/dist/tui/components/FileList.js +0 -48
- package/dist/tui/components/SideBySideDiffViewer.d.ts +0 -9
- package/dist/tui/components/SideBySideDiffViewer.js +0 -240
- package/dist/tui/components/StatusBar.d.ts +0 -8
- package/dist/tui/components/StatusBar.js +0 -19
- package/dist/tui/utils/parseDiff.d.ts +0 -2
- package/dist/tui/utils/parseDiff.js +0 -67
- package/dist/utils/createId.test.d.ts +0 -1
- package/dist/utils/createId.test.js +0 -48
package/dist/cli/index.test.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import React from 'react';
|
|
3
2
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
4
3
|
import { DiffMode } from '../types/watch.js';
|
|
5
|
-
import { DEFAULT_DIFF_VIEW_MODE, normalizeDiffViewMode } from '../utils/diffMode.js';
|
|
6
4
|
import pkg from '../../package.json' with { type: 'json' };
|
|
7
5
|
// Mock all external dependencies
|
|
8
6
|
vi.mock('simple-git');
|
|
@@ -128,9 +126,7 @@ describe('CLI index.ts', () => {
|
|
|
128
126
|
.option('--port <port>', 'port', parseInt)
|
|
129
127
|
.option('--host <host>', 'host', '')
|
|
130
128
|
.option('--no-open', 'no-open')
|
|
131
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
132
129
|
.option('--merge-base', 'merge-base')
|
|
133
|
-
.option('--tui', 'tui')
|
|
134
130
|
.option('--pr <url>', 'pr')
|
|
135
131
|
.action(async (commitish, _compareWith, options) => {
|
|
136
132
|
// Simulate the logic from index.ts
|
|
@@ -162,7 +158,6 @@ describe('CLI index.ts', () => {
|
|
|
162
158
|
preferredPort: options.port,
|
|
163
159
|
host: options.host,
|
|
164
160
|
openBrowser: options.open,
|
|
165
|
-
mode: options.mode,
|
|
166
161
|
});
|
|
167
162
|
});
|
|
168
163
|
await program.parseAsync([...args], { from: 'user' });
|
|
@@ -171,7 +166,6 @@ describe('CLI index.ts', () => {
|
|
|
171
166
|
preferredPort: undefined,
|
|
172
167
|
host: '',
|
|
173
168
|
openBrowser: true,
|
|
174
|
-
mode: 'split',
|
|
175
169
|
});
|
|
176
170
|
});
|
|
177
171
|
});
|
|
@@ -192,21 +186,6 @@ describe('CLI index.ts', () => {
|
|
|
192
186
|
args: ['--no-open'],
|
|
193
187
|
expectedOptions: { open: false },
|
|
194
188
|
},
|
|
195
|
-
{
|
|
196
|
-
name: '--mode option',
|
|
197
|
-
args: ['--mode', 'unified'],
|
|
198
|
-
expectedOptions: { mode: 'unified' },
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
name: '--mode option (legacy inline)',
|
|
202
|
-
args: ['--mode', 'inline'],
|
|
203
|
-
expectedOptions: { mode: 'unified' },
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
name: '--mode option (legacy side-by-side)',
|
|
207
|
-
args: ['--mode', 'side-by-side'],
|
|
208
|
-
expectedOptions: { mode: 'split' },
|
|
209
|
-
},
|
|
210
189
|
{
|
|
211
190
|
name: '--clean option',
|
|
212
191
|
args: ['--clean'],
|
|
@@ -236,8 +215,6 @@ describe('CLI index.ts', () => {
|
|
|
236
215
|
.option('--port <port>', 'port', parseInt)
|
|
237
216
|
.option('--host <host>', 'host', '')
|
|
238
217
|
.option('--no-open', 'no-open')
|
|
239
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
240
|
-
.option('--tui', 'tui')
|
|
241
218
|
.option('--pr <url>', 'pr')
|
|
242
219
|
.option('--merge-base', 'merge-base')
|
|
243
220
|
.option('--clean', 'start with a clean slate by clearing all existing comments')
|
|
@@ -253,7 +230,6 @@ describe('CLI index.ts', () => {
|
|
|
253
230
|
preferredPort: options.port,
|
|
254
231
|
host: options.host,
|
|
255
232
|
openBrowser: options.open,
|
|
256
|
-
mode: options.mode,
|
|
257
233
|
clearComments: options.clean,
|
|
258
234
|
keepAlive: options.keepAlive,
|
|
259
235
|
contextLines: options.context,
|
|
@@ -267,7 +243,6 @@ describe('CLI index.ts', () => {
|
|
|
267
243
|
preferredPort: expectedOptions.port,
|
|
268
244
|
host: expectedOptions.host || '',
|
|
269
245
|
openBrowser: expectedOptions.open !== false,
|
|
270
|
-
mode: expectedOptions.mode || 'split',
|
|
271
246
|
clearComments: expectedOptions.clean,
|
|
272
247
|
keepAlive: expectedOptions.keepAlive,
|
|
273
248
|
contextLines: expectedOptions.context,
|
|
@@ -330,13 +305,11 @@ describe('CLI index.ts', () => {
|
|
|
330
305
|
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
331
306
|
.argument('[compare-with]', 'compare-with')
|
|
332
307
|
.option('--context <lines>', 'context', parseInt)
|
|
333
|
-
.option('--tui', 'tui')
|
|
334
308
|
.action(async (commitish, _compareWith, options) => {
|
|
335
309
|
const readFromStdin = shouldReadStdin({
|
|
336
310
|
commitish,
|
|
337
311
|
hasPositionalArgs: program.args.length > 0,
|
|
338
312
|
hasPrOption: false,
|
|
339
|
-
hasTuiOption: Boolean(options.tui),
|
|
340
313
|
});
|
|
341
314
|
if (readFromStdin && options.context !== undefined) {
|
|
342
315
|
console.error('Error: --context option cannot be used with stdin diff');
|
|
@@ -385,13 +358,11 @@ describe('CLI index.ts', () => {
|
|
|
385
358
|
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
386
359
|
.argument('[compare-with]', 'compare-with')
|
|
387
360
|
.option('--merge-base', 'merge-base')
|
|
388
|
-
.option('--tui', 'tui')
|
|
389
361
|
.action(async (commitish, _compareWith, options) => {
|
|
390
362
|
const readFromStdin = shouldReadStdin({
|
|
391
363
|
commitish,
|
|
392
364
|
hasPositionalArgs: program.args.length > 0,
|
|
393
365
|
hasPrOption: false,
|
|
394
|
-
hasTuiOption: Boolean(options.tui),
|
|
395
366
|
});
|
|
396
367
|
if (readFromStdin && options.mergeBase) {
|
|
397
368
|
console.error('Error: --merge-base option cannot be used with stdin diff');
|
|
@@ -487,8 +458,6 @@ describe('CLI index.ts', () => {
|
|
|
487
458
|
.option('--port <port>', 'port', parseInt)
|
|
488
459
|
.option('--host <host>', 'host', '')
|
|
489
460
|
.option('--no-open', 'no-open')
|
|
490
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
491
|
-
.option('--tui', 'tui')
|
|
492
461
|
.option('--pr <url>', 'pr')
|
|
493
462
|
.action(async (commitish, _compareWith, options) => {
|
|
494
463
|
if (commitish === 'working' || commitish === '.') {
|
|
@@ -501,7 +470,6 @@ describe('CLI index.ts', () => {
|
|
|
501
470
|
preferredPort: options.port,
|
|
502
471
|
host: options.host,
|
|
503
472
|
openBrowser: options.open,
|
|
504
|
-
mode: options.mode,
|
|
505
473
|
});
|
|
506
474
|
});
|
|
507
475
|
await program.parseAsync(['working'], { from: 'user' });
|
|
@@ -517,8 +485,6 @@ describe('CLI index.ts', () => {
|
|
|
517
485
|
.option('--port <port>', 'port', parseInt)
|
|
518
486
|
.option('--host <host>', 'host', '')
|
|
519
487
|
.option('--no-open', 'no-open')
|
|
520
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
521
|
-
.option('--tui', 'tui')
|
|
522
488
|
.option('--pr <url>', 'pr')
|
|
523
489
|
.action(async (commitish, _compareWith, options) => {
|
|
524
490
|
if (commitish === 'working' || commitish === '.') {
|
|
@@ -530,7 +496,6 @@ describe('CLI index.ts', () => {
|
|
|
530
496
|
preferredPort: options.port,
|
|
531
497
|
host: options.host,
|
|
532
498
|
openBrowser: options.open,
|
|
533
|
-
mode: options.mode,
|
|
534
499
|
});
|
|
535
500
|
});
|
|
536
501
|
await program.parseAsync(['HEAD'], { from: 'user' });
|
|
@@ -547,8 +512,6 @@ describe('CLI index.ts', () => {
|
|
|
547
512
|
.option('--port <port>', 'port', parseInt)
|
|
548
513
|
.option('--host <host>', 'host', '')
|
|
549
514
|
.option('--no-open', 'no-open')
|
|
550
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
551
|
-
.option('--tui', 'tui')
|
|
552
515
|
.option('--pr <url>', 'pr')
|
|
553
516
|
.option('--include-untracked', 'include untracked')
|
|
554
517
|
.action(async (commitish, _compareWith, options) => {
|
|
@@ -564,7 +527,6 @@ describe('CLI index.ts', () => {
|
|
|
564
527
|
preferredPort: options.port,
|
|
565
528
|
host: options.host,
|
|
566
529
|
openBrowser: options.open,
|
|
567
|
-
mode: options.mode,
|
|
568
530
|
});
|
|
569
531
|
});
|
|
570
532
|
await program.parseAsync(['.', '--include-untracked'], { from: 'user' });
|
|
@@ -582,8 +544,6 @@ describe('CLI index.ts', () => {
|
|
|
582
544
|
.option('--port <port>', 'port', parseInt)
|
|
583
545
|
.option('--host <host>', 'host', '')
|
|
584
546
|
.option('--no-open', 'no-open')
|
|
585
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
586
|
-
.option('--tui', 'tui')
|
|
587
547
|
.option('--pr <url>', 'pr')
|
|
588
548
|
.option('--include-untracked', 'include untracked')
|
|
589
549
|
.action(async (commitish, _compareWith, options) => {
|
|
@@ -600,7 +560,6 @@ describe('CLI index.ts', () => {
|
|
|
600
560
|
preferredPort: options.port,
|
|
601
561
|
host: options.host,
|
|
602
562
|
openBrowser: options.open,
|
|
603
|
-
mode: options.mode,
|
|
604
563
|
});
|
|
605
564
|
});
|
|
606
565
|
await program.parseAsync(['.'], { from: 'user' });
|
|
@@ -644,8 +603,6 @@ describe('CLI index.ts', () => {
|
|
|
644
603
|
.option('--port <port>', 'port', parseInt)
|
|
645
604
|
.option('--host <host>', 'host', '')
|
|
646
605
|
.option('--no-open', 'no-open')
|
|
647
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
648
|
-
.option('--tui', 'tui')
|
|
649
606
|
.option('--pr <url>', 'pr')
|
|
650
607
|
.action(async (commitish, _compareWith, options) => {
|
|
651
608
|
const manualCommentImports = actualParseCommentOptions(options.comment);
|
|
@@ -663,7 +620,6 @@ describe('CLI index.ts', () => {
|
|
|
663
620
|
preferredPort: options.port,
|
|
664
621
|
host: options.host,
|
|
665
622
|
openBrowser: options.open,
|
|
666
|
-
mode: options.mode,
|
|
667
623
|
commentImports,
|
|
668
624
|
});
|
|
669
625
|
});
|
|
@@ -680,7 +636,6 @@ describe('CLI index.ts', () => {
|
|
|
680
636
|
preferredPort: undefined,
|
|
681
637
|
host: '',
|
|
682
638
|
openBrowser: true,
|
|
683
|
-
mode: 'split',
|
|
684
639
|
commentImports: [
|
|
685
640
|
...prCommentImports,
|
|
686
641
|
{
|
|
@@ -710,8 +665,6 @@ describe('CLI index.ts', () => {
|
|
|
710
665
|
.option('--port <port>', 'port', parseInt)
|
|
711
666
|
.option('--host <host>', 'host', '')
|
|
712
667
|
.option('--no-open', 'no-open')
|
|
713
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
714
|
-
.option('--tui', 'tui')
|
|
715
668
|
.option('--pr <url>', 'pr')
|
|
716
669
|
.action(async (commitish, _compareWith, options) => {
|
|
717
670
|
const manualCommentImports = actualParseCommentOptions(options.comment);
|
|
@@ -734,7 +687,6 @@ describe('CLI index.ts', () => {
|
|
|
734
687
|
preferredPort: options.port,
|
|
735
688
|
host: options.host,
|
|
736
689
|
openBrowser: options.open,
|
|
737
|
-
mode: options.mode,
|
|
738
690
|
...(commentImports.length > 0 ? { commentImports } : {}),
|
|
739
691
|
});
|
|
740
692
|
});
|
|
@@ -745,7 +697,6 @@ describe('CLI index.ts', () => {
|
|
|
745
697
|
preferredPort: undefined,
|
|
746
698
|
host: '',
|
|
747
699
|
openBrowser: true,
|
|
748
|
-
mode: 'split',
|
|
749
700
|
});
|
|
750
701
|
});
|
|
751
702
|
it('rejects PR option with positional arguments', async () => {
|
|
@@ -756,8 +707,6 @@ describe('CLI index.ts', () => {
|
|
|
756
707
|
.option('--port <port>', 'port', parseInt)
|
|
757
708
|
.option('--host <host>', 'host', '')
|
|
758
709
|
.option('--no-open', 'no-open')
|
|
759
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
760
|
-
.option('--tui', 'tui')
|
|
761
710
|
.option('--pr <url>', 'pr')
|
|
762
711
|
.action(async (commitish, _compareWith, options) => {
|
|
763
712
|
if (options.pr) {
|
|
@@ -773,35 +722,6 @@ describe('CLI index.ts', () => {
|
|
|
773
722
|
expect(console.error).toHaveBeenCalledWith('Error: --pr option cannot be used with positional arguments');
|
|
774
723
|
expect(process.exit).toHaveBeenCalledWith(1);
|
|
775
724
|
});
|
|
776
|
-
it('rejects PR option with --tui', async () => {
|
|
777
|
-
const prUrl = 'https://github.com/owner/repo/pull/123';
|
|
778
|
-
const program = new Command();
|
|
779
|
-
program
|
|
780
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
781
|
-
.argument('[compare-with]', 'compare-with')
|
|
782
|
-
.option('--port <port>', 'port', parseInt)
|
|
783
|
-
.option('--host <host>', 'host', '')
|
|
784
|
-
.option('--no-open', 'no-open')
|
|
785
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
786
|
-
.option('--tui', 'tui')
|
|
787
|
-
.option('--pr <url>', 'pr')
|
|
788
|
-
.action(async (commitish, _compareWith, options) => {
|
|
789
|
-
if (options.pr) {
|
|
790
|
-
if (commitish !== 'HEAD' || _compareWith) {
|
|
791
|
-
console.error('Error: --pr option cannot be used with positional arguments');
|
|
792
|
-
process.exit(1);
|
|
793
|
-
}
|
|
794
|
-
if (options.tui) {
|
|
795
|
-
console.error('Error: --pr option cannot be used with --tui');
|
|
796
|
-
process.exit(1);
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
});
|
|
800
|
-
await program.parseAsync(['--pr', prUrl, '--tui'], { from: 'user' });
|
|
801
|
-
expect(console.error).toHaveBeenCalledWith('Error: --pr option cannot be used with --tui');
|
|
802
|
-
expect(process.exit).toHaveBeenCalledWith(1);
|
|
803
|
-
expect(mockStartServer).not.toHaveBeenCalled();
|
|
804
|
-
});
|
|
805
725
|
});
|
|
806
726
|
describe('--comment option', () => {
|
|
807
727
|
it('passes parsed comment imports to startServer', async () => {
|
|
@@ -812,7 +732,6 @@ describe('CLI index.ts', () => {
|
|
|
812
732
|
.option('--port <port>', 'port', parseInt)
|
|
813
733
|
.option('--host <host>', 'host', '')
|
|
814
734
|
.option('--no-open', 'no-open')
|
|
815
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
816
735
|
.action(async (commitish, options) => {
|
|
817
736
|
const commentImports = actualParseCommentOptions(options.comment);
|
|
818
737
|
await startServer({
|
|
@@ -820,7 +739,6 @@ describe('CLI index.ts', () => {
|
|
|
820
739
|
preferredPort: options.port,
|
|
821
740
|
host: options.host,
|
|
822
741
|
openBrowser: options.open,
|
|
823
|
-
mode: options.mode,
|
|
824
742
|
commentImports,
|
|
825
743
|
});
|
|
826
744
|
});
|
|
@@ -833,7 +751,6 @@ describe('CLI index.ts', () => {
|
|
|
833
751
|
preferredPort: undefined,
|
|
834
752
|
host: '',
|
|
835
753
|
openBrowser: true,
|
|
836
|
-
mode: 'split',
|
|
837
754
|
commentImports: [
|
|
838
755
|
{
|
|
839
756
|
type: 'thread',
|
|
@@ -849,27 +766,6 @@ describe('CLI index.ts', () => {
|
|
|
849
766
|
],
|
|
850
767
|
});
|
|
851
768
|
});
|
|
852
|
-
it('rejects --comment with --tui', async () => {
|
|
853
|
-
const program = new Command();
|
|
854
|
-
program
|
|
855
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
856
|
-
.option('--comment <json>', 'comment', (value, previous) => [...previous, value], [])
|
|
857
|
-
.option('--tui', 'tui')
|
|
858
|
-
.action(async (_commitish, options) => {
|
|
859
|
-
const commentImports = actualParseCommentOptions(options.comment);
|
|
860
|
-
if (options.tui && commentImports.length > 0) {
|
|
861
|
-
console.error('Error: --comment option cannot be used with --tui');
|
|
862
|
-
process.exit(1);
|
|
863
|
-
}
|
|
864
|
-
});
|
|
865
|
-
await program.parseAsync([
|
|
866
|
-
'--tui',
|
|
867
|
-
'--comment',
|
|
868
|
-
'{"type":"thread","filePath":"src/example.ts","position":{"side":"new","line":10},"body":"Imported comment"}',
|
|
869
|
-
], { from: 'user' });
|
|
870
|
-
expect(console.error).toHaveBeenCalledWith('Error: --comment option cannot be used with --tui');
|
|
871
|
-
expect(process.exit).toHaveBeenCalledWith(1);
|
|
872
|
-
});
|
|
873
769
|
it('reports invalid comment json before starting the server', async () => {
|
|
874
770
|
const program = new Command();
|
|
875
771
|
program
|
|
@@ -905,8 +801,6 @@ describe('CLI index.ts', () => {
|
|
|
905
801
|
.option('--port <port>', 'port', parseInt)
|
|
906
802
|
.option('--host <host>', 'host', '')
|
|
907
803
|
.option('--no-open', 'no-open')
|
|
908
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
909
|
-
.option('--tui', 'tui')
|
|
910
804
|
.option('--pr <url>', 'pr')
|
|
911
805
|
.option('--clean', 'start with a clean slate by clearing all existing comments')
|
|
912
806
|
.action(async (commitish, _compareWith, options) => {
|
|
@@ -915,7 +809,6 @@ describe('CLI index.ts', () => {
|
|
|
915
809
|
preferredPort: options.port,
|
|
916
810
|
host: options.host,
|
|
917
811
|
openBrowser: options.open,
|
|
918
|
-
mode: options.mode,
|
|
919
812
|
clearComments: options.clean,
|
|
920
813
|
});
|
|
921
814
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
@@ -944,8 +837,6 @@ describe('CLI index.ts', () => {
|
|
|
944
837
|
.option('--port <port>', 'port', parseInt)
|
|
945
838
|
.option('--host <host>', 'host', '')
|
|
946
839
|
.option('--no-open', 'no-open')
|
|
947
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
948
|
-
.option('--tui', 'tui')
|
|
949
840
|
.option('--pr <url>', 'pr')
|
|
950
841
|
.option('--clean', 'start with a clean slate by clearing all existing comments')
|
|
951
842
|
.action(async (commitish, _compareWith, options) => {
|
|
@@ -954,7 +845,6 @@ describe('CLI index.ts', () => {
|
|
|
954
845
|
preferredPort: options.port,
|
|
955
846
|
host: options.host,
|
|
956
847
|
openBrowser: options.open,
|
|
957
|
-
mode: options.mode,
|
|
958
848
|
clearComments: options.clean,
|
|
959
849
|
});
|
|
960
850
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
@@ -985,8 +875,6 @@ describe('CLI index.ts', () => {
|
|
|
985
875
|
.option('--port <port>', 'port', parseInt)
|
|
986
876
|
.option('--host <host>', 'host', '')
|
|
987
877
|
.option('--no-open', 'no-open')
|
|
988
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
989
|
-
.option('--tui', 'tui')
|
|
990
878
|
.option('--pr <url>', 'pr')
|
|
991
879
|
.option('--clean', 'start with a clean slate by clearing all existing comments')
|
|
992
880
|
.option('--keep-alive', 'keep server running even after browser disconnects')
|
|
@@ -996,7 +884,6 @@ describe('CLI index.ts', () => {
|
|
|
996
884
|
preferredPort: options.port,
|
|
997
885
|
host: options.host,
|
|
998
886
|
openBrowser: options.open,
|
|
999
|
-
mode: options.mode,
|
|
1000
887
|
clearComments: options.clean,
|
|
1001
888
|
keepAlive: options.keepAlive,
|
|
1002
889
|
});
|
|
@@ -1026,8 +913,6 @@ describe('CLI index.ts', () => {
|
|
|
1026
913
|
.option('--port <port>', 'port', parseInt)
|
|
1027
914
|
.option('--host <host>', 'host', '')
|
|
1028
915
|
.option('--no-open', 'no-open')
|
|
1029
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1030
|
-
.option('--tui', 'tui')
|
|
1031
916
|
.option('--pr <url>', 'pr')
|
|
1032
917
|
.option('--clean', 'start with a clean slate by clearing all existing comments')
|
|
1033
918
|
.option('--keep-alive', 'keep server running even after browser disconnects')
|
|
@@ -1037,7 +922,6 @@ describe('CLI index.ts', () => {
|
|
|
1037
922
|
preferredPort: options.port,
|
|
1038
923
|
host: options.host,
|
|
1039
924
|
openBrowser: options.open,
|
|
1040
|
-
mode: options.mode,
|
|
1041
925
|
clearComments: options.clean,
|
|
1042
926
|
keepAlive: options.keepAlive,
|
|
1043
927
|
});
|
|
@@ -1069,8 +953,6 @@ describe('CLI index.ts', () => {
|
|
|
1069
953
|
.option('--port <port>', 'port', parseInt)
|
|
1070
954
|
.option('--host <host>', 'host', '')
|
|
1071
955
|
.option('--no-open', 'no-open')
|
|
1072
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1073
|
-
.option('--tui', 'tui')
|
|
1074
956
|
.option('--pr <url>', 'pr')
|
|
1075
957
|
.action(async (commitish, _compareWith, options) => {
|
|
1076
958
|
const { url, isEmpty } = await startServer({
|
|
@@ -1078,7 +960,6 @@ describe('CLI index.ts', () => {
|
|
|
1078
960
|
preferredPort: options.port,
|
|
1079
961
|
host: options.host,
|
|
1080
962
|
openBrowser: options.open,
|
|
1081
|
-
mode: options.mode,
|
|
1082
963
|
});
|
|
1083
964
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
1084
965
|
console.log(`📋 Reviewing: ${commitish}`);
|
|
@@ -1111,8 +992,6 @@ describe('CLI index.ts', () => {
|
|
|
1111
992
|
.option('--port <port>', 'port', parseInt)
|
|
1112
993
|
.option('--host <host>', 'host', '')
|
|
1113
994
|
.option('--no-open', 'no-open')
|
|
1114
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1115
|
-
.option('--tui', 'tui')
|
|
1116
995
|
.option('--pr <url>', 'pr')
|
|
1117
996
|
.action(async (commitish, _compareWith, options) => {
|
|
1118
997
|
const { url, isEmpty } = await startServer({
|
|
@@ -1120,7 +999,6 @@ describe('CLI index.ts', () => {
|
|
|
1120
999
|
preferredPort: options.port,
|
|
1121
1000
|
host: options.host,
|
|
1122
1001
|
openBrowser: options.open,
|
|
1123
|
-
mode: options.mode,
|
|
1124
1002
|
});
|
|
1125
1003
|
console.log(`\n🚀 difit server started on ${url}`);
|
|
1126
1004
|
console.log(`📋 Reviewing: ${commitish}`);
|
|
@@ -1134,249 +1012,6 @@ describe('CLI index.ts', () => {
|
|
|
1134
1012
|
expect(console.log).toHaveBeenCalledWith(' Server is running at http://localhost:4966 if you want to check manually.\n');
|
|
1135
1013
|
});
|
|
1136
1014
|
});
|
|
1137
|
-
describe('Server mode option handling', () => {
|
|
1138
|
-
it('passes mode option to startServer', async () => {
|
|
1139
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1140
|
-
const program = new Command();
|
|
1141
|
-
program
|
|
1142
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1143
|
-
.argument('[compare-with]', 'compare-with')
|
|
1144
|
-
.option('--port <port>', 'port', parseInt)
|
|
1145
|
-
.option('--host <host>', 'host', '')
|
|
1146
|
-
.option('--no-open', 'no-open')
|
|
1147
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1148
|
-
.option('--tui', 'tui')
|
|
1149
|
-
.option('--pr <url>', 'pr')
|
|
1150
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1151
|
-
await startServer({
|
|
1152
|
-
selection: { targetCommitish: commitish, baseCommitish: commitish + '^' },
|
|
1153
|
-
preferredPort: options.port,
|
|
1154
|
-
host: options.host,
|
|
1155
|
-
openBrowser: options.open,
|
|
1156
|
-
mode: options.mode,
|
|
1157
|
-
});
|
|
1158
|
-
});
|
|
1159
|
-
await program.parseAsync(['--mode', 'unified'], { from: 'user' });
|
|
1160
|
-
expect(mockStartServer).toHaveBeenCalledWith(expect.objectContaining({
|
|
1161
|
-
mode: 'unified',
|
|
1162
|
-
}));
|
|
1163
|
-
});
|
|
1164
|
-
it('uses default mode when not specified', async () => {
|
|
1165
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1166
|
-
const program = new Command();
|
|
1167
|
-
program
|
|
1168
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1169
|
-
.argument('[compare-with]', 'compare-with')
|
|
1170
|
-
.option('--port <port>', 'port', parseInt)
|
|
1171
|
-
.option('--host <host>', 'host', '')
|
|
1172
|
-
.option('--no-open', 'no-open')
|
|
1173
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1174
|
-
.option('--tui', 'tui')
|
|
1175
|
-
.option('--pr <url>', 'pr')
|
|
1176
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1177
|
-
await startServer({
|
|
1178
|
-
selection: { targetCommitish: commitish, baseCommitish: commitish + '^' },
|
|
1179
|
-
preferredPort: options.port,
|
|
1180
|
-
host: options.host,
|
|
1181
|
-
openBrowser: options.open,
|
|
1182
|
-
mode: options.mode,
|
|
1183
|
-
});
|
|
1184
|
-
});
|
|
1185
|
-
await program.parseAsync([], { from: 'user' });
|
|
1186
|
-
expect(mockStartServer).toHaveBeenCalledWith(expect.objectContaining({
|
|
1187
|
-
mode: 'split',
|
|
1188
|
-
}));
|
|
1189
|
-
});
|
|
1190
|
-
});
|
|
1191
|
-
describe('TUI mode', () => {
|
|
1192
|
-
let mockRender;
|
|
1193
|
-
let mockTuiApp;
|
|
1194
|
-
const expectRenderedTuiProps = (props) => {
|
|
1195
|
-
expect(mockRender).toHaveBeenCalledTimes(1);
|
|
1196
|
-
expect(mockRender).toHaveBeenCalledWith({
|
|
1197
|
-
component: mockTuiApp,
|
|
1198
|
-
props,
|
|
1199
|
-
});
|
|
1200
|
-
};
|
|
1201
|
-
beforeEach(() => {
|
|
1202
|
-
mockRender = vi.fn();
|
|
1203
|
-
mockTuiApp = vi.fn();
|
|
1204
|
-
// Mock React.createElement for testing
|
|
1205
|
-
vi.spyOn(React, 'createElement').mockImplementation((component, props) => ({ component, props }));
|
|
1206
|
-
// Mock process.stdin.isTTY
|
|
1207
|
-
Object.defineProperty(process.stdin, 'isTTY', {
|
|
1208
|
-
value: true,
|
|
1209
|
-
configurable: true,
|
|
1210
|
-
});
|
|
1211
|
-
});
|
|
1212
|
-
afterEach(() => {
|
|
1213
|
-
vi.restoreAllMocks();
|
|
1214
|
-
});
|
|
1215
|
-
it('passes arguments to TUI app correctly', async () => {
|
|
1216
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1217
|
-
const program = new Command();
|
|
1218
|
-
program
|
|
1219
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1220
|
-
.argument('[compare-with]', 'compare-with')
|
|
1221
|
-
.option('--port <port>', 'port', parseInt)
|
|
1222
|
-
.option('--host <host>', 'host', '')
|
|
1223
|
-
.option('--no-open', 'no-open')
|
|
1224
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1225
|
-
.option('--tui', 'tui')
|
|
1226
|
-
.option('--pr <url>', 'pr')
|
|
1227
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1228
|
-
if (options.tui) {
|
|
1229
|
-
if (!process.stdin.isTTY) {
|
|
1230
|
-
console.error('Error: TUI mode requires an interactive terminal (TTY).');
|
|
1231
|
-
process.exit(1);
|
|
1232
|
-
}
|
|
1233
|
-
const render = mockRender;
|
|
1234
|
-
const TuiApp = mockTuiApp;
|
|
1235
|
-
render(React.createElement(TuiApp, {
|
|
1236
|
-
selection: { targetCommitish: commitish, baseCommitish: commitish + '^' },
|
|
1237
|
-
mode: options.mode,
|
|
1238
|
-
}));
|
|
1239
|
-
}
|
|
1240
|
-
});
|
|
1241
|
-
await program.parseAsync(['main', '--tui'], { from: 'user' });
|
|
1242
|
-
expectRenderedTuiProps({
|
|
1243
|
-
selection: { targetCommitish: 'main', baseCommitish: 'main^' },
|
|
1244
|
-
mode: 'split',
|
|
1245
|
-
});
|
|
1246
|
-
});
|
|
1247
|
-
it('passes context option to TUI app', async () => {
|
|
1248
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1249
|
-
const program = new Command();
|
|
1250
|
-
program
|
|
1251
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1252
|
-
.argument('[compare-with]', 'compare-with')
|
|
1253
|
-
.option('--port <port>', 'port', parseInt)
|
|
1254
|
-
.option('--host <host>', 'host', '')
|
|
1255
|
-
.option('--no-open', 'no-open')
|
|
1256
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1257
|
-
.option('--context <lines>', 'context', parseInt)
|
|
1258
|
-
.option('--tui', 'tui')
|
|
1259
|
-
.option('--pr <url>', 'pr')
|
|
1260
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1261
|
-
if (options.tui) {
|
|
1262
|
-
const render = mockRender;
|
|
1263
|
-
const TuiApp = mockTuiApp;
|
|
1264
|
-
render(React.createElement(TuiApp, {
|
|
1265
|
-
selection: { targetCommitish: commitish, baseCommitish: commitish + '^' },
|
|
1266
|
-
mode: options.mode,
|
|
1267
|
-
contextLines: options.context,
|
|
1268
|
-
}));
|
|
1269
|
-
}
|
|
1270
|
-
});
|
|
1271
|
-
await program.parseAsync(['--tui', '--context', '2'], { from: 'user' });
|
|
1272
|
-
expectRenderedTuiProps({
|
|
1273
|
-
selection: { targetCommitish: 'HEAD', baseCommitish: 'HEAD^' },
|
|
1274
|
-
mode: 'split',
|
|
1275
|
-
contextLines: 2,
|
|
1276
|
-
});
|
|
1277
|
-
});
|
|
1278
|
-
it('passes mode option to TUI app', async () => {
|
|
1279
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1280
|
-
const program = new Command();
|
|
1281
|
-
program
|
|
1282
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1283
|
-
.argument('[compare-with]', 'compare-with')
|
|
1284
|
-
.option('--port <port>', 'port', parseInt)
|
|
1285
|
-
.option('--host <host>', 'host', '')
|
|
1286
|
-
.option('--no-open', 'no-open')
|
|
1287
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1288
|
-
.option('--tui', 'tui')
|
|
1289
|
-
.option('--pr <url>', 'pr')
|
|
1290
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1291
|
-
if (options.tui) {
|
|
1292
|
-
if (!process.stdin.isTTY) {
|
|
1293
|
-
console.error('Error: TUI mode requires an interactive terminal (TTY).');
|
|
1294
|
-
process.exit(1);
|
|
1295
|
-
}
|
|
1296
|
-
const render = mockRender;
|
|
1297
|
-
const TuiApp = mockTuiApp;
|
|
1298
|
-
render(React.createElement(TuiApp, {
|
|
1299
|
-
selection: { targetCommitish: commitish, baseCommitish: commitish + '^' },
|
|
1300
|
-
mode: options.mode,
|
|
1301
|
-
}));
|
|
1302
|
-
}
|
|
1303
|
-
});
|
|
1304
|
-
await program.parseAsync(['--tui', '--mode', 'unified'], { from: 'user' });
|
|
1305
|
-
expectRenderedTuiProps({
|
|
1306
|
-
selection: { targetCommitish: 'HEAD', baseCommitish: 'HEAD^' },
|
|
1307
|
-
mode: 'unified',
|
|
1308
|
-
});
|
|
1309
|
-
});
|
|
1310
|
-
it('handles special arguments with TUI mode', async () => {
|
|
1311
|
-
mockFindUntrackedFiles.mockResolvedValue([]);
|
|
1312
|
-
const program = new Command();
|
|
1313
|
-
program
|
|
1314
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1315
|
-
.argument('[compare-with]', 'compare-with')
|
|
1316
|
-
.option('--port <port>', 'port', parseInt)
|
|
1317
|
-
.option('--host <host>', 'host', '')
|
|
1318
|
-
.option('--no-open', 'no-open')
|
|
1319
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1320
|
-
.option('--tui', 'tui')
|
|
1321
|
-
.option('--pr <url>', 'pr')
|
|
1322
|
-
.action(async (commitish, _compareWith, options) => {
|
|
1323
|
-
if (options.tui) {
|
|
1324
|
-
const render = mockRender;
|
|
1325
|
-
const TuiApp = mockTuiApp;
|
|
1326
|
-
let targetCommitish = commitish;
|
|
1327
|
-
let baseCommitish;
|
|
1328
|
-
if (commitish === 'working') {
|
|
1329
|
-
baseCommitish = 'staged';
|
|
1330
|
-
}
|
|
1331
|
-
else if (commitish === 'staged' || commitish === '.') {
|
|
1332
|
-
baseCommitish = 'HEAD';
|
|
1333
|
-
}
|
|
1334
|
-
else {
|
|
1335
|
-
baseCommitish = commitish + '^';
|
|
1336
|
-
}
|
|
1337
|
-
render(React.createElement(TuiApp, {
|
|
1338
|
-
selection: { targetCommitish, baseCommitish },
|
|
1339
|
-
mode: options.mode,
|
|
1340
|
-
}));
|
|
1341
|
-
}
|
|
1342
|
-
});
|
|
1343
|
-
await program.parseAsync(['working', '--tui', '--mode', 'unified'], { from: 'user' });
|
|
1344
|
-
expectRenderedTuiProps({
|
|
1345
|
-
selection: { targetCommitish: 'working', baseCommitish: 'staged' },
|
|
1346
|
-
mode: 'unified',
|
|
1347
|
-
});
|
|
1348
|
-
});
|
|
1349
|
-
it('rejects TUI mode in non-TTY environment', async () => {
|
|
1350
|
-
// Mock non-TTY environment
|
|
1351
|
-
Object.defineProperty(process.stdin, 'isTTY', {
|
|
1352
|
-
value: false,
|
|
1353
|
-
configurable: true,
|
|
1354
|
-
});
|
|
1355
|
-
const program = new Command();
|
|
1356
|
-
program
|
|
1357
|
-
.argument('[commit-ish]', 'commit-ish', 'HEAD')
|
|
1358
|
-
.argument('[compare-with]', 'compare-with')
|
|
1359
|
-
.option('--port <port>', 'port', parseInt)
|
|
1360
|
-
.option('--host <host>', 'host', '')
|
|
1361
|
-
.option('--no-open', 'no-open')
|
|
1362
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1363
|
-
.option('--tui', 'tui')
|
|
1364
|
-
.option('--pr <url>', 'pr')
|
|
1365
|
-
.action(async (_commitish, _compareWith, options) => {
|
|
1366
|
-
if (options.tui) {
|
|
1367
|
-
if (!process.stdin.isTTY) {
|
|
1368
|
-
console.error('Error: TUI mode requires an interactive terminal (TTY).');
|
|
1369
|
-
console.error('Try running the command directly in your terminal without piping.');
|
|
1370
|
-
process.exit(1);
|
|
1371
|
-
}
|
|
1372
|
-
}
|
|
1373
|
-
});
|
|
1374
|
-
await program.parseAsync(['--tui'], { from: 'user' });
|
|
1375
|
-
expect(console.error).toHaveBeenCalledWith('Error: TUI mode requires an interactive terminal (TTY).');
|
|
1376
|
-
expect(console.error).toHaveBeenCalledWith('Try running the command directly in your terminal without piping.');
|
|
1377
|
-
expect(process.exit).toHaveBeenCalledWith(1);
|
|
1378
|
-
});
|
|
1379
|
-
});
|
|
1380
1015
|
describe('Diff mode determination', () => {
|
|
1381
1016
|
const testCases = [
|
|
1382
1017
|
{
|
|
@@ -1420,8 +1055,6 @@ describe('CLI index.ts', () => {
|
|
|
1420
1055
|
.option('--port <port>', 'port', parseInt)
|
|
1421
1056
|
.option('--host <host>', 'host', '')
|
|
1422
1057
|
.option('--no-open', 'no-open')
|
|
1423
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1424
|
-
.option('--tui', 'tui')
|
|
1425
1058
|
.option('--pr <url>', 'pr')
|
|
1426
1059
|
.action(async (commitish, compareWith, options) => {
|
|
1427
1060
|
// Simulate determineDiffMode function behavior
|
|
@@ -1449,7 +1082,6 @@ describe('CLI index.ts', () => {
|
|
|
1449
1082
|
preferredPort: options.port,
|
|
1450
1083
|
host: options.host,
|
|
1451
1084
|
openBrowser: options.open,
|
|
1452
|
-
mode: options.mode,
|
|
1453
1085
|
diffMode,
|
|
1454
1086
|
});
|
|
1455
1087
|
});
|
|
@@ -1468,8 +1100,6 @@ describe('CLI index.ts', () => {
|
|
|
1468
1100
|
.option('--port <port>', 'port', parseInt)
|
|
1469
1101
|
.option('--host <host>', 'host', '')
|
|
1470
1102
|
.option('--no-open', 'no-open')
|
|
1471
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1472
|
-
.option('--tui', 'tui')
|
|
1473
1103
|
.option('--pr <url>', 'pr')
|
|
1474
1104
|
.action(async (commitish, compareWith, options) => {
|
|
1475
1105
|
// Simulate determineDiffMode function behavior
|
|
@@ -1497,7 +1127,6 @@ describe('CLI index.ts', () => {
|
|
|
1497
1127
|
preferredPort: options.port,
|
|
1498
1128
|
host: options.host,
|
|
1499
1129
|
openBrowser: options.open,
|
|
1500
|
-
mode: options.mode,
|
|
1501
1130
|
diffMode,
|
|
1502
1131
|
});
|
|
1503
1132
|
});
|
|
@@ -1516,8 +1145,6 @@ describe('CLI index.ts', () => {
|
|
|
1516
1145
|
.option('--port <port>', 'port', parseInt)
|
|
1517
1146
|
.option('--host <host>', 'host', '')
|
|
1518
1147
|
.option('--no-open', 'no-open')
|
|
1519
|
-
.option('--mode <mode>', 'mode', normalizeDiffViewMode, DEFAULT_DIFF_VIEW_MODE)
|
|
1520
|
-
.option('--tui', 'tui')
|
|
1521
1148
|
.option('--pr <url>', 'pr')
|
|
1522
1149
|
.action(async (commitish, compareWith, options) => {
|
|
1523
1150
|
// Simulate determineDiffMode function behavior with the fix
|
|
@@ -1545,7 +1172,6 @@ describe('CLI index.ts', () => {
|
|
|
1545
1172
|
preferredPort: options.port,
|
|
1546
1173
|
host: options.host,
|
|
1547
1174
|
openBrowser: options.open,
|
|
1548
|
-
mode: options.mode,
|
|
1549
1175
|
diffMode,
|
|
1550
1176
|
});
|
|
1551
1177
|
});
|