30 lines · 1.0 KB · TypeScript
RawDownload
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<EnvironmentId>; export function makeArchivedThreadsEnvironmentKey(  environmentIds: ReadonlyArray<EnvironmentId>,): string {  return pipe(environmentIds, Arr.sort(environmentIdOrder), (sortedEnvironmentIds) =>    sortedEnvironmentIds.join(ARCHIVED_THREADS_ENVIRONMENT_KEY_SEPARATOR),  );} export function parseArchivedThreadsEnvironmentKey(key: string): ReadonlyArray<EnvironmentId> {  if (key.length === 0) {    return [];  }  return pipe(    key.split(ARCHIVED_THREADS_ENVIRONMENT_KEY_SEPARATOR),    Arr.map((environmentId) => EnvironmentId.make(environmentId)),  );}