@trebired/git-host 1.2.0 → 1.4.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 (84) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +55 -6
  3. package/dist/api/forge/handler.d.ts +6 -0
  4. package/dist/api/forge/handler.d.ts.map +1 -0
  5. package/dist/api/forge/handler.js +260 -0
  6. package/dist/api/forge/handler.js.map +1 -0
  7. package/dist/api/forge/route.d.ts +34 -0
  8. package/dist/api/forge/route.d.ts.map +1 -0
  9. package/dist/api/forge/route.js +94 -0
  10. package/dist/api/forge/route.js.map +1 -0
  11. package/dist/api/handler/action.d.ts +1 -1
  12. package/dist/api/handler/response.d.ts +6 -2
  13. package/dist/api/handler/response.d.ts.map +1 -1
  14. package/dist/api/handler/response.js +5 -0
  15. package/dist/api/handler/response.js.map +1 -1
  16. package/dist/api/handler/route.d.ts +1 -1
  17. package/dist/browser/index.d.ts +44 -0
  18. package/dist/browser/index.d.ts.map +1 -0
  19. package/dist/browser/index.js +767 -0
  20. package/dist/browser/index.js.map +1 -0
  21. package/dist/browser/styles.css +242 -0
  22. package/dist/core/create_git_forge.d.ts +4 -0
  23. package/dist/core/create_git_forge.d.ts.map +1 -0
  24. package/dist/core/create_git_forge.js +481 -0
  25. package/dist/core/create_git_forge.js.map +1 -0
  26. package/dist/core/create_git_host/content_methods.d.ts +1 -1
  27. package/dist/core/create_git_host/content_methods.d.ts.map +1 -1
  28. package/dist/core/create_git_host/content_methods.js +21 -0
  29. package/dist/core/create_git_host/content_methods.js.map +1 -1
  30. package/dist/core/git_forge/storage_memory.d.ts +4 -0
  31. package/dist/core/git_forge/storage_memory.d.ts.map +1 -0
  32. package/dist/core/git_forge/storage_memory.js +140 -0
  33. package/dist/core/git_forge/storage_memory.js.map +1 -0
  34. package/dist/core/inspect.d.ts +6 -1
  35. package/dist/core/inspect.d.ts.map +1 -1
  36. package/dist/core/inspect.js +3 -3
  37. package/dist/core/inspect.js.map +1 -1
  38. package/dist/core/inspection.d.ts +11 -0
  39. package/dist/core/inspection.d.ts.map +1 -0
  40. package/dist/core/inspection.js +593 -0
  41. package/dist/core/inspection.js.map +1 -0
  42. package/dist/errors.d.ts +1 -1
  43. package/dist/errors.d.ts.map +1 -1
  44. package/dist/errors.js.map +1 -1
  45. package/dist/index.d.ts +5 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -0
  48. package/dist/index.js.map +1 -1
  49. package/dist/react/client/types.d.ts +45 -1
  50. package/dist/react/client/types.d.ts.map +1 -1
  51. package/dist/react/client.d.ts.map +1 -1
  52. package/dist/react/client.js +135 -2
  53. package/dist/react/client.js.map +1 -1
  54. package/dist/react/hooks/query.d.ts +6 -2
  55. package/dist/react/hooks/query.d.ts.map +1 -1
  56. package/dist/react/hooks/query.js +41 -1
  57. package/dist/react/hooks/query.js.map +1 -1
  58. package/dist/react/hooks/resources.d.ts +50 -3
  59. package/dist/react/hooks/resources.d.ts.map +1 -1
  60. package/dist/react/hooks/resources.js +209 -2
  61. package/dist/react/hooks/resources.js.map +1 -1
  62. package/dist/react/hooks/types.d.ts +15 -2
  63. package/dist/react/hooks/types.d.ts.map +1 -1
  64. package/dist/react/hooks.d.ts +3 -3
  65. package/dist/react/hooks.d.ts.map +1 -1
  66. package/dist/react/hooks.js +2 -2
  67. package/dist/react/hooks.js.map +1 -1
  68. package/dist/react/index.d.ts +2 -2
  69. package/dist/react/index.d.ts.map +1 -1
  70. package/dist/react/index.js +1 -1
  71. package/dist/react/index.js.map +1 -1
  72. package/dist/types/forge.d.ts +220 -0
  73. package/dist/types/forge.d.ts.map +1 -0
  74. package/dist/types/forge.js +2 -0
  75. package/dist/types/forge.js.map +1 -0
  76. package/dist/types/host.d.ts +46 -2
  77. package/dist/types/host.d.ts.map +1 -1
  78. package/dist/types/index.d.ts +3 -2
  79. package/dist/types/index.d.ts.map +1 -1
  80. package/dist/types/repository.d.ts +98 -1
  81. package/dist/types/repository.d.ts.map +1 -1
  82. package/dist/types/transports.d.ts +1 -1
  83. package/dist/types/transports.d.ts.map +1 -1
  84. package/package.json +14 -7
