bingo 0.8.2 → 0.9.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.
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 +17 -4
  227. package/lib/cli/transition/runModeTransition.js.map +1 -1
  228. package/lib/cli/transition/runModeTransition.test.js +43 -12
  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,157 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { z } from "zod";
3
+ import { createTemplate } from "../../../creators/createTemplate.js";
4
+ import { createRepositoryOnGitHub } from "./createRepositoryOnGitHub.js";
5
+ vi.mock("@clack/prompts");
6
+ const mockGetGitHubAuthToken = vi.fn();
7
+ vi.mock("get-github-auth-token", () => ({
8
+ get getGitHubAuthToken() {
9
+ return mockGetGitHubAuthToken;
10
+ },
11
+ }));
12
+ const mockNewGitHubRepository = vi.fn();
13
+ vi.mock("new-github-repository", () => ({
14
+ get newGitHubRepository() {
15
+ return mockNewGitHubRepository;
16
+ },
17
+ }));
18
+ const mockPromptForOptionSchema = vi.fn();
19
+ vi.mock("../prompts/promptForOptionSchema.js", () => ({
20
+ get promptForOptionSchema() {
21
+ return mockPromptForOptionSchema;
22
+ },
23
+ }));
24
+ const display = {
25
+ dumpItems: vi.fn(),
26
+ item: vi.fn(),
27
+ log: vi.fn(),
28
+ spinner: {
29
+ message: vi.fn(),
30
+ start: vi.fn(),
31
+ stop: vi.fn(),
32
+ },
33
+ };
34
+ const mockOctokit = {};
35
+ const options = {
36
+ owner: "mock-owner",
37
+ repository: "mock-repository",
38
+ };
39
+ const templateWithOwnerAndRepository = createTemplate({
40
+ options: { owner: z.string(), repository: z.string() },
41
+ produce: vi.fn(),
42
+ });
43
+ const templateWithOwner = createTemplate({
44
+ options: { owner: z.string() },
45
+ produce: vi.fn(),
46
+ });
47
+ const templateWithRepository = createTemplate({
48
+ options: { repository: z.string() },
49
+ produce: vi.fn(),
50
+ });
51
+ describe("createRepositoryOnGitHub", () => {
52
+ it("returns a warning when owner is not a string-like", async () => {
53
+ const mockRunner = vi.fn();
54
+ const actual = await createRepositoryOnGitHub(display, options, false, mockOctokit, mockRunner, templateWithRepository);
55
+ expect(actual).toEqual({
56
+ offline: true,
57
+ warning: "Running in local-only mode. Add string-like options.owner and options.repository schemas to enable creating a repository on GitHub.",
58
+ });
59
+ expect(mockGetGitHubAuthToken).not.toHaveBeenCalled();
60
+ expect(mockRunner).not.toHaveBeenCalled();
61
+ expect(mockPromptForOptionSchema).not.toHaveBeenCalled();
62
+ expect(mockNewGitHubRepository).not.toHaveBeenCalled();
63
+ });
64
+ it("returns a warning when repository is not a string-like", async () => {
65
+ const mockRunner = vi.fn();
66
+ const actual = await createRepositoryOnGitHub(display, options, false, mockOctokit, mockRunner, templateWithOwner);
67
+ expect(actual).toEqual({
68
+ offline: true,
69
+ warning: "Running in local-only mode. Add string-like options.owner and options.repository schemas to enable creating a repository on GitHub.",
70
+ });
71
+ expect(mockGetGitHubAuthToken).not.toHaveBeenCalled();
72
+ expect(mockRunner).not.toHaveBeenCalled();
73
+ expect(mockPromptForOptionSchema).not.toHaveBeenCalled();
74
+ expect(mockNewGitHubRepository).not.toHaveBeenCalled();
75
+ });
76
+ it("returns an offline warning when getGitHubAuthToken does not retrieve a token", async () => {
77
+ const mockRunner = vi.fn();
78
+ mockGetGitHubAuthToken.mockResolvedValueOnce({ succeeded: false });
79
+ const actual = await createRepositoryOnGitHub(display, options, false, mockOctokit, mockRunner, templateWithOwnerAndRepository);
80
+ expect(actual).toEqual({
81
+ offline: true,
82
+ warning: "Running in local-only mode. To push to GitHub, log in with the GitHub CLI (cli.github.com) or run with a GH_TOKEN process environment variable.",
83
+ });
84
+ expect(mockRunner).not.toHaveBeenCalled();
85
+ expect(mockPromptForOptionSchema).not.toHaveBeenCalled();
86
+ expect(mockNewGitHubRepository).not.toHaveBeenCalled();
87
+ });
88
+ it("returns a repository locator from a requested owner and repository when both are provided", async () => {
89
+ const owner = "mock-owner";
90
+ const repository = "mock-repository";
91
+ const mockRunner = vi.fn();
92
+ mockGetGitHubAuthToken.mockResolvedValueOnce({ succeeded: true });
93
+ const actual = await createRepositoryOnGitHub(display, options, false, mockOctokit, mockRunner, templateWithOwnerAndRepository);
94
+ expect(actual).toEqual({
95
+ offline: false,
96
+ remote: { owner, repository },
97
+ });
98
+ expect(mockRunner).not.toHaveBeenCalled();
99
+ expect(mockPromptForOptionSchema).not.toHaveBeenCalled();
100
+ expect(mockNewGitHubRepository).toHaveBeenCalledWith({
101
+ octokit: mockOctokit,
102
+ owner,
103
+ repository,
104
+ template: undefined,
105
+ });
106
+ });
107
+ it("returns a repository locator for the gh user when owner is undefined, gh retrieves a user, and creation succeeds", async () => {
108
+ const owner = "mock-owner";
109
+ const repository = "mock-repository";
110
+ const mockRunner = vi.fn().mockResolvedValue({ stdout: owner });
111
+ mockGetGitHubAuthToken.mockResolvedValueOnce({ succeeded: true });
112
+ const actual = await createRepositoryOnGitHub(display, { owner: undefined, repository }, false, mockOctokit, mockRunner, templateWithOwnerAndRepository);
113
+ expect(actual).toEqual({
114
+ offline: false,
115
+ remote: { owner, repository },
116
+ });
117
+ expect(mockRunner).toHaveBeenCalledWith("gh config get user -h github.com");
118
+ expect(mockPromptForOptionSchema).not.toHaveBeenCalled();
119
+ expect(mockNewGitHubRepository).toHaveBeenCalledWith({
120
+ octokit: mockOctokit,
121
+ owner,
122
+ repository,
123
+ template: undefined,
124
+ });
125
+ });
126
+ it("returns a repository locator for the prompted user when owner is undefined, gh errors, and creation succeeds", async () => {
127
+ const owner = "mock-owner";
128
+ const repository = "mock-repository";
129
+ const mockRunner = vi.fn().mockResolvedValue(new Error("Oh no!"));
130
+ mockGetGitHubAuthToken.mockResolvedValueOnce({ succeeded: true });
131
+ mockPromptForOptionSchema.mockResolvedValueOnce(owner);
132
+ const actual = await createRepositoryOnGitHub(display, { owner: undefined, repository }, false, mockOctokit, mockRunner, templateWithOwnerAndRepository);
133
+ expect(actual).toEqual({
134
+ offline: false,
135
+ remote: { owner, repository },
136
+ });
137
+ expect(mockRunner).toHaveBeenCalledWith("gh config get user -h github.com");
138
+ expect(mockPromptForOptionSchema).toHaveBeenCalledWith("owner", expect.any(z.ZodString), expect.any(String), undefined);
139
+ expect(mockNewGitHubRepository).toHaveBeenCalledWith({
140
+ octokit: mockOctokit,
141
+ owner,
142
+ repository,
143
+ template: undefined,
144
+ });
145
+ });
146
+ it("returns the error when creating a repository errors", async () => {
147
+ const error = new Error("Oh no!");
148
+ mockGetGitHubAuthToken.mockResolvedValueOnce({ succeeded: true });
149
+ mockNewGitHubRepository.mockRejectedValueOnce(error);
150
+ const actual = await createRepositoryOnGitHub(display, options, false, mockOctokit, vi.fn(), templateWithOwnerAndRepository);
151
+ expect(actual).toEqual({
152
+ offline: true,
153
+ remote: error,
154
+ });
155
+ });
156
+ });
157
+ //# sourceMappingURL=createRepositoryOnGitHub.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRepositoryOnGitHub.test.js","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/createRepositoryOnGitHub.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 resolveExistingRemoteRepository(runner: SystemRunner): Promise<RepositoryLocator | undefined>;
4
+ //# sourceMappingURL=resolveExistingRemoteRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveExistingRemoteRepository.d.ts","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveExistingRemoteRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,wBAAsB,+BAA+B,CACpD,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 resolveExistingRemoteRepository(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=resolveExistingRemoteRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveExistingRemoteRepository.js","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveExistingRemoteRepository.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,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=resolveExistingRemoteRepository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveExistingRemoteRepository.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveExistingRemoteRepository.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=resolveExistingRemoteRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveExistingRemoteRepository.test.js","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveExistingRemoteRepository.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,18 @@
1
+ import { BingoSystem } from "bingo-systems";
2
+ import { RepositoryLocator, Template } from "../../../types/templates.js";
3
+ import { ClackDisplay } from "../../display/createClackDisplay.js";
4
+ import { PartialRepositoryLocator } from "./types.js";
5
+ export interface RemoteRepositoryRequest {
6
+ offline?: boolean | undefined;
7
+ requestedRemote?: boolean | undefined;
8
+ }
9
+ export interface ResolvedRemoteMessage {
10
+ level: "step" | "warn";
11
+ text: string;
12
+ }
13
+ export interface ResolvedRemoteRepository {
14
+ message?: ResolvedRemoteMessage | undefined;
15
+ remote: Error | RepositoryLocator | undefined;
16
+ }
17
+ export declare function resolveRemoteRepository(display: ClackDisplay, locator: PartialRepositoryLocator, request: RemoteRepositoryRequest, system: BingoSystem, template: Template): Promise<ResolvedRemoteRepository>;
18
+ //# sourceMappingURL=resolveRemoteRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepository.d.ts","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveRemoteRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAKnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;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,CA4DnC"}
@@ -0,0 +1,47 @@
1
+ import * as prompts from "@clack/prompts";
2
+ import chalk from "chalk";
3
+ import { runSpinnerTask } from "../../display/runSpinnerTask.js";
4
+ import { createRemoteRepository } from "./createRemoteRepository.js";
5
+ import { resolveRemoteRepositoryFromOrigin } from "./resolveRemoteRepositoryFromOrigin.js";
6
+ import { resolveRemoteRepositoryToCreate } from "./resolveRemoteRepositoryToCreate.js";
7
+ export async function resolveRemoteRepository(display, locator, request, system, template) {
8
+ const origin = await resolveRemoteRepositoryFromOrigin(system.runner);
9
+ if (origin) {
10
+ return {
11
+ message: {
12
+ level: "step",
13
+ text: `Detected existing remote origin repository on GitHub`,
14
+ },
15
+ remote: origin,
16
+ };
17
+ }
18
+ if (!request.requestedRemote || request.offline) {
19
+ return {
20
+ remote: request.requestedRemote && request.offline
21
+ ? new Error("--offline cannot be combined with --remote.")
22
+ : undefined,
23
+ };
24
+ }
25
+ if (!system.fetchers.octokit) {
26
+ return {
27
+ 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."),
28
+ };
29
+ }
30
+ const creationLocator = await resolveRemoteRepositoryToCreate(locator, system, template);
31
+ if (creationLocator instanceof Error) {
32
+ return { remote: creationLocator };
33
+ }
34
+ const remoteDescriptor = `${creationLocator.owner}/${creationLocator.repository}`;
35
+ const creationResult = await runSpinnerTask(display, `Creating repository on GitHub: ${chalk.green(remoteDescriptor)}`, `Created repository on GitHub`, async () => {
36
+ await createRemoteRepository(creationLocator, system, template);
37
+ });
38
+ if (creationResult instanceof Error) {
39
+ return { remote: creationResult };
40
+ }
41
+ prompts.log.step([
42
+ "You've got a new repository ready to use in:",
43
+ ` ${chalk.green(`https://github.com/${remoteDescriptor}`)}`,
44
+ ].join("\n"));
45
+ return { remote: creationLocator };
46
+ }
47
+ //# sourceMappingURL=resolveRemoteRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepository.js","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveRemoteRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,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,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO;YACN,OAAO,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,sDAAsD;aAC5D;YACD,MAAM,EAAE,MAAM;SACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO;YACN,MAAM,EACL,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,OAAO;gBACzC,CAAC,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC;gBAC1D,CAAC,CAAC,SAAS;SACb,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,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;IAClF,MAAM,cAAc,GAAG,MAAM,cAAc,CAC1C,OAAO,EACP,kCAAkC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EACjE,8BAA8B,EAC9B,KAAK,IAAwB,EAAE;QAC9B,MAAM,sBAAsB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC,CACD,CAAC;IAEF,IAAI,cAAc,YAAY,KAAK,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CACf;QACC,8CAA8C;QAC9C,KAAK,KAAK,CAAC,KAAK,CAAC,sBAAsB,gBAAgB,EAAE,CAAC,EAAE;KAC5D,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolveRemoteRepository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepository.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/setup/remotes/resolveRemoteRepository.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { resolveRemoteRepository } from "./resolveRemoteRepository.js";
3
+ vi.mock("@clack/prompts");
4
+ const mockNewGitHubRepository = vi.fn();
5
+ vi.mock("new-github-repository", () => ({
6
+ get newGitHubRepository() {
7
+ return mockNewGitHubRepository;
8
+ },
9
+ }));
10
+ const mockResolveRemoteRepositoryFromOrigin = vi.fn();
11
+ vi.mock("./resolveRemoteRepositoryFromOrigin.js", () => ({
12
+ get resolveRemoteRepositoryFromOrigin() {
13
+ return mockResolveRemoteRepositoryFromOrigin;
14
+ },
15
+ }));
16
+ const mockResolveRemoteRepositoryToCreate = vi.fn();
17
+ vi.mock("./resolveRemoteRepositoryToCreate.js", () => ({
18
+ get resolveRemoteRepositoryToCreate() {
19
+ return mockResolveRemoteRepositoryToCreate;
20
+ },
21
+ }));
22
+ const stubOrigin = "stub-origin";
23
+ const stubRepository = "stub-repository";
24
+ const stubDisplay = {
25
+ dumpItems: vi.fn(),
26
+ item: vi.fn(),
27
+ log: vi.fn(),
28
+ spinner: {
29
+ message: vi.fn(),
30
+ start: vi.fn(),
31
+ stop: vi.fn(),
32
+ },
33
+ };
34
+ describe(resolveRemoteRepository, () => {
35
+ it("returns the origin when it already exists", async () => {
36
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce({
37
+ owner: stubOrigin,
38
+ repository: stubRepository,
39
+ });
40
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
41
+ expect(actual).toEqual({
42
+ message: {
43
+ level: "message",
44
+ text: `Synchronizing repository with origin remote on GitHub: ${stubOrigin}/${stubRepository}.`,
45
+ },
46
+ remote: {
47
+ owner: stubOrigin,
48
+ repository: stubRepository,
49
+ },
50
+ });
51
+ });
52
+ it("returns no remote when there is no existing origin and both requestedRemote and offline are falsy", async () => {
53
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
54
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, {}, {}, {});
55
+ expect(actual).toEqual({
56
+ remote: undefined,
57
+ });
58
+ });
59
+ it("returns a remote error when there is no existing origin and both requestedRemote and offline are true", async () => {
60
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
61
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { offline: true, requestedRemote: true }, {}, {});
62
+ expect(actual).toEqual({
63
+ remote: new Error("--offline cannot be combined with --remote."),
64
+ });
65
+ });
66
+ it("returns a remote error when there is no existing origin, requestedRemote is true, and there is no Octokit fetcher", async () => {
67
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
68
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { requestedRemote: true }, { fetchers: {} }, {});
69
+ expect(actual).toEqual({
70
+ 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."),
71
+ });
72
+ });
73
+ it("returns the error when resolving a remote repository to create fails", async () => {
74
+ const creationLocator = new Error("Could not create remote.");
75
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
76
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
77
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { requestedRemote: true }, { fetchers: { octokit: {} } }, {});
78
+ expect(actual).toEqual({ remote: creationLocator });
79
+ });
80
+ it("returns the error when resolving a remote repository to create succeeds and creating a new repository fails", async () => {
81
+ const creationError = new Error("Could not create repository.");
82
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
83
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce({
84
+ owner: stubOrigin,
85
+ repository: stubRepository,
86
+ });
87
+ mockNewGitHubRepository.mockRejectedValueOnce(creationError);
88
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { requestedRemote: true }, { fetchers: { octokit: {} } }, {});
89
+ expect(actual).toEqual({ remote: creationError });
90
+ });
91
+ it("returns the locator when resolving a remote repository to create succeeds and creating a new repository succeeds", async () => {
92
+ const creationLocator = {
93
+ owner: stubOrigin,
94
+ repository: stubRepository,
95
+ };
96
+ mockResolveRemoteRepositoryFromOrigin.mockResolvedValueOnce(undefined);
97
+ mockResolveRemoteRepositoryToCreate.mockResolvedValueOnce(creationLocator);
98
+ mockNewGitHubRepository.mockResolvedValueOnce(creationLocator);
99
+ const actual = await resolveRemoteRepository(stubDisplay, { repository: stubRepository }, { requestedRemote: true }, { fetchers: { octokit: {} } }, {});
100
+ expect(actual).toEqual({ remote: creationLocator });
101
+ });
102
+ });
103
+ //# sourceMappingURL=resolveRemoteRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveRemoteRepository.test.js","sourceRoot":"","sources":["../../../../src/cli/setup/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/setup/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/setup/remotes/resolveRemoteRepositoryFromOrigin.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,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/setup/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/setup/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/setup/remotes/resolveRemoteRepositoryToCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG1E,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/setup/remotes/resolveRemoteRepositoryToCreate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,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/setup/remotes/resolveRemoteRepositoryToCreate.test.ts"],"names":[],"mappings":""}