simplemdg-dev-cli 2.0.4 → 2.4.5

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 (148) hide show
  1. package/README.md +62 -354
  2. package/USER_GUIDE.md +55 -376
  3. package/dist/commands/cds.command.js +69 -60
  4. package/dist/commands/cds.command.js.map +1 -1
  5. package/dist/commands/cf-db.command.d.ts +2 -0
  6. package/dist/commands/cf-db.command.js +606 -0
  7. package/dist/commands/cf-db.command.js.map +1 -0
  8. package/dist/commands/cf.command.js +291 -280
  9. package/dist/commands/cf.command.js.map +1 -1
  10. package/dist/commands/gitlab.command.d.ts +2 -0
  11. package/dist/commands/gitlab.command.js +351 -0
  12. package/dist/commands/gitlab.command.js.map +1 -0
  13. package/dist/commands/npmrc.command.js +50 -44
  14. package/dist/commands/npmrc.command.js.map +1 -1
  15. package/dist/core/cache.d.ts +1 -1
  16. package/dist/core/cache.js +58 -31
  17. package/dist/core/cache.js.map +1 -1
  18. package/dist/core/cds.js +32 -22
  19. package/dist/core/cds.js.map +1 -1
  20. package/dist/core/cf-env-parser.d.ts +1 -1
  21. package/dist/core/cf-env-parser.js +4 -1
  22. package/dist/core/cf-env-parser.js.map +1 -1
  23. package/dist/core/cf.d.ts +1 -1
  24. package/dist/core/cf.js +46 -31
  25. package/dist/core/cf.js.map +1 -1
  26. package/dist/core/db/db-btp.d.ts +48 -0
  27. package/dist/core/db/db-btp.js +162 -0
  28. package/dist/core/db/db-btp.js.map +1 -0
  29. package/dist/core/db/db-cache.d.ts +40 -0
  30. package/dist/core/db/db-cache.js +188 -0
  31. package/dist/core/db/db-cache.js.map +1 -0
  32. package/dist/core/db/db-connection.d.ts +22 -0
  33. package/dist/core/db/db-connection.js +73 -0
  34. package/dist/core/db/db-connection.js.map +1 -0
  35. package/dist/core/db/db-crypto.d.ts +3 -0
  36. package/dist/core/db/db-crypto.js +54 -0
  37. package/dist/core/db/db-crypto.js.map +1 -0
  38. package/dist/core/db/db-hana-adapter.d.ts +36 -0
  39. package/dist/core/db/db-hana-adapter.js +251 -0
  40. package/dist/core/db/db-hana-adapter.js.map +1 -0
  41. package/dist/core/db/db-metadata.d.ts +25 -0
  42. package/dist/core/db/db-metadata.js +150 -0
  43. package/dist/core/db/db-metadata.js.map +1 -0
  44. package/dist/core/db/db-postgres-adapter.d.ts +34 -0
  45. package/dist/core/db/db-postgres-adapter.js +259 -0
  46. package/dist/core/db/db-postgres-adapter.js.map +1 -0
  47. package/dist/core/db/db-query-files.d.ts +20 -0
  48. package/dist/core/db/db-query-files.js +106 -0
  49. package/dist/core/db/db-query-files.js.map +1 -0
  50. package/dist/core/db/db-query-history.d.ts +5 -0
  51. package/dist/core/db/db-query-history.js +49 -0
  52. package/dist/core/db/db-query-history.js.map +1 -0
  53. package/dist/core/db/db-row.d.ts +28 -0
  54. package/dist/core/db/db-row.js +123 -0
  55. package/dist/core/db/db-row.js.map +1 -0
  56. package/dist/core/db/db-studio-client.d.ts +1 -0
  57. package/dist/core/db/db-studio-client.js +401 -0
  58. package/dist/core/db/db-studio-client.js.map +1 -0
  59. package/dist/core/db/db-studio-html.d.ts +4 -0
  60. package/dist/core/db/db-studio-html.js +83 -0
  61. package/dist/core/db/db-studio-html.js.map +1 -0
  62. package/dist/core/db/db-studio-server.d.ts +11 -0
  63. package/dist/core/db/db-studio-server.js +528 -0
  64. package/dist/core/db/db-studio-server.js.map +1 -0
  65. package/dist/core/db/db-studio-styles.d.ts +1 -0
  66. package/dist/core/db/db-studio-styles.js +225 -0
  67. package/dist/core/db/db-studio-styles.js.map +1 -0
  68. package/dist/core/db/db-types.d.ts +214 -0
  69. package/dist/core/db/db-types.js +3 -0
  70. package/dist/core/db/db-types.js.map +1 -0
  71. package/dist/core/db/db-vcap-parser.d.ts +7 -0
  72. package/dist/core/db/db-vcap-parser.js +137 -0
  73. package/dist/core/db/db-vcap-parser.js.map +1 -0
  74. package/dist/core/doctor.d.ts +1 -1
  75. package/dist/core/doctor.js +14 -8
  76. package/dist/core/doctor.js.map +1 -1
  77. package/dist/core/guide.js +31 -26
  78. package/dist/core/guide.js.map +1 -1
  79. package/dist/core/install.d.ts +1 -1
  80. package/dist/core/install.js +17 -11
  81. package/dist/core/install.js.map +1 -1
  82. package/dist/core/navigator.d.ts +17 -0
  83. package/dist/core/navigator.js +140 -0
  84. package/dist/core/navigator.js.map +1 -0
  85. package/dist/core/npmrc.js +29 -16
  86. package/dist/core/npmrc.js.map +1 -1
  87. package/dist/core/process.js +11 -6
  88. package/dist/core/process.js.map +1 -1
  89. package/dist/core/prompts.js +16 -8
  90. package/dist/core/prompts.js.map +1 -1
  91. package/dist/core/repository.d.ts +1 -1
  92. package/dist/core/repository.js +16 -9
  93. package/dist/core/repository.js.map +1 -1
  94. package/dist/core/scanner.d.ts +1 -1
  95. package/dist/core/scanner.js +13 -7
  96. package/dist/core/scanner.js.map +1 -1
  97. package/dist/core/tooling.d.ts +28 -0
  98. package/dist/core/tooling.js +168 -0
  99. package/dist/core/tooling.js.map +1 -0
  100. package/dist/core/types.js +2 -1
  101. package/dist/core/version-conflict.d.ts +2 -2
  102. package/dist/core/version-conflict.js +11 -6
  103. package/dist/core/version-conflict.js.map +1 -1
  104. package/dist/index.js +65 -48
  105. package/dist/index.js.map +1 -1
  106. package/dist/types-local.js +2 -1
  107. package/package.json +12 -6
  108. package/src/commands/cds.command.ts +529 -0
  109. package/src/commands/cf-db.command.ts +636 -0
  110. package/src/commands/cf.command.ts +3345 -0
  111. package/src/commands/gitlab.command.ts +373 -0
  112. package/src/commands/npmrc.command.ts +581 -0
  113. package/src/core/cache.ts +332 -0
  114. package/src/core/cds.ts +278 -0
  115. package/src/core/cf-env-parser.ts +131 -0
  116. package/src/core/cf.ts +271 -0
  117. package/src/core/db/db-btp.ts +207 -0
  118. package/src/core/db/db-cache.ts +242 -0
  119. package/src/core/db/db-connection.ts +79 -0
  120. package/src/core/db/db-crypto.ts +53 -0
  121. package/src/core/db/db-hana-adapter.ts +306 -0
  122. package/src/core/db/db-metadata.ts +174 -0
  123. package/src/core/db/db-postgres-adapter.ts +293 -0
  124. package/src/core/db/db-query-files.ts +130 -0
  125. package/src/core/db/db-query-history.ts +53 -0
  126. package/src/core/db/db-row.ts +157 -0
  127. package/src/core/db/db-studio-client.ts +397 -0
  128. package/src/core/db/db-studio-html.ts +85 -0
  129. package/src/core/db/db-studio-server.ts +626 -0
  130. package/src/core/db/db-studio-styles.ts +221 -0
  131. package/src/core/db/db-types.ts +243 -0
  132. package/src/core/db/db-vcap-parser.ts +182 -0
  133. package/src/core/doctor.ts +70 -0
  134. package/src/core/guide.ts +261 -0
  135. package/src/core/install.ts +91 -0
  136. package/src/core/navigator.ts +164 -0
  137. package/src/core/npmrc.ts +171 -0
  138. package/src/core/process.ts +75 -0
  139. package/src/core/prompts.ts +225 -0
  140. package/src/core/repository.ts +36 -0
  141. package/src/core/scanner.ts +41 -0
  142. package/src/core/tooling.ts +207 -0
  143. package/src/core/types.ts +152 -0
  144. package/src/core/version-conflict.ts +46 -0
  145. package/src/index.ts +460 -0
  146. package/src/types/external.d.ts +3 -0
  147. package/src/types-local.ts +11 -0
  148. package/tsconfig.json +17 -0
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerGitLabCommands = registerGitLabCommands;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const node_os_1 = __importDefault(require("node:os"));
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_crypto_1 = __importDefault(require("node:crypto"));
11
+ const execa_1 = require("execa");
12
+ const prompts_1 = __importDefault(require("prompts"));
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const prompts_2 = require("../core/prompts");
15
+ const GITLAB_CACHE_DIR = node_path_1.default.join(node_os_1.default.homedir(), ".simplemdg");
16
+ const GITLAB_CACHE_FILE = node_path_1.default.join(GITLAB_CACHE_DIR, "gitlab.json");
17
+ function emptyGitLabCache() {
18
+ return { instances: [], groupsByBaseUrl: {}, projectsByGroup: {}, destinations: ["."] };
19
+ }
20
+ async function readGitLabCache() {
21
+ if (!(await fs_extra_1.default.pathExists(GITLAB_CACHE_FILE)))
22
+ return emptyGitLabCache();
23
+ const value = await fs_extra_1.default.readJson(GITLAB_CACHE_FILE).catch(() => emptyGitLabCache());
24
+ return {
25
+ instances: value.instances ?? [],
26
+ groupsByBaseUrl: value.groupsByBaseUrl ?? {},
27
+ projectsByGroup: value.projectsByGroup ?? {},
28
+ destinations: value.destinations?.length ? value.destinations : ["."],
29
+ };
30
+ }
31
+ async function writeGitLabCache(cache) {
32
+ await fs_extra_1.default.ensureDir(GITLAB_CACHE_DIR);
33
+ await fs_extra_1.default.writeJson(GITLAB_CACHE_FILE, cache, { spaces: 2 });
34
+ }
35
+ function normalizeBaseUrl(value) {
36
+ return value.trim().replace(/\/+$/, "");
37
+ }
38
+ function makeGroupCacheKey(baseUrl, groupId) {
39
+ return `${normalizeBaseUrl(baseUrl)}|${groupId}`;
40
+ }
41
+ async function openBrowser(url) {
42
+ const platform = process.platform;
43
+ const command = platform === "win32" ? "cmd" : platform === "darwin" ? "open" : "xdg-open";
44
+ const args = platform === "win32" ? ["/c", "start", "", url] : [url];
45
+ await (0, execa_1.execa)(command, args, { reject: false, detached: true, stdio: "ignore" });
46
+ }
47
+ async function readClipboard() {
48
+ if (process.platform !== "win32")
49
+ return undefined;
50
+ const result = await (0, execa_1.execa)("powershell", ["-NoProfile", "-Command", "Get-Clipboard"], { reject: false });
51
+ return result.exitCode === 0 ? result.stdout.trim() : undefined;
52
+ }
53
+ async function gitlabFetch(auth, apiPath, search) {
54
+ const url = new URL(`${normalizeBaseUrl(auth.baseUrl)}/api/v4${apiPath}`);
55
+ if (search) {
56
+ for (const [key, value] of search.entries())
57
+ url.searchParams.set(key, value);
58
+ }
59
+ const response = await fetch(url, { headers: { "PRIVATE-TOKEN": auth.token } });
60
+ if (!response.ok)
61
+ throw new Error(`GitLab API failed ${response.status}: ${await response.text()}`);
62
+ return await response.json();
63
+ }
64
+ async function gitlabFetchAll(auth, apiPath, search) {
65
+ const rows = [];
66
+ let page = 1;
67
+ while (true) {
68
+ const params = new URLSearchParams({ per_page: "100", page: String(page), ...(search ?? {}) });
69
+ const chunk = await gitlabFetch(auth, apiPath, params);
70
+ rows.push(...chunk);
71
+ if (chunk.length < 100)
72
+ break;
73
+ page += 1;
74
+ }
75
+ return rows;
76
+ }
77
+ async function validateToken(baseUrl, token) {
78
+ const auth = { baseUrl: normalizeBaseUrl(baseUrl), token, updatedAt: new Date().toISOString() };
79
+ const user = await gitlabFetch(auth, "/user");
80
+ let expiresAt;
81
+ try {
82
+ const self = await gitlabFetch(auth, "/personal_access_tokens/self");
83
+ expiresAt = self.expires_at;
84
+ }
85
+ catch {
86
+ expiresAt = undefined;
87
+ }
88
+ return { ...auth, username: user.username, name: user.name, expiresAt };
89
+ }
90
+ async function saveAuth(auth) {
91
+ const cache = await readGitLabCache();
92
+ const next = [auth, ...cache.instances.filter((item) => normalizeBaseUrl(item.baseUrl) !== normalizeBaseUrl(auth.baseUrl))];
93
+ cache.instances = next.slice(0, 20);
94
+ await writeGitLabCache(cache);
95
+ await approveGitCredential(auth).catch(() => undefined);
96
+ }
97
+ async function approveGitCredential(auth) {
98
+ const url = new URL(auth.baseUrl);
99
+ const input = [`protocol=${url.protocol.replace(":", "")}`, `host=${url.host}`, "username=oauth2", `password=${auth.token}`, "", ""].join("\n");
100
+ await (0, execa_1.execa)("git", ["credential", "approve"], { input, reject: false });
101
+ }
102
+ async function askAuth() {
103
+ const cache = await readGitLabCache();
104
+ if (cache.instances.length) {
105
+ const selected = await (0, prompts_2.searchableSelectChoice)({
106
+ message: "Select GitLab instance",
107
+ choices: [
108
+ ...cache.instances.map((item, index) => ({ title: `${item.username ?? "user"} · ${item.baseUrl} · logged in`, value: String(index) })),
109
+ { title: "Login to another GitLab instance", value: "new" },
110
+ ],
111
+ allowCustomValue: false,
112
+ });
113
+ if (selected !== "new")
114
+ return cache.instances[Number(selected)];
115
+ }
116
+ return await runLoginFlow();
117
+ }
118
+ async function runLoginFlow() {
119
+ const baseResponse = await (0, prompts_1.default)({ type: "text", name: "baseUrl", message: "GitLab base URL", initial: "https://gitlab.simplemdg.com" });
120
+ const baseUrl = normalizeBaseUrl(baseResponse.baseUrl || "https://gitlab.simplemdg.com");
121
+ const mode = await (0, prompts_2.searchableSelectChoice)({
122
+ message: "GitLab login method",
123
+ choices: [
124
+ { title: "Open token page and auto-detect from clipboard", value: "clipboard" },
125
+ { title: "Paste token manually", value: "manual" },
126
+ ],
127
+ allowCustomValue: false,
128
+ });
129
+ let token = "";
130
+ if (mode === "clipboard") {
131
+ const tokenUrl = `${baseUrl}/-/user_settings/personal_access_tokens?name=SimpleMDG%20CLI&scopes=api,read_repository,write_repository`;
132
+ console.log(chalk_1.default.gray(`Opening: ${tokenUrl}`));
133
+ await openBrowser(tokenUrl);
134
+ console.log(chalk_1.default.yellow("Create/copy the token in GitLab. The CLI will read clipboard, then fallback to manual input."));
135
+ for (let i = 0; i < 60; i += 1) {
136
+ const value = await readClipboard();
137
+ if (value && /^(glpat-|gloas-|glcbt-|[A-Za-z0-9_\-]{20,})/.test(value)) {
138
+ token = value;
139
+ break;
140
+ }
141
+ await new Promise((resolve) => setTimeout(resolve, 1000));
142
+ }
143
+ }
144
+ if (!token) {
145
+ const response = await (0, prompts_1.default)({ type: "password", name: "token", message: "GitLab token" });
146
+ token = String(response.token ?? "").trim();
147
+ }
148
+ if (!token)
149
+ throw new Error("GitLab token is required");
150
+ const auth = await validateToken(baseUrl, token);
151
+ await saveAuth(auth);
152
+ console.log(chalk_1.default.green(`Logged in: ${auth.username ?? auth.name ?? "GitLab user"} · ${auth.baseUrl}`));
153
+ return auth;
154
+ }
155
+ async function listRootGroups(auth, refresh) {
156
+ const cache = await readGitLabCache();
157
+ const cached = cache.groupsByBaseUrl[auth.baseUrl];
158
+ if (!refresh && cached?.groups?.length)
159
+ return cached.groups;
160
+ console.log(chalk_1.default.gray(`Scanning GitLab root groups from ${auth.baseUrl}...`));
161
+ const groups = await gitlabFetchAll(auth, "/groups", { min_access_level: "10", top_level_only: "true", all_available: "false", order_by: "name", sort: "asc" });
162
+ cache.groupsByBaseUrl[auth.baseUrl] = { updatedAt: new Date().toISOString(), groups };
163
+ await writeGitLabCache(cache);
164
+ return groups;
165
+ }
166
+ async function askGroup(auth, refresh) {
167
+ const groups = await listRootGroups(auth, !!refresh);
168
+ if (!groups.length)
169
+ throw new Error("No GitLab root groups found for this account.");
170
+ const selected = await (0, prompts_2.searchableSelectChoice)({
171
+ message: "Search/select GitLab root group",
172
+ choices: groups.map((group) => ({ title: `${group.full_path} · #${group.id} · ${group.visibility ?? ""}`, value: String(group.id) })),
173
+ allowCustomValue: false,
174
+ });
175
+ const group = groups.find((item) => String(item.id) === selected);
176
+ if (!group)
177
+ throw new Error("Group not found");
178
+ return group;
179
+ }
180
+ async function listProjects(auth, group, refresh) {
181
+ const cache = await readGitLabCache();
182
+ const key = makeGroupCacheKey(auth.baseUrl, group.id);
183
+ const cached = cache.projectsByGroup[key];
184
+ if (!refresh && cached?.projects?.length)
185
+ return cached.projects;
186
+ console.log(chalk_1.default.gray(`Scanning projects in ${group.full_path}...`));
187
+ const encodedId = encodeURIComponent(String(group.id));
188
+ const projects = await gitlabFetchAll(auth, `/groups/${encodedId}/projects`, { include_subgroups: "true", archived: "false", order_by: "path", sort: "asc" });
189
+ cache.projectsByGroup[key] = { updatedAt: new Date().toISOString(), projects };
190
+ await writeGitLabCache(cache);
191
+ return projects;
192
+ }
193
+ function localProjectPath(destination, project) {
194
+ return node_path_1.default.resolve(destination, project.path_with_namespace.replace(/\//g, node_path_1.default.sep));
195
+ }
196
+ function gitEnv(auth) {
197
+ const askPass = node_path_1.default.join(node_os_1.default.tmpdir(), `smdg-git-askpass-${node_crypto_1.default.randomBytes(6).toString("hex")}${process.platform === "win32" ? ".cmd" : ".sh"}`);
198
+ if (process.platform === "win32") {
199
+ fs_extra_1.default.writeFileSync(askPass, `@echo off\r\necho %SMDG_GIT_ASKPASS_VALUE%\r\n`);
200
+ }
201
+ else {
202
+ fs_extra_1.default.writeFileSync(askPass, `#!/bin/sh\nprintf '%s\\n' "$SMDG_GIT_ASKPASS_VALUE"\n`);
203
+ fs_extra_1.default.chmodSync(askPass, 0o700);
204
+ }
205
+ return { ...process.env, GIT_TERMINAL_PROMPT: "0", GIT_ASKPASS: askPass, SMDG_GIT_ASKPASS_VALUE: auth.token };
206
+ }
207
+ async function runGit(repoPath, args, auth) {
208
+ const result = await (0, execa_1.execa)("git", args, { cwd: repoPath, reject: false, env: gitEnv(auth) });
209
+ return { ok: (result.exitCode ?? 0) === 0, output: [result.stdout, result.stderr].filter(Boolean).join("\n") };
210
+ }
211
+ async function cloneOrUpdateProject(project, destination, action, auth) {
212
+ const repoPath = localProjectPath(destination, project);
213
+ await fs_extra_1.default.ensureDir(node_path_1.default.dirname(repoPath));
214
+ if (!(await fs_extra_1.default.pathExists(node_path_1.default.join(repoPath, ".git")))) {
215
+ const clone = await runGit(undefined, ["clone", project.http_url_to_repo, repoPath], auth);
216
+ if (!clone.ok)
217
+ throw new Error(clone.output);
218
+ }
219
+ else {
220
+ await runGit(repoPath, ["fetch", "--all", "--prune", "--tags"], auth);
221
+ }
222
+ if (action === "fetch")
223
+ return;
224
+ if (action === "pull-current") {
225
+ const pull = await runGit(repoPath, ["pull", "--ff-only"], auth);
226
+ if (!pull.ok)
227
+ throw new Error(pull.output);
228
+ return;
229
+ }
230
+ if (action === "pull-all") {
231
+ const original = await runGit(repoPath, ["branch", "--show-current"], auth);
232
+ const refs = await runGit(repoPath, ["for-each-ref", "--format=%(refname:short)", "refs/remotes/origin"], auth);
233
+ if (!refs.ok)
234
+ throw new Error(refs.output);
235
+ const branches = refs.output.split(/\r?\n/)
236
+ .map((line) => line.trim())
237
+ .filter((line) => line.startsWith("origin/"))
238
+ .map((line) => line.replace(/^origin\//, ""))
239
+ .filter((name) => name && !["HEAD", "origin"].includes(name));
240
+ for (const branch of branches) {
241
+ const localExists = await runGit(repoPath, ["show-ref", "--verify", `refs/heads/${branch}`], auth);
242
+ const switchArgs = localExists.ok ? ["switch", branch] : ["switch", "-c", branch, "--track", `origin/${branch}`];
243
+ const sw = await runGit(repoPath, switchArgs, auth);
244
+ if (sw.ok)
245
+ await runGit(repoPath, ["pull", "--ff-only"], auth);
246
+ }
247
+ const restore = original.output.trim() || project.default_branch || "main";
248
+ await runGit(repoPath, ["switch", restore], auth);
249
+ }
250
+ }
251
+ async function parallelRun(items, concurrency, worker) {
252
+ let cursor = 0;
253
+ let done = 0;
254
+ let failed = 0;
255
+ async function next() {
256
+ while (cursor < items.length) {
257
+ const index = cursor++;
258
+ try {
259
+ await worker(items[index], index);
260
+ }
261
+ catch (error) {
262
+ failed += 1;
263
+ console.error(chalk_1.default.red(`[${index + 1}/${items.length}] FAIL ${error instanceof Error ? error.message : error}`));
264
+ }
265
+ finally {
266
+ done += 1;
267
+ process.stdout.write(chalk_1.default.gray(`\rProgress ${done}/${items.length} · failed ${failed}`));
268
+ }
269
+ }
270
+ }
271
+ await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => next()));
272
+ process.stdout.write("\n");
273
+ }
274
+ async function runSync(options) {
275
+ const auth = await askAuth();
276
+ const mode = await (0, prompts_2.searchableSelectChoice)({
277
+ message: "What do you want to pull/clone?",
278
+ choices: [
279
+ { title: "Pull/clone a GitLab group", value: "group" },
280
+ { title: "Pull/clone a single repository", value: "repo" },
281
+ ],
282
+ allowCustomValue: false,
283
+ });
284
+ const group = await askGroup(auth, options.refresh);
285
+ const projects = await listProjects(auth, group, !!options.refresh);
286
+ let selectedProjects = projects;
287
+ if (mode === "repo") {
288
+ const selectedProjectId = await (0, prompts_2.searchableSelectChoice)({
289
+ message: "Search/select GitLab repository",
290
+ choices: projects.map((project) => ({ title: `${project.path_with_namespace} · #${project.id}`, value: String(project.id) })),
291
+ allowCustomValue: false,
292
+ });
293
+ selectedProjects = projects.filter((project) => String(project.id) === selectedProjectId);
294
+ }
295
+ const dest = await (0, prompts_1.default)({ type: "text", name: "value", message: "Destination folder", initial: "." });
296
+ const action = await (0, prompts_2.searchableSelectChoice)({
297
+ message: "Sync action",
298
+ choices: [
299
+ { title: "Clone missing repos and fetch existing repos", value: "fetch" },
300
+ { title: "Pull current branch only", value: "pull-current" },
301
+ { title: "Pull all remote branches locally", value: "pull-all" },
302
+ ],
303
+ allowCustomValue: false,
304
+ });
305
+ const jobValue = await (0, prompts_2.searchableSelectChoice)({
306
+ message: "Parallel jobs",
307
+ choices: ["4", "2", "6", "8"].map((value) => ({ title: `${value} parallel jobs`, value })),
308
+ allowCustomValue: true,
309
+ });
310
+ const concurrency = Math.max(1, Math.min(16, Number(jobValue) || 4));
311
+ const destination = node_path_1.default.resolve(String(dest.value || "."));
312
+ const cache = await readGitLabCache();
313
+ cache.destinations = [destination, ...cache.destinations.filter((item) => item !== destination)].slice(0, 20);
314
+ await writeGitLabCache(cache);
315
+ console.log(chalk_1.default.cyan(`Syncing ${selectedProjects.length} repo(s) with ${concurrency} job(s)...`));
316
+ await parallelRun(selectedProjects, concurrency, async (project, index) => {
317
+ console.log(chalk_1.default.blue(`\n[${index + 1}/${selectedProjects.length}] RUN ${project.path_with_namespace}`));
318
+ await cloneOrUpdateProject(project, destination, action, auth);
319
+ console.log(chalk_1.default.green(`[${index + 1}/${selectedProjects.length}] DONE ${project.path_with_namespace}`));
320
+ });
321
+ }
322
+ function registerGitLabCommands(program) {
323
+ const gitlab = program.command("gitlab").alias("gl").description("GitLab browser login, group/project scan, clone, sync, and branch fetch helpers");
324
+ gitlab.command("login").description("Login to GitLab and cache auth").action(async () => { await runLoginFlow(); });
325
+ gitlab.command("auth-status").alias("whoami").description("Show cached GitLab auth status").action(async () => {
326
+ const cache = await readGitLabCache();
327
+ if (!cache.instances.length) {
328
+ console.log("Not logged in.");
329
+ return;
330
+ }
331
+ for (const auth of cache.instances)
332
+ console.log(`${auth.baseUrl} · ${auth.username ?? "user"} · expires ${auth.expiresAt ?? "unknown"}`);
333
+ });
334
+ gitlab.command("logout").description("Remove cached GitLab login").action(async () => { const cache = await readGitLabCache(); cache.instances = []; await writeGitLabCache(cache); console.log("GitLab login cache cleared."); });
335
+ gitlab.command("groups").description("List GitLab root groups").option("--refresh", "Refresh from API").action(async (options) => {
336
+ const auth = await askAuth();
337
+ const groups = await listRootGroups(auth, !!options.refresh);
338
+ for (const group of groups)
339
+ console.log(`${group.full_path} · #${group.id} · ${group.visibility ?? ""}`);
340
+ });
341
+ gitlab.command("projects").description("List projects in a GitLab root group").option("--refresh", "Refresh from API").action(async (options) => {
342
+ const auth = await askAuth();
343
+ const group = await askGroup(auth, options.refresh);
344
+ const projects = await listProjects(auth, group, !!options.refresh);
345
+ for (const project of projects)
346
+ console.log(`${project.path_with_namespace} · #${project.id}`);
347
+ });
348
+ gitlab.command("sync").alias("clone").description("Clone or update GitLab projects without ghorg").option("--refresh", "Refresh groups/projects from API").action(runSync);
349
+ gitlab.command("pull").description("Interactive pull/fetch for GitLab projects").option("--refresh", "Refresh groups/projects from API").action(runSync);
350
+ }
351
+ //# sourceMappingURL=gitlab.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.command.js","sourceRoot":"","sources":["../../src/commands/gitlab.command.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
- import path from "node:path";
2
- import { readFile } from "node:fs/promises";
3
- import prompts from "prompts";
4
- import { readCache, rememberNpmrcHost, rememberNpmrcOutputFileName, rememberNpmrcPackages, rememberNpmrcScope, rememberNpmrcTokenEntry, } from "../core/cache.js";
5
- import { normalizeGitLabHost, normalizeNpmScope, parsePackageInputList, readPackageJsonName, writeNpmrcFile, } from "../core/npmrc.js";
6
- import { searchableSelectChoice, searchableSelectOrInput } from "../core/prompts.js";
7
- import { resolveRepositoryPath } from "../core/repository.js";
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerNpmrcCommands = registerNpmrcCommands;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const promises_1 = require("node:fs/promises");
9
+ const prompts_1 = __importDefault(require("prompts"));
10
+ const cache_1 = require("../core/cache");
11
+ const npmrc_1 = require("../core/npmrc");
12
+ const prompts_2 = require("../core/prompts");
13
+ const repository_1 = require("../core/repository");
8
14
  const DEFAULT_PROJECT_NAME = "default";
9
15
  const DEFAULT_HOST = "gitlab.simplemdg.com";
10
16
  const DEFAULT_SCOPE = "@simplemdg";
@@ -44,16 +50,16 @@ async function resolveCurrentProjectName(cwd, explicitProjectName) {
44
50
  if (explicitProjectName?.trim()) {
45
51
  return explicitProjectName.trim();
46
52
  }
47
- const repositoryPath = await resolveRepositoryPath(cwd);
48
- const packageJsonName = await readPackageJsonName(repositoryPath);
49
- return packageJsonName ?? path.basename(repositoryPath) ?? DEFAULT_PROJECT_NAME;
53
+ const repositoryPath = await (0, repository_1.resolveRepositoryPath)(cwd);
54
+ const packageJsonName = await (0, npmrc_1.readPackageJsonName)(repositoryPath);
55
+ return packageJsonName ?? node_path_1.default.basename(repositoryPath) ?? DEFAULT_PROJECT_NAME;
50
56
  }
51
57
  async function askHost(providedHost) {
52
58
  if (providedHost?.trim()) {
53
- return normalizeGitLabHost(providedHost);
59
+ return (0, npmrc_1.normalizeGitLabHost)(providedHost);
54
60
  }
55
- const cache = await readCache();
56
- return normalizeGitLabHost(await searchableSelectOrInput({
61
+ const cache = await (0, cache_1.readCache)();
62
+ return (0, npmrc_1.normalizeGitLabHost)(await (0, prompts_2.searchableSelectOrInput)({
57
63
  message: "GitLab host",
58
64
  values: cache.npmrc.hosts,
59
65
  initialValue: cache.npmrc.hosts[0] ?? DEFAULT_HOST,
@@ -63,10 +69,10 @@ async function askHost(providedHost) {
63
69
  }
64
70
  async function askScope(providedScope) {
65
71
  if (providedScope?.trim()) {
66
- return normalizeNpmScope(providedScope);
72
+ return (0, npmrc_1.normalizeNpmScope)(providedScope);
67
73
  }
68
- const cache = await readCache();
69
- return normalizeNpmScope(await searchableSelectOrInput({
74
+ const cache = await (0, cache_1.readCache)();
75
+ return (0, npmrc_1.normalizeNpmScope)(await (0, prompts_2.searchableSelectOrInput)({
70
76
  message: "NPM scope",
71
77
  values: cache.npmrc.scopes,
72
78
  initialValue: cache.npmrc.scopes[0] ?? DEFAULT_SCOPE,
@@ -90,7 +96,7 @@ async function askPackageEntry(options) {
90
96
  updatedAt: now,
91
97
  };
92
98
  }
93
- const cache = await readCache();
99
+ const cache = await (0, cache_1.readCache)();
94
100
  const projectPackages = cache.npmrc.packageIdsByProject[options.projectName]?.packages ?? [];
95
101
  const legacyProjectIds = cache.npmrc.packageIdsByProject[options.projectName]?.packageIds ?? [];
96
102
  const legacyProjectPackages = legacyProjectIds.map((packageId) => ({
@@ -114,7 +120,7 @@ async function askPackageEntry(options) {
114
120
  ...globalPackages,
115
121
  ...legacyGlobalPackages,
116
122
  ]);
117
- const selectedPackageId = await searchableSelectChoice({
123
+ const selectedPackageId = await (0, prompts_2.searchableSelectChoice)({
118
124
  message: `GitLab package for ${options.projectName}`,
119
125
  choices: packages.map((entry) => ({
120
126
  title: buildPackageEntryTitle(entry),
@@ -132,7 +138,7 @@ async function askPackageEntry(options) {
132
138
  updatedAt: now,
133
139
  };
134
140
  }
135
- const response = await prompts({
141
+ const response = await (0, prompts_1.default)({
136
142
  type: "text",
137
143
  name: "packageName",
138
144
  message: `Package name for ${selectedPackageId}`,
@@ -161,7 +167,7 @@ async function askToken(options) {
161
167
  updatedAt: now,
162
168
  };
163
169
  }
164
- const cache = await readCache();
170
+ const cache = await (0, cache_1.readCache)();
165
171
  const scopedTokens = cache.npmrc.tokenEntries.filter((entry) => {
166
172
  return entry.host === options.host && entry.scope === options.scope;
167
173
  });
@@ -175,7 +181,7 @@ async function askToken(options) {
175
181
  }));
176
182
  const tokens = [...scopedTokens, ...allTokens, ...legacyTokens];
177
183
  if (tokens.length > 0) {
178
- const selectedToken = await searchableSelectChoice({
184
+ const selectedToken = await (0, prompts_2.searchableSelectChoice)({
179
185
  message: `GitLab npm auth token for ${options.scope} @ ${options.host}`,
180
186
  choices: tokens.map((entry) => ({
181
187
  title: buildTokenTitle(entry),
@@ -201,7 +207,7 @@ async function askToken(options) {
201
207
  updatedAt: now,
202
208
  };
203
209
  }
204
- const response = await prompts({
210
+ const response = await (0, prompts_1.default)({
205
211
  type: "password",
206
212
  name: "token",
207
213
  message: `GitLab npm auth token for ${options.scope} @ ${options.host}`,
@@ -221,7 +227,7 @@ async function askToken(options) {
221
227
  async function createNpmrc(options) {
222
228
  const cwd = options.cwd ?? process.cwd();
223
229
  const projectName = await resolveCurrentProjectName(cwd);
224
- const cache = await readCache();
230
+ const cache = await (0, cache_1.readCache)();
225
231
  const host = await askHost(options.host);
226
232
  const scope = await askScope(options.scope);
227
233
  const packageEntry = await askPackageEntry({
@@ -237,14 +243,14 @@ async function createNpmrc(options) {
237
243
  providedToken: options.token,
238
244
  providedLabel: options.tokenLabel,
239
245
  });
240
- const outputFileName = options.out ?? await searchableSelectOrInput({
246
+ const outputFileName = options.out ?? await (0, prompts_2.searchableSelectOrInput)({
241
247
  message: "Output npmrc file",
242
248
  values: cache.npmrc.outputFileNames,
243
249
  initialValue: ".npmrc",
244
250
  validate: validateNotEmpty("Output file"),
245
251
  customValueTitle: (value) => `Use typed file name: ${value}`,
246
252
  });
247
- const outputPath = await writeNpmrcFile({
253
+ const outputPath = await (0, npmrc_1.writeNpmrcFile)({
248
254
  host,
249
255
  scope,
250
256
  packageId: packageEntry.packageId,
@@ -252,12 +258,12 @@ async function createNpmrc(options) {
252
258
  outputFileName,
253
259
  alwaysAuth: options.alwaysAuth ?? true,
254
260
  });
255
- await rememberNpmrcHost(host);
256
- await rememberNpmrcScope(scope);
257
- await rememberNpmrcPackages(projectName, [packageEntry]);
258
- await rememberNpmrcOutputFileName(outputFileName);
261
+ await (0, cache_1.rememberNpmrcHost)(host);
262
+ await (0, cache_1.rememberNpmrcScope)(scope);
263
+ await (0, cache_1.rememberNpmrcPackages)(projectName, [packageEntry]);
264
+ await (0, cache_1.rememberNpmrcOutputFileName)(outputFileName);
259
265
  if (options.noSaveToken !== true) {
260
- await rememberNpmrcTokenEntry(tokenEntry);
266
+ await (0, cache_1.rememberNpmrcTokenEntry)(tokenEntry);
261
267
  }
262
268
  console.log(`Created ${outputPath}`);
263
269
  console.log(`${scope}:registry=https://${host}/api/v4/projects/${packageEntry.packageId}/packages/npm/`);
@@ -270,23 +276,23 @@ async function importPackages(options) {
270
276
  const scope = await askScope(options.scope);
271
277
  let rawInput = options.ids ?? "";
272
278
  if (options.file?.trim()) {
273
- const filePath = path.resolve(options.cwd ?? process.cwd(), options.file);
274
- const fileContent = await readFile(filePath, "utf8");
279
+ const filePath = node_path_1.default.resolve(options.cwd ?? process.cwd(), options.file);
280
+ const fileContent = await (0, promises_1.readFile)(filePath, "utf8");
275
281
  rawInput = `${rawInput}\n${fileContent}`;
276
282
  }
277
283
  if (!rawInput.trim()) {
278
- const response = await prompts({
284
+ const response = await (0, prompts_1.default)({
279
285
  type: "text",
280
286
  name: "packages",
281
287
  message: `Packages for ${projectName}. Use: name|id, name,id, or id only`,
282
- validate: (value) => parsePackageInputList(value).length > 0 ? true : "Enter at least one package ID",
288
+ validate: (value) => (0, npmrc_1.parsePackageInputList)(value).length > 0 ? true : "Enter at least one package ID",
283
289
  });
284
290
  if (!response.packages) {
285
291
  throw new Error("No packages entered");
286
292
  }
287
293
  rawInput = response.packages;
288
294
  }
289
- const parsedPackages = parsePackageInputList(rawInput);
295
+ const parsedPackages = (0, npmrc_1.parsePackageInputList)(rawInput);
290
296
  if (parsedPackages.length === 0) {
291
297
  throw new Error("No valid packages found. Package IDs must be numbers.");
292
298
  }
@@ -297,9 +303,9 @@ async function importPackages(options) {
297
303
  scope,
298
304
  updatedAt: new Date().toISOString(),
299
305
  }));
300
- await rememberNpmrcHost(host);
301
- await rememberNpmrcScope(scope);
302
- await rememberNpmrcPackages(projectName, packageEntries);
306
+ await (0, cache_1.rememberNpmrcHost)(host);
307
+ await (0, cache_1.rememberNpmrcScope)(scope);
308
+ await (0, cache_1.rememberNpmrcPackages)(projectName, packageEntries);
303
309
  console.log(`Imported ${packageEntries.length} package(s) for ${projectName}:`);
304
310
  for (const entry of packageEntries) {
305
311
  console.log(`- ${entry.packageName} (${entry.packageId}) - ${entry.scope} @ ${entry.host}`);
@@ -310,7 +316,7 @@ async function updateToken(options) {
310
316
  const scope = await askScope(options.scope);
311
317
  const response = options.token?.trim()
312
318
  ? { token: options.token.trim(), label: options.label?.trim() || `${scope} @ ${host}` }
313
- : await prompts([
319
+ : await (0, prompts_1.default)([
314
320
  {
315
321
  type: "password",
316
322
  name: "token",
@@ -335,13 +341,13 @@ async function updateToken(options) {
335
341
  label: String(response.label || `${scope} @ ${host}`).trim(),
336
342
  updatedAt: new Date().toISOString(),
337
343
  };
338
- await rememberNpmrcHost(host);
339
- await rememberNpmrcScope(scope);
340
- await rememberNpmrcTokenEntry(tokenEntry);
344
+ await (0, cache_1.rememberNpmrcHost)(host);
345
+ await (0, cache_1.rememberNpmrcScope)(scope);
346
+ await (0, cache_1.rememberNpmrcTokenEntry)(tokenEntry);
341
347
  console.log(`Updated token for ${scope} @ ${host}: ${tokenEntry.label} (${maskToken(tokenEntry.token)})`);
342
348
  }
343
349
  async function listNpmrcCache() {
344
- const cache = await readCache();
350
+ const cache = await (0, cache_1.readCache)();
345
351
  console.log("NPMRC cache");
346
352
  console.log("");
347
353
  console.log(`Hosts: ${cache.npmrc.hosts.join(", ") || "N/A"}`);
@@ -398,7 +404,7 @@ async function listNpmrcCache() {
398
404
  }
399
405
  }
400
406
  }
401
- export function registerNpmrcCommands(program) {
407
+ function registerNpmrcCommands(program) {
402
408
  const npmrcCommand = program
403
409
  .command("npmrc")
404
410
  .description("Create and cache .npmrc config for GitLab npm package registry");