Skip to content
Source
Sign inSign up

builtInDrivers.ts

31 lines1.3 KB

1import type {
2 SourceControlDriver,
3 SourceControlDriverInstance,
4} from "@t3tools/source-control-core/server/driver";
5import * as SourceControlRateLimit from "@t3tools/source-control-core/server/SourceControlRateLimit";
6import * as Context from "effect/Context";
7import * as Effect from "effect/Effect";
8import * as Layer from "effect/Layer";
9​
10import * as ServerSourceControlHost from "./ServerSourceControlHost.ts";
11import { BUILT_IN_SOURCE_CONTROL_DRIVER_LIST } from "./sourceControlDefinitions.ts";
12​
13export interface SourceControlDriverEntry {
14 readonly driver: Pick<SourceControlDriver, "kind" | "definition">;
15 readonly instance: SourceControlDriverInstance;
17​
18/** Every driver's instance, in registry order. Everything that reads a host reads it here. */
19export class SourceControlDrivers extends Context.Service<
20 SourceControlDrivers,
21 ReadonlyArray<SourceControlDriverEntry>
22>()("t3/sourceControl/builtInDrivers/SourceControlDrivers") {}
23​
24const make = Effect.forEach(BUILT_IN_SOURCE_CONTROL_DRIVER_LIST, (driver) =>
25 driver.make.pipe(Effect.map((instance) => ({ driver, instance }))),
26);
27​
28export const layer = Layer.effect(SourceControlDrivers, make).pipe(
29 Layer.provideMerge(ServerSourceControlHost.layer),
30 Layer.provideMerge(SourceControlRateLimit.layer),
31);