import { EnvironmentId, type OrchestrationShellSnapshot } from "@t3tools/contracts"; import * as Arr from "effect/Array"; import { pipe } from "effect/Function"; import * as Order from "effect/Order"; export interface ArchivedSnapshotEntry { readonly environmentId: EnvironmentId; readonly snapshot: OrchestrationShellSnapshot; } const ARCHIVED_THREADS_ENVIRONMENT_KEY_SEPARATOR = "\u001f"; const environmentIdOrder = Order.String as Order.Order; export function makeArchivedThreadsEnvironmentKey( environmentIds: ReadonlyArray, ): string { return pipe(environmentIds, Arr.sort(environmentIdOrder), (sortedEnvironmentIds) => sortedEnvironmentIds.join(ARCHIVED_THREADS_ENVIRONMENT_KEY_SEPARATOR), ); } export function parseArchivedThreadsEnvironmentKey(key: string): ReadonlyArray { if (key.length === 0) { return []; } return pipe( key.split(ARCHIVED_THREADS_ENVIRONMENT_KEY_SEPARATOR), Arr.map((environmentId) => EnvironmentId.make(environmentId)), ); }