@fern-api/replay 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/cli.cjs +16642 -0
  2. package/dist/cli.cjs.map +1 -0
  3. package/dist/index.cjs +2014 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +463 -0
  6. package/dist/index.d.ts +463 -12
  7. package/dist/index.js +1968 -10
  8. package/dist/index.js.map +1 -1
  9. package/package.json +16 -6
  10. package/dist/FernignoreMigrator.d.ts +0 -38
  11. package/dist/FernignoreMigrator.d.ts.map +0 -1
  12. package/dist/FernignoreMigrator.js +0 -210
  13. package/dist/FernignoreMigrator.js.map +0 -1
  14. package/dist/LockfileManager.d.ts +0 -31
  15. package/dist/LockfileManager.d.ts.map +0 -1
  16. package/dist/LockfileManager.js +0 -124
  17. package/dist/LockfileManager.js.map +0 -1
  18. package/dist/ReplayApplicator.d.ts +0 -30
  19. package/dist/ReplayApplicator.d.ts.map +0 -1
  20. package/dist/ReplayApplicator.js +0 -544
  21. package/dist/ReplayApplicator.js.map +0 -1
  22. package/dist/ReplayCommitter.d.ts +0 -19
  23. package/dist/ReplayCommitter.d.ts.map +0 -1
  24. package/dist/ReplayCommitter.js +0 -64
  25. package/dist/ReplayCommitter.js.map +0 -1
  26. package/dist/ReplayDetector.d.ts +0 -22
  27. package/dist/ReplayDetector.d.ts.map +0 -1
  28. package/dist/ReplayDetector.js +0 -147
  29. package/dist/ReplayDetector.js.map +0 -1
  30. package/dist/ReplayService.d.ts +0 -100
  31. package/dist/ReplayService.d.ts.map +0 -1
  32. package/dist/ReplayService.js +0 -596
  33. package/dist/ReplayService.js.map +0 -1
  34. package/dist/ThreeWayMerge.d.ts +0 -11
  35. package/dist/ThreeWayMerge.d.ts.map +0 -1
  36. package/dist/ThreeWayMerge.js +0 -48
  37. package/dist/ThreeWayMerge.js.map +0 -1
  38. package/dist/cli.d.ts +0 -3
  39. package/dist/cli.d.ts.map +0 -1
  40. package/dist/cli.js +0 -462
  41. package/dist/cli.js.map +0 -1
  42. package/dist/commands/bootstrap.d.ts +0 -46
  43. package/dist/commands/bootstrap.d.ts.map +0 -1
  44. package/dist/commands/bootstrap.js +0 -237
  45. package/dist/commands/bootstrap.js.map +0 -1
  46. package/dist/commands/forget.d.ts +0 -16
  47. package/dist/commands/forget.d.ts.map +0 -1
  48. package/dist/commands/forget.js +0 -27
  49. package/dist/commands/forget.js.map +0 -1
  50. package/dist/commands/index.d.ts +0 -6
  51. package/dist/commands/index.d.ts.map +0 -1
  52. package/dist/commands/index.js +0 -6
  53. package/dist/commands/index.js.map +0 -1
  54. package/dist/commands/reset.d.ts +0 -16
  55. package/dist/commands/reset.d.ts.map +0 -1
  56. package/dist/commands/reset.js +0 -25
  57. package/dist/commands/reset.js.map +0 -1
  58. package/dist/commands/resolve.d.ts +0 -16
  59. package/dist/commands/resolve.d.ts.map +0 -1
  60. package/dist/commands/resolve.js +0 -28
  61. package/dist/commands/resolve.js.map +0 -1
  62. package/dist/commands/status.d.ts +0 -26
  63. package/dist/commands/status.d.ts.map +0 -1
  64. package/dist/commands/status.js +0 -24
  65. package/dist/commands/status.js.map +0 -1
  66. package/dist/git/CommitDetection.d.ts +0 -7
  67. package/dist/git/CommitDetection.d.ts.map +0 -1
  68. package/dist/git/CommitDetection.js +0 -26
  69. package/dist/git/CommitDetection.js.map +0 -1
  70. package/dist/git/GitClient.d.ts +0 -22
  71. package/dist/git/GitClient.d.ts.map +0 -1
  72. package/dist/git/GitClient.js +0 -109
  73. package/dist/git/GitClient.js.map +0 -1
  74. package/dist/index.d.ts.map +0 -1
  75. package/dist/types.d.ts +0 -80
  76. package/dist/types.d.ts.map +0 -1
  77. package/dist/types.js +0 -3
  78. package/dist/types.js.map +0 -1
