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)), );}
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)),
);
}