@@ -0,0 +1,481 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import { logPackageInitialized } from "@trebired/logger-adapter";
5
+ import { GitHostError } from "../errors.js";
6
+ import { resolveLogger } from "../logging.js";
7
+ import { text } from "../utils/text.js";
8
+ import { fetchRepository } from "./remote.js";
9
+ import { buildGitEnv, cloneRepository, ensureHostedRepositoryConfig, repositoryExists, runGit } from "./run_git.js";
10
+ function repositoryHandleFromSummary(summary) {
11
+ return {
12
+ id: summary.repository.id,
13
+ path: summary.repository.path,
14
+ };
15
+ }
16
+ function assertActor(actor) {
17
+ if (!actor || !text(actor.id)) {
18
+ throw new GitHostError("forge_invalid_actor", "A stable actor id is required for forge mutations.");
19
+ }
20
+ return {
21
+ ...actor,
22
+ id: text(actor.id),
23
+ };
24
+ }
25
+ function nowIso() {
26
+ return new Date().toISOString();
27
+ }
28
+ async function countDistinct(values) {
29
+ return new Set((values || []).map((value) => text(value)).filter(Boolean)).size;
30
+ }
31
+ async function readForkStatus(forkRepository, upstreamRepository, upstreamBranch) {
32
+ const hasFork = await repositoryExists(forkRepository.path);
33
+ if (!hasFork) {
34
+ throw new GitHostError("repository_not_initialized", `Repository "${forkRepository.id}" is not initialized.`, {
35
+ path: forkRepository.path,
36
+ repositoryId: forkRepository.id,
37
+ });
38
+ }
39
+ await ensureUpstreamRemote(forkRepository, upstreamRepository.path);
40
+ await fetchRepository(forkRepository, { remote: "upstream" });
41
+ const branchRes = await runGit(["rev-parse", "--abbrev-ref", "HEAD"], { cwd: forkRepository.path });
42
+ if (!branchRes.ok) {
43
+ throw new GitHostError("git_command_failed", text(branchRes.stderr, "Failed to resolve the fork branch."), {
44
+ repositoryId: forkRepository.id,
45
+ });
46
+ }
47
+ const forkBranch = text(branchRes.stdout);
48
+ const compareRes = await runGit(["rev-list", "--left-right", "--count", `${forkBranch}...upstream/${upstreamBranch}`], {
49
+ cwd: forkRepository.path,
50
+ });
51
+ if (!compareRes.ok) {
52
+ throw new GitHostError("git_command_failed", text(compareRes.stderr, "Failed to compare fork progress."), {
53
+ forkBranch,
54
+ repositoryId: forkRepository.id,
55
+ upstreamBranch,
56
+ });
57
+ }
58
+ const [aheadText, behindText] = text(compareRes.stdout).split(/\s+/);
59
+ return {
60
+ ahead: Number(aheadText) || 0,
61
+ behind: Number(behindText) || 0,
62
+ fork_branch: forkBranch,
63
+ upstream_branch: upstreamBranch,
64
+ };
65
+ }
66
+ async function ensureUpstreamRemote(repository, upstreamPath) {
67
+ const listRes = await runGit(["remote"], { cwd: repository.path });
68
+ if (!listRes.ok) {
69
+ throw new GitHostError("git_command_failed", text(listRes.stderr, "Failed to list repository remotes."), {
70
+ repositoryId: repository.id,
71
+ });
72
+ }
73
+ const remotes = new Set(text(listRes.stdout).split(/\r?\n/).map((entry) => text(entry)).filter(Boolean));
74
+ const command = remotes.has("upstream")
75
+ ? ["remote", "set-url", "upstream", upstreamPath]
76
+ : ["remote", "add", "upstream", upstreamPath];
77
+ const remoteRes = await runGit(command, { cwd: repository.path });
78
+ if (!remoteRes.ok) {
79
+ throw new GitHostError("git_command_failed", text(remoteRes.stderr, "Failed to configure the upstream remote."), {
80
+ repositoryId: repository.id,
81
+ });
82
+ }
83
+ }
84
+ function buildActivitySummary(kind, repositoryId, metadata) {
85
+ switch (kind) {
86
+ case "release.create":
87
+ return `Published release ${text(metadata.tag_name)} in ${repositoryId}.`;
88
+ case "release.update":
89
+ return `Updated release ${text(metadata.release_id)} in ${repositoryId}.`;
90
+ case "release.delete":
91
+ return `Deleted release ${text(metadata.release_id)} in ${repositoryId}.`;
92
+ case "fork.create":
93
+ return `Created fork ${text(metadata.fork_repository_id)} from ${repositoryId}.`;
94
+ case "fork.sync":
95
+ return `Synced fork ${text(metadata.fork_repository_id)} with ${repositoryId}.`;
96
+ case "star":
97
+ return `Starred ${repositoryId}.`;
98
+ case "unstar":
99
+ return `Unstarred ${repositoryId}.`;
100
+ case "watch":
101
+ return `Started watching ${repositoryId}.`;
102
+ case "unwatch":
103
+ return `Stopped watching ${repositoryId}.`;
104
+ default:
105
+ return `Updated ${repositoryId}.`;
106
+ }
107
+ }
108
+ function createGitForge(options) {
109
+ if (!options || typeof options.gitHost !== "object") {
110
+ throw new TypeError("createGitForge() requires a gitHost instance.");
111
+ }
112
+ if (!options.storage || typeof options.storage !== "object") {
113
+ throw new TypeError("createGitForge() requires a storage adapter.");
114
+ }
115
+ if (typeof options.createForkRepository !== "function") {
116
+ throw new TypeError("createGitForge() requires createForkRepository().");
117
+ }
118
+ const logger = resolveLogger(options.logger, options.loggerAdapter);
119
+ const logGroup = "git-host.forge";
120
+ const verbose = options.verbose === true;
121
+ logPackageInitialized({
122
+ adapter: options.loggerAdapter,
123
+ fallback: "console",
124
+ group: logGroup,
125
+ logger: options.logger,
126
+ source: "@trebired/git-host",
127
+ });
128
+ async function recordActivity(repositoryId, actor, kind, metadata = {}) {
129
+ const entry = {
130
+ actor_id: actor.id,
131
+ created_at: nowIso(),
132
+ id: randomUUID(),
133
+ kind,
134
+ metadata,
135
+ repository_id: repositoryId,
136
+ summary: buildActivitySummary(kind, repositoryId, metadata),
137
+ };
138
+ return await options.storage.activity.createActivity(entry);
139
+ }
140
+ async function readSocialState(repositoryId, actorId) {
141
+ const [stars, watchers, viewerHasStarred, viewerIsWatching] = await Promise.all([
142
+ options.storage.social.listStars ? options.storage.social.listStars(repositoryId) : Promise.resolve([]),
143
+ options.storage.social.listWatchers ? options.storage.social.listWatchers(repositoryId) : Promise.resolve([]),
144
+ actorId ? options.storage.social.viewerHasStarred(repositoryId, actorId) : Promise.resolve(false),
145
+ actorId ? options.storage.social.viewerIsWatching(repositoryId, actorId) : Promise.resolve(false),
146
+ ]);
147
+ return {
148
+ repository_id: repositoryId,
149
+ star_count: await countDistinct(stars),
150
+ viewer_has_starred: viewerHasStarred,
151
+ viewer_is_watching: viewerIsWatching,
152
+ watcher_count: await countDistinct(watchers),
153
+ };
154
+ }
155
+ async function readOverview(repositoryId, actorId) {
156
+ const [repository, releases, forks, activity, social] = await Promise.all([
157
+ options.gitHost.readSummary(repositoryId),
158
+ options.storage.releases.listReleases(repositoryId),
159
+ options.storage.forks.listForks(repositoryId),
160
+ options.storage.activity.listActivity(repositoryId),
161
+ readSocialState(repositoryId, actorId),
162
+ ]);
163
+ const sortedReleases = Array.from(releases).sort((left, right) => text(right.published_at || right.created_at).localeCompare(text(left.published_at || left.created_at)));
164
+ return {
165
+ activity_count: activity.length,
166
+ fork_count: forks.length,
167
+ latest_release: sortedReleases[0] || null,
168
+ release_count: sortedReleases.length,
169
+ repository,
170
+ social,
171
+ };
172
+ }
173
+ async function readRequiredRelease(repositoryId, releaseId) {
174
+ const release = await options.storage.releases.readRelease(repositoryId, releaseId);
175
+ if (!release) {
176
+ throw new GitHostError("forge_resource_not_found", `Release "${releaseId}" was not found.`, {
177
+ releaseId,
178
+ repositoryId,
179
+ });
180
+ }
181
+ return release;
182
+ }
183
+ async function readRequiredFork(forkRepositoryId) {
184
+ const fork = await options.storage.forks.readFork(forkRepositoryId);
185
+ if (!fork) {
186
+ throw new GitHostError("forge_resource_not_found", `Fork "${forkRepositoryId}" was not found.`, {
187
+ forkRepositoryId,
188
+ });
189
+ }
190
+ return fork;
191
+ }
192
+ return {
193
+ async readOverview(repositoryId, input = {}) {
194
+ return await readOverview(repositoryId, text(input.actorId));
195
+ },
196
+ async readSocialState(repositoryId, input = {}) {
197
+ return await readSocialState(repositoryId, text(input.actorId));
198
+ },
199
+ async starRepository(repositoryId, input) {
200
+ const actor = assertActor(input.actor);
201
+ await options.storage.social.setStar(repositoryId, actor.id, true);
202
+ await recordActivity(repositoryId, actor, "star", {});
203
+ return await readSocialState(repositoryId, actor.id);
204
+ },
205
+ async unstarRepository(repositoryId, input) {
206
+ const actor = assertActor(input.actor);
207
+ await options.storage.social.setStar(repositoryId, actor.id, false);
208
+ await recordActivity(repositoryId, actor, "unstar", {});
209
+ return await readSocialState(repositoryId, actor.id);
210
+ },
211
+ async watchRepository(repositoryId, input) {
212
+ const actor = assertActor(input.actor);
213
+ await options.storage.social.setWatching(repositoryId, actor.id, true);
214
+ await recordActivity(repositoryId, actor, "watch", {});
215
+ return await readSocialState(repositoryId, actor.id);
216
+ },
217
+ async unwatchRepository(repositoryId, input) {
218
+ const actor = assertActor(input.actor);
219
+ await options.storage.social.setWatching(repositoryId, actor.id, false);
220
+ await recordActivity(repositoryId, actor, "unwatch", {});
221
+ return await readSocialState(repositoryId, actor.id);
222
+ },
223
+ async listReleases(repositoryId) {
224
+ const releases = await options.storage.releases.listReleases(repositoryId);
225
+ return Array.from(releases).sort((left, right) => text(right.published_at || right.created_at).localeCompare(text(left.published_at || left.created_at)));
226
+ },
227
+ async readRelease(repositoryId, releaseId) {
228
+ return await readRequiredRelease(repositoryId, releaseId);
229
+ },
230
+ async createRelease(repositoryId, input) {
231
+ const actor = assertActor(input.actor);
232
+ const existingTagName = text(input.existingTagName);
233
+ const createTag = input.createTag;
234
+ if (!existingTagName && !createTag) {
235
+ throw new GitHostError("forge_invalid_input", "A release requires either existingTagName or createTag.", {
236
+ repositoryId,
237
+ });
238
+ }
239
+ let tagName = existingTagName;
240
+ let targetRef = "";
241
+ if (createTag) {
242
+ tagName = text(createTag.name);
243
+ targetRef = text(createTag.targetRef, "HEAD");
244
+ await options.gitHost.createTag(repositoryId, {
245
+ actor: {
246
+ email: actor.email,
247
+ id: actor.id,
248
+ name: actor.name,
249
+ },
250
+ message: text(createTag.annotatedMessage),
251
+ name: tagName,
252
+ ref: targetRef,
253
+ });
254
+ }
255
+ const tagDetail = await options.gitHost.readTag(repositoryId, tagName);
256
+ const createdAt = nowIso();
257
+ const release = {
258
+ assets: options.releaseAssetStore?.normalizeAssets
259
+ ? await options.releaseAssetStore.normalizeAssets(repositoryId, Array.isArray(input.assets) ? input.assets : [])
260
+ : Array.isArray(input.assets) ? input.assets : [],
261
+ author_id: actor.id,
262
+ created_at: createdAt,
263
+ draft: input.draft === true,
264
+ id: randomUUID(),
265
+ notes: text(input.notes),
266
+ prerelease: input.prerelease === true,
267
+ published_at: input.draft === true ? null : (input.publishedAt === null ? null : text(input.publishedAt, createdAt)),
268
+ repository_id: repositoryId,
269
+ tag_name: tagName,
270
+ target_ref: targetRef || text(tagDetail.target_hash),
271
+ title: text(input.title, tagName),
272
+ updated_at: createdAt,
273
+ };
274
+ const created = await options.storage.releases.createRelease(release);
275
+ await recordActivity(repositoryId, actor, "release.create", {
276
+ release_id: created.id,
277
+ tag_name: created.tag_name,
278
+ });
279
+ return created;
280
+ },
281
+ async updateRelease(repositoryId, releaseId, input) {
282
+ const actor = assertActor(input.actor);
283
+ await readRequiredRelease(repositoryId, releaseId);
284
+ const assets = options.releaseAssetStore?.normalizeAssets
285
+ ? await options.releaseAssetStore.normalizeAssets(repositoryId, Array.isArray(input.assets) ? input.assets : [])
286
+ : input.assets;
287
+ const updated = await options.storage.releases.updateRelease(repositoryId, releaseId, {
288
+ ...(Array.isArray(assets) ? { assets } : {}),
289
+ ...(input.draft != null ? { draft: input.draft === true } : {}),
290
+ ...(input.notes != null ? { notes: text(input.notes) } : {}),
291
+ ...(input.prerelease != null ? { prerelease: input.prerelease === true } : {}),
292
+ ...(input.publishedAt !== undefined ? { published_at: input.publishedAt === null ? null : text(input.publishedAt) } : {}),
293
+ ...(input.title != null ? { title: text(input.title) } : {}),
294
+ updated_at: nowIso(),
295
+ });
296
+ if (!updated) {
297
+ throw new GitHostError("forge_resource_not_found", `Release "${releaseId}" was not found.`, {
298
+ releaseId,
299
+ repositoryId,
300
+ });
301
+ }
302
+ await recordActivity(repositoryId, actor, "release.update", {
303
+ release_id: releaseId,
304
+ });
305
+ return updated;
306
+ },
307
+ async deleteRelease(repositoryId, releaseId, input) {
308
+ const actor = assertActor(input.actor);
309
+ const existing = await readRequiredRelease(repositoryId, releaseId);
310
+ const deleted = await options.storage.releases.deleteRelease(repositoryId, releaseId);
311
+ if (!deleted) {
312
+ throw new GitHostError("forge_resource_not_found", `Release "${releaseId}" was not found.`, {
313
+ releaseId,
314
+ repositoryId,
315
+ });
316
+ }
317
+ if (input.deleteTag === true) {
318
+ await options.gitHost.deleteTag(repositoryId, {
319
+ name: existing.tag_name,
320
+ });
321
+ }
322
+ await recordActivity(repositoryId, actor, "release.delete", {
323
+ release_id: releaseId,
324
+ tag_name: existing.tag_name,
325
+ });
326
+ },
327
+ async listActivity(repositoryId) {
328
+ const entries = await options.storage.activity.listActivity(repositoryId);
329
+ return Array.from(entries).sort((left, right) => text(right.created_at).localeCompare(text(left.created_at)));
330
+ },
331
+ async listForks(repositoryId) {
332
+ const upstreamSummary = await readOverview(repositoryId);
333
+ const upstreamRepository = repositoryHandleFromSummary(upstreamSummary.repository);
334
+ const upstreamBranch = text(upstreamSummary.repository.repository.default_branch, "main");
335
+ const forks = await options.storage.forks.listForks(repositoryId);
336
+ return await Promise.all(forks.map(async (fork) => {
337
+ const forkSummary = await readOverview(fork.fork_repository_id);
338
+ const forkRepository = repositoryHandleFromSummary(forkSummary.repository);
339
+ return {
340
+ created_at: fork.created_at,
341
+ created_by: fork.created_by,
342
+ fork_repository_id: fork.fork_repository_id,
343
+ fork_status: await readForkStatus(forkRepository, upstreamRepository, upstreamBranch),
344
+ upstream_repository_id: fork.upstream_repository_id,
345
+ };
346
+ }));
347
+ },
348
+ async createFork(repositoryId, input) {
349
+ const actor = assertActor(input.actor);
350
+ const upstreamSummary = await readOverview(repositoryId);
351
+ const upstreamRepository = repositoryHandleFromSummary(upstreamSummary.repository);
352
+ const upstreamBranch = text(upstreamSummary.repository.repository.default_branch, "main");
353
+ const forkRepository = await options.createForkRepository({
354
+ actor,
355
+ upstreamRepository,
356
+ upstreamRepositoryId: repositoryId,
357
+ });
358
+ if (!forkRepository || !text(forkRepository.id) || !text(forkRepository.path)) {
359
+ throw new GitHostError("forge_invalid_input", "createForkRepository() must return a repository id and absolute path.", {
360
+ repositoryId,
361
+ });
362
+ }
363
+ fs.mkdirSync(path.dirname(forkRepository.path), { recursive: true });
364
+ const cloneRes = await cloneRepository({
365
+ cloneUrl: upstreamRepository.path,
366
+ workspaceRoot: forkRepository.path,
367
+ });
368
+ if (!cloneRes.ok) {
369
+ throw new GitHostError("git_command_failed", text(cloneRes.stderr, "Failed to clone the fork repository."), {
370
+ forkRepositoryId: forkRepository.id,
371
+ repositoryId,
372
+ });
373
+ }
374
+ const hostedRes = await ensureHostedRepositoryConfig(forkRepository.path);
375
+ if (!hostedRes.ok) {
376
+ throw new GitHostError("git_command_failed", text(hostedRes.stderr, "Failed to configure the fork repository."), {
377
+ forkRepositoryId: forkRepository.id,
378
+ repositoryId,
379
+ });
380
+ }
381
+ await ensureUpstreamRemote(forkRepository, upstreamRepository.path);
382
+ await fetchRepository(forkRepository, { remote: "upstream" });
383
+ const createdAt = nowIso();
384
+ await options.storage.forks.createFork({
385
+ created_at: createdAt,
386
+ created_by: actor.id,
387
+ fork_repository_id: forkRepository.id,
388
+ upstream_repository_id: repositoryId,
389
+ });
390
+ await recordActivity(repositoryId, actor, "fork.create", {
391
+ fork_repository_id: forkRepository.id,
392
+ });
393
+ if (verbose) {
394
+ logger.info(logGroup, "created forge fork", {
395
+ forkRepositoryId: forkRepository.id,
396
+ repositoryId,
397
+ });
398
+ }
399
+ return {
400
+ created_at: createdAt,
401
+ created_by: actor.id,
402
+ fork_repository_id: forkRepository.id,
403
+ fork_status: await readForkStatus(forkRepository, upstreamRepository, upstreamBranch),
404
+ upstream_repository_id: repositoryId,
405
+ };
406
+ },
407
+ async syncFork(forkRepositoryId, input) {
408
+ const actor = assertActor(input.actor);
409
+ const fork = await readRequiredFork(forkRepositoryId);
410
+ const upstreamSummary = await readOverview(fork.upstream_repository_id);
411
+ const forkSummary = await readOverview(fork.fork_repository_id);
412
+ const upstreamRepository = repositoryHandleFromSummary(upstreamSummary.repository);
413
+ const forkRepository = repositoryHandleFromSummary(forkSummary.repository);
414
+ const upstreamBranch = text(upstreamSummary.repository.repository.default_branch, "main");
415
+ const forkBranch = text(forkSummary.repository.repository.current_branch || forkSummary.repository.repository.default_branch, "main");
416
+ const strategy = input.strategy || "ff-only";
417
+ await ensureUpstreamRemote(forkRepository, upstreamRepository.path);
418
+ await fetchRepository(forkRepository, { remote: "upstream" });
419
+ if (forkBranch !== forkSummary.repository.repository.current_branch) {
420
+ await options.gitHost.checkoutBranch(forkRepository.id, { name: forkBranch });
421
+ }
422
+ const upstreamRef = `upstream/${upstreamBranch}`;
423
+ if (strategy === "ff-only") {
424
+ const ffCheck = await runGit(["merge-base", "--is-ancestor", forkBranch, upstreamRef], { cwd: forkRepository.path });
425
+ if (!ffCheck.ok) {
426
+ throw new GitHostError("forge_sync_conflict", "The fork cannot be fast-forwarded from upstream.", {
427
+ forkRepositoryId,
428
+ upstreamBranch,
429
+ });
430
+ }
431
+ const mergeRes = await runGit(["merge", "--ff-only", upstreamRef], {
432
+ cwd: forkRepository.path,
433
+ env: buildGitEnv({
434
+ actor: {
435
+ email: actor.email,
436
+ id: actor.id,
437
+ name: actor.name,
438
+ },
439
+ }),
440
+ });
441
+ if (!mergeRes.ok) {
442
+ throw new GitHostError("forge_sync_conflict", text(mergeRes.stderr, "The fork cannot be fast-forwarded from upstream."), {
443
+ forkRepositoryId,
444
+ upstreamBranch,
445
+ });
446
+ }
447
+ }
448
+ else {
449
+ const mergeRes = await runGit(["merge", "--no-edit", upstreamRef], {
450
+ cwd: forkRepository.path,
451
+ env: buildGitEnv({
452
+ actor: {
453
+ email: actor.email,
454
+ id: actor.id,
455
+ name: actor.name,
456
+ },
457
+ }),
458
+ });
459
+ if (!mergeRes.ok) {
460
+ throw new GitHostError("forge_sync_conflict", text(mergeRes.stderr, "Failed to merge upstream changes into the fork."), {
461
+ forkRepositoryId,
462
+ upstreamBranch,
463
+ });
464
+ }
465
+ }
466
+ await recordActivity(fork.upstream_repository_id, actor, "fork.sync", {
467
+ fork_repository_id: forkRepositoryId,
468
+ strategy,
469
+ });
470
+ return {
471
+ created_at: fork.created_at,
472
+ created_by: fork.created_by,
473
+ fork_repository_id: fork.fork_repository_id,
474
+ fork_status: await readForkStatus(forkRepository, upstreamRepository, upstreamBranch),
475
+ upstream_repository_id: fork.upstream_repository_id,
476
+ };
477
+ },
478
+ };
479
+ }
480
+ export { createGitForge };
481
+ //# sourceMappingURL=create_git_forge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_git_forge.js","sourceRoot":"","sources":["../../src/core/create_git_forge.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { GitHost } from "../../types.js";
2
2
  import type { GitHostMethodContext } from "./shared.js";
