@sumicom/quicksave 0.6.1 → 0.6.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/dist/ai/cardBuilder.d.ts +14 -3
- package/dist/ai/cardBuilder.d.ts.map +1 -1
- package/dist/ai/cardBuilder.js +217 -66
- package/dist/ai/cardBuilder.js.map +1 -1
- package/dist/ai/claudeCliProvider.d.ts +2 -0
- package/dist/ai/claudeCliProvider.d.ts.map +1 -1
- package/dist/ai/claudeCliProvider.js +133 -23
- package/dist/ai/claudeCliProvider.js.map +1 -1
- package/dist/ai/claudeCodeProvider.d.ts +18 -0
- package/dist/ai/claudeCodeProvider.d.ts.map +1 -0
- package/dist/ai/claudeCodeProvider.js +30 -0
- package/dist/ai/claudeCodeProvider.js.map +1 -0
- package/dist/ai/claudeSdkProvider.d.ts +2 -0
- package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
- package/dist/ai/claudeSdkProvider.js +13 -3
- package/dist/ai/claudeSdkProvider.js.map +1 -1
- package/dist/ai/codexMcpProvider.d.ts +15 -0
- package/dist/ai/codexMcpProvider.d.ts.map +1 -0
- package/dist/ai/codexMcpProvider.js +442 -0
- package/dist/ai/codexMcpProvider.js.map +1 -0
- package/dist/ai/codexSdkProvider.d.ts +35 -0
- package/dist/ai/codexSdkProvider.d.ts.map +1 -0
- package/dist/ai/codexSdkProvider.js +422 -0
- package/dist/ai/codexSdkProvider.js.map +1 -0
- package/dist/ai/debugLogger.d.ts +24 -0
- package/dist/ai/debugLogger.d.ts.map +1 -0
- package/dist/ai/debugLogger.js +54 -0
- package/dist/ai/debugLogger.js.map +1 -0
- package/dist/ai/provider.d.ts +4 -1
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/sessionManager.d.ts +13 -8
- package/dist/ai/sessionManager.d.ts.map +1 -1
- package/dist/ai/sessionManager.js +150 -28
- package/dist/ai/sessionManager.js.map +1 -1
- package/dist/ai/sessionRegistry.d.ts +2 -0
- package/dist/ai/sessionRegistry.d.ts.map +1 -1
- package/dist/ai/sessionRegistry.js +4 -0
- package/dist/ai/sessionRegistry.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -10
- package/dist/config.js.map +1 -1
- package/dist/connection/connection.d.ts +1 -0
- package/dist/connection/connection.d.ts.map +1 -1
- package/dist/connection/connection.js +19 -1
- package/dist/connection/connection.js.map +1 -1
- package/dist/git/operations.d.ts +20 -0
- package/dist/git/operations.d.ts.map +1 -1
- package/dist/git/operations.js +52 -0
- package/dist/git/operations.js.map +1 -1
- package/dist/handlers/messageHandler.d.ts +18 -0
- package/dist/handlers/messageHandler.d.ts.map +1 -1
- package/dist/handlers/messageHandler.js +420 -20
- package/dist/handlers/messageHandler.js.map +1 -1
- package/dist/index.js +22 -2
- package/dist/index.js.map +1 -1
- package/dist/service/debugHttpServer.d.ts +27 -0
- package/dist/service/debugHttpServer.d.ts.map +1 -0
- package/dist/service/debugHttpServer.js +189 -0
- package/dist/service/debugHttpServer.js.map +1 -0
- package/dist/service/ipcClient.js +1 -1
- package/dist/service/run.d.ts.map +1 -1
- package/dist/service/run.js +21 -1
- package/dist/service/run.js.map +1 -1
- package/dist/service/singleton.d.ts +18 -1
- package/dist/service/singleton.d.ts.map +1 -1
- package/dist/service/singleton.js +43 -18
- package/dist/service/singleton.js.map +1 -1
- package/dist/service/types.js +1 -1
- package/package.json +5 -3
- package/dist/ai/asyncQueue.test.d.ts +0 -2
- package/dist/ai/asyncQueue.test.d.ts.map +0 -1
- package/dist/ai/asyncQueue.test.js +0 -56
- package/dist/ai/asyncQueue.test.js.map +0 -1
- package/dist/ai/sessionStore.test.d.ts +0 -2
- package/dist/ai/sessionStore.test.d.ts.map +0 -1
- package/dist/ai/sessionStore.test.js +0 -99
- package/dist/ai/sessionStore.test.js.map +0 -1
- package/dist/connection/pubsub.test.d.ts +0 -2
- package/dist/connection/pubsub.test.d.ts.map +0 -1
- package/dist/connection/pubsub.test.js +0 -96
- package/dist/connection/pubsub.test.js.map +0 -1
- package/dist/git/operations.test.d.ts +0 -2
- package/dist/git/operations.test.d.ts.map +0 -1
- package/dist/git/operations.test.js +0 -300
- package/dist/git/operations.test.js.map +0 -1
- package/dist/handlers/messageHandler.test.d.ts +0 -2
- package/dist/handlers/messageHandler.test.d.ts.map +0 -1
- package/dist/handlers/messageHandler.test.js +0 -361
- package/dist/handlers/messageHandler.test.js.map +0 -1
- package/dist/service/ipc.test.d.ts +0 -2
- package/dist/service/ipc.test.d.ts.map +0 -1
- package/dist/service/ipc.test.js +0 -140
- package/dist/service/ipc.test.js.map +0 -1
- package/dist/service/singleton.test.d.ts +0 -2
- package/dist/service/singleton.test.d.ts.map +0 -1
- package/dist/service/singleton.test.js +0 -39
- package/dist/service/singleton.test.js.map +0 -1
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { PubSub, sessionTopic, BROADCAST_TOPIC } from './pubsub.js';
|
|
3
|
-
describe('PubSub', () => {
|
|
4
|
-
it('subscribe returns true for new, false for duplicate', () => {
|
|
5
|
-
const ps = new PubSub();
|
|
6
|
-
expect(ps.subscribe('peer1', 'topicA')).toBe(true);
|
|
7
|
-
expect(ps.subscribe('peer1', 'topicA')).toBe(false);
|
|
8
|
-
});
|
|
9
|
-
it('subscribers returns all peers on a topic', () => {
|
|
10
|
-
const ps = new PubSub();
|
|
11
|
-
ps.subscribe('peer1', 'topicA');
|
|
12
|
-
ps.subscribe('peer2', 'topicA');
|
|
13
|
-
ps.subscribe('peer3', 'topicB');
|
|
14
|
-
const subs = ps.subscribers('topicA');
|
|
15
|
-
expect(subs.size).toBe(2);
|
|
16
|
-
expect(subs.has('peer1')).toBe(true);
|
|
17
|
-
expect(subs.has('peer2')).toBe(true);
|
|
18
|
-
expect(subs.has('peer3')).toBe(false);
|
|
19
|
-
});
|
|
20
|
-
it('subscribers returns empty set for unknown topic', () => {
|
|
21
|
-
const ps = new PubSub();
|
|
22
|
-
expect(ps.subscribers('nonexistent').size).toBe(0);
|
|
23
|
-
});
|
|
24
|
-
it('unsubscribe removes peer from topic', () => {
|
|
25
|
-
const ps = new PubSub();
|
|
26
|
-
ps.subscribe('peer1', 'topicA');
|
|
27
|
-
ps.subscribe('peer1', 'topicB');
|
|
28
|
-
ps.unsubscribe('peer1', 'topicA');
|
|
29
|
-
expect(ps.subscribers('topicA').has('peer1')).toBe(false);
|
|
30
|
-
expect(ps.subscribers('topicB').has('peer1')).toBe(true);
|
|
31
|
-
});
|
|
32
|
-
it('unsubscribe cleans up empty topic sets', () => {
|
|
33
|
-
const ps = new PubSub();
|
|
34
|
-
ps.subscribe('peer1', 'topicA');
|
|
35
|
-
ps.unsubscribe('peer1', 'topicA');
|
|
36
|
-
expect(ps.hasSubscribers('topicA')).toBe(false);
|
|
37
|
-
});
|
|
38
|
-
it('unsubscribeAll removes peer from all topics', () => {
|
|
39
|
-
const ps = new PubSub();
|
|
40
|
-
ps.subscribe('peer1', 'topicA');
|
|
41
|
-
ps.subscribe('peer1', 'topicB');
|
|
42
|
-
ps.subscribe('peer2', 'topicA');
|
|
43
|
-
const removed = ps.unsubscribeAll('peer1');
|
|
44
|
-
expect(removed).toEqual(new Set(['topicA', 'topicB']));
|
|
45
|
-
expect(ps.subscribers('topicA').has('peer1')).toBe(false);
|
|
46
|
-
expect(ps.subscribers('topicA').has('peer2')).toBe(true);
|
|
47
|
-
expect(ps.subscribers('topicB').size).toBe(0);
|
|
48
|
-
expect(ps.topicsOf('peer1').size).toBe(0);
|
|
49
|
-
});
|
|
50
|
-
it('unsubscribeAll returns empty set for unknown peer', () => {
|
|
51
|
-
const ps = new PubSub();
|
|
52
|
-
expect(ps.unsubscribeAll('unknown')).toEqual(new Set());
|
|
53
|
-
});
|
|
54
|
-
it('topicsOf returns all topics for a peer', () => {
|
|
55
|
-
const ps = new PubSub();
|
|
56
|
-
ps.subscribe('peer1', 'topicA');
|
|
57
|
-
ps.subscribe('peer1', 'topicB');
|
|
58
|
-
const topics = ps.topicsOf('peer1');
|
|
59
|
-
expect(topics.size).toBe(2);
|
|
60
|
-
expect(topics.has('topicA')).toBe(true);
|
|
61
|
-
expect(topics.has('topicB')).toBe(true);
|
|
62
|
-
});
|
|
63
|
-
it('hasSubscribers reflects current state', () => {
|
|
64
|
-
const ps = new PubSub();
|
|
65
|
-
expect(ps.hasSubscribers('topicA')).toBe(false);
|
|
66
|
-
ps.subscribe('peer1', 'topicA');
|
|
67
|
-
expect(ps.hasSubscribers('topicA')).toBe(true);
|
|
68
|
-
ps.unsubscribe('peer1', 'topicA');
|
|
69
|
-
expect(ps.hasSubscribers('topicA')).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
it('multiple peers on same session topic', () => {
|
|
72
|
-
const ps = new PubSub();
|
|
73
|
-
const topic = sessionTopic('sess-123');
|
|
74
|
-
ps.subscribe('tab1', topic);
|
|
75
|
-
ps.subscribe('tab2', topic);
|
|
76
|
-
expect(ps.subscribers(topic).size).toBe(2);
|
|
77
|
-
ps.unsubscribeAll('tab1');
|
|
78
|
-
expect(ps.subscribers(topic).size).toBe(1);
|
|
79
|
-
expect(ps.subscribers(topic).has('tab2')).toBe(true);
|
|
80
|
-
});
|
|
81
|
-
it('peer subscribed to session + broadcast', () => {
|
|
82
|
-
const ps = new PubSub();
|
|
83
|
-
ps.subscribe('peer1', BROADCAST_TOPIC);
|
|
84
|
-
ps.subscribe('peer1', sessionTopic('sess-1'));
|
|
85
|
-
expect(ps.topicsOf('peer1').size).toBe(2);
|
|
86
|
-
ps.unsubscribe('peer1', sessionTopic('sess-1'));
|
|
87
|
-
expect(ps.topicsOf('peer1').size).toBe(1);
|
|
88
|
-
expect(ps.subscribers(BROADCAST_TOPIC).has('peer1')).toBe(true);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe('sessionTopic', () => {
|
|
92
|
-
it('formats correctly', () => {
|
|
93
|
-
expect(sessionTopic('abc-123')).toBe('session:abc-123');
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=pubsub.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.test.js","sourceRoot":"","sources":["../../src/connection/pubsub.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations.test.d.ts","sourceRoot":"","sources":["../../src/git/operations.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { GitOperations } from './operations.js';
|
|
3
|
-
import { mkdir, writeFile, rm, readFile } from 'fs/promises';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import { tmpdir } from 'os';
|
|
6
|
-
import { simpleGit } from 'simple-git';
|
|
7
|
-
describe('GitOperations', () => {
|
|
8
|
-
let testRepoPath;
|
|
9
|
-
let gitOps;
|
|
10
|
-
let defaultBranch;
|
|
11
|
-
beforeEach(async () => {
|
|
12
|
-
// Create temporary test repo
|
|
13
|
-
testRepoPath = join(tmpdir(), `quicksave-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
14
|
-
await mkdir(testRepoPath, { recursive: true });
|
|
15
|
-
// Initialize git repo
|
|
16
|
-
const git = simpleGit(testRepoPath);
|
|
17
|
-
await git.init();
|
|
18
|
-
await git.addConfig('user.email', 'test@test.com');
|
|
19
|
-
await git.addConfig('user.name', 'Test User');
|
|
20
|
-
// Create initial commit
|
|
21
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Test Repo\n');
|
|
22
|
-
await git.add('README.md');
|
|
23
|
-
await git.commit('Initial commit');
|
|
24
|
-
// Get the default branch name (could be 'main' or 'master' depending on git config)
|
|
25
|
-
const status = await git.status();
|
|
26
|
-
defaultBranch = status.current || 'main';
|
|
27
|
-
gitOps = new GitOperations(testRepoPath);
|
|
28
|
-
});
|
|
29
|
-
afterEach(async () => {
|
|
30
|
-
// Cleanup
|
|
31
|
-
try {
|
|
32
|
-
await rm(testRepoPath, { recursive: true, force: true });
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
// Ignore cleanup errors
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
describe('isValidRepo', () => {
|
|
39
|
-
it('should return true for valid git repo', async () => {
|
|
40
|
-
const isValid = await gitOps.isValidRepo();
|
|
41
|
-
expect(isValid).toBe(true);
|
|
42
|
-
});
|
|
43
|
-
it('should return false for non-git directory', async () => {
|
|
44
|
-
const nonGitPath = join(tmpdir(), `non-git-${Date.now()}`);
|
|
45
|
-
await mkdir(nonGitPath, { recursive: true });
|
|
46
|
-
const ops = new GitOperations(nonGitPath);
|
|
47
|
-
const isValid = await ops.isValidRepo();
|
|
48
|
-
expect(isValid).toBe(false);
|
|
49
|
-
await rm(nonGitPath, { recursive: true, force: true });
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
describe('getStatus', () => {
|
|
53
|
-
it('should return clean status for unchanged repo', async () => {
|
|
54
|
-
const status = await gitOps.getStatus();
|
|
55
|
-
expect(status.branch).toBe(defaultBranch);
|
|
56
|
-
expect(status.staged).toHaveLength(0);
|
|
57
|
-
expect(status.unstaged).toHaveLength(0);
|
|
58
|
-
expect(status.untracked).toHaveLength(0);
|
|
59
|
-
});
|
|
60
|
-
it('should detect untracked files', async () => {
|
|
61
|
-
await writeFile(join(testRepoPath, 'newfile.txt'), 'content');
|
|
62
|
-
const status = await gitOps.getStatus();
|
|
63
|
-
expect(status.untracked).toContain('newfile.txt');
|
|
64
|
-
});
|
|
65
|
-
it('should detect modified files', async () => {
|
|
66
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Modified\n');
|
|
67
|
-
const status = await gitOps.getStatus();
|
|
68
|
-
expect(status.unstaged).toHaveLength(1);
|
|
69
|
-
expect(status.unstaged[0].path).toBe('README.md');
|
|
70
|
-
expect(status.unstaged[0].status).toBe('modified');
|
|
71
|
-
});
|
|
72
|
-
it('should detect staged files', async () => {
|
|
73
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Modified\n');
|
|
74
|
-
await simpleGit(testRepoPath).add('README.md');
|
|
75
|
-
const status = await gitOps.getStatus();
|
|
76
|
-
expect(status.staged).toHaveLength(1);
|
|
77
|
-
expect(status.staged[0].path).toBe('README.md');
|
|
78
|
-
});
|
|
79
|
-
it('should detect new staged files as added', async () => {
|
|
80
|
-
await writeFile(join(testRepoPath, 'newfile.txt'), 'content');
|
|
81
|
-
await simpleGit(testRepoPath).add('newfile.txt');
|
|
82
|
-
const status = await gitOps.getStatus();
|
|
83
|
-
expect(status.staged).toHaveLength(1);
|
|
84
|
-
expect(status.staged[0].path).toBe('newfile.txt');
|
|
85
|
-
expect(status.staged[0].status).toBe('added');
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('stage', () => {
|
|
89
|
-
it('should stage a single file', async () => {
|
|
90
|
-
await writeFile(join(testRepoPath, 'file.txt'), 'content');
|
|
91
|
-
await gitOps.stage(['file.txt']);
|
|
92
|
-
const status = await gitOps.getStatus();
|
|
93
|
-
expect(status.staged.some(f => f.path === 'file.txt')).toBe(true);
|
|
94
|
-
expect(status.untracked).not.toContain('file.txt');
|
|
95
|
-
});
|
|
96
|
-
it('should stage multiple files', async () => {
|
|
97
|
-
await writeFile(join(testRepoPath, 'file1.txt'), 'content1');
|
|
98
|
-
await writeFile(join(testRepoPath, 'file2.txt'), 'content2');
|
|
99
|
-
await gitOps.stage(['file1.txt', 'file2.txt']);
|
|
100
|
-
const status = await gitOps.getStatus();
|
|
101
|
-
expect(status.staged).toHaveLength(2);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
describe('unstage', () => {
|
|
105
|
-
it('should unstage a staged file', async () => {
|
|
106
|
-
await writeFile(join(testRepoPath, 'file.txt'), 'content');
|
|
107
|
-
await simpleGit(testRepoPath).add('file.txt');
|
|
108
|
-
await gitOps.unstage(['file.txt']);
|
|
109
|
-
const status = await gitOps.getStatus();
|
|
110
|
-
expect(status.staged).toHaveLength(0);
|
|
111
|
-
expect(status.untracked).toContain('file.txt');
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
describe('commit', () => {
|
|
115
|
-
it('should create a commit with message', async () => {
|
|
116
|
-
await writeFile(join(testRepoPath, 'file.txt'), 'content');
|
|
117
|
-
await simpleGit(testRepoPath).add('file.txt');
|
|
118
|
-
const hash = await gitOps.commit('Test commit');
|
|
119
|
-
expect(hash).toBeDefined();
|
|
120
|
-
expect(typeof hash).toBe('string');
|
|
121
|
-
const log = await gitOps.getLog(1);
|
|
122
|
-
expect(log[0].message).toBe('Test commit');
|
|
123
|
-
});
|
|
124
|
-
it('should create a commit with message and description', async () => {
|
|
125
|
-
await writeFile(join(testRepoPath, 'file.txt'), 'content');
|
|
126
|
-
await simpleGit(testRepoPath).add('file.txt');
|
|
127
|
-
await gitOps.commit('Title', 'Description body');
|
|
128
|
-
const log = await gitOps.getLog(1);
|
|
129
|
-
expect(log[0].message).toContain('Title');
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
describe('getLog', () => {
|
|
133
|
-
it('should return commit history', async () => {
|
|
134
|
-
const log = await gitOps.getLog();
|
|
135
|
-
expect(log).toHaveLength(1);
|
|
136
|
-
expect(log[0].message).toBe('Initial commit');
|
|
137
|
-
expect(log[0].author).toBe('Test User');
|
|
138
|
-
expect(log[0].email).toBe('test@test.com');
|
|
139
|
-
});
|
|
140
|
-
it('should return limited commits', async () => {
|
|
141
|
-
// Create more commits
|
|
142
|
-
for (let i = 0; i < 5; i++) {
|
|
143
|
-
await writeFile(join(testRepoPath, `file${i}.txt`), `content${i}`);
|
|
144
|
-
await simpleGit(testRepoPath).add(`file${i}.txt`);
|
|
145
|
-
await simpleGit(testRepoPath).commit(`Commit ${i}`);
|
|
146
|
-
}
|
|
147
|
-
const log = await gitOps.getLog(3);
|
|
148
|
-
expect(log).toHaveLength(3);
|
|
149
|
-
});
|
|
150
|
-
it('should have proper commit structure', async () => {
|
|
151
|
-
const log = await gitOps.getLog(1);
|
|
152
|
-
const commit = log[0];
|
|
153
|
-
expect(commit.hash).toMatch(/^[a-f0-9]{40}$/);
|
|
154
|
-
expect(commit.shortHash).toHaveLength(7);
|
|
155
|
-
expect(commit.shortHash).toBe(commit.hash.slice(0, 7));
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
describe('getBranches', () => {
|
|
159
|
-
it('should return current branch', async () => {
|
|
160
|
-
const { branches, current } = await gitOps.getBranches();
|
|
161
|
-
expect(current).toBe(defaultBranch);
|
|
162
|
-
expect(branches.some(b => b.name === defaultBranch && b.current)).toBe(true);
|
|
163
|
-
});
|
|
164
|
-
it('should list multiple branches', async () => {
|
|
165
|
-
await simpleGit(testRepoPath).checkoutLocalBranch('feature');
|
|
166
|
-
const { branches } = await gitOps.getBranches();
|
|
167
|
-
expect(branches.some(b => b.name === defaultBranch)).toBe(true);
|
|
168
|
-
expect(branches.some(b => b.name === 'feature')).toBe(true);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('checkout', () => {
|
|
172
|
-
it('should checkout existing branch', async () => {
|
|
173
|
-
await simpleGit(testRepoPath).checkoutLocalBranch('feature');
|
|
174
|
-
// Go back to default branch
|
|
175
|
-
await gitOps.checkout(defaultBranch);
|
|
176
|
-
let { current } = await gitOps.getBranches();
|
|
177
|
-
expect(current).toBe(defaultBranch);
|
|
178
|
-
// Now checkout feature again
|
|
179
|
-
await gitOps.checkout('feature');
|
|
180
|
-
({ current } = await gitOps.getBranches());
|
|
181
|
-
expect(current).toBe('feature');
|
|
182
|
-
});
|
|
183
|
-
it('should create and checkout new branch', async () => {
|
|
184
|
-
await gitOps.checkout('new-branch', true);
|
|
185
|
-
const { current } = await gitOps.getBranches();
|
|
186
|
-
expect(current).toBe('new-branch');
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('discard', () => {
|
|
190
|
-
it('should discard changes in modified file', async () => {
|
|
191
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Modified\n');
|
|
192
|
-
let status = await gitOps.getStatus();
|
|
193
|
-
expect(status.unstaged).toHaveLength(1);
|
|
194
|
-
await gitOps.discard(['README.md']);
|
|
195
|
-
status = await gitOps.getStatus();
|
|
196
|
-
expect(status.unstaged).toHaveLength(0);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe('untrack', () => {
|
|
200
|
-
it('should remove a tracked file from the index but keep it on disk', async () => {
|
|
201
|
-
await gitOps.untrack(['README.md']);
|
|
202
|
-
const status = await gitOps.getStatus();
|
|
203
|
-
expect(status.untracked).toContain('README.md');
|
|
204
|
-
expect(status.staged.some(f => f.path === 'README.md' && f.status === 'deleted')).toBe(true);
|
|
205
|
-
});
|
|
206
|
-
it('should untrack multiple files', async () => {
|
|
207
|
-
await writeFile(join(testRepoPath, 'tracked.txt'), 'content');
|
|
208
|
-
await simpleGit(testRepoPath).add('tracked.txt');
|
|
209
|
-
await simpleGit(testRepoPath).commit('Add tracked.txt');
|
|
210
|
-
await gitOps.untrack(['README.md', 'tracked.txt']);
|
|
211
|
-
const status = await gitOps.getStatus();
|
|
212
|
-
expect(status.untracked).toContain('README.md');
|
|
213
|
-
expect(status.untracked).toContain('tracked.txt');
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
describe('readGitignore', () => {
|
|
217
|
-
it('should return empty string and exists=false when .gitignore does not exist', async () => {
|
|
218
|
-
const result = await gitOps.readGitignore();
|
|
219
|
-
expect(result.content).toBe('');
|
|
220
|
-
expect(result.exists).toBe(false);
|
|
221
|
-
});
|
|
222
|
-
it('should return content and exists=true when .gitignore exists', async () => {
|
|
223
|
-
await writeFile(join(testRepoPath, '.gitignore'), 'node_modules/\n*.log\n');
|
|
224
|
-
const result = await gitOps.readGitignore();
|
|
225
|
-
expect(result.content).toBe('node_modules/\n*.log\n');
|
|
226
|
-
expect(result.exists).toBe(true);
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
describe('writeGitignore', () => {
|
|
230
|
-
it('should create .gitignore if it does not exist', async () => {
|
|
231
|
-
await gitOps.writeGitignore('node_modules/\n');
|
|
232
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
233
|
-
expect(content).toBe('node_modules/\n');
|
|
234
|
-
});
|
|
235
|
-
it('should overwrite existing .gitignore content', async () => {
|
|
236
|
-
await writeFile(join(testRepoPath, '.gitignore'), 'old\n');
|
|
237
|
-
await gitOps.writeGitignore('new\n');
|
|
238
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
239
|
-
expect(content).toBe('new\n');
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
describe('addToGitignore', () => {
|
|
243
|
-
it('should create .gitignore and add pattern if file does not exist', async () => {
|
|
244
|
-
await gitOps.addToGitignore('node_modules/');
|
|
245
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
246
|
-
expect(content).toBe('node_modules/\n');
|
|
247
|
-
});
|
|
248
|
-
it('should append pattern to existing .gitignore', async () => {
|
|
249
|
-
await writeFile(join(testRepoPath, '.gitignore'), 'node_modules/\n');
|
|
250
|
-
await gitOps.addToGitignore('*.log');
|
|
251
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
252
|
-
expect(content).toBe('node_modules/\n*.log\n');
|
|
253
|
-
});
|
|
254
|
-
it('should ensure newline before appending if missing', async () => {
|
|
255
|
-
await writeFile(join(testRepoPath, '.gitignore'), 'node_modules/');
|
|
256
|
-
await gitOps.addToGitignore('*.log');
|
|
257
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
258
|
-
expect(content).toBe('node_modules/\n*.log\n');
|
|
259
|
-
});
|
|
260
|
-
it('should not duplicate an existing pattern', async () => {
|
|
261
|
-
await writeFile(join(testRepoPath, '.gitignore'), 'node_modules/\n');
|
|
262
|
-
await gitOps.addToGitignore('node_modules/');
|
|
263
|
-
const content = await readFile(join(testRepoPath, '.gitignore'), 'utf-8');
|
|
264
|
-
expect(content).toBe('node_modules/\n');
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
describe('getDiff', () => {
|
|
268
|
-
it('should return diff for modified file', async () => {
|
|
269
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Modified Content\n');
|
|
270
|
-
const diff = await gitOps.getDiff('README.md');
|
|
271
|
-
expect(diff.path).toBe('README.md');
|
|
272
|
-
expect(diff.isBinary).toBe(false);
|
|
273
|
-
expect(diff.hunks.length).toBeGreaterThan(0);
|
|
274
|
-
});
|
|
275
|
-
it('should return diff for staged file', async () => {
|
|
276
|
-
await writeFile(join(testRepoPath, 'README.md'), '# Staged Change\n');
|
|
277
|
-
await simpleGit(testRepoPath).add('README.md');
|
|
278
|
-
const diff = await gitOps.getDiff('README.md', true);
|
|
279
|
-
expect(diff.path).toBe('README.md');
|
|
280
|
-
expect(diff.hunks.length).toBeGreaterThan(0);
|
|
281
|
-
});
|
|
282
|
-
it('should parse hunk headers correctly', async () => {
|
|
283
|
-
// Create a file with multiple lines
|
|
284
|
-
await writeFile(join(testRepoPath, 'multi.txt'), 'line1\nline2\nline3\n');
|
|
285
|
-
await simpleGit(testRepoPath).add('multi.txt');
|
|
286
|
-
await simpleGit(testRepoPath).commit('Add multi.txt');
|
|
287
|
-
// Modify middle line
|
|
288
|
-
await writeFile(join(testRepoPath, 'multi.txt'), 'line1\nmodified\nline3\n');
|
|
289
|
-
const diff = await gitOps.getDiff('multi.txt');
|
|
290
|
-
expect(diff.hunks).toHaveLength(1);
|
|
291
|
-
expect(diff.hunks[0].content).toContain('-line2');
|
|
292
|
-
expect(diff.hunks[0].content).toContain('+modified');
|
|
293
|
-
});
|
|
294
|
-
it('should return empty hunks for unchanged file', async () => {
|
|
295
|
-
const diff = await gitOps.getDiff('README.md');
|
|
296
|
-
expect(diff.hunks).toHaveLength(0);
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
//# sourceMappingURL=operations.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"operations.test.js","sourceRoot":"","sources":["../../src/git/operations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messageHandler.test.d.ts","sourceRoot":"","sources":["../../src/handlers/messageHandler.test.ts"],"names":[],"mappings":""}
|