@@ -1,596 +0,0 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { minimatch } from "minimatch";
4
- import { GitClient } from "./git/GitClient.js";
5
- import { LockfileManager } from "./LockfileManager.js";
6
- import { ReplayApplicator } from "./ReplayApplicator.js";
7
- import { ReplayCommitter } from "./ReplayCommitter.js";
8
- import { ReplayDetector } from "./ReplayDetector.js";
9
- export class ReplayService {
10
- git;
11
- detector;
12
- applicator;
13
- committer;
14
- lockManager;
15
- outputDir;
16
- constructor(outputDir, _config) {
17
- const git = new GitClient(outputDir);
18
- this.git = git;
19
- this.outputDir = outputDir;
20
- this.lockManager = new LockfileManager(outputDir);
21
- this.detector = new ReplayDetector(git, this.lockManager, outputDir);
22
- this.applicator = new ReplayApplicator(git, this.lockManager, outputDir);
23
- this.committer = new ReplayCommitter(git, outputDir);
24
- }
25
- async runReplay(options) {
26
- if (options?.skipApplication) {
27
- return this.handleSkipApplication(options);
28
- }
29
- const flow = this.determineFlow();
30
- switch (flow) {
31
- case "first-generation":
32
- return this.handleFirstGeneration(options);
33
- case "no-patches":
34
- return this.handleNoPatchesRegeneration(options);
35
- case "normal-regeneration":
36
- return this.handleNormalRegeneration(options);
37
- }
38
- }
39
- /**
40
- * Sync the lockfile after a divergent PR was squash-merged.
41
- * Call this BEFORE runReplay() when the CLI detects a merged divergent PR.
42
- *
43
- * After updating the generation record, re-detects customer patches via
44
- * tree diff between the generation tag (pure generation tree) and HEAD
45
- * (which includes customer customizations after squash merge). This ensures
46
- * patches survive the squash merge → regenerate cycle even when the lockfile
47
- * was restored from the base branch during conflict PR creation.
48
- */
49
- async syncFromDivergentMerge(generationCommitSha, options) {
50
- const treeHash = await this.git.getTreeHash(generationCommitSha);
51
- const timestamp = (await this.git.exec(["log", "-1", "--format=%aI", generationCommitSha])).trim();
52
- const record = {
53
- commit_sha: generationCommitSha,
54
- tree_hash: treeHash,
55
- timestamp,
56
- cli_version: options?.cliVersion ?? "unknown",
57
- generator_versions: options?.generatorVersions ?? {},
58
- base_branch_head: options?.baseBranchHead
59
- };
60
- if (!this.lockManager.exists()) {
61
- this.lockManager.initializeInMemory(record);
62
- }
63
- else {
64
- this.lockManager.read();
65
- this.lockManager.addGeneration(record);
66
- this.lockManager.clearPatches();
67
- }
68
- this.lockManager.save();
69
- // Re-detect customer patches via tree diff. The generation tag has the
70
- // pure generation tree, so any differences between it and HEAD represent
71
- // customer customizations that survived the squash merge.
72
- try {
73
- const redetectedPatches = await this.detector.detectNewPatches();
74
- if (redetectedPatches.length > 0) {
75
- for (const patch of redetectedPatches) {
76
- this.lockManager.addPatch(patch);
77
- }
78
- this.lockManager.save();
79
- }
80
- }
81
- catch {
82
- // If re-detection fails, proceed without patches.
83
- // The normal replay flow will still attempt detection.
84
- }
85
- }
86
- determineFlow() {
87
- if (!this.lockManager.exists()) {
88
- return "first-generation";
89
- }
90
- const lock = this.lockManager.read();
91
- if (lock.patches.length === 0) {
92
- return "no-patches";
93
- }
94
- return "normal-regeneration";
95
- }
96
- async handleFirstGeneration(options) {
97
- if (options?.dryRun) {
98
- return {
99
- flow: "first-generation",
100
- patchesDetected: 0,
101
- patchesApplied: 0,
102
- patchesWithConflicts: 0,
103
- patchesSkipped: 0,
104
- conflicts: []
105
- };
106
- }
107
- const commitOpts = options
108
- ? {
109
- cliVersion: options.cliVersion ?? "unknown",
110
- generatorVersions: options.generatorVersions ?? {},
111
- baseBranchHead: options.baseBranchHead
112
- }
113
- : undefined;
114
- await this.committer.commitGeneration("Initial SDK generation", commitOpts);
115
- const genRecord = await this.committer.createGenerationRecord(commitOpts);
116
- this.lockManager.initialize(genRecord);
117
- return {
118
- flow: "first-generation",
119
- patchesDetected: 0,
120
- patchesApplied: 0,
121
- patchesWithConflicts: 0,
122
- patchesSkipped: 0,
123
- conflicts: []
124
- };
125
- }
126
- /**
127
- * Skip-application mode: commit the generation and update the lockfile
128
- * but don't detect or apply patches. Sets a marker so the next normal
129
- * run skips revert detection in preGenerationRebase().
130
- */
131
- async handleSkipApplication(options) {
132
- const commitOpts = options
133
- ? {
134
- cliVersion: options.cliVersion ?? "unknown",
135
- generatorVersions: options.generatorVersions ?? {},
136
- baseBranchHead: options.baseBranchHead
137
- }
138
- : undefined;
139
- await this.committer.commitGeneration("Update SDK (replay skipped)", commitOpts);
140
- const genRecord = await this.committer.createGenerationRecord(commitOpts);
141
- if (this.lockManager.exists()) {
142
- this.lockManager.read();
143
- this.lockManager.addGeneration(genRecord);
144
- }
145
- else {
146
- this.lockManager.initializeInMemory(genRecord);
147
- }
148
- this.lockManager.setReplaySkippedAt(new Date().toISOString());
149
- this.lockManager.save();
150
- // Commit the lockfile update so it's pushed with the branch.
151
- // Without this, the marker and generation record stay in the
152
- // working tree and are lost when GithubStep pushes.
153
- if (!options?.stageOnly) {
154
- await this.committer.commitReplay(0);
155
- }
156
- else {
157
- await this.committer.stageAll();
158
- }
159
- return {
160
- flow: "skip-application",
161
- patchesDetected: 0,
162
- patchesApplied: 0,
163
- patchesWithConflicts: 0,
164
- patchesSkipped: 0,
165
- conflicts: []
166
- };
167
- }
168
- async handleNoPatchesRegeneration(options) {
169
- const newPatches = await this.detector.detectNewPatches();
170
- const warnings = [...this.detector.warnings];
171
- if (options?.dryRun) {
172
- return {
173
- flow: "no-patches",
174
- patchesDetected: newPatches.length,
175
- patchesApplied: 0,
176
- patchesWithConflicts: 0,
177
- patchesSkipped: 0,
178
- conflicts: [],
179
- wouldApply: newPatches,
180
- warnings: warnings.length > 0 ? warnings : undefined
181
- };
182
- }
183
- const commitOpts = options
184
- ? {
185
- cliVersion: options.cliVersion ?? "unknown",
186
- generatorVersions: options.generatorVersions ?? {},
187
- baseBranchHead: options.baseBranchHead
188
- }
189
- : undefined;
190
- await this.committer.commitGeneration("Update SDK", commitOpts);
191
- const genRecord = await this.committer.createGenerationRecord(commitOpts);
192
- // Add generation to lockfile BEFORE applying patches so the applicator
193
- // can read the current generation's tree hash for rename detection.
194
- this.lockManager.addGeneration(genRecord);
195
- let results = [];
196
- if (newPatches.length > 0) {
197
- results = await this.applicator.applyPatches(newPatches);
198
- }
199
- // Rebase cleanly applied patches to the current generation.
200
- // This prevents recurring conflicts on subsequent regenerations.
201
- const rebaseCounts = await this.rebasePatches(results, genRecord.commit_sha);
202
- // Save lockfile BEFORE commit — lockfile is source of truth.
203
- for (const patch of newPatches) {
204
- if (!rebaseCounts.absorbedPatchIds.has(patch.id)) {
205
- this.lockManager.addPatch(patch);
206
- }
207
- }
208
- this.lockManager.save();
209
- if (newPatches.length > 0) {
210
- if (!options?.stageOnly) {
211
- const appliedCount = results.filter((r) => r.status === "applied" || r.status === "conflict").length;
212
- if (appliedCount > 0) {
213
- await this.committer.commitReplay(appliedCount, newPatches);
214
- }
215
- }
216
- else {
217
- await this.committer.stageAll();
218
- }
219
- }
220
- return this.buildReport("no-patches", newPatches, results, options, warnings, rebaseCounts);
221
- }
222
- async handleNormalRegeneration(options) {
223
- if (options?.dryRun) {
224
- const existingPatches = this.lockManager.getPatches();
225
- const newPatches = await this.detector.detectNewPatches();
226
- const warnings = [...this.detector.warnings];
227
- const allPatches = [...existingPatches, ...newPatches];
228
- return {
229
- flow: "normal-regeneration",
230
- patchesDetected: allPatches.length,
231
- patchesApplied: 0,
232
- patchesWithConflicts: 0,
233
- patchesSkipped: 0,
234
- conflicts: [],
235
- wouldApply: allPatches,
236
- warnings: warnings.length > 0 ? warnings : undefined
237
- };
238
- }
239
- // Pre-generation rebase: update stale/modified patches while HEAD has customer code.
240
- let existingPatches = this.lockManager.getPatches();
241
- const preRebaseCounts = await this.preGenerationRebase(existingPatches);
242
- // Dedup patches by content hash after pre-generation rebase.
243
- existingPatches = this.lockManager.getPatches();
244
- const seenHashes = new Set();
245
- for (const p of existingPatches) {
246
- if (seenHashes.has(p.content_hash)) {
247
- this.lockManager.removePatch(p.id);
248
- }
249
- else {
250
- seenHashes.add(p.content_hash);
251
- }
252
- }
253
- existingPatches = this.lockManager.getPatches();
254
- const newPatches = await this.detector.detectNewPatches();
255
- const warnings = [...this.detector.warnings];
256
- const allPatches = [...existingPatches, ...newPatches];
257
- const commitOpts = options
258
- ? {
259
- cliVersion: options.cliVersion ?? "unknown",
260
- generatorVersions: options.generatorVersions ?? {},
261
- baseBranchHead: options.baseBranchHead
262
- }
263
- : undefined;
264
- await this.committer.commitGeneration("Update SDK", commitOpts);
265
- const genRecord = await this.committer.createGenerationRecord(commitOpts);
266
- // Add generation to lockfile BEFORE applying patches so the applicator
267
- // can read the current generation's tree hash for rename detection.
268
- this.lockManager.addGeneration(genRecord);
269
- const results = await this.applicator.applyPatches(allPatches);
270
- // Rebase cleanly applied patches to the current generation.
271
- const rebaseCounts = await this.rebasePatches(results, genRecord.commit_sha);
272
- // Save lockfile BEFORE commit — lockfile is source of truth.
273
- for (const patch of newPatches) {
274
- if (!rebaseCounts.absorbedPatchIds.has(patch.id)) {
275
- this.lockManager.addPatch(patch);
276
- }
277
- }
278
- this.lockManager.save();
279
- if (options?.stageOnly) {
280
- await this.committer.stageAll();
281
- }
282
- else {
283
- const appliedCount = results.filter((r) => r.status === "applied" || r.status === "conflict").length;
284
- if (appliedCount > 0) {
285
- await this.committer.commitReplay(appliedCount, allPatches);
286
- }
287
- }
288
- return this.buildReport("normal-regeneration", allPatches, results, options, warnings, rebaseCounts, preRebaseCounts);
289
- }
290
- /**
291
- * Rebase cleanly applied patches so they are relative to the current generation.
292
- * This prevents recurring conflicts on subsequent regenerations.
293
- * Returns the number of patches rebased.
294
- */
295
- async rebasePatches(results, currentGenSha) {
296
- let absorbed = 0;
297
- let repointed = 0;
298
- let contentRebased = 0;
299
- let keptAsUserOwned = 0;
300
- // Track content hashes to deduplicate converging incremental patches.
301
- const seenContentHashes = new Set();
302
- const absorbedPatchIds = new Set();
303
- // Pre-pass: Update patch.files with resolved (renamed) paths from application.
304
- // This ensures downstream operations (user-owned check, git diff, git show)
305
- // use the current file paths rather than stale pre-rename paths.
306
- for (const result of results) {
307
- if (result.resolvedFiles && Object.keys(result.resolvedFiles).length > 0) {
308
- const patch = result.patch;
309
- const updatedFiles = patch.files.map((f) => result.resolvedFiles[f] ?? f);
310
- patch.files = updatedFiles;
311
- try {
312
- this.lockManager.updatePatch(patch.id, { files: updatedFiles });
313
- }
314
- catch {
315
- // New patches aren't in lockfile yet — in-memory update sufficient
316
- }
317
- }
318
- }
319
- for (const result of results) {
320
- if (result.status === "conflict" && result.fileResults) {
321
- // For conflict patches with mixed results, trim any clean files
322
- // that were absorbed by the generator. This prevents absorbed files
323
- // from poisoning the pre-generation rebase conflict marker check.
324
- await this.trimAbsorbedFiles(result, currentGenSha);
325
- continue;
326
- }
327
- // Only rebase cleanly applied patches.
328
- // Conflicted patches keep their old base_generation so they retry.
329
- if (result.status !== "applied")
330
- continue;
331
- const patch = result.patch;
332
- // Skip if already based on the current generation
333
- if (patch.base_generation === currentGenSha)
334
- continue;
335
- try {
336
- // Check if any files are user-owned (new, .fernignore-protected, or .fernignore itself).
337
- const fernignorePatterns = this.readFernignorePatterns();
338
- const isUserOwned = await Promise.all(patch.files.map(async (file) => {
339
- // .fernignore itself is always user-owned
340
- if (file === ".fernignore") {
341
- return true;
342
- }
343
- // Check .fernignore patterns (cheaper than git)
344
- if (fernignorePatterns.some((p) => file === p || minimatch(file, p))) {
345
- return true;
346
- }
347
- // Check if file exists in the generation commit tree
348
- const content = await this.git.showFile(currentGenSha, file);
349
- return content === null;
350
- }));
351
- const hasUserOwnedFiles = isUserOwned.some(Boolean);
352
- if (hasUserOwnedFiles) {
353
- // Patch contains user-owned files — just update base_generation
354
- // to prevent re-evaluation. Keep patch_content as-is since
355
- // these files aren't produced by the generator.
356
- this.lockManager.updatePatch(patch.id, {
357
- base_generation: currentGenSha
358
- });
359
- keptAsUserOwned++;
360
- continue;
361
- }
362
- // All files exist in generation — safe to use git diff for
363
- // absorption check and patch rebasing.
364
- const diff = await this.git.exec(["diff", currentGenSha, "--", ...patch.files]).catch(() => null);
365
- if (!diff || !diff.trim()) {
366
- // Patch is now empty — customization was absorbed by the generator.
367
- this.lockManager.removePatch(patch.id);
368
- absorbedPatchIds.add(patch.id);
369
- absorbed++;
370
- continue;
371
- }
372
- const newContentHash = this.detector.computeContentHash(diff);
373
- // If another patch already captured this exact diff, this patch
374
- // is redundant (e.g., incremental patches that both resolve to
375
- // the same cumulative state after rebase).
376
- if (seenContentHashes.has(newContentHash)) {
377
- this.lockManager.removePatch(patch.id);
378
- absorbedPatchIds.add(patch.id);
379
- absorbed++;
380
- continue;
381
- }
382
- seenContentHashes.add(newContentHash);
383
- this.lockManager.updatePatch(patch.id, {
384
- base_generation: currentGenSha,
385
- patch_content: diff,
386
- content_hash: newContentHash
387
- });
388
- contentRebased++;
389
- }
390
- catch {
391
- // If rebasing fails for any reason, keep the original patch unchanged
392
- }
393
- }
394
- return { absorbed, repointed, contentRebased, keptAsUserOwned, absorbedPatchIds };
395
- }
396
- /**
397
- * For conflict patches with mixed results (some files merged, some conflicted),
398
- * check if the cleanly merged files were absorbed by the generator (empty diff).
399
- * If so, remove them from patch.files so they don't pollute the pre-generation
400
- * rebase conflict marker check (`git grep <<<<<<< -- ...patch.files`).
401
- *
402
- * Non-absorbed clean files stay in patch.files — removing them would lose
403
- * the customization on the next generation.
404
- */
405
- async trimAbsorbedFiles(result, currentGenSha) {
406
- const cleanFiles = result.fileResults.filter((f) => f.status === "merged").map((f) => f.file);
407
- if (cleanFiles.length === 0)
408
- return;
409
- const patch = result.patch;
410
- const fernignorePatterns = this.readFernignorePatterns();
411
- // Filter to only generator-produced clean files (not user-owned)
412
- const generatorCleanFiles = [];
413
- for (const file of cleanFiles) {
414
- if (file === ".fernignore")
415
- continue;
416
- if (fernignorePatterns.some((p) => file === p || minimatch(file, p)))
417
- continue;
418
- const content = await this.git.showFile(currentGenSha, file);
419
- if (content === null)
420
- continue; // user-owned new file
421
- generatorCleanFiles.push(file);
422
- }
423
- if (generatorCleanFiles.length === 0)
424
- return;
425
- // Check which clean files have an empty diff (absorbed by generator)
426
- const absorbedFiles = new Set();
427
- for (const file of generatorCleanFiles) {
428
- try {
429
- const diff = await this.git.exec(["diff", currentGenSha, "--", file]).catch(() => null);
430
- if (!diff || !diff.trim()) {
431
- absorbedFiles.add(file);
432
- }
433
- }
434
- catch {
435
- // If diff fails, leave the file in the patch
436
- }
437
- }
438
- if (absorbedFiles.size === 0)
439
- return;
440
- // Remove absorbed files from the patch's file list
441
- const remainingFiles = patch.files.filter((f) => !absorbedFiles.has(f));
442
- if (remainingFiles.length === patch.files.length)
443
- return; // nothing changed
444
- try {
445
- this.lockManager.updatePatch(patch.id, { files: remainingFiles });
446
- }
447
- catch {
448
- // New patches aren't in lockfile yet — update in-memory only
449
- patch.files = remainingFiles;
450
- }
451
- }
452
- /**
453
- * Pre-generation rebase: update patches using the customer's current state.
454
- * Called BEFORE commitGeneration() while HEAD has customer code.
455
- */
456
- async preGenerationRebase(patches) {
457
- const lock = this.lockManager.read();
458
- const currentGen = lock.current_generation;
459
- // If the previous run was skip-application, clear the marker and
460
- // skip all revert detection. Patches are preserved as-is.
461
- if (this.lockManager.isReplaySkipped()) {
462
- this.lockManager.clearReplaySkippedAt();
463
- return { conflictResolved: 0, conflictAbsorbed: 0, contentRefreshed: 0 };
464
- }
465
- let conflictResolved = 0;
466
- let conflictAbsorbed = 0;
467
- let contentRefreshed = 0;
468
- for (const patch of patches) {
469
- if (patch.base_generation === currentGen) {
470
- // Content refresh: check if user modified their customization
471
- // since the last replay commit.
472
- try {
473
- const diff = await this.git
474
- .exec(["diff", currentGen, "HEAD", "--", ...patch.files])
475
- .catch(() => null);
476
- if (diff === null)
477
- continue;
478
- if (!diff.trim()) {
479
- // User reverted all customizations in this patch
480
- this.lockManager.removePatch(patch.id);
481
- contentRefreshed++;
482
- continue;
483
- }
484
- const newContentHash = this.detector.computeContentHash(diff);
485
- if (newContentHash !== patch.content_hash) {
486
- // User changed their customization — update patch content
487
- // and recalculate the files list (some files may no longer differ)
488
- const filesOutput = await this.git
489
- .exec(["diff", "--name-only", currentGen, "HEAD", "--", ...patch.files])
490
- .catch(() => null);
491
- const newFiles = filesOutput
492
- ? filesOutput
493
- .trim()
494
- .split("\n")
495
- .filter(Boolean)
496
- .filter((f) => !f.startsWith(".fern/"))
497
- : patch.files;
498
- if (newFiles.length === 0) {
499
- this.lockManager.removePatch(patch.id);
500
- }
501
- else {
502
- this.lockManager.updatePatch(patch.id, {
503
- patch_content: diff,
504
- content_hash: newContentHash,
505
- files: newFiles
506
- });
507
- }
508
- contentRefreshed++;
509
- }
510
- }
511
- catch {
512
- // If anything fails, leave the patch unchanged
513
- }
514
- continue;
515
- }
516
- try {
517
- // Check for unresolved conflict markers in HEAD
518
- const markerFiles = await this.git
519
- .exec(["grep", "-l", "<<<<<<<", "HEAD", "--", ...patch.files])
520
- .catch(() => "");
521
- if (markerFiles.trim())
522
- continue;
523
- // Compute customer's resolved state relative to current generation
524
- const diff = await this.git.exec(["diff", currentGen, "HEAD", "--", ...patch.files]).catch(() => null);
525
- // Diff command failed (e.g., invalid SHA) — skip this patch
526
- if (diff === null)
527
- continue;
528
- if (!diff.trim()) {
529
- // Empty diff — customer reverted their customization
530
- this.lockManager.removePatch(patch.id);
531
- conflictAbsorbed++;
532
- continue;
533
- }
534
- // Update the patch with the resolved content
535
- const newContentHash = this.detector.computeContentHash(diff);
536
- this.lockManager.updatePatch(patch.id, {
537
- base_generation: currentGen,
538
- patch_content: diff,
539
- content_hash: newContentHash
540
- });
541
- conflictResolved++;
542
- }
543
- catch {
544
- // If anything fails, leave the patch unchanged
545
- }
546
- }
547
- return { conflictResolved, conflictAbsorbed, contentRefreshed };
548
- }
549
- readFernignorePatterns() {
550
- const fernignorePath = join(this.outputDir, ".fernignore");
551
- if (!existsSync(fernignorePath))
552
- return [];
553
- return readFileSync(fernignorePath, "utf-8")
554
- .split("\n")
555
- .map((line) => line.trim())
556
- .filter((line) => line && !line.startsWith("#"));
557
- }
558
- buildReport(flow, patches, results, options, warnings, rebaseCounts, preRebaseCounts) {
559
- const conflictResults = results.filter((r) => r.status === "conflict");
560
- const conflictDetails = conflictResults
561
- .map((r) => {
562
- const conflictFiles = r.fileResults?.filter((f) => f.status === "conflict") ?? [];
563
- const cleanFiles = r.fileResults?.filter((f) => f.status === "merged").map((f) => f.file) ?? [];
564
- return {
565
- patchId: r.patch.id,
566
- patchMessage: r.patch.original_message,
567
- reason: r.conflictReason,
568
- files: conflictFiles,
569
- cleanFiles: cleanFiles.length > 0 ? cleanFiles : undefined
570
- };
571
- })
572
- .filter((d) => d.files.length > 0);
573
- const partialCount = conflictDetails.filter((d) => d.cleanFiles && d.cleanFiles.length > 0).length;
574
- return {
575
- flow,
576
- patchesDetected: patches.length,
577
- patchesApplied: results.filter((r) => r.status === "applied").length,
578
- patchesWithConflicts: conflictResults.length,
579
- patchesSkipped: results.filter((r) => r.status === "skipped").length,
580
- patchesPartiallyApplied: partialCount > 0 ? partialCount : undefined,
581
- patchesAbsorbed: rebaseCounts && rebaseCounts.absorbed > 0 ? rebaseCounts.absorbed : undefined,
582
- patchesRepointed: rebaseCounts && rebaseCounts.repointed > 0 ? rebaseCounts.repointed : undefined,
583
- patchesContentRebased: rebaseCounts && rebaseCounts.contentRebased > 0 ? rebaseCounts.contentRebased : undefined,
584
- patchesKeptAsUserOwned: rebaseCounts && rebaseCounts.keptAsUserOwned > 0 ? rebaseCounts.keptAsUserOwned : undefined,
585
- patchesConflictResolved: preRebaseCounts && preRebaseCounts.conflictResolved + preRebaseCounts.conflictAbsorbed > 0
586
- ? preRebaseCounts.conflictResolved + preRebaseCounts.conflictAbsorbed
587
- : undefined,
588
- patchesRefreshed: preRebaseCounts && preRebaseCounts.contentRefreshed > 0 ? preRebaseCounts.contentRefreshed : undefined,
589
- conflicts: conflictResults.flatMap((r) => r.fileResults?.filter((f) => f.status === "conflict") ?? []),
590
- conflictDetails: conflictDetails.length > 0 ? conflictDetails : undefined,
591
- wouldApply: options?.dryRun ? patches : undefined,
592
- warnings: warnings && warnings.length > 0 ? warnings : undefined
593
- };
594
- }
595
- }
596
- //# sourceMappingURL=ReplayService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReplayService.js","sourceRoot":"","sources":["../src/ReplayService.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { MergeResult } from "./types.js";
2
- /**
3
- * Performs a 3-way merge using the diff3 algorithm.
4
- *
5
- * @param base - The common ancestor (pristine generated state user edited against)
6
- * @param ours - The new generated version
7
- * @param theirs - The user's customized version
8
- * @returns MergeResult with content, conflict flag, and conflict regions
9
- */
10
- export declare function threeWayMerge(base: string, ours: string, theirs: string): MergeResult;
11
- //# sourceMappingURL=ThreeWayMerge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThreeWayMerge.d.ts","sourceRoot":"","sources":["../src/ThreeWayMerge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CA2CrF"}