3
- declare function createContentMethods(context: GitHostMethodContext): Pick<GitHost, "diff" | "listTree" | "readArchive" | "readBlame" | "readBlob" | "readCommit" | "readLinguist" | "search">;
3
+ declare function createContentMethods(context: GitHostMethodContext): Pick<GitHost, "diff" | "listTree" | "readArchive" | "readBlame" | "readBlob" | "readCommit" | "readDirectory" | "readFile" | "readLinguist" | "readRepositoryAnalysis" | "readTree" | "resolveInspectionTarget" | "search">;
4
4
  export { createContentMethods };
5
5
  //# sourceMappingURL=content_methods.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content_methods.d.ts","sourceRoot":"","sources":["../../../src/core/create_git_host/content_methods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,OAAO,EAOR,MAAM,gBAAgB,CAAC;AAWxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,iBAAS,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAChE,OAAO,EACP,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAC1G,CA4CA;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"content_methods.d.ts","sourceRoot":"","sources":["../../../src/core/create_git_host/content_methods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,OAAO,EAYR,MAAM,gBAAgB,CAAC;AAkBxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,iBAAS,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAChE,OAAO,EACL,MAAM,GACN,UAAU,GACV,aAAa,GACb,WAAW,GACX,UAAU,GACV,YAAY,GACZ,eAAe,GACf,UAAU,GACV,cAAc,GACd,wBAAwB,GACxB,UAAU,GACV,yBAAyB,GACzB,QAAQ,CACX,CAqEA;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { listRepositoryTree, readRepositoryArchive, readRepositoryBlame, readRepositoryBlob, readRepositoryCommit, readRepositoryCompare, readRepositoryLinguist, searchRepository, } from "../inspect.js";
