@fern-api/replay 0.6.0 → 0.6.2
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.
- package/dist/cli.cjs +16642 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/index.cjs +2014 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +463 -0
- package/dist/index.d.ts +463 -12
- package/dist/index.js +1968 -10
- package/dist/index.js.map +1 -1
- package/package.json +16 -6
- package/dist/FernignoreMigrator.d.ts +0 -38
- package/dist/FernignoreMigrator.d.ts.map +0 -1
- package/dist/FernignoreMigrator.js +0 -210
- package/dist/FernignoreMigrator.js.map +0 -1
- package/dist/LockfileManager.d.ts +0 -31
- package/dist/LockfileManager.d.ts.map +0 -1
- package/dist/LockfileManager.js +0 -124
- package/dist/LockfileManager.js.map +0 -1
- package/dist/ReplayApplicator.d.ts +0 -30
- package/dist/ReplayApplicator.d.ts.map +0 -1
- package/dist/ReplayApplicator.js +0 -544
- package/dist/ReplayApplicator.js.map +0 -1
- package/dist/ReplayCommitter.d.ts +0 -19
- package/dist/ReplayCommitter.d.ts.map +0 -1
- package/dist/ReplayCommitter.js +0 -64
- package/dist/ReplayCommitter.js.map +0 -1
- package/dist/ReplayDetector.d.ts +0 -22
- package/dist/ReplayDetector.d.ts.map +0 -1
- package/dist/ReplayDetector.js +0 -147
- package/dist/ReplayDetector.js.map +0 -1
- package/dist/ReplayService.d.ts +0 -100
- package/dist/ReplayService.d.ts.map +0 -1
- package/dist/ReplayService.js +0 -596
- package/dist/ReplayService.js.map +0 -1
- package/dist/ThreeWayMerge.d.ts +0 -11
- package/dist/ThreeWayMerge.d.ts.map +0 -1
- package/dist/ThreeWayMerge.js +0 -48
- package/dist/ThreeWayMerge.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -462
- package/dist/cli.js.map +0 -1
- package/dist/commands/bootstrap.d.ts +0 -46
- package/dist/commands/bootstrap.d.ts.map +0 -1
- package/dist/commands/bootstrap.js +0 -237
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/commands/forget.d.ts +0 -16
- package/dist/commands/forget.d.ts.map +0 -1
- package/dist/commands/forget.js +0 -27
- package/dist/commands/forget.js.map +0 -1
- package/dist/commands/index.d.ts +0 -6
- package/dist/commands/index.d.ts.map +0 -1
- package/dist/commands/index.js +0 -6
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/reset.d.ts +0 -16
- package/dist/commands/reset.d.ts.map +0 -1
- package/dist/commands/reset.js +0 -25
- package/dist/commands/reset.js.map +0 -1
- package/dist/commands/resolve.d.ts +0 -16
- package/dist/commands/resolve.d.ts.map +0 -1
- package/dist/commands/resolve.js +0 -28
- package/dist/commands/resolve.js.map +0 -1
- package/dist/commands/status.d.ts +0 -26
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -24
- package/dist/commands/status.js.map +0 -1
- package/dist/git/CommitDetection.d.ts +0 -7
- package/dist/git/CommitDetection.d.ts.map +0 -1
- package/dist/git/CommitDetection.js +0 -26
- package/dist/git/CommitDetection.js.map +0 -1
- package/dist/git/GitClient.d.ts +0 -22
- package/dist/git/GitClient.d.ts.map +0 -1
- package/dist/git/GitClient.js +0 -109
- package/dist/git/GitClient.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -80
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/ThreeWayMerge.js
DELETED
|
@@ -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("<<<<<<< Generated");
|
|
26
|
-
outputLines.push(...region.conflict.a);
|
|
27
|
-
outputLines.push("=======");
|
|
28
|
-
outputLines.push(...region.conflict.b);
|
|
29
|
-
outputLines.push(">>>>>>> 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,CAAC,IAAY,EAAE,IAAY,EAAE,MAAc;IACpE,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,mBAAmB,CAAC,CAAC;YACtC,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,4BAA4B,CAAC,CAAC;YAE/C,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
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":";AAEA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAG/G,SAAS,KAAK;IACV,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCA8BuB,CAAC,CAAC;AACzC,CAAC;AAUD,SAAS,SAAS,CAAC,IAAc;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChE,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAY,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;QAC/C,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,GAAqC,EAAE,CAAC;IACnD,IAAI,OAA2B,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACtB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YACxC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACnC,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAE,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAC9B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3C,OAAO,GAAG,GAAG,CAAC;QAClB,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAuC;IAC5E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,MAAe,CAAC;IAExF,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAChD,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;;QACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEnB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtH,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAE/H,IAAI,aAAa,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACrG,IAAI,MAAM,CAAC,uBAAuB,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,uBAAuB,qDAAqD,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QAEtH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;gBACrG,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,kBAAkB,CAAC,MAAM,WAAW,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;gBAClF,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,CAAC;QACL,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAChC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAEvF,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACtF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,WAAW,CAAC,uBAAuB,EAAE,CAAC;IACrD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAChC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;QACnF,OAAO;IACX,CAAC;IAED,WAAW,CAAC,IAAI,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAElD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,MAAM,yCAAyC,CAAC,CAAC;IAEjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO;IACX,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACtF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAuC;IACzE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;;QACvC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEnB,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEnD,WAAW,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,MAAiD;IAClE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,2CAA2C,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;QACzG,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;YACrE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAe,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC;gBACvD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAAC,MAAM,CAAC,KAAK,WAAW,aAAa,CAAC,CAAC;YACzG,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,CAAC;gBACzD,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IAC5F,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACjC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAE/B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QACxB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO;QACX,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,WAAW,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAE/D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO;IACX,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAEnD,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;YAC3E,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;YACxE,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;YAC9E,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;YAC3G,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAuC,EAAE,OAAgB;IAC3F,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;IACvD,IAAI,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC;IAC9F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACvF,CAAC;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,KAAuC;IACxE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAE9B,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,aAAa,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC;IAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACxE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,KAAuC;IAC1E,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,aAAa;gBACd,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,MAAM;YACV,KAAK,YAAY;gBACb,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,MAAM;YACV,KAAK,sBAAsB;gBACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACpD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE,CAAC;oBAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;gBACvF,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,MAAM;YACV;gBACI,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,IAAI;IACf,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,WAAW;YACZ,MAAM,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,MAAM;QACV,KAAK,SAAS;YACV,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM;QACV,KAAK,QAAQ;YACT,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACrC,MAAM;QACV,KAAK,OAAO;YACR,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM;QACV,KAAK,SAAS;YACV,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM;IACd,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IACxC,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,OAAO,mBAAmB,CAAC;QAClD,KAAK,eAAe,CAAC,CAAC,OAAO,6CAA6C,CAAC;QAC3E,KAAK,0BAA0B,CAAC,CAAC,OAAO,4CAA4C,CAAC;QACrF,KAAK,oBAAoB,CAAC,CAAC,OAAO,4BAA4B,CAAC;QAC/D,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -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":"AAGA,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAItF,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,CAwIvG"}
|