88 lines · 3.0 KB · TypeScript
RawDownload
import {  type EnvironmentId,  type OrchestrationThread,  type OrchestrationShellSnapshot,  type ThreadId,} from "@t3tools/contracts";import * as Context from "effect/Context";import * as Effect from "effect/Effect";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; import type { ConnectionRegistration } from "../connection/catalog.ts";import type { ConnectionTarget } from "../connection/model.ts"; export class ConnectionPersistenceError extends Schema.TaggedErrorClass<ConnectionPersistenceError>()(  "ConnectionPersistenceError",  {    operation: Schema.Literals([      "list-targets",      "register-connection",      "remove-connection",      "load-shell",      "save-shell",      "load-thread",      "save-thread",      "remove-thread",      "clear-environment",    ]),    cause: Schema.Defect(),  },) {  override get message(): string {    return `Could not ${this.operation.replaceAll("-", " ")}.`;  }} export class ConnectionTargetStore extends Context.Service<  ConnectionTargetStore,  {    readonly list: Effect.Effect<ReadonlyArray<ConnectionTarget>, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/ConnectionTargetStore") {} export class ConnectionRegistrationStore extends Context.Service<  ConnectionRegistrationStore,  {    readonly register: (      registration: ConnectionRegistration,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly remove: (target: ConnectionTarget) => Effect.Effect<void, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/ConnectionRegistrationStore") {} export class EnvironmentCacheStore extends Context.Service<  EnvironmentCacheStore,  {    readonly loadShell: (      environmentId: EnvironmentId,    ) => Effect.Effect<Option.Option<OrchestrationShellSnapshot>, ConnectionPersistenceError>;    readonly saveShell: (      environmentId: EnvironmentId,      snapshot: OrchestrationShellSnapshot,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly loadThread: (      environmentId: EnvironmentId,      threadId: ThreadId,    ) => Effect.Effect<Option.Option<OrchestrationThread>, ConnectionPersistenceError>;    readonly saveThread: (      environmentId: EnvironmentId,      thread: OrchestrationThread,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly removeThread: (      environmentId: EnvironmentId,      threadId: ThreadId,    ) => Effect.Effect<void, ConnectionPersistenceError>;    readonly clear: (      environmentId: EnvironmentId,    ) => Effect.Effect<void, ConnectionPersistenceError>;  }>()("@t3tools/client-runtime/platform/persistence/EnvironmentCacheStore") {} export class EnvironmentOwnedDataCleanup extends Context.Reference<{  readonly clear: (environmentId: EnvironmentId) => Effect.Effect<void>;}>("@t3tools/client-runtime/platform/persistence/EnvironmentOwnedDataCleanup", {  defaultValue: () => ({    clear: () => Effect.void,  }),}) {}