2
+ import { readRepositoryAnalysis, readRepositoryDirectory, readRepositoryFile, readRepositoryTree, resolveRepositoryInspectionTarget, } from "../inspection.js";
2
3
  function createContentMethods(context) {
3
4
  const { resolveRepository } = context;
4
5
  return {
@@ -26,6 +27,26 @@ function createContentMethods(context) {
26
27
  const repository = await resolveRepository(repositoryId);
27
28
  return await readRepositoryLinguist(repository, linguistOptions);
28
29
  },
30
+ async resolveInspectionTarget(repositoryId, inspectionOptions = {}) {
31
+ const repository = await resolveRepository(repositoryId);
32
+ return await resolveRepositoryInspectionTarget(repository, inspectionOptions);
33
+ },
34
+ async readTree(repositoryId, treeOptions = {}) {
35
+ const repository = await resolveRepository(repositoryId);
36
+ return await readRepositoryTree(repository, treeOptions);
37
+ },
38
+ async readDirectory(repositoryId, directoryOptions = {}) {
39
+ const repository = await resolveRepository(repositoryId);
40
+ return await readRepositoryDirectory(repository, directoryOptions);
41
+ },
42
+ async readFile(repositoryId, fileOptions) {
43
+ const repository = await resolveRepository(repositoryId);
44
+ return await readRepositoryFile(repository, fileOptions);
45
+ },
46
+ async readRepositoryAnalysis(repositoryId, analysisOptions = {}) {
47
+ const repository = await resolveRepository(repositoryId);
48
+ return await readRepositoryAnalysis(repository, analysisOptions);
49
+ },
29
50
  async diff(repositoryId, diffOptions) {
30
51
  const repository = await resolveRepository(repositoryId);
31
52
  return await readRepositoryCompare(repository, diffOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"content_methods.js","sourceRoot":"","sources":["../../../src/core/create_git_host/content_methods.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,SAAS,oBAAoB,CAAC,OAA6B;IAIzD,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEtC,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,cAA+B,EAAE;YACpE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,WAA4B;YAC/D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,YAAoB,EAAE,SAAiB;YACtD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,YAA8B;YAClE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,YAAoB,EAAE,iBAAqC,EAAE;YAC7E,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,qBAAqB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,YAAoB,EAAE,kBAAuC,EAAE;YAChF,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,sBAAsB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAAoB,EAAE,WAAwB;YACvD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,YAAoB,EAAE,aAAsC;YACvE,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,MAAM,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"content_methods.js","sourceRoot":"","sources":["../../../src/core/create_git_host/content_methods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GitForgeStorageAdapter } from "../../types.js";
2
+ declare function createInMemoryGitForgeStorageAdapter(): GitForgeStorageAdapter;
3
+ export { createInMemoryGitForgeStorageAdapter };
4
+ //# sourceMappingURL=storage_memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage_memory.d.ts","sourceRoot":"","sources":["../../../src/core/git_forge/storage_memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AAGxB,iBAAS,oCAAoC,IAAI,sBAAsB,CAsItE;AAED,OAAO,EAAE,oCAAoC,EAAE,CAAC"}