bingo 0.8.2 → 0.9.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 (239) hide show
  1. package/lib/cli/createTrackingBranches.d.ts +4 -0
  2. package/lib/cli/createTrackingBranches.d.ts.map +1 -0
  3. package/lib/cli/createTrackingBranches.js +7 -0
  4. package/lib/cli/createTrackingBranches.js.map +1 -0
  5. package/lib/cli/createTrackingBranches.test.d.ts +2 -0
  6. package/lib/cli/createTrackingBranches.test.d.ts.map +1 -0
  7. package/lib/cli/createTrackingBranches.test.js +19 -0
  8. package/lib/cli/createTrackingBranches.test.js.map +1 -0
  9. package/lib/cli/display/runSpinnerTask.d.ts +1 -1
  10. package/lib/cli/getGitRepositoryType.d.ts +8 -0
  11. package/lib/cli/getGitRepositoryType.d.ts.map +1 -0
  12. package/lib/cli/getGitRepositoryType.js +18 -0
  13. package/lib/cli/getGitRepositoryType.js.map +1 -0
  14. package/lib/cli/getGitRepositoryType.test.d.ts +2 -0
  15. package/lib/cli/getGitRepositoryType.test.d.ts.map +1 -0
  16. package/lib/cli/getGitRepositoryType.test.js +33 -0
  17. package/lib/cli/getGitRepositoryType.test.js.map +1 -0
  18. package/lib/cli/isInGitRepository.test.js +1 -1
  19. package/lib/cli/isInGitRepository.test.js.map +1 -1
  20. package/lib/cli/isInGitRepositoryRoot.d.ts +3 -0
  21. package/lib/cli/isInGitRepositoryRoot.d.ts.map +1 -0
  22. package/lib/cli/isInGitRepositoryRoot.js +7 -0
  23. package/lib/cli/isInGitRepositoryRoot.js.map +1 -0
  24. package/lib/cli/isInGitRepositoryRoot.test.d.ts +2 -0
  25. package/lib/cli/isInGitRepositoryRoot.test.d.ts.map +1 -0
  26. package/lib/cli/isInGitRepositoryRoot.test.js +26 -0
  27. package/lib/cli/isInGitRepositoryRoot.test.js.map +1 -0
  28. package/lib/cli/parseProcessArgv.d.ts +1 -0
  29. package/lib/cli/parseProcessArgv.d.ts.map +1 -1
  30. package/lib/cli/parseProcessArgv.js +3 -0
  31. package/lib/cli/parseProcessArgv.js.map +1 -1
  32. package/lib/cli/prepareGitRepository.d.ts +4 -0
  33. package/lib/cli/prepareGitRepository.d.ts.map +1 -0
  34. package/lib/cli/prepareGitRepository.js +9 -0
  35. package/lib/cli/prepareGitRepository.js.map +1 -0
  36. package/lib/cli/remotes/createRemoteRepository.d.ts +6 -0
  37. package/lib/cli/remotes/createRemoteRepository.d.ts.map +1 -0
  38. package/lib/cli/remotes/createRemoteRepository.js +25 -0
  39. package/lib/cli/remotes/createRemoteRepository.js.map +1 -0
  40. package/lib/cli/remotes/createRemoteRepository.test.d.ts +2 -0
  41. package/lib/cli/remotes/createRemoteRepository.test.d.ts.map +1 -0
  42. package/lib/cli/remotes/createRemoteRepository.test.js +54 -0
  43. package/lib/cli/remotes/createRemoteRepository.test.js.map +1 -0
  44. package/lib/cli/remotes/createTrackingBranches.d.ts +4 -0
  45. package/lib/cli/remotes/createTrackingBranches.d.ts.map +1 -0
  46. package/lib/cli/remotes/createTrackingBranches.js +7 -0
  47. package/lib/cli/remotes/createTrackingBranches.js.map +1 -0
  48. package/lib/cli/remotes/createTrackingBranches.test.d.ts +2 -0
  49. package/lib/cli/remotes/createTrackingBranches.test.d.ts.map +1 -0
  50. package/lib/cli/remotes/createTrackingBranches.test.js +19 -0
  51. package/lib/cli/remotes/createTrackingBranches.test.js.map +1 -0
  52. package/lib/cli/remotes/resolveRemoteRepository.d.ts +19 -0
  53. package/lib/cli/remotes/resolveRemoteRepository.d.ts.map +1 -0
  54. package/lib/cli/remotes/resolveRemoteRepository.js +58 -0
  55. package/lib/cli/remotes/resolveRemoteRepository.js.map +1 -0
  56. package/lib/cli/remotes/resolveRemoteRepository.test.d.ts +2 -0
  57. package/lib/cli/remotes/resolveRemoteRepository.test.d.ts.map +1 -0
  58. package/lib/cli/remotes/resolveRemoteRepository.test.js +148 -0
  59. package/lib/cli/remotes/resolveRemoteRepository.test.js.map +1 -0
  60. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.d.ts +4 -0
  61. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.d.ts.map +1 -0
  62. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.js +14 -0
  63. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.js.map +1 -0
  64. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.test.d.ts +2 -0
  65. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.test.d.ts.map +1 -0
  66. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.test.js +23 -0
  67. package/lib/cli/remotes/resolveRemoteRepositoryFromOrigin.test.js.map +1 -0
  68. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.d.ts +5 -0
  69. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.d.ts.map +1 -0
  70. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.js +26 -0
  71. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.js.map +1 -0
  72. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.test.d.ts +2 -0
  73. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.test.d.ts.map +1 -0
  74. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.test.js +82 -0
  75. package/lib/cli/remotes/resolveRemoteRepositoryToCreate.test.js.map +1 -0
  76. package/lib/cli/remotes/resolveRepository.d.ts +19 -0
  77. package/lib/cli/remotes/resolveRepository.d.ts.map +1 -0
  78. package/lib/cli/remotes/resolveRepository.js +58 -0
  79. package/lib/cli/remotes/resolveRepository.js.map +1 -0
  80. package/lib/cli/remotes/resolveRepository.test.d.ts +2 -0
  81. package/lib/cli/remotes/resolveRepository.test.d.ts.map +1 -0
  82. package/lib/cli/remotes/resolveRepository.test.js +148 -0
  83. package/lib/cli/remotes/resolveRepository.test.js.map +1 -0
  84. package/lib/cli/remotes/types.d.ts +5 -0
  85. package/lib/cli/remotes/types.d.ts.map +1 -0
  86. package/lib/cli/remotes/types.js +2 -0
  87. package/lib/cli/remotes/types.js.map +1 -0
  88. package/lib/cli/repository/clearLocalGitTags.d.ts +3 -0
  89. package/lib/cli/repository/clearLocalGitTags.d.ts.map +1 -0
  90. package/lib/cli/repository/clearLocalGitTags.js +7 -0
  91. package/lib/cli/repository/clearLocalGitTags.js.map +1 -0
  92. package/lib/cli/repository/clearLocalGitTags.test.d.ts +2 -0
  93. package/lib/cli/repository/clearLocalGitTags.test.d.ts.map +1 -0
  94. package/lib/cli/repository/clearLocalGitTags.test.js +16 -0
  95. package/lib/cli/repository/clearLocalGitTags.test.js.map +1 -0
  96. package/lib/cli/repository/createInitialCommit.d.ts +7 -0
  97. package/lib/cli/repository/createInitialCommit.d.ts.map +1 -0
  98. package/lib/cli/repository/createInitialCommit.js +10 -0
  99. package/lib/cli/repository/createInitialCommit.js.map +1 -0
  100. package/lib/cli/repository/createInitialCommit.test.d.ts +2 -0
  101. package/lib/cli/repository/createInitialCommit.test.d.ts.map +1 -0
  102. package/lib/cli/repository/createInitialCommit.test.js +50 -0
  103. package/lib/cli/repository/createInitialCommit.test.js.map +1 -0
  104. package/lib/cli/repository/createTrackingBranches.d.ts +4 -0
  105. package/lib/cli/repository/createTrackingBranches.d.ts.map +1 -0
  106. package/lib/cli/repository/createTrackingBranches.js +7 -0
  107. package/lib/cli/repository/createTrackingBranches.js.map +1 -0
  108. package/lib/cli/repository/createTrackingBranches.test.d.ts +2 -0
  109. package/lib/cli/repository/createTrackingBranches.test.d.ts.map +1 -0
  110. package/lib/cli/repository/createTrackingBranches.test.js +19 -0
  111. package/lib/cli/repository/createTrackingBranches.test.js.map +1 -0
  112. package/lib/cli/repository/prepareGitRepository.d.ts +4 -0
  113. package/lib/cli/repository/prepareGitRepository.d.ts.map +1 -0
  114. package/lib/cli/repository/prepareGitRepository.js +9 -0
  115. package/lib/cli/repository/prepareGitRepository.js.map +1 -0
  116. package/lib/cli/repository/prepareGitRepository.test.d.ts +2 -0
  117. package/lib/cli/repository/prepareGitRepository.test.d.ts.map +1 -0
  118. package/lib/cli/repository/prepareGitRepository.test.js +32 -0
  119. package/lib/cli/repository/prepareGitRepository.test.js.map +1 -0
  120. package/lib/cli/repository/resolveLocalRepository.d.ts +21 -0
  121. package/lib/cli/repository/resolveLocalRepository.d.ts.map +1 -0
  122. package/lib/cli/repository/resolveLocalRepository.js +57 -0
  123. package/lib/cli/repository/resolveLocalRepository.js.map +1 -0
  124. package/lib/cli/repository/resolveLocalRepository.test.d.ts +2 -0
  125. package/lib/cli/repository/resolveLocalRepository.test.d.ts.map +1 -0
  126. package/lib/cli/repository/resolveLocalRepository.test.js +167 -0
  127. package/lib/cli/repository/resolveLocalRepository.test.js.map +1 -0
  128. package/lib/cli/repository/resolveRepository.d.ts +21 -0
  129. package/lib/cli/repository/resolveRepository.d.ts.map +1 -0
  130. package/lib/cli/repository/resolveRepository.js +57 -0
  131. package/lib/cli/repository/resolveRepository.js.map +1 -0
  132. package/lib/cli/repository/resolveRepository.test.d.ts +2 -0
  133. package/lib/cli/repository/resolveRepository.test.d.ts.map +1 -0
  134. package/lib/cli/repository/resolveRepository.test.js +148 -0
  135. package/lib/cli/repository/resolveRepository.test.js.map +1 -0
  136. package/lib/cli/runCLI.d.ts +3 -4
  137. package/lib/cli/runCLI.d.ts.map +1 -1
  138. package/lib/cli/runCLI.js +2 -0
  139. package/lib/cli/runCLI.js.map +1 -1
  140. package/lib/cli/runTemplateCLI.d.ts +1 -4
  141. package/lib/cli/runTemplateCLI.d.ts.map +1 -1
  142. package/lib/cli/runTemplateCLI.js +0 -2
  143. package/lib/cli/runTemplateCLI.js.map +1 -1
  144. package/lib/cli/setup/createRepositoryOnGitHub.d.ts +0 -1
  145. package/lib/cli/setup/createRepositoryOnGitHub.d.ts.map +1 -1
  146. package/lib/cli/setup/createRepositoryOnGitHub.js.map +1 -1
  147. package/lib/cli/setup/createTrackingBranches.d.ts +1 -1
  148. package/lib/cli/setup/createTrackingBranches.d.ts.map +1 -1
  149. package/lib/cli/setup/createTrackingBranches.js.map +1 -1
  150. package/lib/cli/setup/getRemoteRepository.d.ts +2 -0
  151. package/lib/cli/setup/getRemoteRepository.d.ts.map +1 -0
  152. package/lib/cli/setup/getRemoteRepository.js +2 -0
  153. package/lib/cli/setup/getRemoteRepository.js.map +1 -0
  154. package/lib/cli/setup/remotes/checkTemplateRemoteSupport.d.ts +4 -0
  155. package/lib/cli/setup/remotes/checkTemplateRemoteSupport.d.ts.map +1 -0
  156. package/lib/cli/setup/remotes/checkTemplateRemoteSupport.js +15 -0
  157. package/lib/cli/setup/remotes/checkTemplateRemoteSupport.js.map +1 -0
  158. package/lib/cli/setup/remotes/createRemoteRepository.d.ts +5 -0
  159. package/lib/cli/setup/remotes/createRemoteRepository.d.ts.map +1 -0
  160. package/lib/cli/setup/remotes/createRemoteRepository.js +16 -0
  161. package/lib/cli/setup/remotes/createRemoteRepository.js.map +1 -0
  162. package/lib/cli/setup/remotes/createRepositoryOnGitHub.d.ts +6 -0
  163. package/lib/cli/setup/remotes/createRepositoryOnGitHub.d.ts.map +1 -0
  164. package/lib/cli/setup/remotes/createRepositoryOnGitHub.js +36 -0
  165. package/lib/cli/setup/remotes/createRepositoryOnGitHub.js.map +1 -0
  166. package/lib/cli/setup/remotes/createRepositoryOnGitHub.test.d.ts +2 -0
  167. package/lib/cli/setup/remotes/createRepositoryOnGitHub.test.d.ts.map +1 -0
  168. package/lib/cli/setup/remotes/createRepositoryOnGitHub.test.js +157 -0
  169. package/lib/cli/setup/remotes/createRepositoryOnGitHub.test.js.map +1 -0
  170. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.d.ts +4 -0
  171. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.d.ts.map +1 -0
  172. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.js +14 -0
  173. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.js.map +1 -0
  174. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.test.d.ts +2 -0
  175. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.test.d.ts.map +1 -0
  176. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.test.js +23 -0
  177. package/lib/cli/setup/remotes/resolveExistingRemoteRepository.test.js.map +1 -0
  178. package/lib/cli/setup/remotes/resolveRemoteRepository.d.ts +18 -0
  179. package/lib/cli/setup/remotes/resolveRemoteRepository.d.ts.map +1 -0
  180. package/lib/cli/setup/remotes/resolveRemoteRepository.js +47 -0
  181. package/lib/cli/setup/remotes/resolveRemoteRepository.js.map +1 -0
  182. package/lib/cli/setup/remotes/resolveRemoteRepository.test.d.ts +2 -0
  183. package/lib/cli/setup/remotes/resolveRemoteRepository.test.d.ts.map +1 -0
  184. package/lib/cli/setup/remotes/resolveRemoteRepository.test.js +103 -0
  185. package/lib/cli/setup/remotes/resolveRemoteRepository.test.js.map +1 -0
  186. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.d.ts +4 -0
  187. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.d.ts.map +1 -0
  188. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.js +14 -0
  189. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.js.map +1 -0
  190. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.test.d.ts +2 -0
  191. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.test.d.ts.map +1 -0
  192. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.test.js +23 -0
  193. package/lib/cli/setup/remotes/resolveRemoteRepositoryFromOrigin.test.js.map +1 -0
  194. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.d.ts +5 -0
  195. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.d.ts.map +1 -0
  196. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.js +26 -0
  197. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.js.map +1 -0
  198. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.test.d.ts +2 -0
  199. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.test.d.ts.map +1 -0
  200. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.test.js +82 -0
  201. package/lib/cli/setup/remotes/resolveRemoteRepositoryToCreate.test.js.map +1 -0
  202. package/lib/cli/setup/remotes/templateSupportsRemoteCreation.d.ts +3 -0
  203. package/lib/cli/setup/remotes/templateSupportsRemoteCreation.d.ts.map +1 -0
  204. package/lib/cli/setup/remotes/templateSupportsRemoteCreation.js +9 -0
  205. package/lib/cli/setup/remotes/templateSupportsRemoteCreation.js.map +1 -0
  206. package/lib/cli/setup/remotes/types.d.ts +5 -0
  207. package/lib/cli/setup/remotes/types.d.ts.map +1 -0
  208. package/lib/cli/setup/remotes/types.js +2 -0
  209. package/lib/cli/setup/remotes/types.js.map +1 -0
  210. package/lib/cli/setup/resolveExistingRemote.d.ts +2 -0
  211. package/lib/cli/setup/resolveExistingRemote.d.ts.map +1 -0
  212. package/lib/cli/setup/resolveExistingRemote.js +2 -0
  213. package/lib/cli/setup/resolveExistingRemote.js.map +1 -0
  214. package/lib/cli/setup/resolveRemoteRepository.d.ts +26 -0
  215. package/lib/cli/setup/resolveRemoteRepository.d.ts.map +1 -0
  216. package/lib/cli/setup/resolveRemoteRepository.js +49 -0
  217. package/lib/cli/setup/resolveRemoteRepository.js.map +1 -0
  218. package/lib/cli/setup/runModeSetup.d.ts +4 -4
  219. package/lib/cli/setup/runModeSetup.d.ts.map +1 -1
  220. package/lib/cli/setup/runModeSetup.js +24 -39
  221. package/lib/cli/setup/runModeSetup.js.map +1 -1
  222. package/lib/cli/setup/runModeSetup.test.js +128 -68
  223. package/lib/cli/setup/runModeSetup.test.js.map +1 -1
  224. package/lib/cli/transition/runModeTransition.d.ts +4 -4
  225. package/lib/cli/transition/runModeTransition.d.ts.map +1 -1
  226. package/lib/cli/transition/runModeTransition.js +26 -18
  227. package/lib/cli/transition/runModeTransition.js.map +1 -1
  228. package/lib/cli/transition/runModeTransition.test.js +105 -16
  229. package/lib/cli/transition/runModeTransition.test.js.map +1 -1
  230. package/lib/predicates/isTemplate.d.ts +1 -2
  231. package/lib/predicates/isTemplate.d.ts.map +1 -1
  232. package/lib/predicates/isTemplate.js.map +1 -1
  233. package/lib/types/templates.d.ts +2 -1
  234. package/lib/types/templates.d.ts.map +1 -1
  235. package/lib/utils/tryCatch.d.ts +2 -1
  236. package/lib/utils/tryCatch.d.ts.map +1 -1
  237. package/lib/utils/tryCatch.js +8 -0
  238. package/lib/utils/tryCatch.js.map +1 -1
  239. package/package.json +4 -4
