56 lines · 1.7 KB · TypeScript
RawDownload
import * as Context from "effect/Context";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer"; import {  type VcsDriverKind,  type VcsError,  type VcsInitInput,  VcsUnsupportedOperationError,} from "@t3tools/contracts";import * as VcsDriverRegistry from "./VcsDriverRegistry.ts"; export interface VcsProvisioningServiceShape {  readonly initRepository: (input: VcsInitInput) => Effect.Effect<void, VcsError>;} export class VcsProvisioningService extends Context.Service<  VcsProvisioningService,  VcsProvisioningServiceShape>()("t3/vcs/VcsProvisioningService") {} function resolveRequestedKind(  kind: VcsDriverKind | undefined,): Effect.Effect<VcsDriverKind, VcsUnsupportedOperationError> {  if (kind === undefined) {    return Effect.succeed("git");  }  if (kind === "unknown") {    return Effect.fail(      new VcsUnsupportedOperationError({        operation: "VcsProvisioningService.resolveRequestedKind",        kind,        detail: "A concrete VCS driver kind is required for repository provisioning.",      }),    );  }  return Effect.succeed(kind);} export const make = Effect.fn("makeVcsProvisioningService")(function* () {  const registry = yield* VcsDriverRegistry.VcsDriverRegistry;   const initRepository: VcsProvisioningServiceShape["initRepository"] = Effect.fn(    "VcsProvisioningService.initRepository",  )(function* (input) {    const kind = yield* resolveRequestedKind(input.kind);    const driver = yield* registry.get(kind);    return yield* driver.initRepository(input);  });   return VcsProvisioningService.of({    initRepository,  });}); export const layer = Layer.effect(VcsProvisioningService, make());

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t