Skip to content
Source
Sign inSign up
Open History to see the last commit

ServerSourceControlHost.ts

57 lines2.5 KB

1import * as SecretResolver from "@t3tools/secret-provider-core/server/SecretResolver";
2import * as SourceControlHost from "@t3tools/source-control-core/server/SourceControlHost";
3import * as Effect from "effect/Effect";
4import * as Layer from "effect/Layer";
5​
6import * as SecretResolverLayer from "../secrets/SecretResolver.ts";
7import * as ServerSettings from "../serverSettings.ts";
8import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
9import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
10import * as VcsProcess from "../vcs/VcsProcess.ts";
11import { resolveSourceControlHostSecrets } from "./sourceControlHostSecrets.ts";
12​
13export const layer = Layer.effect(
14 SourceControlHost.SourceControlHost,
15 Effect.gen(function* () {
16 const serverSettings = yield* ServerSettings.ServerSettingsService;
17 const process = yield* VcsProcess.VcsProcess;
18 const git = yield* GitVcsDriver.GitVcsDriver;
19 const vcsRegistry = yield* VcsDriverRegistry.VcsDriverRegistry;
20 const secrets = yield* SecretResolver.SecretResolver;
21 return SourceControlHost.SourceControlHost.of({
22 settings: {
23 get: serverSettings.getSettings,
24 getWithSecrets: (kind) =>
25 serverSettings.getSettings.pipe(
26 Effect.flatMap((settings) =>
27 resolveSourceControlHostSecrets(secrets, settings.sourceControlHosts, kind).pipe(
28 Effect.map((sourceControlHosts) =>
29 sourceControlHosts === settings.sourceControlHosts
30 ? settings
31 : { ...settings, sourceControlHosts },
32 ),
33 ),
34 ),
35 ),
36 update: serverSettings.updateSettings,
37 },
38 process: { run: process.run },
39 git: {
40 execute: git.execute,
41 resolveCommit: git.resolveCommit,
42 remotes: (cwd) =>
43 vcsRegistry.resolve({ cwd }).pipe(Effect.map((handle) => handle.driver.listRemotes(cwd))),
44 readConfigValue: git.readConfigValue,
45 resolvePrimaryRemoteName: git.resolvePrimaryRemoteName,
46 ensureRemote: git.ensureRemote,
47 listLocalBranchNames: git.listLocalBranchNames,
48 fetchRemoteBranch: git.fetchRemoteBranch,
49 fetchRemoteTrackingBranch: git.fetchRemoteTrackingBranch,
50 setBranchUpstream: git.setBranchUpstream,
51 createBranch: git.createBranch,
52 writeConfigValue: git.writeConfigValue,
53 switchRef: git.switchRef,
54 },
55 });
56 }),
57).pipe(Layer.provide(SecretResolverLayer.layer));