@@ -0,0 +1,148 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { GitRepositoryType } from "../getGitRepositoryType.js";
3
+ import { resolveRemoteRepository } from "./resolveRepository.js";
4
+ const mockGetGitRepositoryType = vi.fn();
5
+ vi.mock("../getGitRepositoryType.js", async () => ({
6
+ ...(await vi.importActual("../getGitRepositoryType.js")),
7
+ get getGitRepositoryType() {
8
+ return mockGetGitRepositoryType;
9
+ },
10
+ }));
11
+ const mockCreateRemoteRepository = vi.fn();
12
+ vi.mock("./createRemoteRepository.js", () => ({
13
+ get createRemoteRepository() {
14
+ return mockCreateRemoteRepository;
15
+ },
16
+ }));
17
+ const mockResolveRemoteRepositoryFromOrigin = vi.fn();
18
+ vi.mock("./resolveRemoteRepositoryFromOrigin.js", () => ({
19
+ get resolveRemoteRepositoryFromOrigin() {
20
+ return mockResolveRemoteRepositoryFromOrigin;
21
+ },
22
+ }));
23
+ const mockResolveRemoteRepositoryToCreate = vi.fn();
24
+ vi.mock("./resolveRemoteRepositoryToCreate.js", () => ({
25
+ get resolveRemoteRepositoryToCreate() {
26
+ return mockResolveRemoteRepositoryToCreate;
27
+ },
28
+ }));
29
+ const stubOrigin = "stub-origin";
30
+ const stubRepository = "stub-repository";
31
+ const stubDisplay = {
32
+ dumpItems: vi.fn(),
33
+ item: vi.fn(),
34
+ log: vi.fn(),
35
+ spinner: {
36
+ message: vi.fn(),
37
+ start: vi.fn(),
38
+ stop: vi.fn(),
39
+ },
40
+ };
41
+ describe(resolveRemoteRepository, () => {
42
+ it("returns a remote error when both requests.remote and offline are true", async () => {
43
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { offline: true, remote: true }, {}, {});
44
+ expect(actual).toEqual({
45
+ remote: new Error("--offline cannot be combined with --remote."),
46
+ });
47
+ expect(mockResolveRemoteRepositoryFromOrigin).not.toHaveBeenCalled();
48
+ });
49
+ it("returns no remote when requests.remote is falsy and offline is true", async () => {
50
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { offline: true, remote: false }, {}, {});
51
+ expect(actual).toEqual({
52
+ remote: undefined,
53
+ });
54
+ expect(mockResolveRemoteRepositoryFromOrigin).not.toHaveBeenCalled();
55
+ });
56
+ it("returns no remote when in a Git subdirectory and request.remote is falsy", async () => {
57
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Subdirectory);
58
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
59
+ expect(actual).toEqual({
60
+ remote: undefined,
61
+ });
62
+ });
63
+ it("returns a remote error when in a Git subdirectory and request.remote is true", async () => {
64
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Subdirectory);
65
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, {}, {});
66
+ expect(actual).toEqual({
67
+ remote: new Error("--remote can only be used when in a non-Git directory or in the root of a Git directory."),
68
+ });
69
+ });
70
+ it("returns the origin when it already exists and request.remote is falsy", async () => {
71
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
72
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce({
73
+ owner: stubOrigin,
74
+ repository: stubRepository,
75
+ });
76
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
77
+ expect(actual).toEqual({
78
+ message: {
79
+ level: "step",
80
+ text: `Detected existing remote origin repository`,
81
+ },
82
+ remote: {
83
+ owner: stubOrigin,
84
+ repository: stubRepository,
85
+ },
86
+ });
87
+ });
88
+ it("returns an error when an origin already exists and request.remote is true", async () => {
89
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
90
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce({
91
+ owner: stubOrigin,
92
+ repository: stubRepository,
93
+ });
94
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, {}, {});
95
+ expect(actual).toEqual({
96
+ remote: new Error("--remote requested, but an origin remote already exists."),
97
+ });
98
+ });
99
+ it("returns no remote when there is no existing origin and both requests.remote and offline are falsy", async () => {
100
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
101
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
102
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
103
+ expect(actual).toEqual({
104
+ remote: undefined,
105
+ });
106
+ });
107
+ it("returns a remote error when there is no existing origin, requests.remote is true, and there is no Octokit fetcher", async () => {
108
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
109
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
110
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: {} }, {});
111
+ expect(actual).toEqual({
112
+ remote: new Error("--remote requested, but no existing repository or GitHub authentication found. Please log in with the GitHub CLI or set a GH_AUTH env variable."),
113
+ });
114
+ });
115
+ it("returns the error when resolving a remote repository to create fails", async () => {
116
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
117
+ const creationLocator = new Error("Could not create remote.");
118
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
119
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
120
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
121
+ expect(actual).toEqual({ remote: creationLocator });
122
+ });
123
+ it("returns the error when resolving a remote repository to create succeeds and creating a new repository fails", async () => {
124
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
125
+ const creationError = new Error("Could not create repository.");
126
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
127
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce({
128
+ owner: stubOrigin,
129
+ repository: stubRepository,
130
+ });
131
+ mockCreateRemoteRepository.mockResolvedValueOnce(creationError);
132
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
133
+ expect(actual).toEqual({ remote: creationError });
134
+ });
135
+ it("returns the locator when resolving a remote repository to create succeeds and creating a new repository succeeds", async () => {
136
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
137
+ const creationLocator = {
138
+ owner: stubOrigin,
139
+ repository: stubRepository,
140
+ };
141
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
142
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
143
+ mockCreateRemoteRepository.mockResolvedValueOnce(creationLocator);
144
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
145
+ expect(actual).toEqual({ remote: creationLocator });
146
+ });
147
+ });
148
+ //# sourceMappingURL=resolveRemoteRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepository.test.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepository.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { SystemRunner } from "bingo-systems";
2
+ import { RepositoryLocator } from "new-github-repository";
3
+ export declare function resolveRemoteRepositoryFromOrigin(runner: SystemRunner): Promise<RepositoryLocator | undefined>;
4
+ //# sourceMappingURL=resolveRemoteRepositoryFromOrigin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryFromOrigin.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryFromOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,wBAAsB,iCAAiC,CACtD,MAAM,EAAE,YAAY,GAClB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAcxC"}
@@ -0,0 +1,14 @@
1
+ import gitUrlParse from "git-url-parse";
2
+ import { tryCatchSafeSync } from "../../utils/tryCatch.js";
3
+ export async function resolveRemoteRepositoryFromOrigin(runner) {
4
+ const { stdout } = await runner("git remote get-url origin");
5
+ if (!stdout) {
6
+ return undefined;
7
+ }
8
+ const parsed = tryCatchSafeSync(() => gitUrlParse(stdout.toString()));
9
+ return (parsed && {
10
+ owner: parsed.owner,
11
+ repository: parsed.name,
12
+ });
13
+ }
14
+ //# sourceMappingURL=resolveRemoteRepositoryFromOrigin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryFromOrigin.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryFromOrigin.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACtD,MAAoB;IAEpB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO,CACN,MAAM,IAAI;QACT,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,IAAI;KACvB,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolveRemoteRepositoryFromOrigin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryFromOrigin.test.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryFromOrigin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { resolveRemoteRepositoryFromOrigin } from "./resolveRemoteRepositoryFromOrigin.js";
3
+ describe(resolveRemoteRepositoryFromOrigin, () => {
4
+ it("returns undefined when there is no origin remote", async () => {
5
+ const runner = vi.fn().mockResolvedValue({ stdout: "" });
6
+ const result = await resolveRemoteRepositoryFromOrigin(runner);
7
+ expect(result).toBeUndefined();
8
+ });
9
+ it("returns undefined when the origin is not a valid Git URL", async () => {
10
+ const runner = vi.fn().mockResolvedValue({ stdout: "invalid" });
11
+ const result = await resolveRemoteRepositoryFromOrigin(runner);
12
+ expect(result).toBeUndefined();
13
+ });
14
+ it("returns a locator when the origin is a valid Git URL", async () => {
15
+ const runner = vi.fn().mockResolvedValue({ stdout: "abc/def.git" });
16
+ const result = await resolveRemoteRepositoryFromOrigin(runner);
17
+ expect(result).toEqual({
18
+ owner: "abc",
19
+ repository: "def",
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=resolveRemoteRepositoryFromOrigin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryFromOrigin.test.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryFromOrigin.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAE3F,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;QAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACtB,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,KAAK;SACjB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { BingoSystem } from "bingo-systems";
2
+ import { RepositoryLocator, Template } from "../../types/templates.js";
3
+ import { PartialRepositoryLocator } from "./types.js";
4
+ export declare function resolveRemoteRepositoryToCreate(locator: PartialRepositoryLocator, system: BingoSystem, template: Template): Promise<Error | RepositoryLocator>;
5
+ //# sourceMappingURL=resolveRemoteRepositoryToCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryToCreate.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAsB,+BAA+B,CACpD,OAAO,EAAE,wBAAwB,EACjC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAqCpC"}
@@ -0,0 +1,26 @@
1
+ import { promptForOptionSchema } from "../prompts/promptForOptionSchema.js";
2
+ import { isStringLikeSchema } from "../schemas/isStringLikeSchema.js";
3
+ export async function resolveRemoteRepositoryToCreate(locator, system, template) {
4
+ if (locator.owner) {
5
+ return { owner: locator.owner, repository: locator.repository };
6
+ }
7
+ const username = await getUsername();
8
+ if (username) {
9
+ return { owner: username, repository: locator.repository };
10
+ }
11
+ if (!("owner" in template.options)) {
12
+ return new Error("--remote requested, but could not infer an owner because this template lacks an 'owner' option.");
13
+ }
14
+ if (!isStringLikeSchema(template.options.owner)) {
15
+ return new Error("--remote requested, but could not infer an owner because this template's owner option is not a string-like.");
16
+ }
17
+ const prompted = await promptForOptionSchema("owner", template.options.owner, "organization or username owning the repository", undefined);
18
+ return typeof prompted === "string"
19
+ ? { owner: prompted, repository: locator.repository }
20
+ : new Error("--remote requested, but no owner was provided.");
21
+ async function getUsername() {
22
+ const value = await system.runner("gh config get user -h github.com");
23
+ return value instanceof Error ? undefined : value.stdout?.toString();
24
+ }
25
+ }
26
+ //# sourceMappingURL=resolveRemoteRepositoryToCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryToCreate.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryToCreate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,OAAiC,EACjC,MAAmB,EACnB,QAAkB;IAElB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,KAAK,CACf,iGAAiG,CACjG,CAAC;IACH,CAAC;IAED,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,KAAK,CACf,6GAA6G,CAC7G,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC3C,OAAO,EACP,QAAQ,CAAC,OAAO,CAAC,KAAK,EACtB,gDAAgD,EAChD,SAAS,CACT,CAAC;IAEF,OAAO,OAAO,QAAQ,KAAK,QAAQ;QAClC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;QACrD,CAAC,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAE/D,KAAK,UAAU,WAAW;QACzB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;QACtE,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACtE,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolveRemoteRepositoryToCreate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryToCreate.test.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryToCreate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { z } from "zod";
3
+ import { createTemplate } from "../../creators/createTemplate.js";
4
+ import { resolveRemoteRepositoryToCreate } from "./resolveRemoteRepositoryToCreate.js";
5
+ const mockPromptForOptionSchema = vi.fn();
6
+ vi.mock("../prompts/promptForOptionSchema.js", () => ({
7
+ get promptForOptionSchema() {
8
+ return mockPromptForOptionSchema;
9
+ },
10
+ }));
11
+ const stubOwner = "stub-owner";
12
+ const stubRepository = "stub-repo";
13
+ const mockSystem = {
14
+ fetchers: {
15
+ fetch: vi.fn(),
16
+ octokit: {},
17
+ },
18
+ fs: {},
19
+ runner: vi.fn(),
20
+ };
21
+ describe(resolveRemoteRepositoryToCreate, () => {
22
+ it("returns the locator if locator.owner is provided", async () => {
23
+ const locator = { owner: stubOwner, repository: stubRepository };
24
+ const result = await resolveRemoteRepositoryToCreate(locator, mockSystem, createTemplate({ produce: vi.fn() }));
25
+ expect(result).toEqual(locator);
26
+ });
27
+ it("returns the username as owner if gh config get user resolves one", async () => {
28
+ const result = await resolveRemoteRepositoryToCreate({ repository: stubRepository }, {
29
+ ...mockSystem,
30
+ runner: vi.fn().mockResolvedValueOnce({
31
+ stdout: stubOwner,
32
+ }),
33
+ }, createTemplate({ produce: vi.fn() }));
34
+ expect(result).toEqual({ owner: stubOwner, repository: stubRepository });
35
+ });
36
+ it("returns an error if an owner cannot be inferred and the template doesn't have a string owner option", async () => {
37
+ const result = await resolveRemoteRepositoryToCreate({ repository: stubRepository }, {
38
+ ...mockSystem,
39
+ runner: vi.fn().mockResolvedValueOnce({}),
40
+ }, createTemplate({ produce: vi.fn() }));
41
+ expect(result).toEqual(new Error("--remote requested, but could not infer an owner because this template lacks an 'owner' option."));
42
+ });
43
+ it("returns an error if an owner cannot be inferred and the template's owner option is not a string-like", async () => {
44
+ const result = await resolveRemoteRepositoryToCreate({ repository: stubRepository }, {
45
+ ...mockSystem,
46
+ runner: vi.fn().mockResolvedValueOnce({}),
47
+ }, createTemplate({
48
+ options: {
49
+ owner: z.object({ value: z.number() }),
50
+ },
51
+ produce: vi.fn(),
52
+ }));
53
+ expect(result).toEqual(new Error("--remote requested, but could not infer an owner because this template's owner option is not a string-like."));
54
+ });
55
+ it("returns the prompted owner when prompting succeeds", async () => {
56
+ mockPromptForOptionSchema.mockResolvedValueOnce(stubOwner);
57
+ const actual = await resolveRemoteRepositoryToCreate({ repository: stubRepository }, {
58
+ ...mockSystem,
59
+ runner: vi.fn().mockResolvedValueOnce({}),
60
+ }, createTemplate({
61
+ options: {
62
+ owner: z.string(),
63
+ },
64
+ produce: vi.fn(),
65
+ }));
66
+ expect(actual).toEqual({ owner: stubOwner, repository: stubRepository });
67
+ });
68
+ it("returns an error when prompting fails", async () => {
69
+ mockPromptForOptionSchema.mockResolvedValueOnce(new Error("Cancelled."));
70
+ const actual = await resolveRemoteRepositoryToCreate({ repository: stubRepository }, {
71
+ ...mockSystem,
72
+ runner: vi.fn().mockResolvedValueOnce({}),
73
+ }, createTemplate({
74
+ options: {
75
+ owner: z.string(),
76
+ },
77
+ produce: vi.fn(),
78
+ }));
79
+ expect(actual).toEqual(new Error("--remote requested, but no owner was provided."));
80
+ });
81
+ });
82
+ //# sourceMappingURL=resolveRemoteRepositoryToCreate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepositoryToCreate.test.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRemoteRepositoryToCreate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { BingoSystem } from "bingo-systems";
2
+ import { RepositoryLocator } from "new-github-repository";
3
+ import { Template } from "../../types/templates.js";
4
+ import { ClackDisplay } from "../display/createClackDisplay.js";
5
+ import { PartialRepositoryLocator } from "./types.js";
6
+ export interface RemoteRepositoryRequest {
7
+ offline?: boolean | undefined;
8
+ remote?: boolean | undefined;
9
+ }
10
+ export interface ResolvedRemoteMessage {
11
+ level: "step" | "warn";
12
+ text: string;
13
+ }
14
+ export interface ResolvedRemoteRepository {
15
+ message?: ResolvedRemoteMessage | undefined;
16
+ remote: Error | RepositoryLocator | undefined;
17
+ }
18
+ export declare function resolveRemoteRepository(display: ClackDisplay, locator: PartialRepositoryLocator, request: RemoteRepositoryRequest, system: BingoSystem, template: Template): Promise<ResolvedRemoteRepository>;
19
+ //# sourceMappingURL=resolveRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRepository.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAQhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,wBAAwB;IACxC,OAAO,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,KAAK,GAAG,iBAAiB,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,wBAAwB,CAAC,CA6EnC"}
@@ -0,0 +1,58 @@
1
+ import { getGitRepositoryType, GitRepositoryType, } from "../getGitRepositoryType.js";
2
+ import { createRemoteRepository } from "./createRemoteRepository.js";
3
+ import { resolveRemoteRepositoryFromOrigin } from "./resolveRemoteRepositoryFromOrigin.js";
4
+ import { resolveRemoteRepositoryToCreate } from "./resolveRemoteRepositoryToCreate.js";
5
+ export async function resolveRemoteRepository(display, locator, request, system, template) {
6
+ if (request.offline) {
7
+ return {
8
+ remote: request.remote
9
+ ? new Error("--offline cannot be combined with --remote.")
10
+ : undefined,
11
+ };
12
+ }
13
+ const gitRepositoryType = await getGitRepositoryType(system.runner);
14
+ if (gitRepositoryType === GitRepositoryType.Subdirectory) {
15
+ return {
16
+ remote: request.remote
17
+ ? new Error("--remote can only be used when in a non-Git directory or in the root of a Git directory.")
18
+ : undefined,
19
+ };
20
+ }
21
+ const origin = gitRepositoryType === GitRepositoryType.Root &&
22
+ (await resolveRemoteRepositoryFromOrigin(system.runner));
23
+ if (origin) {
24
+ if (request.remote) {
25
+ return {
26
+ remote: new Error("--remote requested, but an origin remote already exists."),
27
+ };
28
+ }
29
+ return {
30
+ message: {
31
+ level: "step",
32
+ text: `Detected existing remote origin repository`,
33
+ },
34
+ remote: origin,
35
+ };
36
+ }
37
+ if (!request.remote) {
38
+ return {
39
+ remote: undefined,
40
+ };
41
+ }
42
+ if (!system.fetchers.octokit) {
43
+ return {
44
+ remote: new Error("--remote requested, but no existing repository or GitHub authentication found. Please log in with the GitHub CLI or set a GH_AUTH env variable."),
45
+ };
46
+ }
47
+ const creationLocator = await resolveRemoteRepositoryToCreate(locator, system, template);
48
+ if (creationLocator instanceof Error) {
49
+ return {
50
+ remote: creationLocator,
51
+ };
52
+ }
53
+ const creationError = await createRemoteRepository(display, creationLocator, system, template);
54
+ return {
55
+ remote: creationError ?? creationLocator,
56
+ };
57
+ }
58
+ //# sourceMappingURL=resolveRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRepository.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRepository.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,oBAAoB,EACpB,iBAAiB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAkBvF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,OAAqB,EACrB,OAAiC,EACjC,OAAgC,EAChC,MAAmB,EACnB,QAAkB;IAElB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;gBACrB,CAAC,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC;gBAC1D,CAAC,CAAC,SAAS;SACZ,CAAC;IACH,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,iBAAiB,KAAK,iBAAiB,CAAC,YAAY,EAAE,CAAC;QAC1D,OAAO;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;gBACrB,CAAC,CAAC,IAAI,KAAK,CACT,0FAA0F,CAC1F;gBACF,CAAC,CAAC,SAAS;SACZ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACX,iBAAiB,KAAK,iBAAiB,CAAC,IAAI;QAC5C,CAAC,MAAM,iCAAiC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1D,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO;gBACN,MAAM,EAAE,IAAI,KAAK,CAChB,0DAA0D,CAC1D;aACD,CAAC;QACH,CAAC;QAED,OAAO;YACN,OAAO,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,4CAA4C;aAClD;YACD,MAAM,EAAE,MAAM;SACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO;YACN,MAAM,EAAE,SAAS;SACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO;YACN,MAAM,EAAE,IAAI,KAAK,CAChB,iJAAiJ,CACjJ;SACD,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,+BAA+B,CAC5D,OAAO,EACP,MAAM,EACN,QAAQ,CACR,CAAC;IACF,IAAI,eAAe,YAAY,KAAK,EAAE,CAAC;QACtC,OAAO;YACN,MAAM,EAAE,eAAe;SACvB,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,sBAAsB,CACjD,OAAO,EACP,eAAe,EACf,MAAM,EACN,QAAQ,CACR,CAAC;IAEF,OAAO;QACN,MAAM,EAAE,aAAa,IAAI,eAAe;KACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolveRepository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRepository.test.d.ts","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRepository.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { GitRepositoryType } from "../getGitRepositoryType.js";
3
+ import { resolveRemoteRepository } from "./resolveRepository.js";
4
+ const mockGetGitRepositoryType = vi.fn();
5
+ vi.mock("../getGitRepositoryType.js", async () => ({
6
+ ...(await vi.importActual("../getGitRepositoryType.js")),
7
+ get getGitRepositoryType() {
8
+ return mockGetGitRepositoryType;
9
+ },
10
+ }));
11
+ const mockCreateRemoteRepository = vi.fn();
12
+ vi.mock("./createRemoteRepository.js", () => ({
13
+ get createRemoteRepository() {
14
+ return mockCreateRemoteRepository;
15
+ },
16
+ }));
17
+ const mockResolveRemoteRepositoryFromOrigin = vi.fn();
18
+ vi.mock("./resolveRemoteRepositoryFromOrigin.js", () => ({
19
+ get resolveRemoteRepositoryFromOrigin() {
20
+ return mockResolveRemoteRepositoryFromOrigin;
21
+ },
22
+ }));
23
+ const mockResolveRemoteRepositoryToCreate = vi.fn();
24
+ vi.mock("./resolveRemoteRepositoryToCreate.js", () => ({
25
+ get resolveRemoteRepositoryToCreate() {
26
+ return mockResolveRemoteRepositoryToCreate;
27
+ },
28
+ }));
29
+ const stubOrigin = "stub-origin";
30
+ const stubRepository = "stub-repository";
31
+ const stubDisplay = {
32
+ dumpItems: vi.fn(),
33
+ item: vi.fn(),
34
+ log: vi.fn(),
35
+ spinner: {
36
+ message: vi.fn(),
37
+ start: vi.fn(),
38
+ stop: vi.fn(),
39
+ },
40
+ };
41
+ describe(resolveRemoteRepository, () => {
42
+ it("returns a remote error when both requests.remote and offline are true", async () => {
43
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { offline: true, remote: true }, {}, {});
44
+ expect(actual).toEqual({
45
+ remote: new Error("--offline cannot be combined with --remote."),
46
+ });
47
+ expect(mockResolveRemoteRepositoryFromOrigin).not.toHaveBeenCalled();
48
+ });
49
+ it("returns no remote when requests.remote is falsy and offline is true", async () => {
50
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { offline: true, remote: false }, {}, {});
51
+ expect(actual).toEqual({
52
+ remote: undefined,
53
+ });
54
+ expect(mockResolveRemoteRepositoryFromOrigin).not.toHaveBeenCalled();
55
+ });
56
+ it("returns no remote when in a Git subdirectory and request.remote is falsy", async () => {
57
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Subdirectory);
58
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
59
+ expect(actual).toEqual({
60
+ remote: undefined,
61
+ });
62
+ });
63
+ it("returns a remote error when in a Git subdirectory and request.remote is true", async () => {
64
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Subdirectory);
65
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, {}, {});
66
+ expect(actual).toEqual({
67
+ remote: new Error("--remote can only be used when in a non-Git directory or in the root of a Git directory."),
68
+ });
69
+ });
70
+ it("returns the origin when it already exists and request.remote is falsy", async () => {
71
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
72
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce({
73
+ owner: stubOrigin,
74
+ repository: stubRepository,
75
+ });
76
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
77
+ expect(actual).toEqual({
78
+ message: {
79
+ level: "step",
80
+ text: `Detected existing remote origin repository`,
81
+ },
82
+ remote: {
83
+ owner: stubOrigin,
84
+ repository: stubRepository,
85
+ },
86
+ });
87
+ });
88
+ it("returns an error when an origin already exists and request.remote is true", async () => {
89
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
90
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce({
91
+ owner: stubOrigin,
92
+ repository: stubRepository,
93
+ });
94
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, {}, {});
95
+ expect(actual).toEqual({
96
+ remote: new Error("--remote requested, but an origin remote already exists."),
97
+ });
98
+ });
99
+ it("returns no remote when there is no existing origin and both requests.remote and offline are falsy", async () => {
100
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
101
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
102
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
103
+ expect(actual).toEqual({
104
+ remote: undefined,
105
+ });
106
+ });
107
+ it("returns a remote error when there is no existing origin, requests.remote is true, and there is no Octokit fetcher", async () => {
108
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
109
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
110
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: {} }, {});
111
+ expect(actual).toEqual({
112
+ remote: new Error("--remote requested, but no existing repository or GitHub authentication found. Please log in with the GitHub CLI or set a GH_AUTH env variable."),
113
+ });
114
+ });
115
+ it("returns the error when resolving a remote repository to create fails", async () => {
116
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
117
+ const creationLocator = new Error("Could not create remote.");
118
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
119
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
120
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
121
+ expect(actual).toEqual({ remote: creationLocator });
122
+ });
123
+ it("returns the error when resolving a remote repository to create succeeds and creating a new repository fails", async () => {
124
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
125
+ const creationError = new Error("Could not create repository.");
126
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
127
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce({
128
+ owner: stubOrigin,
129
+ repository: stubRepository,
130
+ });
131
+ mockCreateRemoteRepository.mockResolvedValueOnce(creationError);
132
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
133
+ expect(actual).toEqual({ remote: creationError });
134
+ });
135
+ it("returns the locator when resolving a remote repository to create succeeds and creating a new repository succeeds", async () => {
136
+ mockGetGitRepositoryType.mockResolvedValueOnce(GitRepositoryType.Root);
137
+ const creationLocator = {
138
+ owner: stubOrigin,
139
+ repository: stubRepository,
140
+ };
141
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
142
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
143
+ mockCreateRemoteRepository.mockResolvedValueOnce(creationLocator);
144
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { remote: true }, { fetchers: { octokit: {} } }, {});
145
+ expect(actual).toEqual({ remote: creationLocator });
146
+ });
147
+ });
148
+ //# sourceMappingURL=resolveRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRepository.test.js","sourceRoot":"","sources":["../../../src/cli/remotes/resolveRepository.test.ts"],"names":[],"mappings":"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"}