@fern-api/replay 0.5.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 -65
  11. package/dist/FernignoreMigrator.d.ts.map +0 -1
  12. package/dist/FernignoreMigrator.js +0 -237
  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 -62
  19. package/dist/ReplayApplicator.d.ts.map +0 -1
  20. package/dist/ReplayApplicator.js +0 -533
  21. package/dist/ReplayApplicator.js.map +0 -1
  22. package/dist/ReplayCommitter.d.ts +0 -39
  23. package/dist/ReplayCommitter.d.ts.map +0 -1
  24. package/dist/ReplayCommitter.js +0 -84
  25. package/dist/ReplayCommitter.js.map +0 -1
  26. package/dist/ReplayDetector.d.ts +0 -27
  27. package/dist/ReplayDetector.d.ts.map +0 -1
  28. package/dist/ReplayDetector.js +0 -150
  29. package/dist/ReplayDetector.js.map +0 -1
  30. package/dist/ReplayService.d.ts +0 -113
  31. package/dist/ReplayService.d.ts.map +0 -1
  32. package/dist/ReplayService.js +0 -579
  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 -262
  45. package/dist/commands/bootstrap.js.map +0 -1
  46. package/dist/commands/forget.d.ts +0 -26
  47. package/dist/commands/forget.d.ts.map +0 -1
  48. package/dist/commands/forget.js +0 -37
  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 -28
  55. package/dist/commands/reset.d.ts.map +0 -1
  56. package/dist/commands/reset.js +0 -37
  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 -34
  63. package/dist/commands/status.d.ts.map +0 -1
  64. package/dist/commands/status.js +0 -32
  65. package/dist/commands/status.js.map +0 -1
  66. package/dist/git/CommitDetection.d.ts +0 -11
  67. package/dist/git/CommitDetection.d.ts.map +0 -1
  68. package/dist/git/CommitDetection.js +0 -25
  69. package/dist/git/CommitDetection.js.map +0 -1
  70. package/dist/git/GitClient.d.ts +0 -33
  71. package/dist/git/GitClient.d.ts.map +0 -1
  72. package/dist/git/GitClient.js +0 -118
  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 -78
  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,48 +0,0 @@
