Просмотр исходного кода

fix(core): reject inherited workspace providers (#42227)

Kit Langton 4 дней назад
Родитель
Сommit
56973e0ca4
2 измененных файлов с 13 добавлено и 1 удалено
  1. 1 1
      packages/core/src/workspace/driver.ts
  2. 12 0
      packages/core/test/workspace.test.ts

+ 1 - 1
packages/core/src/workspace/driver.ts

@@ -55,7 +55,7 @@ export class RegistryService extends Context.Service<RegistryService, Registry>(
 
 export const registry = (drivers: Readonly<Record<string, Interface>>): Registry => ({
   get: (provider) => {
-    const driver = drivers[provider]
+    const driver = Object.hasOwn(drivers, provider) ? drivers[provider] : undefined
     return driver ? Effect.succeed(driver) : Effect.fail(new ProviderNotFound({ provider }))
   },
 })

+ 12 - 0
packages/core/test/workspace.test.ts

@@ -48,6 +48,18 @@ beforeEach(() => {
   failConnect = false
 })
 
+it.effect("rejects unregistered workspace providers", () =>
+  Effect.gen(function* () {
+    const registry = WorkspaceDriver.registry({ fake: driver })
+
+    for (const provider of ["missing", "constructor", "toString", "__proto__"]) {
+      expect(yield* registry.get(provider).pipe(Effect.flip)).toEqual(
+        new WorkspaceDriver.ProviderNotFound({ provider }),
+      )
+    }
+  }),
+)
+
 it.effect("persists the workspace lifecycle and reconnects after idle suspension", () =>
   Effect.gen(function* () {
     const workspace = yield* Workspace.Service