Skip to content

Commit 56973e0

Browse files
authored
fix(core): reject inherited workspace providers (#42227)
1 parent c253d4d commit 56973e0

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

packages/core/src/workspace/driver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class RegistryService extends Context.Service<RegistryService, Registry>(
5555

5656
export const registry = (drivers: Readonly<Record<string, Interface>>): Registry => ({
5757
get: (provider) => {
58-
const driver = drivers[provider]
58+
const driver = Object.hasOwn(drivers, provider) ? drivers[provider] : undefined
5959
return driver ? Effect.succeed(driver) : Effect.fail(new ProviderNotFound({ provider }))
6060
},
6161
})

packages/core/test/workspace.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ beforeEach(() => {
4848
failConnect = false
4949
})
5050

51+
it.effect("rejects unregistered workspace providers", () =>
52+
Effect.gen(function* () {
53+
const registry = WorkspaceDriver.registry({ fake: driver })
54+
55+
for (const provider of ["missing", "constructor", "toString", "__proto__"]) {
56+
expect(yield* registry.get(provider).pipe(Effect.flip)).toEqual(
57+
new WorkspaceDriver.ProviderNotFound({ provider }),
58+
)
59+
}
60+
}),
61+
)
62+
5163
it.effect("persists the workspace lifecycle and reconnects after idle suspension", () =>
5264
Effect.gen(function* () {
5365
const workspace = yield* Workspace.Service

0 commit comments

Comments
 (0)