@camaradesuk/git-worktree-tools 1.0.5 → 1.1.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.
Files changed (167) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/cleanpr.d.ts +1 -6
  3. package/dist/cli/cleanpr.d.ts.map +1 -1
  4. package/dist/cli/cleanpr.js +110 -302
  5. package/dist/cli/cleanpr.js.map +1 -1
  6. package/dist/cli/cleanpr.test.d.ts +2 -0
  7. package/dist/cli/cleanpr.test.d.ts.map +1 -0
  8. package/dist/cli/cleanpr.test.js +225 -0
  9. package/dist/cli/cleanpr.test.js.map +1 -0
  10. package/dist/cli/lswt.d.ts +1 -4
  11. package/dist/cli/lswt.d.ts.map +1 -1
  12. package/dist/cli/lswt.js +32 -251
  13. package/dist/cli/lswt.js.map +1 -1
  14. package/dist/cli/lswt.test.d.ts +2 -0
  15. package/dist/cli/lswt.test.d.ts.map +1 -0
  16. package/dist/cli/lswt.test.js +165 -0
  17. package/dist/cli/lswt.test.js.map +1 -0
  18. package/dist/cli/newpr.d.ts +1 -4
  19. package/dist/cli/newpr.d.ts.map +1 -1
  20. package/dist/cli/newpr.js +98 -493
  21. package/dist/cli/newpr.js.map +1 -1
  22. package/dist/cli/newpr.test.d.ts +2 -0
  23. package/dist/cli/newpr.test.d.ts.map +1 -0
  24. package/dist/cli/newpr.test.js +329 -0
  25. package/dist/cli/newpr.test.js.map +1 -0
  26. package/dist/cli/wtlink.test.d.ts +2 -0
  27. package/dist/cli/wtlink.test.d.ts.map +1 -0
  28. package/dist/cli/wtlink.test.js +148 -0
  29. package/dist/cli/wtlink.test.js.map +1 -0
  30. package/dist/e2e/cli.e2e.test.js +44 -1
  31. package/dist/e2e/cli.e2e.test.js.map +1 -1
  32. package/dist/lib/cleanpr/args.d.ts +14 -0
  33. package/dist/lib/cleanpr/args.d.ts.map +1 -0
  34. package/dist/lib/cleanpr/args.js +82 -0
  35. package/dist/lib/cleanpr/args.js.map +1 -0
  36. package/dist/lib/cleanpr/args.test.d.ts +2 -0
  37. package/dist/lib/cleanpr/args.test.d.ts.map +1 -0
  38. package/dist/lib/cleanpr/args.test.js +192 -0
  39. package/dist/lib/cleanpr/args.test.js.map +1 -0
  40. package/dist/lib/cleanpr/cleanup.d.ts +61 -0
  41. package/dist/lib/cleanpr/cleanup.d.ts.map +1 -0
  42. package/dist/lib/cleanpr/cleanup.js +97 -0
  43. package/dist/lib/cleanpr/cleanup.js.map +1 -0
  44. package/dist/lib/cleanpr/cleanup.test.d.ts +2 -0
  45. package/dist/lib/cleanpr/cleanup.test.d.ts.map +1 -0
  46. package/dist/lib/cleanpr/cleanup.test.js +264 -0
  47. package/dist/lib/cleanpr/cleanup.test.js.map +1 -0
  48. package/dist/lib/cleanpr/index.d.ts +10 -0
  49. package/dist/lib/cleanpr/index.d.ts.map +1 -0
  50. package/dist/lib/cleanpr/index.js +8 -0
  51. package/dist/lib/cleanpr/index.js.map +1 -0
  52. package/dist/lib/cleanpr/types.d.ts +49 -0
  53. package/dist/lib/cleanpr/types.d.ts.map +1 -0
  54. package/dist/lib/cleanpr/types.js +5 -0
  55. package/dist/lib/cleanpr/types.js.map +1 -0
  56. package/dist/lib/cleanpr/worktree-info.d.ts +27 -0
  57. package/dist/lib/cleanpr/worktree-info.d.ts.map +1 -0
  58. package/dist/lib/cleanpr/worktree-info.js +95 -0
  59. package/dist/lib/cleanpr/worktree-info.js.map +1 -0
  60. package/dist/lib/cleanpr/worktree-info.test.d.ts +2 -0
  61. package/dist/lib/cleanpr/worktree-info.test.d.ts.map +1 -0
  62. package/dist/lib/cleanpr/worktree-info.test.js +160 -0
  63. package/dist/lib/cleanpr/worktree-info.test.js.map +1 -0
  64. package/dist/lib/colors.test.js +73 -0
  65. package/dist/lib/colors.test.js.map +1 -1
  66. package/dist/lib/config.test.js +79 -2
  67. package/dist/lib/config.test.js.map +1 -1
  68. package/dist/lib/git.d.ts.map +1 -1
  69. package/dist/lib/git.js +4 -3
  70. package/dist/lib/git.js.map +1 -1
  71. package/dist/lib/git.test.js +7 -7
  72. package/dist/lib/git.test.js.map +1 -1
  73. package/dist/lib/github.d.ts.map +1 -1
  74. package/dist/lib/github.js +23 -30
  75. package/dist/lib/github.js.map +1 -1
  76. package/dist/lib/github.test.js +49 -12
  77. package/dist/lib/github.test.js.map +1 -1
  78. package/dist/lib/lswt/args.d.ts +14 -0
  79. package/dist/lib/lswt/args.d.ts.map +1 -0
  80. package/dist/lib/lswt/args.js +67 -0
  81. package/dist/lib/lswt/args.js.map +1 -0
  82. package/dist/lib/lswt/args.test.d.ts +2 -0
  83. package/dist/lib/lswt/args.test.d.ts.map +1 -0
  84. package/dist/lib/lswt/args.test.js +135 -0
  85. package/dist/lib/lswt/args.test.js.map +1 -0
  86. package/dist/lib/lswt/formatters.d.ts +29 -0
  87. package/dist/lib/lswt/formatters.d.ts.map +1 -0
  88. package/dist/lib/lswt/formatters.js +113 -0
  89. package/dist/lib/lswt/formatters.js.map +1 -0
  90. package/dist/lib/lswt/formatters.test.d.ts +2 -0
  91. package/dist/lib/lswt/formatters.test.d.ts.map +1 -0
  92. package/dist/lib/lswt/formatters.test.js +233 -0
  93. package/dist/lib/lswt/formatters.test.js.map +1 -0
  94. package/dist/lib/lswt/index.d.ts +9 -0
  95. package/dist/lib/lswt/index.d.ts.map +1 -0
  96. package/dist/lib/lswt/index.js +9 -0
  97. package/dist/lib/lswt/index.js.map +1 -0
  98. package/dist/lib/lswt/types.d.ts +44 -0
  99. package/dist/lib/lswt/types.d.ts.map +1 -0
  100. package/dist/lib/lswt/types.js +5 -0
  101. package/dist/lib/lswt/types.js.map +1 -0
  102. package/dist/lib/lswt/worktree-info.d.ts +23 -0
  103. package/dist/lib/lswt/worktree-info.d.ts.map +1 -0
  104. package/dist/lib/lswt/worktree-info.js +81 -0
  105. package/dist/lib/lswt/worktree-info.js.map +1 -0
  106. package/dist/lib/lswt/worktree-info.test.d.ts +2 -0
  107. package/dist/lib/lswt/worktree-info.test.d.ts.map +1 -0
  108. package/dist/lib/lswt/worktree-info.test.js +190 -0
  109. package/dist/lib/lswt/worktree-info.test.js.map +1 -0
  110. package/dist/lib/newpr/actions.d.ts +56 -0
  111. package/dist/lib/newpr/actions.d.ts.map +1 -0
  112. package/dist/lib/newpr/actions.js +130 -0
  113. package/dist/lib/newpr/actions.js.map +1 -0
  114. package/dist/lib/newpr/actions.test.d.ts +2 -0
  115. package/dist/lib/newpr/actions.test.d.ts.map +1 -0
  116. package/dist/lib/newpr/actions.test.js +254 -0
  117. package/dist/lib/newpr/actions.test.js.map +1 -0
  118. package/dist/lib/newpr/args.d.ts +17 -0
  119. package/dist/lib/newpr/args.d.ts.map +1 -0
  120. package/dist/lib/newpr/args.js +123 -0
  121. package/dist/lib/newpr/args.js.map +1 -0
  122. package/dist/lib/newpr/args.test.d.ts +2 -0
  123. package/dist/lib/newpr/args.test.d.ts.map +1 -0
  124. package/dist/lib/newpr/args.test.js +271 -0
  125. package/dist/lib/newpr/args.test.js.map +1 -0
  126. package/dist/lib/newpr/index.d.ts +10 -0
  127. package/dist/lib/newpr/index.d.ts.map +1 -0
  128. package/dist/lib/newpr/index.js +8 -0
  129. package/dist/lib/newpr/index.js.map +1 -0
  130. package/dist/lib/newpr/scenario-handler.d.ts +40 -0
  131. package/dist/lib/newpr/scenario-handler.d.ts.map +1 -0
  132. package/dist/lib/newpr/scenario-handler.js +261 -0
  133. package/dist/lib/newpr/scenario-handler.js.map +1 -0
  134. package/dist/lib/newpr/scenario-handler.test.d.ts +2 -0
  135. package/dist/lib/newpr/scenario-handler.test.d.ts.map +1 -0
  136. package/dist/lib/newpr/scenario-handler.test.js +250 -0
  137. package/dist/lib/newpr/scenario-handler.test.js.map +1 -0
  138. package/dist/lib/newpr/types.d.ts +76 -0
  139. package/dist/lib/newpr/types.d.ts.map +1 -0
  140. package/dist/lib/newpr/types.js +5 -0
  141. package/dist/lib/newpr/types.js.map +1 -0
  142. package/dist/lib/state-detection.d.ts.map +1 -1
  143. package/dist/lib/state-detection.js +12 -3
  144. package/dist/lib/state-detection.js.map +1 -1
  145. package/dist/lib/state-detection.test.js +253 -2
  146. package/dist/lib/state-detection.test.js.map +1 -1
  147. package/dist/lib/wtlink/link-configs.d.ts +40 -0
  148. package/dist/lib/wtlink/link-configs.d.ts.map +1 -1
  149. package/dist/lib/wtlink/link-configs.js +126 -11
  150. package/dist/lib/wtlink/link-configs.js.map +1 -1
  151. package/dist/lib/wtlink/link-configs.test.js +237 -84
  152. package/dist/lib/wtlink/link-configs.test.js.map +1 -1
  153. package/dist/lib/wtlink/manage-manifest.d.ts +86 -0
  154. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  155. package/dist/lib/wtlink/manage-manifest.js +16 -15
  156. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  157. package/dist/lib/wtlink/manage-manifest.test.d.ts +2 -0
  158. package/dist/lib/wtlink/manage-manifest.test.d.ts.map +1 -0
  159. package/dist/lib/wtlink/manage-manifest.test.js +383 -0
  160. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -0
  161. package/dist/lib/wtlink/validate-manifest.d.ts +27 -0
  162. package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
  163. package/dist/lib/wtlink/validate-manifest.js +103 -28
  164. package/dist/lib/wtlink/validate-manifest.js.map +1 -1
  165. package/dist/lib/wtlink/validate-manifest.test.js +170 -65
  166. package/dist/lib/wtlink/validate-manifest.test.js.map +1 -1
  167. package/package.json +1 -1
