@camaradesuk/git-worktree-tools 1.0.4 → 1.1.0
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.md +4 -0
- package/dist/cli/cleanpr.d.ts +1 -6
- package/dist/cli/cleanpr.d.ts.map +1 -1
- package/dist/cli/cleanpr.js +110 -302
- package/dist/cli/cleanpr.js.map +1 -1
- package/dist/cli/cleanpr.test.d.ts +2 -0
- package/dist/cli/cleanpr.test.d.ts.map +1 -0
- package/dist/cli/cleanpr.test.js +225 -0
- package/dist/cli/cleanpr.test.js.map +1 -0
- package/dist/cli/lswt.d.ts +1 -4
- package/dist/cli/lswt.d.ts.map +1 -1
- package/dist/cli/lswt.js +32 -251
- package/dist/cli/lswt.js.map +1 -1
- package/dist/cli/lswt.test.d.ts +2 -0
- package/dist/cli/lswt.test.d.ts.map +1 -0
- package/dist/cli/lswt.test.js +165 -0
- package/dist/cli/lswt.test.js.map +1 -0
- package/dist/cli/newpr.d.ts +1 -4
- package/dist/cli/newpr.d.ts.map +1 -1
- package/dist/cli/newpr.js +98 -493
- package/dist/cli/newpr.js.map +1 -1
- package/dist/cli/newpr.test.d.ts +2 -0
- package/dist/cli/newpr.test.d.ts.map +1 -0
- package/dist/cli/newpr.test.js +329 -0
- package/dist/cli/newpr.test.js.map +1 -0
- package/dist/cli/wtlink.test.d.ts +2 -0
- package/dist/cli/wtlink.test.d.ts.map +1 -0
- package/dist/cli/wtlink.test.js +148 -0
- package/dist/cli/wtlink.test.js.map +1 -0
- package/dist/e2e/cli.e2e.test.js +44 -1
- package/dist/e2e/cli.e2e.test.js.map +1 -1
- package/dist/integration/git.integration.test.js.map +1 -1
- package/dist/lib/cleanpr/args.d.ts +14 -0
- package/dist/lib/cleanpr/args.d.ts.map +1 -0
- package/dist/lib/cleanpr/args.js +82 -0
- package/dist/lib/cleanpr/args.js.map +1 -0
- package/dist/lib/cleanpr/args.test.d.ts +2 -0
- package/dist/lib/cleanpr/args.test.d.ts.map +1 -0
- package/dist/lib/cleanpr/args.test.js +192 -0
- package/dist/lib/cleanpr/args.test.js.map +1 -0
- package/dist/lib/cleanpr/cleanup.d.ts +61 -0
- package/dist/lib/cleanpr/cleanup.d.ts.map +1 -0
- package/dist/lib/cleanpr/cleanup.js +97 -0
- package/dist/lib/cleanpr/cleanup.js.map +1 -0
- package/dist/lib/cleanpr/cleanup.test.d.ts +2 -0
- package/dist/lib/cleanpr/cleanup.test.d.ts.map +1 -0
- package/dist/lib/cleanpr/cleanup.test.js +264 -0
- package/dist/lib/cleanpr/cleanup.test.js.map +1 -0
- package/dist/lib/cleanpr/index.d.ts +10 -0
- package/dist/lib/cleanpr/index.d.ts.map +1 -0
- package/dist/lib/cleanpr/index.js +8 -0
- package/dist/lib/cleanpr/index.js.map +1 -0
- package/dist/lib/cleanpr/types.d.ts +49 -0
- package/dist/lib/cleanpr/types.d.ts.map +1 -0
- package/dist/lib/cleanpr/types.js +5 -0
- package/dist/lib/cleanpr/types.js.map +1 -0
- package/dist/lib/cleanpr/worktree-info.d.ts +27 -0
- package/dist/lib/cleanpr/worktree-info.d.ts.map +1 -0
- package/dist/lib/cleanpr/worktree-info.js +95 -0
- package/dist/lib/cleanpr/worktree-info.js.map +1 -0
- package/dist/lib/cleanpr/worktree-info.test.d.ts +2 -0
- package/dist/lib/cleanpr/worktree-info.test.d.ts.map +1 -0
- package/dist/lib/cleanpr/worktree-info.test.js +160 -0
- package/dist/lib/cleanpr/worktree-info.test.js.map +1 -0
- package/dist/lib/colors.test.js +73 -0
- package/dist/lib/colors.test.js.map +1 -1
- package/dist/lib/config.test.js +79 -2
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +4 -3
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/git.test.js +7 -7
- package/dist/lib/git.test.js.map +1 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +4 -3
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/github.test.js +2 -2
- package/dist/lib/github.test.js.map +1 -1
- package/dist/lib/lswt/args.d.ts +14 -0
- package/dist/lib/lswt/args.d.ts.map +1 -0
- package/dist/lib/lswt/args.js +67 -0
- package/dist/lib/lswt/args.js.map +1 -0
- package/dist/lib/lswt/args.test.d.ts +2 -0
- package/dist/lib/lswt/args.test.d.ts.map +1 -0
- package/dist/lib/lswt/args.test.js +135 -0
- package/dist/lib/lswt/args.test.js.map +1 -0
- package/dist/lib/lswt/formatters.d.ts +29 -0
- package/dist/lib/lswt/formatters.d.ts.map +1 -0
- package/dist/lib/lswt/formatters.js +113 -0
- package/dist/lib/lswt/formatters.js.map +1 -0
- package/dist/lib/lswt/formatters.test.d.ts +2 -0
- package/dist/lib/lswt/formatters.test.d.ts.map +1 -0
- package/dist/lib/lswt/formatters.test.js +233 -0
- package/dist/lib/lswt/formatters.test.js.map +1 -0
- package/dist/lib/lswt/index.d.ts +9 -0
- package/dist/lib/lswt/index.d.ts.map +1 -0
- package/dist/lib/lswt/index.js +9 -0
- package/dist/lib/lswt/index.js.map +1 -0
- package/dist/lib/lswt/types.d.ts +44 -0
- package/dist/lib/lswt/types.d.ts.map +1 -0
- package/dist/lib/lswt/types.js +5 -0
- package/dist/lib/lswt/types.js.map +1 -0
- package/dist/lib/lswt/worktree-info.d.ts +23 -0
- package/dist/lib/lswt/worktree-info.d.ts.map +1 -0
- package/dist/lib/lswt/worktree-info.js +81 -0
- package/dist/lib/lswt/worktree-info.js.map +1 -0
- package/dist/lib/lswt/worktree-info.test.d.ts +2 -0
- package/dist/lib/lswt/worktree-info.test.d.ts.map +1 -0
- package/dist/lib/lswt/worktree-info.test.js +190 -0
- package/dist/lib/lswt/worktree-info.test.js.map +1 -0
- package/dist/lib/newpr/actions.d.ts +56 -0
- package/dist/lib/newpr/actions.d.ts.map +1 -0
- package/dist/lib/newpr/actions.js +130 -0
- package/dist/lib/newpr/actions.js.map +1 -0
- package/dist/lib/newpr/actions.test.d.ts +2 -0
- package/dist/lib/newpr/actions.test.d.ts.map +1 -0
- package/dist/lib/newpr/actions.test.js +254 -0
- package/dist/lib/newpr/actions.test.js.map +1 -0
- package/dist/lib/newpr/args.d.ts +17 -0
- package/dist/lib/newpr/args.d.ts.map +1 -0
- package/dist/lib/newpr/args.js +123 -0
- package/dist/lib/newpr/args.js.map +1 -0
- package/dist/lib/newpr/args.test.d.ts +2 -0
- package/dist/lib/newpr/args.test.d.ts.map +1 -0
- package/dist/lib/newpr/args.test.js +271 -0
- package/dist/lib/newpr/args.test.js.map +1 -0
- package/dist/lib/newpr/index.d.ts +10 -0
- package/dist/lib/newpr/index.d.ts.map +1 -0
- package/dist/lib/newpr/index.js +8 -0
- package/dist/lib/newpr/index.js.map +1 -0
- package/dist/lib/newpr/scenario-handler.d.ts +40 -0
- package/dist/lib/newpr/scenario-handler.d.ts.map +1 -0
- package/dist/lib/newpr/scenario-handler.js +261 -0
- package/dist/lib/newpr/scenario-handler.js.map +1 -0
- package/dist/lib/newpr/scenario-handler.test.d.ts +2 -0
- package/dist/lib/newpr/scenario-handler.test.d.ts.map +1 -0
- package/dist/lib/newpr/scenario-handler.test.js +250 -0
- package/dist/lib/newpr/scenario-handler.test.js.map +1 -0
- package/dist/lib/newpr/types.d.ts +76 -0
- package/dist/lib/newpr/types.d.ts.map +1 -0
- package/dist/lib/newpr/types.js +5 -0
- package/dist/lib/newpr/types.js.map +1 -0
- package/dist/lib/state-detection.d.ts.map +1 -1
- package/dist/lib/state-detection.js +12 -3
- package/dist/lib/state-detection.js.map +1 -1
- package/dist/lib/state-detection.test.js +253 -2
- package/dist/lib/state-detection.test.js.map +1 -1
- package/dist/lib/wtlink/link-configs.d.ts +40 -0
- package/dist/lib/wtlink/link-configs.d.ts.map +1 -1
- package/dist/lib/wtlink/link-configs.js +126 -11
- package/dist/lib/wtlink/link-configs.js.map +1 -1
- package/dist/lib/wtlink/link-configs.test.js +237 -84
- package/dist/lib/wtlink/link-configs.test.js.map +1 -1
- package/dist/lib/wtlink/manage-manifest.d.ts +86 -0
- package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
- package/dist/lib/wtlink/manage-manifest.js +18 -15
- package/dist/lib/wtlink/manage-manifest.js.map +1 -1
- package/dist/lib/wtlink/manage-manifest.test.d.ts +2 -0
- package/dist/lib/wtlink/manage-manifest.test.d.ts.map +1 -0
- package/dist/lib/wtlink/manage-manifest.test.js +383 -0
- package/dist/lib/wtlink/manage-manifest.test.js.map +1 -0
- package/dist/lib/wtlink/validate-manifest.d.ts +27 -0
- package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
- package/dist/lib/wtlink/validate-manifest.js +103 -28
- package/dist/lib/wtlink/validate-manifest.js.map +1 -1
- package/dist/lib/wtlink/validate-manifest.test.js +170 -65
- package/dist/lib/wtlink/validate-manifest.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,29 +1,21 @@
|
|
|
1
|
-
import { describe, it, expect
|
|
2
|
-
import * as
|
|
3
|
-
import {
|
|
4
|
-
// Mock modules
|
|
5
|
-
vi.mock('fs');
|
|
6
|
-
vi.mock('child_process');
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { findDuplicates, countActiveEntries, getActiveEntries, findMissingFiles, validateManifestContent, } from './validate-manifest.js';
|
|
7
4
|
describe('wtlink/validate-manifest', () => {
|
|
8
|
-
|
|
9
|
-
const mockSpawnSync = vi.mocked(spawnSync);
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
vi.clearAllMocks();
|
|
12
|
-
});
|
|
13
|
-
describe('manifest validation logic', () => {
|
|
5
|
+
describe('findDuplicates', () => {
|
|
14
6
|
it('should detect duplicate entries', () => {
|
|
15
7
|
const manifest = `.env
|
|
16
8
|
.vscode/settings.json
|
|
17
9
|
.env
|
|
18
10
|
config/local.json`;
|
|
19
|
-
const duplicates =
|
|
11
|
+
const duplicates = findDuplicates(manifest);
|
|
20
12
|
expect(duplicates).toEqual(['.env']);
|
|
21
13
|
});
|
|
22
14
|
it('should not report unique entries as duplicates', () => {
|
|
23
15
|
const manifest = `.env
|
|
24
16
|
.vscode/settings.json
|
|
25
17
|
config/local.json`;
|
|
26
|
-
const duplicates =
|
|
18
|
+
const duplicates = findDuplicates(manifest);
|
|
27
19
|
expect(duplicates).toEqual([]);
|
|
28
20
|
});
|
|
29
21
|
it('should skip commented entries when checking duplicates', () => {
|
|
@@ -31,85 +23,198 @@ config/local.json`;
|
|
|
31
23
|
# .env
|
|
32
24
|
.vscode/settings.json`;
|
|
33
25
|
// Active .env and commented .env should not be duplicates
|
|
34
|
-
const duplicates =
|
|
26
|
+
const duplicates = findDuplicates(manifest);
|
|
27
|
+
expect(duplicates).toEqual([]);
|
|
28
|
+
});
|
|
29
|
+
it('should detect multiple duplicates', () => {
|
|
30
|
+
const manifest = `.env
|
|
31
|
+
.env
|
|
32
|
+
.vscode/settings.json
|
|
33
|
+
.vscode/settings.json
|
|
34
|
+
.env`;
|
|
35
|
+
const duplicates = findDuplicates(manifest);
|
|
36
|
+
expect(duplicates).toEqual(['.env', '.vscode/settings.json', '.env']);
|
|
37
|
+
});
|
|
38
|
+
it('should handle empty manifest', () => {
|
|
39
|
+
const duplicates = findDuplicates('');
|
|
35
40
|
expect(duplicates).toEqual([]);
|
|
36
41
|
});
|
|
42
|
+
});
|
|
43
|
+
describe('countActiveEntries', () => {
|
|
37
44
|
it('should count only active entries', () => {
|
|
38
45
|
const manifest = `.env
|
|
39
46
|
.vscode/settings.json
|
|
40
47
|
# .vscode/launch.json
|
|
41
48
|
# config/local.json`;
|
|
42
|
-
const count =
|
|
49
|
+
const count = countActiveEntries(manifest);
|
|
43
50
|
expect(count).toBe(2);
|
|
44
51
|
});
|
|
45
52
|
it('should handle empty manifest', () => {
|
|
46
|
-
const
|
|
47
|
-
const count = countActiveEntriesHelper(manifest);
|
|
53
|
+
const count = countActiveEntries('');
|
|
48
54
|
expect(count).toBe(0);
|
|
49
55
|
});
|
|
50
56
|
it('should handle manifest with only comments', () => {
|
|
51
57
|
const manifest = `# .env
|
|
52
58
|
# .vscode/settings.json
|
|
53
59
|
## This is a header`;
|
|
54
|
-
const count =
|
|
60
|
+
const count = countActiveEntries(manifest);
|
|
55
61
|
expect(count).toBe(0);
|
|
56
62
|
});
|
|
63
|
+
it('should skip blank lines', () => {
|
|
64
|
+
const manifest = `.env
|
|
65
|
+
|
|
66
|
+
.vscode/settings.json
|
|
67
|
+
|
|
68
|
+
`;
|
|
69
|
+
const count = countActiveEntries(manifest);
|
|
70
|
+
expect(count).toBe(2);
|
|
71
|
+
});
|
|
57
72
|
});
|
|
58
|
-
describe('
|
|
59
|
-
it('should
|
|
73
|
+
describe('getActiveEntries', () => {
|
|
74
|
+
it('should return only active entries', () => {
|
|
75
|
+
const manifest = `.env
|
|
76
|
+
# comment
|
|
77
|
+
.vscode/settings.json
|
|
78
|
+
|
|
79
|
+
## header
|
|
80
|
+
config/local.json`;
|
|
81
|
+
const entries = getActiveEntries(manifest);
|
|
82
|
+
expect(entries).toEqual(['.env', '.vscode/settings.json', 'config/local.json']);
|
|
83
|
+
});
|
|
84
|
+
it('should return empty array for empty manifest', () => {
|
|
85
|
+
const entries = getActiveEntries('');
|
|
86
|
+
expect(entries).toEqual([]);
|
|
87
|
+
});
|
|
88
|
+
it('should return empty array for comments-only manifest', () => {
|
|
89
|
+
const entries = getActiveEntries('# comment\n## header');
|
|
90
|
+
expect(entries).toEqual([]);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('findMissingFiles', () => {
|
|
94
|
+
it('should find missing files', () => {
|
|
60
95
|
const entries = ['.env', '.vscode/settings.json'];
|
|
61
96
|
const sourceDir = '/home/user/project';
|
|
62
|
-
|
|
63
|
-
const
|
|
97
|
+
// Build a Set of absolute paths that "exist" using path.join for cross-platform compatibility
|
|
98
|
+
const existingFiles = new Set([path.join(sourceDir, '.env')]);
|
|
99
|
+
const fileExists = (p) => existingFiles.has(p);
|
|
100
|
+
const missing = findMissingFiles(entries, sourceDir, fileExists);
|
|
64
101
|
expect(missing).toEqual(['.vscode/settings.json']);
|
|
65
102
|
});
|
|
66
103
|
it('should return empty array when all entries exist', () => {
|
|
67
104
|
const entries = ['.env', '.vscode/settings.json'];
|
|
68
105
|
const sourceDir = '/home/user/project';
|
|
69
|
-
|
|
70
|
-
const
|
|
106
|
+
// Build a Set of absolute paths that "exist" using path.join for cross-platform compatibility
|
|
107
|
+
const existingFiles = new Set([
|
|
108
|
+
path.join(sourceDir, '.env'),
|
|
109
|
+
path.join(sourceDir, '.vscode/settings.json'),
|
|
110
|
+
]);
|
|
111
|
+
const fileExists = (p) => existingFiles.has(p);
|
|
112
|
+
const missing = findMissingFiles(entries, sourceDir, fileExists);
|
|
71
113
|
expect(missing).toEqual([]);
|
|
72
114
|
});
|
|
115
|
+
it('should return all entries when none exist', () => {
|
|
116
|
+
const entries = ['.env', '.vscode/settings.json'];
|
|
117
|
+
const sourceDir = '/home/user/project';
|
|
118
|
+
const fileExists = () => false;
|
|
119
|
+
const missing = findMissingFiles(entries, sourceDir, fileExists);
|
|
120
|
+
expect(missing).toEqual(['.env', '.vscode/settings.json']);
|
|
121
|
+
});
|
|
122
|
+
it('should handle empty entries array', () => {
|
|
123
|
+
const missing = findMissingFiles([], '/home/user/project', () => false);
|
|
124
|
+
expect(missing).toEqual([]);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('validateManifestContent', () => {
|
|
128
|
+
it('should detect duplicates', () => {
|
|
129
|
+
const manifest = `.env
|
|
130
|
+
.env`;
|
|
131
|
+
const sourceDir = '/home/user/project';
|
|
132
|
+
const fileExists = () => true;
|
|
133
|
+
const isGitIgnored = () => true;
|
|
134
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
135
|
+
expect(result.duplicates).toEqual(['.env']);
|
|
136
|
+
expect(result.problems).toContainEqual(expect.stringContaining('Duplicate'));
|
|
137
|
+
});
|
|
138
|
+
it('should detect missing files', () => {
|
|
139
|
+
const manifest = `.env
|
|
140
|
+
.vscode/settings.json`;
|
|
141
|
+
const sourceDir = '/home/user/project';
|
|
142
|
+
// Use path.join for cross-platform compatibility
|
|
143
|
+
const existingFiles = new Set([path.join(sourceDir, '.env')]);
|
|
144
|
+
const fileExists = (p) => existingFiles.has(p);
|
|
145
|
+
const isGitIgnored = () => true;
|
|
146
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
147
|
+
expect(result.missingFiles).toEqual(['.vscode/settings.json']);
|
|
148
|
+
expect(result.problems).toContainEqual(expect.stringContaining('Missing'));
|
|
149
|
+
});
|
|
150
|
+
it('should detect files not ignored by git', () => {
|
|
151
|
+
const manifest = `.env
|
|
152
|
+
.vscode/settings.json`;
|
|
153
|
+
const sourceDir = '/home/user/project';
|
|
154
|
+
const fileExists = () => true;
|
|
155
|
+
// Use path.join for cross-platform compatibility
|
|
156
|
+
const ignoredFiles = new Set([path.join(sourceDir, '.env')]);
|
|
157
|
+
const isGitIgnored = (p) => ignoredFiles.has(p);
|
|
158
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
159
|
+
expect(result.notIgnored).toEqual(['.vscode/settings.json']);
|
|
160
|
+
expect(result.problems).toContainEqual(expect.stringContaining('not ignored'));
|
|
161
|
+
});
|
|
162
|
+
it('should return valid result for correct manifest', () => {
|
|
163
|
+
const manifest = `.env
|
|
164
|
+
.vscode/settings.json`;
|
|
165
|
+
const sourceDir = '/home/user/project';
|
|
166
|
+
const fileExists = () => true;
|
|
167
|
+
const isGitIgnored = () => true;
|
|
168
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
169
|
+
expect(result.problems).toEqual([]);
|
|
170
|
+
expect(result.checkedCount).toBe(2);
|
|
171
|
+
expect(result.duplicates).toEqual([]);
|
|
172
|
+
expect(result.missingFiles).toEqual([]);
|
|
173
|
+
expect(result.notIgnored).toEqual([]);
|
|
174
|
+
});
|
|
175
|
+
it('should skip commented entries during validation', () => {
|
|
176
|
+
const manifest = `.env
|
|
177
|
+
# .env.local
|
|
178
|
+
.vscode/settings.json`;
|
|
179
|
+
const sourceDir = '/home/user/project';
|
|
180
|
+
const fileExists = () => true;
|
|
181
|
+
const isGitIgnored = () => true;
|
|
182
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
183
|
+
expect(result.checkedCount).toBe(2); // Only .env and .vscode/settings.json
|
|
184
|
+
expect(result.problems).toEqual([]);
|
|
185
|
+
});
|
|
186
|
+
it('should handle empty manifest', () => {
|
|
187
|
+
const result = validateManifestContent('', '/home/user/project', () => true, () => true);
|
|
188
|
+
expect(result.problems).toEqual([]);
|
|
189
|
+
expect(result.checkedCount).toBe(0);
|
|
190
|
+
});
|
|
191
|
+
it('should count unique entries only', () => {
|
|
192
|
+
const manifest = `.env
|
|
193
|
+
.env
|
|
194
|
+
.vscode/settings.json`;
|
|
195
|
+
const sourceDir = '/home/user/project';
|
|
196
|
+
const fileExists = () => true;
|
|
197
|
+
const isGitIgnored = () => true;
|
|
198
|
+
const result = validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
199
|
+
expect(result.checkedCount).toBe(2); // Only 2 unique entries
|
|
200
|
+
});
|
|
201
|
+
it('should not check missing files for git ignored status', () => {
|
|
202
|
+
const manifest = `.env
|
|
203
|
+
missing-file.txt`;
|
|
204
|
+
const sourceDir = '/home/user/project';
|
|
205
|
+
// Use path.join for cross-platform compatibility
|
|
206
|
+
const envPath = path.join(sourceDir, '.env');
|
|
207
|
+
const existingFiles = new Set([envPath]);
|
|
208
|
+
const fileExists = (p) => existingFiles.has(p);
|
|
209
|
+
const gitIgnoredCalls = [];
|
|
210
|
+
const isGitIgnored = (p) => {
|
|
211
|
+
gitIgnoredCalls.push(p);
|
|
212
|
+
return true;
|
|
213
|
+
};
|
|
214
|
+
validateManifestContent(manifest, sourceDir, fileExists, isGitIgnored);
|
|
215
|
+
// Only .env should be checked for git ignored (not missing-file.txt)
|
|
216
|
+
expect(gitIgnoredCalls).toEqual([envPath]);
|
|
217
|
+
});
|
|
73
218
|
});
|
|
74
219
|
});
|
|
75
|
-
// Helper functions for testing validation logic
|
|
76
|
-
function findDuplicatesHelper(manifest) {
|
|
77
|
-
const seen = new Set();
|
|
78
|
-
const duplicates = [];
|
|
79
|
-
for (const rawLine of manifest.split('\n')) {
|
|
80
|
-
const line = rawLine.trim();
|
|
81
|
-
// Skip empty lines and comments
|
|
82
|
-
if (!line || line.startsWith('#')) {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (seen.has(line)) {
|
|
86
|
-
duplicates.push(line);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
seen.add(line);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return duplicates;
|
|
93
|
-
}
|
|
94
|
-
function countActiveEntriesHelper(manifest) {
|
|
95
|
-
let count = 0;
|
|
96
|
-
for (const rawLine of manifest.split('\n')) {
|
|
97
|
-
const line = rawLine.trim();
|
|
98
|
-
// Skip empty lines and comments
|
|
99
|
-
if (!line || line.startsWith('#')) {
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
count++;
|
|
103
|
-
}
|
|
104
|
-
return count;
|
|
105
|
-
}
|
|
106
|
-
function findMissingFilesHelper(entries, _sourceDir, existingFiles) {
|
|
107
|
-
const missing = [];
|
|
108
|
-
for (const entry of entries) {
|
|
109
|
-
if (!existingFiles.has(entry)) {
|
|
110
|
-
missing.push(entry);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return missing;
|
|
114
|
-
}
|
|
115
220
|
//# sourceMappingURL=validate-manifest.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-manifest.test.js","sourceRoot":"","sources":["../../../src/lib/wtlink/validate-manifest.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"validate-manifest.test.js","sourceRoot":"","sources":["../../../src/lib/wtlink/validate-manifest.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camaradesuk/git-worktree-tools",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Git worktree workflow tools: create PRs, manage worktrees, sync configs. Cross-platform CLI for Windows, macOS, and Linux.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|