Skip to content

Commit ccc742b

Browse files
committed
fix(runner): harden workspace dependency links
1 parent e0a5884 commit ccc742b

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

packages/local-runner/src/index.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,11 @@ test("workspace manager links node_modules into prepared workspaces when availab
247247

248248
assert.equal(await fileExists(join(workspacePath, "node_modules")), true);
249249
assert.equal(await readFile(join(workspacePath, "node_modules", ".placeholder"), "utf-8"), "ok\n");
250+
assert.equal(existsSync(join(workspacePath, "node_modules", ".placeholder")), true);
250251
await manager.cleanup(workspacePath);
251252
});
252253

253-
test("workspace manager ignores linked node_modules in git workspaces", async () => {
254+
test("workspace manager exposes node_modules entries inside git workspaces", async () => {
254255
const repo = await createRealGitRepo();
255256
await mkdir(join(repo, "node_modules"), { recursive: true });
256257
await writeFile(join(repo, "node_modules", ".placeholder"), "ok\n");
@@ -268,6 +269,7 @@ test("workspace manager ignores linked node_modules in git workspaces", async ()
268269
encoding: "utf-8",
269270
}).trim();
270271
assert.equal(status, "");
272+
assert.equal(await readFile(join(workspacePath, "node_modules", ".placeholder"), "utf-8"), "ok\n");
271273
await manager.cleanup(workspacePath);
272274
});
273275

packages/local-runner/src/index.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,15 @@ async function linkSharedDependencies(sourceRepoPath: string, workspacePath: str
143143
return;
144144
}
145145

146-
const relativeTarget = resolve(sourceNodeModules);
147-
await symlink(relativeTarget, workspaceNodeModules, "dir");
146+
await mkdir(workspaceNodeModules, { recursive: true });
147+
for (const entry of await readdir(sourceNodeModules)) {
148+
const sourceEntry = join(sourceNodeModules, entry);
149+
const workspaceEntry = join(workspaceNodeModules, entry);
150+
if (await fileExists(workspaceEntry)) {
151+
continue;
152+
}
153+
await symlink(resolve(sourceEntry), workspaceEntry, "junction");
154+
}
148155
await ignoreWorkspaceEntry(workspacePath, "node_modules");
149156
}
150157

0 commit comments

Comments
 (0)