1
- import { diff3Merge } from "node-diff3";
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 function threeWayMerge(base, ours, theirs) {
11
- const baseLines = base.split("\n");
12
- const oursLines = ours.split("\n");
13
- const theirsLines = theirs.split("\n");
14
- const regions = diff3Merge(oursLines, baseLines, theirsLines);
15
- const outputLines = [];
16
- const conflicts = [];
17
- let currentLine = 1;
18
- for (const region of regions) {
19
- if (region.ok) {
20
- outputLines.push(...region.ok);
21
- currentLine += region.ok.length;
22
- }
23
- else if (region.conflict) {
24
- const startLine = currentLine;
25
- outputLines.push("<<<<<<< OURS (generated)");
26
- outputLines.push(...region.conflict.a);
27
- outputLines.push("=======");
28
- outputLines.push(...region.conflict.b);
29
- outputLines.push(">>>>>>> THEIRS (your customization)");
30
- // Total lines in conflict block: 3 markers + a.length + b.length
31
- // endLine is the line number of the ">>>>>>>" marker
32
- const conflictLines = region.conflict.a.length + region.conflict.b.length + 3;
33
- conflicts.push({
34
- startLine,
35
- endLine: startLine + conflictLines - 1,
36
- ours: region.conflict.a,
37
- theirs: region.conflict.b,
38
- });
39
- currentLine += conflictLines;
40
- }
41
- }
42
- return {
43
- content: outputLines.join("\n"),
44
- hasConflicts: conflicts.length > 0,
45
- conflicts,
46
- };
47
- }
48
- //# sourceMappingURL=ThreeWayMerge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThreeWayMerge.js","sourceRoot":"","sources":["../src/ThreeWayMerge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CACzB,IAAY,EACZ,IAAY,EACZ,MAAc;IAEd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACZ,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;QACpC,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,WAAW,CAAC;YAE9B,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC7C,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAExD,iEAAiE;YACjE,qDAAqD;YACrD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9E,SAAS,CAAC,IAAI,CAAC;gBACX,SAAS;gBACT,OAAO,EAAE,SAAS,GAAG,aAAa,GAAG,CAAC;gBACtC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACvB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;aAC5B,CAAC,CAAC;YAEH,WAAW,IAAI,aAAa,CAAC;QACjC,CAAC;IACL,CAAC;IAED,OAAO;QACH,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;QAClC,SAAS;KACZ,CAAC;AACN,CAAC"}
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js DELETED
@@ -1,462 +0,0 @@
1
- #!/usr/bin/env node
2
- import { resolve as resolvePath } from "node:path";
3
- import { existsSync } from "node:fs";
4
- import { GitClient } from "./git/GitClient.js";
5
- import { LockfileManager } from "./LockfileManager.js";
6
- import { ReplayDetector } from "./ReplayDetector.js";
7
- import { ReplayService } from "./ReplayService.js";
8
- import { FernignoreMigrator } from "./FernignoreMigrator.js";
9
- import { bootstrap } from "./commands/bootstrap.js";
10
- import { forget } from "./commands/forget.js";
11
- import { reset } from "./commands/reset.js";
12
- import { resolve as resolveConflicts } from "./commands/resolve.js";
13
- const COMMANDS = ["bootstrap", "status", "detect", "replay", "migrate", "forget", "reset", "resolve"];
14
- function usage() {
15
- console.log(`Usage: fern-replay <command> <sdk-dir> [options]
16
-
17
- Commands:
18
- bootstrap Initialize Replay for an existing SDK repository
19
- status Show tracked patches and generation info
20
- detect Detect new customization patches (dry-run)
21
- replay Run full replay (detect + apply patches)
22
- migrate Analyze .fernignore migration
23
- forget Remove specific patches by file pattern
24
- reset Remove all Replay state (nuclear option)
25
- resolve Finish replay after manually resolving conflicts
26
-
27
- Options:
28
- --dry-run Report what would happen without modifying anything
29
- --import-history Scan git history for existing patches (migration use case)
30
- --no-check Skip conflict marker check (resolve command only)
31
- --migrate-fernignore Move untrackable .fernignore patterns to replay.yml
32
- --max-commits <n> Max commits to scan (default: 500)
33
-
34
- Examples:
35
- fern-replay bootstrap ./my-sdk
36
- fern-replay bootstrap ./my-sdk --import-history
37
- fern-replay bootstrap ./my-sdk --import-history --dry-run
38
- fern-replay status ./my-sdk
39
- fern-replay detect ./my-sdk
40
- fern-replay replay ./my-sdk --dry-run
41
- fern-replay migrate ./my-sdk
42
- fern-replay forget ./my-sdk "src/utils/retry.ts"
43
- fern-replay forget ./my-sdk "src/legacy/**" --dry-run
44
- fern-replay reset ./my-sdk
45
- fern-replay reset ./my-sdk --dry-run`);
46
- }
47
- function parseArgs(argv) {
48
- const args = argv.slice(2);
49
- if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
50
- usage();
51
- process.exit(0);
52
- }
53
- const command = args[0];
54
- if (!COMMANDS.includes(command)) {
55
- console.error(`Unknown command: ${command}\n`);
56
- usage();
57
- process.exit(1);
58
- }
59
- const dir = args[1];
60
- if (!dir) {
61
- console.error(`Missing <sdk-dir> argument\n`);
62
- usage();
63
- process.exit(1);
64
- }
65
- const flags = {};
66
- let pattern;
67
- for (let i = 2; i < args.length; i++) {
68
- const arg = args[i];
69
- if (arg === "--dry-run") {
70
- flags.dryRun = true;
71
- }
72
- else if (arg === "--migrate-fernignore") {
73
- flags.migrateFernignore = true;
74
- }
75
- else if (arg === "--max-commits" && args[i + 1]) {
76
- flags.maxCommits = args[++i];
77
- }
78
- else if (arg === "--import-history") {
79
- flags.importHistory = true;
80
- }
81
- else if (arg === "--force") {
82
- flags.force = true;
83
- }
84
- else if (arg === "--no-check") {
85
- flags.noCheck = true;
86
- }
87
- else if (!arg.startsWith("--") && !pattern) {
88
- pattern = arg;
89
- }
90
- }
91
- return { command, dir: resolvePath(dir), flags, pattern };
92
- }
93
- async function runBootstrap(dir, flags) {
94
- const dryRun = !!flags.dryRun;
95
- const importHistory = !!flags.importHistory;
96
- const maxCommits = flags.maxCommits ? parseInt(flags.maxCommits, 10) : undefined;
97
- const fernignoreAction = flags.migrateFernignore ? "migrate" : "skip";
98
- console.log(`Bootstrapping Replay for: ${dir}`);
99
- if (dryRun)
100
- console.log("(dry-run mode)\n");
101
- else
102
- console.log();
103
- const force = !!flags.force;
104
- const result = await bootstrap(dir, { dryRun, importHistory, maxCommitsToScan: maxCommits, fernignoreAction, force });
105
- if (!result.generationCommit) {
106
- console.log("No generation commits found.");
107
- if (result.warnings.length > 0) {
108
- for (const w of result.warnings)
109
- console.log(` ${w}`);
110
- }
111
- return;
112
- }
113
- console.log(`Generation commit: ${result.generationCommit.sha.slice(0, 7)} "${result.generationCommit.message.slice(0, 60)}"`);
114
- if (importHistory) {
115
- console.log(`Scanned commits since: ${result.scannedSinceGeneration.slice(0, 7)} (last generation)`);
116
- if (result.staleGenerationsSkipped > 0) {
117
- console.log(`Skipped ${result.staleGenerationsSkipped} older generation(s) — only tracking recent commits`);
118
- }
119
- console.log(`Patches ${dryRun ? "detected" : "created"}: ${dryRun ? result.patchesDetected : result.patchesCreated}`);
120
- if (result.patches.length > 0) {
121
- console.log("\nPatches:");
122
- for (const patch of result.patches) {
123
- console.log(` ${patch.id}: "${patch.original_message.slice(0, 50)}" (${patch.files.length} files)`);
124
- for (const f of patch.files) {
125
- console.log(` ${f}`);
126
- }
127
- }
128
- }
129
- if (result.fernignorePatterns.length > 0) {
130
- console.log(`\n.fernignore: ${result.fernignorePatterns.length} patterns`);
131
- if (result.fernignoreAnalysis) {
132
- console.log(` Can track: ${result.fernignoreAnalysis.trackedByBoth.length}`);
133
- console.log(` Need exclude: ${result.fernignoreAnalysis.fernignoreOnly.length}`);
134
- console.log(` Unprotected: ${result.fernignoreAnalysis.commitsOnly.length}`);
135
- }
136
- }
137
- }
138
- else {
139
- console.log("Clean start — tracking future edits only.");
140
- console.log("Use --import-history to scan git history for existing patches.");
141
- }
142
- if (result.warnings.length > 0) {
143
- console.log("\nWarnings:");
144
- for (const w of result.warnings)
145
- console.log(` ${w}`);
146
- }
147
- }
148
- async function runStatus(dir) {
149
- const lockManager = new LockfileManager(dir);
150
- if (!lockManager.exists()) {
151
- console.log("Replay is not initialized. Run 'fern-replay bootstrap <dir>' first.");
152
- return;
153
- }
154
- const lock = lockManager.read();
155
- const lastGen = lock.generations.find((g) => g.commit_sha === lock.current_generation);
156
- console.log(`Replay Status: ${dir}\n`);
157
- console.log(`Generations: ${lock.generations.length}`);
158
- if (lastGen) {
159
- console.log(`Last generation: ${lastGen.commit_sha.slice(0, 7)} (${lastGen.timestamp})`);
160
- console.log(` CLI: ${lastGen.cli_version}`);
161
- if (Object.keys(lastGen.generator_versions).length > 0) {
162
- for (const [name, ver] of Object.entries(lastGen.generator_versions)) {
163
- console.log(` ${name}: ${ver}`);
164
- }
165
- }
166
- }
167
- console.log(`\nPatches: ${lock.patches.length}`);
168
- if (lock.patches.length > 0) {
169
- for (const patch of lock.patches) {
170
- const type = patch.patch_content.includes("new file mode") ? "added" : "modified";
171
- console.log(` ${patch.id} [${type}] "${patch.original_message.slice(0, 50)}"`);
172
- console.log(` by ${patch.original_author} (${patch.original_commit.slice(0, 7)})`);
173
- for (const f of patch.files) {
174
- console.log(` ${f}`);
175
- }
176
- }
177
- }
178
- // Check for replay.yml
179
- const config = lockManager.getCustomizationsConfig();
180
- if (config.exclude && config.exclude.length > 0) {
181
- console.log(`\nExclude patterns: ${config.exclude.length}`);
182
- for (const p of config.exclude)
183
- console.log(` ${p}`);
184
- }
185
- }
186
- async function runDetect(dir) {
187
- const lockManager = new LockfileManager(dir);
188
- if (!lockManager.exists()) {
189
- console.log("Replay is not initialized. Run 'fern-replay bootstrap <dir>' first.");
190
- return;
191
- }
192
- lockManager.read();
193
- const git = new GitClient(dir);
194
- const detector = new ReplayDetector(git, lockManager, dir);
195
- const patches = await detector.detectNewPatches();
196
- if (detector.warnings.length > 0) {
197
- for (const w of detector.warnings)
198
- console.log(`Warning: ${w}`);
199
- console.log();
200
- }
201
- console.log(`Detected ${patches.length} new patch(es) since last generation:\n`);
202
- if (patches.length === 0) {
203
- console.log("No new customizations found.");
204
- return;
205
- }
206
- for (const patch of patches) {
207
- console.log(` ${patch.id}: "${patch.original_message.slice(0, 50)}"`);
208
- console.log(` by ${patch.original_author} (${patch.original_commit.slice(0, 7)})`);
209
- for (const f of patch.files) {
210
- console.log(` ${f}`);
211
- }
212
- }
213
- }
214
- async function runReplay(dir, flags) {
215
- const dryRun = !!flags.dryRun;
216
- console.log(`Running Replay: ${dir}`);
217
- if (dryRun)
218
- console.log("(dry-run mode)\n");
219
- else
220
- console.log();
221
- const service = new ReplayService(dir, { enabled: true });
222
- const report = await service.runReplay({ dryRun });
223
- printReport(report);
224
- }
225
- function printReport(report) {
226
- console.log(`Flow: ${report.flow}`);
227
- console.log(`Patches detected: ${report.patchesDetected}`);
228
- console.log(`Patches applied: ${report.patchesApplied}`);
229
- console.log(`Patches with conflicts: ${report.patchesWithConflicts}`);
230
- console.log(`Patches skipped: ${report.patchesSkipped}`);
231
- if (report.patchesAbsorbed) {
232
- console.log(`Patches absorbed by generator: ${report.patchesAbsorbed}`);
233
- }
234
- if (report.patchesRepointed) {
235
- console.log(`Patches repointed: ${report.patchesRepointed}`);
236
- }
237
- if (report.patchesContentRebased) {
238
- console.log(`Patches content rebased: ${report.patchesContentRebased}`);
239
- }
240
- if (report.patchesKeptAsUserOwned) {
241
- console.log(`Patches kept (user-owned files): ${report.patchesKeptAsUserOwned}`);
242
- }
243
- if (report.patchesPartiallyApplied) {
244
- console.log(`Patches partially applied: ${report.patchesPartiallyApplied}`);
245
- }
246
- if (report.patchesConflictResolved) {
247
- console.log(`Patches conflict-resolved (pre-rebase): ${report.patchesConflictResolved}`);
248
- }
249
- if (report.patchesRefreshed) {
250
- console.log(`Patches refreshed (user modified): ${report.patchesRefreshed}`);
251
- }
252
- if (report.wouldApply && report.wouldApply.length > 0) {
253
- console.log("\nWould apply:");
254
- for (const patch of report.wouldApply) {
255
- console.log(` ${patch.id}: "${patch.original_message.slice(0, 50)}" (${patch.files.length} files)`);
256
- }
257
- }
258
- if (report.conflictDetails && report.conflictDetails.length > 0) {
259
- console.log("\nConflict Details:");
260
- for (const detail of report.conflictDetails) {
261
- console.log(` Patch: ${detail.patchId} - "${detail.patchMessage}"`);
262
- if (detail.reason) {
263
- console.log(` Reason: ${formatConflictReason(detail.reason)}`);
264
- }
265
- for (const file of detail.files) {
266
- const reason = file.conflictReason ?? "merge conflict";
267
- const regionCount = file.conflicts?.length ?? 0;
268
- console.log(` CONFLICT ${file.file}: ${formatConflictReason(reason)} (${regionCount} region(s))`);
269
- }
270
- if (detail.cleanFiles && detail.cleanFiles.length > 0) {
271
- for (const file of detail.cleanFiles) {
272
- console.log(` OK ${file}: applied cleanly`);
273
- }
274
- }
275
- }
276
- console.log("\nResolve conflicts by editing the marked files, then commit.");
277
- console.log("Or run: fern-replay forget <file-pattern> to remove problematic patches");
278
- }
279
- else if (report.conflicts.length > 0) {
280
- console.log("\nConflicts:");
281
- for (const conflict of report.conflicts) {
282
- console.log(` ${conflict.file}: ${conflict.reason ?? "merge conflict"}`);
283
- }
284
- }
285
- if (report.warnings && report.warnings.length > 0) {
286
- console.log("\nWarnings:");
287
- for (const w of report.warnings)
288
- console.log(` ${w}`);
289
- }
290
- }
291
- async function runMigrate(dir) {
292
- const lockManager = new LockfileManager(dir);
293
- const git = new GitClient(dir);
294
- if (!lockManager.exists()) {
295
- // Initialize temporarily for analysis
296
- console.log("No lockfile found. Running bootstrap analysis first...\n");
297
- const result = await bootstrap(dir, { dryRun: true });
298
- if (!result.generationCommit) {
299
- console.log("No generation commits found. Cannot analyze migration.");
300
- return;
301
- }
302
- }
303
- else {
304
- lockManager.read();
305
- }
306
- const migrator = new FernignoreMigrator(git, lockManager, dir);
307
- if (!migrator.fernignoreExists()) {
308
- console.log("No .fernignore found.");
309
- return;
310
- }
311
- const patterns = migrator.readFernignorePatterns();
312
- console.log(`.fernignore has ${patterns.length} patterns:\n`);
313
- for (const p of patterns)
314
- console.log(` ${p}`);
315
- try {
316
- const analysis = await migrator.analyzeMigration();
317
- if (analysis.trackedByBoth.length > 0) {
318
- console.log(`\nCan migrate to Replay (${analysis.trackedByBoth.length}):`);
319
- for (const item of analysis.trackedByBoth) {
320
- console.log(` + ${item.file} (commit: ${item.commit.slice(0, 7)})`);
321
- }
322
- }
323
- if (analysis.fernignoreOnly.length > 0) {
324
- console.log(`\nNeed exclude rule (${analysis.fernignoreOnly.length}):`);
325
- for (const file of analysis.fernignoreOnly) {
326
- console.log(` ! ${file}`);
327
- }
328
- }
329
- if (analysis.commitsOnly.length > 0) {
330
- console.log(`\nUnprotected customizations (${analysis.commitsOnly.length}):`);
331
- for (const patch of analysis.commitsOnly) {
332
- console.log(` * ${patch.id}: "${patch.original_message.slice(0, 50)}" (${patch.files.length} files)`);
333
- }
334
- }
335
- }
336
- catch {
337
- console.log("\nCould not analyze migration (lockfile may need bootstrap first).");
338
- console.log("Run: fern-replay bootstrap <dir>");
339
- }
340
- }
341
- async function runForget(dir, flags, pattern) {
342
- if (!pattern) {
343
- console.error("Usage: fern-replay forget <sdk-dir> <file-pattern>");
344
- console.error("Example: fern-replay forget ./my-sdk src/utils/retry.ts");
345
- process.exit(1);
346
- }
347
- const dryRun = !!flags.dryRun;
348
- console.log(`Forgetting patches matching: ${pattern}`);
349
- if (dryRun)
350
- console.log("(dry-run mode)");
351
- const result = forget(dir, pattern, { dryRun });
352
- if (result.notFound) {
353
- console.log("No patches found matching that pattern.");
354
- return;
355
- }
356
- console.log(`\n${dryRun ? "Would remove" : "Removed"} ${result.removed.length} patch(es):\n`);
357
- for (const patch of result.removed) {
358
- console.log(` ${patch.id}: "${patch.message.slice(0, 50)}"`);
359
- for (const f of patch.files) {
360
- console.log(` ${f}`);
361
- }
362
- }
363
- if (!dryRun) {
364
- console.log("\nNext generation will restore pure generated code for these files.");
365
- }
366
- }
367
- async function runReset(dir, flags) {
368
- const dryRun = !!flags.dryRun;
369
- if (dryRun) {
370
- console.log("(dry-run mode)\n");
371
- }
372
- else {
373
- console.log("WARNING: This will remove ALL tracked customizations.");
374
- console.log("Your code changes will NOT be deleted, but they will no longer");
375
- console.log("be automatically preserved across regenerations.\n");
376
- }
377
- const result = reset(dir, { dryRun });
378
- if (result.nothingToReset) {
379
- console.log("Replay is not initialized. Nothing to reset.");
380
- return;
381
- }
382
- console.log(`${dryRun ? "Would remove" : "Removed"} ${result.patchesRemoved} patch(es).`);
383
- console.log(`${dryRun ? "Would delete" : "Deleted"} replay.lock.`);
384
- if (!dryRun) {
385
- console.log("\nTo re-initialize, run: fern-replay bootstrap <dir>");
386
- }
387
- }
388
- async function runResolve(dir, flags) {
389
- const checkMarkers = !flags.noCheck;
390
- console.log(`Resolving conflicts: ${dir}\n`);
391
- const result = await resolveConflicts(dir, { checkMarkers });
392
- if (!result.success) {
393
- switch (result.reason) {
394
- case "no-lockfile":
395
- console.error("Replay is not initialized. Nothing to resolve.");
396
- break;
397
- case "no-patches":
398
- console.error("No patches in lockfile. Nothing to resolve.");
399
- break;
400
- case "unresolved-conflicts":
401
- console.error("Conflict markers still present in:");
402
- for (const f of result.unresolvedFiles ?? []) {
403
- console.error(` ${f}`);
404
- }
405
- console.error("\nResolve all conflict markers, then run 'fern-replay resolve' again.");
406
- console.error("Or use --no-check to skip this check.");
407
- break;
408
- default:
409
- console.error(`Resolve failed: ${result.reason}`);
410
- }
411
- process.exit(1);
412
- }
413
- console.log(`Created [fern-replay] commit: ${result.commitSha?.slice(0, 7)}`);
414
- console.log("Conflict resolution complete.");
415
- }
416
- async function main() {
417
- const { command, dir, flags, pattern } = parseArgs(process.argv);
418
- if (!existsSync(dir)) {
419
- console.error(`Directory not found: ${dir}`);
420
- process.exit(1);
421
- }
422
- switch (command) {
423
- case "bootstrap":
424
- await runBootstrap(dir, flags);
425
- break;
426
- case "status":
427
- await runStatus(dir);
428
- break;
429
- case "detect":
430
- await runDetect(dir);
431
- break;
432
- case "replay":
433
- await runReplay(dir, flags);
434
- break;
435
- case "migrate":
436
- await runMigrate(dir);
437
- break;
438
- case "forget":
439
- await runForget(dir, flags, pattern);
440
- break;
441
- case "reset":
442
- await runReset(dir, flags);
443
- break;
444
- case "resolve":
445
- await runResolve(dir, flags);
446
- break;
447
- }
448
- }
449
- function formatConflictReason(reason) {
450
- switch (reason) {
451
- case "same-line-edit": return "same lines edited";
452
- case "new-file-both": return "new file created by both user and generator";
453
- case "base-generation-mismatch": return "patches from different generations overlap";
454
- case "patch-apply-failed": return "patch could not be applied";
455
- default: return reason;
456
- }
457
- }
458
- main().catch((err) => {
459
- console.error(err);
460
- process.exit(1);
461
- });
462
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import { type MigrationAnalysis } from "../FernignoreMigrator.js";
2
- import type { CommitInfo, StoredPatch } from "../types.js";
3
- export interface BootstrapOptions {
4
- /** Log what would happen but don't modify anything */
5
- dryRun?: boolean;
6
- /** How to handle .fernignore: "migrate" moves patterns to replay.yml, "delete" removes it, "skip" leaves it */
7
- fernignoreAction?: "migrate" | "delete" | "skip";
8
- /** Maximum number of commits to scan for generation history (default: 500) */
9
- maxCommitsToScan?: number;
10
- /** Allow overwriting an existing lockfile */
11
- force?: boolean;
12
- /** When true, scan git history for existing patches. Default: false (clean start with 0 patches). */
13
- importHistory?: boolean;
14
- }
15
- export interface BootstrapResult {
16
- /** The generation commit used as baseline, or null if none found */
17
- generationCommit: CommitInfo | null;
18
- /** Number of customization patches detected */
19
- patchesDetected: number;
20
- /** Number of patches written to lockfile */
21
- patchesCreated: number;
22
- /** The detected patches (for dry-run inspection) */
23
- patches: StoredPatch[];
24
- /** .fernignore patterns found, if any */
25
- fernignorePatterns: string[];
26
- /** .fernignore migration analysis, if .fernignore exists */
27
- fernignoreAnalysis?: MigrationAnalysis;
28
- /** Whether .fernignore was updated to protect replay files */
29
- fernignoreUpdated: boolean;
30
- /** Warnings about edge cases */
31
- warnings: string[];
32
- /** Number of older generation commits that were skipped (stale commits ignored) */
33
- staleGenerationsSkipped: number;
34
- /** The generation commit SHA used as cutoff for patch detection */
35
- scannedSinceGeneration: string;
36
- }
37
- /**
38
- * Bootstrap Replay for an existing SDK repository.
39
- *
40
- * Scans git history to find all generation commits, identifies
41
- * user customization patches between them, and creates the initial replay.lock.
42
- *
43
- * This is a one-time migration step for SDKs that existed before Replay.
44
- */
45
- export declare function bootstrap(outputDir: string, options?: BootstrapOptions): Promise<BootstrapResult>;
46
- //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC7B,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+GAA+G;IAC/G,gBAAgB,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qGAAqG;IACrG,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,oEAAoE;IACpE,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,8DAA8D;IAC9D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mFAAmF;IACnF,uBAAuB,EAAE,MAAM,CAAC;IAChC,mEAAmE;IACnE,sBAAsB,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4IvG"}