Skip to content

Commit 3bdaf3e

Browse files
committed
Auto-expand diff files and dedupe effect installs
- Collapse removal now resets when switching a diff file to full context - Add Bun hoisted linker config and dedupe nested effect node_modules on prepare
1 parent fb0b35b commit 3bdaf3e

5 files changed

Lines changed: 80 additions & 1 deletion

File tree

apps/web/src/lib/diffFileReviewState.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ describe("setDiffFileContextMode", () => {
7676
"src/a.ts": { accepted: true, collapsed: false, contextMode: "full" },
7777
});
7878
});
79+
80+
it("auto-expands a file when switching to full context", () => {
81+
expect(
82+
setDiffFileContextMode(
83+
{
84+
"src/a.ts": { accepted: false, collapsed: true, contextMode: "patch" },
85+
},
86+
"src/a.ts",
87+
"full",
88+
),
89+
).toEqual({
90+
"src/a.ts": { accepted: false, collapsed: false, contextMode: "full" },
91+
});
92+
});
7993
});
8094

8195
describe("expandDiffFile", () => {

apps/web/src/lib/diffFileReviewState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export function setDiffFileContextMode(
6666
...current,
6767
[path]: {
6868
...previous,
69+
collapsed: contextMode === "full" ? false : previous.collapsed,
6970
contextMode,
7071
},
7172
};

bunfig.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[install]
2+
linker = "hoisted"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"clean": "rm -rf node_modules apps/*/node_modules packages/*/node_modules apps/*/dist apps/*/dist-electron packages/*/dist .turbo apps/*/.turbo packages/*/.turbo",
5555
"sync:vscode-icons": "node scripts/sync-vscode-icons.mjs",
5656
"regenerate:brand-assets": "python3 scripts/generate-brand-assets.py",
57-
"prepare": "husky && node scripts/patch-effect-language-service.ts"
57+
"prepare": "husky && node scripts/patch-effect-language-service.ts && node scripts/dedupe-effect-node-modules.mjs"
5858
},
5959
"devDependencies": {
6060
"@types/node": "catalog:",
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import fs from "node:fs/promises";
2+
import path from "node:path";
3+
import { fileURLToPath } from "node:url";
4+
5+
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
6+
const repoRoot = path.resolve(scriptDir, "..");
7+
const effectRoot = path.join(repoRoot, "node_modules", "effect");
8+
const effectScopeDir = path.join(repoRoot, "node_modules", "@effect");
9+
10+
async function exists(targetPath) {
11+
try {
12+
await fs.lstat(targetPath);
13+
return true;
14+
} catch {
15+
return false;
16+
}
17+
}
18+
19+
async function dedupeNestedEffect(packageDir) {
20+
const nestedEffectDir = path.join(packageDir, "node_modules", "effect");
21+
if (!(await exists(nestedEffectDir))) {
22+
return false;
23+
}
24+
25+
const nestedStat = await fs.lstat(nestedEffectDir);
26+
if (nestedStat.isSymbolicLink()) {
27+
const linkTarget = await fs.readlink(nestedEffectDir);
28+
const resolvedTarget = path.resolve(path.dirname(nestedEffectDir), linkTarget);
29+
if (resolvedTarget === effectRoot) {
30+
return false;
31+
}
32+
}
33+
34+
await fs.rm(nestedEffectDir, { recursive: true, force: true });
35+
const relativeTarget = path.relative(path.dirname(nestedEffectDir), effectRoot);
36+
await fs.symlink(relativeTarget, nestedEffectDir, "dir");
37+
return true;
38+
}
39+
40+
async function main() {
41+
if (!(await exists(effectRoot)) || !(await exists(effectScopeDir))) {
42+
return;
43+
}
44+
45+
const entries = await fs.readdir(effectScopeDir, { withFileTypes: true });
46+
let dedupedCount = 0;
47+
for (const entry of entries) {
48+
if (!entry.isDirectory()) {
49+
continue;
50+
}
51+
const changed = await dedupeNestedEffect(path.join(effectScopeDir, entry.name));
52+
if (changed) {
53+
dedupedCount += 1;
54+
}
55+
}
56+
57+
if (dedupedCount > 0) {
58+
console.log(`[dedupe-effect-node-modules] linked root effect into ${dedupedCount} package(s)`);
59+
}
60+
}
61+
62+
await main();

0 commit comments

Comments
 (0)