import type { ServerSettings, ServerSettingsError } from "@t3tools/contracts"; import * as Effect from "effect/Effect"; import * as Equal from "effect/Equal"; import * as Stream from "effect/Stream"; import type * as ServerSettingsModule from "../serverSettings.ts"; export interface ProviderSnapshotSettings { readonly provider: Settings; readonly enableProviderUpdateChecks: boolean; } function makeProviderSnapshotSettings( provider: Settings, settings: ServerSettings, ): ProviderSnapshotSettings { return { provider, enableProviderUpdateChecks: settings.enableProviderUpdateChecks, }; } export function haveProviderSnapshotSettingsChanged( previous: ProviderSnapshotSettings, next: ProviderSnapshotSettings, ): boolean { return !Equal.equals(previous, next); } export function makeProviderSnapshotSettingsSource( provider: Settings, serverSettings: ServerSettingsModule.ServerSettingsService["Service"], ): { readonly getSettings: Effect.Effect, ServerSettingsError>; readonly streamSettings: Stream.Stream>; } { const mapSettings = (settings: ServerSettings) => makeProviderSnapshotSettings(provider, settings); return { getSettings: serverSettings.getSettings.pipe(Effect.map(mapSettings)), streamSettings: serverSettings.streamChanges.pipe(Stream.map(mapSettings)), }; }