@@ -0,0 +1,190 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { gatherWorktreeInfo, createDefaultDeps } from './worktree-info.js';
3
+ describe('lswt/worktree-info', () => {
4
+ const makeWorktree = (overrides = {}) => ({
5
+ path: '/home/user/repo',
6
+ branch: 'main',
7
+ commit: 'abc123',
8
+ isMain: true,
9
+ isBare: false,
10
+ isLocked: false,
11
+ isPrunable: false,
12
+ ...overrides,
13
+ });
14
+ const makeDeps = (overrides = {}) => ({
15
+ listWorktrees: () => [],
16
+ hasUncommittedChanges: () => false,
17
+ getPrState: async () => null,
18
+ ...overrides,
19
+ });
20
+ const defaultOptions = {
21
+ showStatus: false,
22
+ json: false,
23
+ verbose: false,
24
+ };
25
+ describe('gatherWorktreeInfo', () => {
26
+ it('returns empty array when no worktrees', async () => {
27
+ const deps = makeDeps({ listWorktrees: () => [] });
28
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
29
+ expect(result).toEqual([]);
30
+ });
31
+ it('identifies main worktree', async () => {
32
+ const worktrees = [makeWorktree({ path: '/home/user/repo', branch: 'main' })];
33
+ const deps = makeDeps({ listWorktrees: () => worktrees });
34
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
35
+ expect(result).toHaveLength(1);
36
+ expect(result[0].type).toBe('main');
37
+ expect(result[0].name).toBe('repo');
38
+ });
39
+ it('identifies PR worktree from path pattern', async () => {
40
+ const worktrees = [
41
+ makeWorktree({ path: '/home/user/repo', branch: 'main' }),
42
+ makeWorktree({ path: '/home/user/repo.pr42', branch: 'feature', isMain: false }),
43
+ ];
44
+ const deps = makeDeps({ listWorktrees: () => worktrees });
45
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
46
+ expect(result).toHaveLength(2);
47
+ expect(result[0].type).toBe('main');
48
+ expect(result[1].type).toBe('pr');
49
+ expect(result[1].prNumber).toBe(42);
50
+ });
51
+ it('identifies branch worktree', async () => {
52
+ const worktrees = [
53
+ makeWorktree({ path: '/home/user/repo', branch: 'main' }),
54
+ makeWorktree({ path: '/home/user/feature-branch', branch: 'feature', isMain: false }),
55
+ ];
56
+ const deps = makeDeps({ listWorktrees: () => worktrees });
57
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
58
+ expect(result).toHaveLength(2);
59
+ const branchWorktree = result.find((w) => w.name === 'feature-branch');
60
+ expect(branchWorktree?.type).toBe('branch');
61
+ });
62
+ it('identifies detached worktree', async () => {
63
+ const worktrees = [
64
+ makeWorktree({ path: '/home/user/repo', branch: 'main' }),
65
+ makeWorktree({ path: '/home/user/detached-wt', branch: null, isMain: false }),
66
+ ];
67
+ const deps = makeDeps({ listWorktrees: () => worktrees });
68
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
69
+ expect(result).toHaveLength(2);
70
+ const detachedWorktree = result.find((w) => w.name === 'detached-wt');
71
+ expect(detachedWorktree?.type).toBe('detached');
72
+ });
73
+ it('includes hasChanges from dependency', async () => {
74
+ const worktrees = [makeWorktree({ path: '/home/user/repo', branch: 'main' })];
75
+ const deps = makeDeps({
76
+ listWorktrees: () => worktrees,
77
+ hasUncommittedChanges: () => true,
78
+ });
79
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
80
+ expect(result[0].hasChanges).toBe(true);
81
+ });
82
+ it('does not fetch PR state when showStatus is false', async () => {
83
+ const worktrees = [
84
+ makeWorktree({ path: '/home/user/repo.pr1', branch: 'feature', isMain: false }),
85
+ ];
86
+ const getPrState = vi.fn().mockResolvedValue('OPEN');
87
+ const deps = makeDeps({
88
+ listWorktrees: () => worktrees,
89
+ getPrState,
90
+ });
91
+ await gatherWorktreeInfo('/home/user/other', { ...defaultOptions, showStatus: false }, deps);
92
+ expect(getPrState).not.toHaveBeenCalled();
93
+ });
94
+ it('fetches PR state when showStatus is true', async () => {
95
+ const worktrees = [
96
+ makeWorktree({ path: '/home/user/repo.pr1', branch: 'feature', isMain: false }),
97
+ ];
98
+ const getPrState = vi.fn().mockResolvedValue('OPEN');
99
+ const deps = makeDeps({
100
+ listWorktrees: () => worktrees,
101
+ getPrState,
102
+ });
103
+ const result = await gatherWorktreeInfo('/home/user/other', { ...defaultOptions, showStatus: true }, deps);
104
+ expect(getPrState).toHaveBeenCalledWith(1);
105
+ expect(result[0].prState).toBe('OPEN');
106
+ });
107
+ it('handles null PR state', async () => {
108
+ const worktrees = [
109
+ makeWorktree({ path: '/home/user/repo.pr99', branch: 'feature', isMain: false }),
110
+ ];
111
+ const deps = makeDeps({
112
+ listWorktrees: () => worktrees,
113
+ getPrState: async () => null,
114
+ });
115
+ const result = await gatherWorktreeInfo('/home/user/other', { ...defaultOptions, showStatus: true }, deps);
116
+ expect(result[0].prState).toBeNull();
117
+ });
118
+ it('returns sorted worktrees (main first, then PRs by number)', async () => {
119
+ const worktrees = [
120
+ makeWorktree({ path: '/home/user/repo.pr10', branch: 'f1', isMain: false }),
121
+ makeWorktree({ path: '/home/user/repo.pr2', branch: 'f2', isMain: false }),
122
+ makeWorktree({ path: '/home/user/repo', branch: 'main' }),
123
+ ];
124
+ const deps = makeDeps({ listWorktrees: () => worktrees });
125
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
126
+ expect(result[0].type).toBe('main');
127
+ expect(result[1].prNumber).toBe(2);
128
+ expect(result[2].prNumber).toBe(10);
129
+ });
130
+ it('includes commit from worktree', async () => {
131
+ const worktrees = [makeWorktree({ path: '/home/user/repo', commit: 'deadbeef' })];
132
+ const deps = makeDeps({ listWorktrees: () => worktrees });
133
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
134
+ expect(result[0].commit).toBe('deadbeef');
135
+ });
136
+ it('includes branch from worktree', async () => {
137
+ const worktrees = [makeWorktree({ path: '/home/user/repo', branch: 'develop' })];
138
+ const deps = makeDeps({ listWorktrees: () => worktrees });
139
+ const result = await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
140
+ expect(result[0].branch).toBe('develop');
141
+ });
142
+ it('calls hasUncommittedChanges for each worktree', async () => {
143
+ const worktrees = [
144
+ makeWorktree({ path: '/home/user/repo', branch: 'main' }),
145
+ makeWorktree({ path: '/home/user/repo.pr1', branch: 'f1', isMain: false }),
146
+ ];
147
+ const hasUncommittedChanges = vi.fn().mockReturnValue(false);
148
+ const deps = makeDeps({
149
+ listWorktrees: () => worktrees,
150
+ hasUncommittedChanges,
151
+ });
152
+ await gatherWorktreeInfo('/home/user/repo', defaultOptions, deps);
153
+ expect(hasUncommittedChanges).toHaveBeenCalledTimes(2);
154
+ expect(hasUncommittedChanges).toHaveBeenCalledWith('/home/user/repo');
155
+ expect(hasUncommittedChanges).toHaveBeenCalledWith('/home/user/repo.pr1');
156
+ });
157
+ it('handles multiple PR state fetches', async () => {
158
+ const worktrees = [
159
+ makeWorktree({ path: '/home/user/repo.pr1', branch: 'f1', isMain: false }),
160
+ makeWorktree({ path: '/home/user/repo.pr2', branch: 'f2', isMain: false }),
161
+ makeWorktree({ path: '/home/user/repo.pr3', branch: 'f3', isMain: false }),
162
+ ];
163
+ const getPrState = vi
164
+ .fn()
165
+ .mockResolvedValueOnce('OPEN')
166
+ .mockResolvedValueOnce('MERGED')
167
+ .mockResolvedValueOnce('CLOSED');
168
+ const deps = makeDeps({
169
+ listWorktrees: () => worktrees,
170
+ getPrState,
171
+ });
172
+ const result = await gatherWorktreeInfo('/home/user/other', { ...defaultOptions, showStatus: true }, deps);
173
+ expect(result[0].prState).toBe('OPEN');
174
+ expect(result[1].prState).toBe('MERGED');
175
+ expect(result[2].prState).toBe('CLOSED');
176
+ });
177
+ });
178
+ describe('createDefaultDeps', () => {
179
+ it('returns object with required methods', () => {
180
+ const deps = createDefaultDeps();
181
+ expect(deps).toHaveProperty('listWorktrees');
182
+ expect(deps).toHaveProperty('hasUncommittedChanges');
183
+ expect(deps).toHaveProperty('getPrState');
184
+ expect(typeof deps.listWorktrees).toBe('function');
185
+ expect(typeof deps.hasUncommittedChanges).toBe('function');
186
+ expect(typeof deps.getPrState).toBe('function');
187
+ });
188
+ });
189
+ });
190
+ //# sourceMappingURL=worktree-info.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-info.test.js","sourceRoot":"","sources":["../../../src/lib/lswt/worktree-info.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * newpr actions - git operations with dependency injection
3
+ *
4
+ * Executes state actions based on scenario handler decisions.
5
+ * Uses dependency injection for testability.
6
+ */
7
+ import type { StateAction, ActionResult } from './types.js';
8
+ /**
9
+ * Dependencies interface for action execution
10
+ */
11
+ export interface ActionDeps {
12
+ gitAdd: (path: string, cwd?: string) => void;
13
+ gitStash: (options: {
14
+ message?: string;
15
+ keepIndex?: boolean;
16
+ }, cwd?: string) => string | null;
17
+ gitPush: (options: {
18
+ remote: string;
19
+ branch: string;
20
+ setUpstream?: boolean;
21
+ }, cwd?: string) => void;
22
+ gitCommit: (options: {
23
+ message: string;
24
+ allowEmpty?: boolean;
25
+ }, cwd?: string) => void;
26
+ }
27
+ /**
28
+ * Execute a state action and return result
29
+ * Pure function with injected dependencies
30
+ */
31
+ export declare function executeStateAction(action: StateAction, _description: string, branchName: string, deps: ActionDeps, cwd?: string): ActionResult;
32
+ /**
33
+ * Get the git branch point for an action
34
+ */
35
+ export declare function getBranchPoint(action: StateAction, baseBranch: string): string;
36
+ /**
37
+ * Check if action requires staging all changes
38
+ */
39
+ export declare function requiresStageAll(action: StateAction): boolean;
40
+ /**
41
+ * Check if action involves stashing
42
+ */
43
+ export declare function involvesStashing(action: StateAction): boolean;
44
+ /**
45
+ * Check if action needs to push to origin/main first
46
+ */
47
+ export declare function needsPushToMain(action: StateAction): boolean;
48
+ /**
49
+ * Check if action commits to current branch before PR
50
+ */
51
+ export declare function commitsToCurrentBranch(action: StateAction): boolean;
52
+ /**
53
+ * Get the action description for logging
54
+ */
55
+ export declare function getActionDescription(action: StateAction): string;
56
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/lib/newpr/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9F,OAAO,EAAE,CACP,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,EAClE,GAAG,CAAC,EAAE,MAAM,KACT,IAAI,CAAC;IACV,SAAS,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,YAAY,CAsEd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAM7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CA6BhE"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * newpr actions - git operations with dependency injection
3
+ *
4
+ * Executes state actions based on scenario handler decisions.
5
+ * Uses dependency injection for testability.
6
+ */
7
+ /**
8
+ * Execute a state action and return result
9
+ * Pure function with injected dependencies
10
+ */
11
+ export function executeStateAction(action, _description, branchName, deps, cwd) {
12
+ let stashRef = null;
13
+ try {
14
+ switch (action.action) {
15
+ case 'empty_commit':
16
+ // No action needed before branch creation
17
+ break;
18
+ case 'commit_staged':
19
+ // Will commit staged changes after creating branch
20
+ break;
21
+ case 'commit_all':
22
+ deps.gitAdd('.', cwd);
23
+ break;
24
+ case 'stash_and_empty':
25
+ stashRef = deps.gitStash({ message: `newpr: auto-stash before creating ${branchName}` }, cwd);
26
+ break;
27
+ case 'use_commits':
28
+ case 'branch_from_detached':
29
+ // Branch from HEAD instead of origin/main - no pre-action needed
30
+ break;
31
+ case 'use_commits_and_commit_all':
32
+ deps.gitAdd('.', cwd);
33
+ break;
34
+ case 'use_commits_and_stash':
35
+ stashRef = deps.gitStash({ message: `newpr: auto-stash before creating ${branchName}` }, cwd);
36
+ break;
37
+ case 'push_then_branch':
38
+ deps.gitPush({ remote: 'origin', branch: 'main' }, cwd);
39
+ break;
40
+ case 'pr_for_branch_commit_all':
41
+ deps.gitAdd('.', cwd);
42
+ deps.gitCommit({ message: 'chore: work in progress\n\nšŸ¤– Committed with newpr' }, cwd);
43
+ break;
44
+ case 'pr_for_branch_stash':
45
+ stashRef = deps.gitStash({ message: 'newpr: auto-stash before creating PR' }, cwd);
46
+ break;
47
+ case 'create_pr_for_branch':
48
+ // No pre-action needed - will delegate to existing branch mode
49
+ break;
50
+ }
51
+ return {
52
+ success: true,
53
+ stashRef,
54
+ };
55
+ }
56
+ catch (err) {
57
+ const message = err instanceof Error ? err.message : String(err);
58
+ return {
59
+ success: false,
60
+ stashRef,
61
+ message,
62
+ };
63
+ }
64
+ }
65
+ /**
66
+ * Get the git branch point for an action
67
+ */
68
+ export function getBranchPoint(action, baseBranch) {
69
+ return action.branchFrom === 'head' ? 'HEAD' : `origin/${baseBranch}`;
70
+ }
71
+ /**
72
+ * Check if action requires staging all changes
73
+ */
74
+ export function requiresStageAll(action) {
75
+ return action.action === 'commit_all' || action.action === 'use_commits_and_commit_all';
76
+ }
77
+ /**
78
+ * Check if action involves stashing
79
+ */
80
+ export function involvesStashing(action) {
81
+ return (action.action === 'stash_and_empty' ||
82
+ action.action === 'use_commits_and_stash' ||
83
+ action.action === 'pr_for_branch_stash');
84
+ }
85
+ /**
86
+ * Check if action needs to push to origin/main first
87
+ */
88
+ export function needsPushToMain(action) {
89
+ return action.action === 'push_then_branch';
90
+ }
91
+ /**
92
+ * Check if action commits to current branch before PR
93
+ */
94
+ export function commitsToCurrentBranch(action) {
95
+ return action.action === 'pr_for_branch_commit_all';
96
+ }
97
+ /**
98
+ * Get the action description for logging
99
+ */
100
+ export function getActionDescription(action) {
101
+ switch (action.action) {
102
+ case 'empty_commit':
103
+ return 'Creating empty initial commit';
104
+ case 'commit_staged':
105
+ return 'Committing staged changes';
106
+ case 'commit_all':
107
+ return 'Staging and committing all changes';
108
+ case 'stash_and_empty':
109
+ return 'Stashing changes and creating empty commit';
110
+ case 'use_commits':
111
+ return 'Using existing commits for PR';
112
+ case 'push_then_branch':
113
+ return 'Pushing to main before creating branch';
114
+ case 'use_commits_and_commit_all':
115
+ return 'Using commits and staging all changes';
116
+ case 'use_commits_and_stash':
117
+ return 'Using commits and stashing uncommitted changes';
118
+ case 'create_pr_for_branch':
119
+ return 'Creating PR for current branch';
120
+ case 'pr_for_branch_commit_all':
121
+ return 'Committing changes to current branch for PR';
122
+ case 'pr_for_branch_stash':
123
+ return 'Stashing changes before creating PR';
124
+ case 'branch_from_detached':
125
+ return 'Creating branch from detached HEAD';
126
+ default:
127
+ return 'Executing action';
128
+ }
129
+ }
130
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/lib/newpr/actions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,IAAgB,EAChB,GAAY;IAEZ,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,IAAI,CAAC;QACH,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,cAAc;gBACjB,0CAA0C;gBAC1C,MAAM;YAER,KAAK,eAAe;gBAClB,mDAAmD;gBACnD,MAAM;YAER,KAAK,YAAY;gBACf,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtB,MAAM;YAER,KAAK,iBAAiB;gBACpB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CACtB,EAAE,OAAO,EAAE,qCAAqC,UAAU,EAAE,EAAE,EAC9D,GAAG,CACJ,CAAC;gBACF,MAAM;YAER,KAAK,aAAa,CAAC;YACnB,KAAK,sBAAsB;gBACzB,iEAAiE;gBACjE,MAAM;YAER,KAAK,4BAA4B;gBAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtB,MAAM;YAER,KAAK,uBAAuB;gBAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CACtB,EAAE,OAAO,EAAE,qCAAqC,UAAU,EAAE,EAAE,EAC9D,GAAG,CACJ,CAAC;gBACF,MAAM;YAER,KAAK,kBAAkB;gBACrB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxD,MAAM;YAER,KAAK,0BAA0B;gBAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oDAAoD,EAAE,EAAE,GAAG,CAAC,CAAC;gBACvF,MAAM;YAER,KAAK,qBAAqB;gBACxB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,sCAAsC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACnF,MAAM;YAER,KAAK,sBAAsB;gBACzB,+DAA+D;gBAC/D,MAAM;QACV,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,OAAO;SACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,UAAkB;IACpE,OAAO,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,4BAA4B,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,iBAAiB;QACnC,MAAM,CAAC,MAAM,KAAK,uBAAuB;QACzC,MAAM,CAAC,MAAM,KAAK,qBAAqB,CACxC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,OAAO,MAAM,CAAC,MAAM,KAAK,kBAAkB,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB;IACxD,OAAO,MAAM,CAAC,MAAM,KAAK,0BAA0B,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,cAAc;YACjB,OAAO,+BAA+B,CAAC;QACzC,KAAK,eAAe;YAClB,OAAO,2BAA2B,CAAC;QACrC,KAAK,YAAY;YACf,OAAO,oCAAoC,CAAC;QAC9C,KAAK,iBAAiB;YACpB,OAAO,4CAA4C,CAAC;QACtD,KAAK,aAAa;YAChB,OAAO,+BAA+B,CAAC;QACzC,KAAK,kBAAkB;YACrB,OAAO,wCAAwC,CAAC;QAClD,KAAK,4BAA4B;YAC/B,OAAO,uCAAuC,CAAC;QACjD,KAAK,uBAAuB;YAC1B,OAAO,gDAAgD,CAAC;QAC1D,KAAK,sBAAsB;YACzB,OAAO,gCAAgC,CAAC;QAC1C,KAAK,0BAA0B;YAC7B,OAAO,6CAA6C,CAAC;QACvD,KAAK,qBAAqB;YACxB,OAAO,qCAAqC,CAAC;QAC/C,KAAK,sBAAsB;YACzB,OAAO,oCAAoC,CAAC;QAC9C;YACE,OAAO,kBAAkB,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.test.d.ts","sourceRoot":"","sources":["../../../src/lib/newpr/actions.test.ts"],"names":[],"mappings":""}