{"version":3,"file":"sdcorejs-angular-services-cache.mjs","sources":["../../../projects/sdcorejs-angular/services/cache/src/cache.model.ts","../../../projects/sdcorejs-angular/services/cache/src/cache.service.ts","../../../projects/sdcorejs-angular/services/cache/sdcorejs-angular-services-cache.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SdPersistenceIdentityCanonicalizer, SdPersistenceSerializer } from '@sdcorejs/angular/services/persistence';\nimport { Observable } from 'rxjs';\n\nexport interface SdCacheOption<T = unknown> {\n  type?: 'memory' | 'session' | 'local';\n  hours?: number;\n  ttlMs?: number;\n  default?: T;\n  args?: Readonly<Record<string, unknown>>;\n  namespace?: string;\n  version?: string | number;\n  serializer?: SdPersistenceSerializer;\n  identityCanonicalizer?: SdPersistenceIdentityCanonicalizer;\n}\n\nexport interface SdCache<T = unknown> {\n  get: () => T | undefined;\n  snapshot: () => SdCacheSnapshot<T>;\n  set: (data: T) => void;\n  has: () => boolean;\n  remove: () => void;\n  /** Releases only this facade while preserving its backing cache entry. */\n  release: () => void;\n  destroy: () => void;\n  observer: Observable<T | undefined>;\n  load: (callback: () => Promise<T>) => Promise<T>;\n}\n\nexport type SdCacheSnapshot<T> = { present: false } | { present: true; value: T };\n\nexport interface SdCacheWithDefault<T> extends Omit<SdCache<T>, 'get' | 'observer'> {\n  get: () => T;\n  observer: Observable<T>;\n}\n\nexport interface SdCacheStoredValue<T = unknown> {\n  data: T;\n  createdOn: Date;\n}\n\nexport type SdCacheSetCallback = (key: string, value: SdCacheStoredValue<unknown>, option?: SdCacheOption<unknown>) => Promise<void> | void;\n\nexport type SdCacheGetCallback = (key: string, option?: SdCacheOption<unknown>) => Promise<SdCacheStoredValue<unknown> | undefined>;\n\nexport type SdCacheRemoveCallback = (key: string, option?: SdCacheOption<unknown>) => Promise<void> | void;\n\nexport interface ISdCacheConfiguration {\n  convertKey?: (key: string) => string;\n  namespace?: string;\n  version?: string | number;\n  serializer?: SdPersistenceSerializer;\n  identityCanonicalizer?: SdPersistenceIdentityCanonicalizer;\n  set?: SdCacheSetCallback;\n  get?: SdCacheGetCallback;\n  remove?: SdCacheRemoveCallback;\n}\n\nexport const SD_CACHE_CONFIG = new InjectionToken<ISdCacheConfiguration>('sd-cache.configuration');\n\nexport interface SdLegacyCacheCallbacks<T> {\n  matches: (key: string, option?: SdCacheOption<unknown>) => boolean;\n  isValue: (value: unknown) => value is T;\n  set?: (key: string, value: SdCacheStoredValue<T>, option?: SdCacheOption<unknown>) => Promise<void> | void;\n  get?: (key: string, option?: SdCacheOption<unknown>) => Promise<SdCacheStoredValue<T> | undefined>;\n  remove?: (key: string, option?: SdCacheOption<unknown>) => Promise<void> | void;\n}\n\n/** @deprecated Prefer globally safe unknown callbacks on `ISdCacheConfiguration`. */\nexport function adaptLegacySdCacheCallbacks<T>(callbacks: SdLegacyCacheCallbacks<T>): ISdCacheConfiguration {\n  return {\n    set: callbacks.set\n      ? (key, value, option) => {\n          if (!callbacks.matches(key, option)) return;\n          if (!callbacks.isValue(value.data)) throw new TypeError(`Legacy cache value did not match key ${key}`);\n          return callbacks.set?.(key, { data: value.data, createdOn: new Date(value.createdOn) }, option);\n        }\n      : undefined,\n    get: callbacks.get\n      ? async (key, option) => {\n          if (!callbacks.matches(key, option)) return undefined;\n          const value = await callbacks.get?.(key, option);\n          if (!value) return undefined;\n          if (!callbacks.isValue(value.data)) throw new TypeError(`Legacy cache value did not match key ${key}`);\n          return { data: value.data, createdOn: new Date(value.createdOn) };\n        }\n      : undefined,\n    remove: callbacks.remove\n      ? (key, option) => {\n          if (!callbacks.matches(key, option)) return;\n          return callbacks.remove?.(key, option);\n        }\n      : undefined,\n  };\n}\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport {\n  SD_PERSISTENCE_STORAGE_ADAPTER,\n  SdGraphSerializer,\n  SdGraphIdentityCanonicalizer,\n  SdPersistenceIdentityCanonicalizer,\n  SdPersistenceSerializer,\n  SdPersistenceStorageArea,\n  buildSdPersistenceKey,\n  canonicalizeSdPersistenceValue,\n  digestSdPersistenceKey,\n  parseSdPersistenceEnvelope,\n  readSdPersistenceStorageItem,\n  stringifySdPersistenceTombstoneEnvelope,\n  stringifySdPersistenceValueEnvelope,\n} from '@sdcorejs/angular/services/persistence';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { BehaviorSubject } from 'rxjs';\nimport { SD_CACHE_CONFIG, SdCache, SdCacheOption, SdCacheSnapshot, SdCacheStoredValue, SdCacheWithDefault } from './cache.model';\n\ninterface CacheHandleFacade {\n  emit: (present: boolean, value: unknown) => void;\n  complete: () => void;\n}\n\ninterface CacheState {\n  entry?: SdCacheStoredValue<unknown>;\n  hydrated: boolean;\n  handles: Set<CacheHandleFacade>;\n  generation: number;\n  inFlight?: { generation: number; promise: Promise<unknown> };\n  disposed: boolean;\n}\n\ntype CacheEntryRead = { status: 'found'; entry: SdCacheStoredValue<unknown> } | { status: 'absent' } | { status: 'unavailable' };\n\ninterface NormalizedCacheOption {\n  publicOption: SdCacheOption<unknown>;\n  area: SdPersistenceStorageArea | 'memory';\n  storageKey: string;\n  legacyStorageKey?: string;\n  ownerDigest: string;\n  identityDigest: string;\n  ttlMs?: number;\n  serializer: SdPersistenceSerializer;\n}\n\ninterface CacheHandleOperations<T> {\n  get: () => T | undefined;\n  snapshot: () => SdCacheSnapshot<T>;\n  set: (data: T) => void;\n  has: () => boolean;\n  remove: () => void;\n  release: () => void;\n  destroy: () => void;\n  load: (callback: () => Promise<T>) => Promise<T>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SdCacheService {\n  readonly #configuration = inject(SD_CACHE_CONFIG, { optional: true });\n  readonly #adapter = inject(SD_PERSISTENCE_STORAGE_ADAPTER);\n  readonly #destroyRef = inject(DestroyRef);\n  readonly #defaultSerializer = new SdGraphSerializer();\n  readonly #defaultIdentityCanonicalizer = new SdGraphIdentityCanonicalizer();\n  readonly #states = new Map<string, CacheState>();\n  readonly #remoteQueues = new Map<string, Promise<void>>();\n  readonly #memoryEntries = new Map<string, SdCacheStoredValue<unknown>>();\n  readonly #failedOwners = new Map<string, true>();\n  readonly #maxFailedOwners = 256;\n  #destroyed = false;\n\n  constructor() {\n    this.#destroyRef.onDestroy(() => {\n      this.#destroyed = true;\n      for (const state of this.#states.values()) {\n        state.disposed = true;\n        state.generation += 1;\n        state.entry = undefined;\n        state.inFlight = undefined;\n        for (const handle of state.handles) handle.complete();\n        state.handles.clear();\n      }\n      this.#states.clear();\n      this.#remoteQueues.clear();\n      this.#memoryEntries.clear();\n      this.#failedOwners.clear();\n    });\n  }\n\n  create<T>(key: string | object, option: SdCacheOption<T> & { default: T }): SdCacheWithDefault<T>;\n  create<T = unknown>(key: string | object, option?: SdCacheOption<unknown>): SdCache<T>;\n  create<T = unknown>(key: string | object, option: SdCacheOption<T> = {}): SdCache<T> | SdCacheWithDefault<T> {\n    if (this.#destroyed) throw new Error('Cache service has been destroyed');\n    if (!key) throw new Error('Key is required');\n    const normalized = this.#normalize(key, option);\n    const state = this.#getOrCreateState(normalized);\n    if (Object.prototype.hasOwnProperty.call(option, 'default')) {\n      return this.#createDefaultHandle(state, normalized, this.#cloneAs<T>(normalized.serializer, option.default));\n    }\n    return this.#createOptionalHandle<T>(state, normalized);\n  }\n\n  #getOrCreateState(normalized: NormalizedCacheOption): CacheState {\n    const existing = this.#states.get(normalized.ownerDigest);\n    if (existing) return existing;\n    const state: CacheState = {\n      hydrated: false,\n      handles: new Set<CacheHandleFacade>(),\n      generation: 0,\n      disposed: false,\n    };\n    this.#states.set(normalized.ownerDigest, state);\n    this.#hydrateState(state, normalized);\n    return state;\n  }\n\n  #createOptionalHandle<T>(state: CacheState, normalized: NormalizedCacheOption): SdCache<T> {\n    const initial = this.#readOptional<T>(state, normalized);\n    const subject = new BehaviorSubject<T | undefined>(initial);\n    const facade: CacheHandleFacade = {\n      emit: (present, value) => subject.next(present ? this.#cloneAs<T>(normalized.serializer, value) : undefined),\n      complete: () => subject.complete(),\n    };\n    const operations = this.#attachHandle(state, normalized, facade, () => this.#readOptional<T>(state, normalized));\n    return { ...operations, observer: subject.asObservable() };\n  }\n\n  #createDefaultHandle<T>(state: CacheState, normalized: NormalizedCacheOption, defaultSnapshot: T): SdCacheWithDefault<T> {\n    const read = (): T => this.#readWithDefault(state, normalized, defaultSnapshot);\n    const subject = new BehaviorSubject<T>(read());\n    const facade: CacheHandleFacade = {\n      emit: (present, value) =>\n        subject.next(present ? this.#cloneAs<T>(normalized.serializer, value) : this.#cloneAs<T>(normalized.serializer, defaultSnapshot)),\n      complete: () => subject.complete(),\n    };\n    const operations = this.#attachHandle(state, normalized, facade, read);\n    return { ...operations, get: read, observer: subject.asObservable() };\n  }\n\n  #attachHandle<T>(\n    state: CacheState,\n    normalized: NormalizedCacheOption,\n    facade: CacheHandleFacade,\n    read: () => T | undefined\n  ): CacheHandleOperations<T> {\n    state.handles.add(facade);\n    let active = true;\n    const assertActive = (): void => {\n      if (!active || state.disposed || this.#destroyed) throw new Error('Cache handle has been destroyed');\n    };\n    const get = (): T | undefined => {\n      assertActive();\n      return read();\n    };\n    const snapshot = (): SdCacheSnapshot<T> => {\n      assertActive();\n      const entry = this.#getValidEntry(state, normalized);\n      return entry === undefined ? { present: false } : { present: true, value: this.#cloneAs<T>(normalized.serializer, entry.data) };\n    };\n    const set = (data: T): void => {\n      assertActive();\n      this.#setEntry(state, normalized, data, true);\n      this.#broadcast(state);\n    };\n    const has = (): boolean => {\n      assertActive();\n      return this.#getValidEntry(state, normalized) !== undefined;\n    };\n    const remove = (): void => {\n      assertActive();\n      this.#removeEntry(state, normalized, true);\n      this.#broadcast(state);\n    };\n    const releaseFacade = (): void => {\n      if (!active) return;\n      active = false;\n      state.handles.delete(facade);\n      facade.complete();\n      if (state.handles.size > 0) return;\n      state.disposed = true;\n      state.generation += 1;\n      state.entry = undefined;\n      state.inFlight = undefined;\n      this.#states.delete(normalized.ownerDigest);\n    };\n    const release = (): void => releaseFacade();\n    const destroy = (): void => {\n      if (!active) return;\n      releaseFacade();\n      if (normalized.area !== 'memory') return;\n      this.#memoryEntries.delete(normalized.ownerDigest);\n      if (state.disposed) return;\n      state.entry = undefined;\n      state.hydrated = true;\n      this.#broadcast(state);\n    };\n    const load = (callback: () => Promise<T>): Promise<T> => {\n      try {\n        assertActive();\n      } catch (error: unknown) {\n        return Promise.reject(error);\n      }\n      const entry = this.#getValidEntry(state, normalized);\n      if (entry) return Promise.resolve(this.#cloneAs<T>(normalized.serializer, entry.data));\n      const generation = state.generation;\n      if (state.inFlight?.generation === generation) {\n        return state.inFlight.promise.then(value => this.#cloneAs<T>(normalized.serializer, value));\n      }\n      const promise = this.#loadMiss(state, normalized, callback, generation);\n      state.inFlight = { generation, promise };\n      void promise\n        .finally(() => {\n          if (state.inFlight?.promise === promise) state.inFlight = undefined;\n        })\n        .catch(() => undefined);\n      return promise;\n    };\n    return { get, snapshot, set, has, remove, release, destroy, load };\n  }\n\n  async #loadMiss<T>(state: CacheState, normalized: NormalizedCacheOption, callback: () => Promise<T>, generation: number): Promise<T> {\n    const remote = await this.#readRemote(normalized);\n    if (remote) {\n      if (!state.disposed && state.generation === generation) {\n        state.entry = this.#cloneEntry(remote, normalized.serializer);\n        state.hydrated = true;\n        state.generation += 1;\n        this.#writePersistent(normalized, state.entry);\n        this.#broadcast(state);\n      }\n      return this.#cloneAs<T>(normalized.serializer, remote.data);\n    }\n\n    const result = await callback();\n    if (result !== null && result !== undefined && !state.disposed && state.generation === generation) {\n      this.#setEntry(state, normalized, result, true);\n      this.#broadcast(state);\n    }\n    if (result === null || result === undefined) return result;\n    return this.#cloneAs<T>(normalized.serializer, result);\n  }\n\n  #normalize<T>(key: string | object, option: SdCacheOption<T>): NormalizedCacheOption {\n    const serializer = option.serializer ?? this.#configuration?.serializer ?? this.#defaultSerializer;\n    const identityCanonicalizer =\n      option.identityCanonicalizer ?? this.#configuration?.identityCanonicalizer ?? this.#defaultIdentityCanonicalizer;\n    const canonicalKey = canonicalizeSdPersistenceValue(identityCanonicalizer, key, 'cache key');\n    const legacyStorageKey = this.#legacyStorageKey(key);\n    const namespace = option.namespace ?? this.#configuration?.namespace;\n    const version = option.version ?? this.#configuration?.version;\n    const area = option.type ?? 'memory';\n    const ttlMs = this.#normalizeTtl(option);\n    const serializerFormat = this.#serializerFormat(serializer);\n    const hasArgs = Object.prototype.hasOwnProperty.call(option, 'args');\n    const hasDefault = Object.prototype.hasOwnProperty.call(option, 'default');\n    const fields = [\n      { tag: 'area', value: canonicalizeSdPersistenceValue(identityCanonicalizer, area, 'cache area') },\n      { tag: 'namespace', value: this.#optionalIdentity(identityCanonicalizer, namespace !== undefined, namespace, 'cache namespace') },\n      { tag: 'version', value: this.#optionalIdentity(identityCanonicalizer, version !== undefined, version, 'cache version') },\n      { tag: 'ttlMs', value: this.#optionalIdentity(identityCanonicalizer, ttlMs !== undefined, ttlMs, 'cache TTL') },\n      { tag: 'args', value: this.#optionalIdentity(identityCanonicalizer, hasArgs, option.args, 'cache args') },\n      { tag: 'default', value: this.#optionalIdentity(identityCanonicalizer, hasDefault, option.default, 'cache default') },\n      { tag: 'serializer', value: serializerFormat },\n      { tag: 'identityCanonicalizer', value: this.#identityCanonicalizerFormat(identityCanonicalizer) },\n    ];\n    const identity = buildSdPersistenceKey(canonicalKey, fields);\n    const identityDigest = digestSdPersistenceKey(identity);\n    const storageKey = this.#convertKey(`sdcorejs.cache@1:${identityDigest}`);\n    const ownerDigest = digestSdPersistenceKey(buildSdPersistenceKey(storageKey, [{ tag: 'area', value: area }]));\n    return {\n      publicOption: option,\n      area,\n      storageKey,\n      legacyStorageKey,\n      ownerDigest,\n      identityDigest,\n      ttlMs,\n      serializer,\n    };\n  }\n\n  #convertKey(baseKey: string): string {\n    try {\n      return this.#configuration?.convertKey?.(baseKey) ?? baseKey;\n    } catch {\n      return baseKey;\n    }\n  }\n\n  #legacyStorageKey(key: string | object): string | undefined {\n    try {\n      return this.#convertKey(Utilities.hash({ key }));\n    } catch {\n      return undefined;\n    }\n  }\n\n  #normalizeTtl<T>(option: SdCacheOption<T>): number | undefined {\n    const candidate = option.ttlMs ?? (option.hours === undefined ? undefined : option.hours * 3_600_000);\n    if (candidate === undefined || !Number.isFinite(candidate) || candidate <= 0) return undefined;\n    return Math.min(candidate, Number.MAX_SAFE_INTEGER);\n  }\n\n  #optionalIdentity(canonicalizer: SdPersistenceIdentityCanonicalizer, present: boolean, value: unknown, label: string): string {\n    return present ? `1${canonicalizeSdPersistenceValue(canonicalizer, value, label)}` : '0';\n  }\n\n  #identityCanonicalizerFormat(canonicalizer: SdPersistenceIdentityCanonicalizer): string {\n    if (typeof canonicalizer.format !== 'string' || canonicalizer.format.length === 0) {\n      throw new Error('Persistence identity canonicalizer format must be a non-empty string');\n    }\n    return canonicalizer.format;\n  }\n\n  #serializerFormat(serializer: SdPersistenceSerializer): string {\n    if (typeof serializer.format !== 'string' || serializer.format.length === 0) {\n      throw new Error('Persistence serializer format must be a non-empty string');\n    }\n    return serializer.format;\n  }\n\n  #readOptional<T>(state: CacheState, normalized: NormalizedCacheOption): T | undefined {\n    const entry = this.#getValidEntry(state, normalized);\n    return entry ? this.#cloneAs<T>(normalized.serializer, entry.data) : undefined;\n  }\n\n  #readWithDefault<T>(state: CacheState, normalized: NormalizedCacheOption, defaultSnapshot: T): T {\n    const entry = this.#getValidEntry(state, normalized);\n    return entry ? this.#cloneAs<T>(normalized.serializer, entry.data) : this.#cloneAs<T>(normalized.serializer, defaultSnapshot);\n  }\n\n  #getValidEntry(state: CacheState, normalized: NormalizedCacheOption): SdCacheStoredValue<unknown> | undefined {\n    if (!state.hydrated) {\n      this.#hydrateState(state, normalized);\n    }\n    if (!state.entry) return undefined;\n    if (this.#isExpired(state.entry, normalized.ttlMs)) {\n      this.#removeEntry(state, normalized, true);\n      this.#broadcast(state);\n      return undefined;\n    }\n    return state.entry;\n  }\n\n  #isExpired(entry: SdCacheStoredValue<unknown>, ttlMs: number | undefined): boolean {\n    return ttlMs !== undefined && entry.createdOn.getTime() + ttlMs <= Date.now();\n  }\n\n  #hydrateState(state: CacheState, normalized: NormalizedCacheOption): void {\n    const read = this.#readEntry(normalized);\n    state.entry = read.status === 'found' ? read.entry : undefined;\n    state.hydrated = read.status !== 'unavailable';\n  }\n\n  #setEntry(state: CacheState, normalized: NormalizedCacheOption, data: unknown, notifyRemote: boolean): void {\n    const entry: SdCacheStoredValue<unknown> = {\n      data: normalized.serializer.clone(data),\n      createdOn: new Date(),\n    };\n    state.entry = entry;\n    state.hydrated = true;\n    state.generation += 1;\n    this.#writePersistent(normalized, entry);\n    if (notifyRemote) this.#safeRemoteSet(normalized, entry);\n  }\n\n  #removeEntry(state: CacheState, normalized: NormalizedCacheOption, notifyRemote: boolean): void {\n    state.entry = undefined;\n    state.hydrated = true;\n    state.generation += 1;\n    if (normalized.area !== 'memory') this.#writeTombstone(normalized);\n    if (notifyRemote) void this.#safeRemoteRemove(normalized);\n  }\n\n  #broadcast(state: CacheState): void {\n    const present = state.entry !== undefined;\n    const value = state.entry?.data;\n    for (const handle of state.handles) handle.emit(present, value);\n  }\n\n  #readEntry(normalized: NormalizedCacheOption): CacheEntryRead {\n    if (normalized.area === 'memory') {\n      const entry = this.#memoryEntries.get(normalized.ownerDigest);\n      return entry ? { status: 'found', entry: this.#cloneEntry(entry, normalized.serializer) } : { status: 'absent' };\n    }\n    if (this.#failedOwners.has(normalized.ownerDigest)) return { status: 'unavailable' };\n    const primary = readSdPersistenceStorageItem(this.#adapter, normalized.area, normalized.storageKey);\n    if (primary.status === 'found') {\n      let envelope: ReturnType<typeof parseSdPersistenceEnvelope>;\n      try {\n        envelope = parseSdPersistenceEnvelope(primary.value, normalized.identityDigest, normalized.serializer.format);\n      } catch {\n        this.#writeTombstone(normalized);\n        return { status: 'absent' };\n      }\n      if (envelope?.kind === 'tombstone') return { status: 'absent' };\n      const entry = envelope?.kind === 'value' ? this.#parseCurrentEntry(envelope.payload, normalized.serializer) : undefined;\n      if (entry) return { status: 'found', entry };\n      this.#writeTombstone(normalized);\n      return { status: 'absent' };\n    }\n    if (primary.status === 'unavailable') return { status: 'unavailable' };\n    if (normalized.legacyStorageKey === undefined) return { status: 'absent' };\n    const legacyRead = readSdPersistenceStorageItem(this.#adapter, normalized.area, normalized.legacyStorageKey);\n    if (legacyRead.status === 'unavailable') return { status: 'unavailable' };\n    if (legacyRead.status === 'absent') return { status: 'absent' };\n    const legacy = this.#parseLegacy(legacyRead.value);\n    if (!legacy) {\n      this.#writeTombstone(normalized);\n      return { status: 'absent' };\n    }\n    this.#writePersistent(normalized, legacy);\n    return { status: 'found', entry: legacy };\n  }\n\n  #parseCurrentEntry(payload: string, serializer: SdPersistenceSerializer): SdCacheStoredValue<unknown> | undefined {\n    try {\n      return this.#validateEntry(serializer.parse<unknown>(payload));\n    } catch {\n      return undefined;\n    }\n  }\n\n  #parseLegacy(raw: string): SdCacheStoredValue<unknown> | undefined {\n    try {\n      const parsed = JSON.parse(raw) as unknown;\n      if (!this.#hasExactEntryKeys(parsed)) return undefined;\n      const createdOn = this.#toValidDate(parsed['createdOn']);\n      return createdOn ? { data: parsed['data'], createdOn } : undefined;\n    } catch {\n      return undefined;\n    }\n  }\n\n  #validateEntry(value: unknown): SdCacheStoredValue<unknown> | undefined {\n    if (!this.#hasExactEntryKeys(value)) return undefined;\n    const createdOn = this.#toValidDate(value['createdOn']);\n    return createdOn ? { data: value['data'], createdOn } : undefined;\n  }\n\n  #toValidDate(value: unknown): Date | undefined {\n    const date = value instanceof Date ? value : typeof value === 'string' || typeof value === 'number' ? new Date(value) : undefined;\n    return date && Number.isFinite(date.getTime()) ? date : undefined;\n  }\n\n  #writePersistent(normalized: NormalizedCacheOption, entry: SdCacheStoredValue<unknown>): boolean {\n    if (normalized.area === 'memory') {\n      this.#memoryEntries.set(normalized.ownerDigest, this.#cloneEntry(entry, normalized.serializer));\n      return true;\n    }\n    try {\n      const payload = normalized.serializer.stringify(entry);\n      if (\n        this.#adapter.setItem(\n          normalized.area,\n          normalized.storageKey,\n          stringifySdPersistenceValueEnvelope(normalized.identityDigest, normalized.serializer.format, payload)\n        )\n      ) {\n        this.#clearFailedOwner(normalized.ownerDigest);\n        return true;\n      }\n    } catch {\n      // Fall through to canonical quarantine.\n    }\n    this.#safeAdapterRemove(normalized.area, normalized.storageKey);\n    if (this.#tryPersistTombstone(normalized)) {\n      this.#clearFailedOwner(normalized.ownerDigest);\n      return false;\n    }\n    this.#recordFailedOwner(normalized.ownerDigest);\n    return false;\n  }\n\n  #readRemote(normalized: NormalizedCacheOption): Promise<SdCacheStoredValue<unknown> | undefined> {\n    return this.#enqueueRemote(normalized, async () => {\n      const get = this.#configuration?.get;\n      if (!get) return undefined;\n      const entry = this.#validateEntry(await get(normalized.storageKey, normalized.publicOption));\n      if (!entry || !this.#isExpired(entry, normalized.ttlMs)) return entry;\n      const remove = this.#configuration?.remove;\n      if (remove) await remove(normalized.storageKey, normalized.publicOption);\n      return undefined;\n    });\n  }\n\n  #safeRemoteSet(normalized: NormalizedCacheOption, entry: SdCacheStoredValue<unknown>): void {\n    const set = this.#configuration?.set;\n    if (!set) return;\n    void this.#enqueueRemote(normalized, () =>\n      set(normalized.storageKey, this.#cloneEntry(entry, normalized.serializer), normalized.publicOption)\n    );\n  }\n\n  #safeRemoteRemove(normalized: NormalizedCacheOption): Promise<void | undefined> {\n    const remove = this.#configuration?.remove;\n    if (!remove) return Promise.resolve();\n    return this.#enqueueRemote(normalized, () => remove(normalized.storageKey, normalized.publicOption));\n  }\n\n  #enqueueRemote<T>(normalized: NormalizedCacheOption, operation: () => Promise<T> | T): Promise<T | undefined> {\n    const previous = this.#remoteQueues.get(normalized.ownerDigest) ?? Promise.resolve();\n    const result = previous.then(async () => {\n      try {\n        return await operation();\n      } catch {\n        // A failed remote operation cannot poison later work for this identity.\n        return undefined;\n      }\n    });\n    const tail = result.then(() => undefined);\n    this.#remoteQueues.set(normalized.ownerDigest, tail);\n    void tail.then(() => {\n      if (this.#remoteQueues.get(normalized.ownerDigest) === tail) this.#remoteQueues.delete(normalized.ownerDigest);\n    });\n    return result;\n  }\n\n  #safeAdapterRemove(area: SdPersistenceStorageArea, key: string): boolean {\n    try {\n      return this.#adapter.removeItem(area, key);\n    } catch {\n      return false;\n    }\n  }\n\n  #writeTombstone(normalized: NormalizedCacheOption): boolean {\n    if (normalized.area === 'memory') {\n      this.#memoryEntries.delete(normalized.ownerDigest);\n      return true;\n    }\n    if (this.#tryPersistTombstone(normalized)) {\n      this.#clearFailedOwner(normalized.ownerDigest);\n      return true;\n    }\n    this.#safeAdapterRemove(normalized.area, normalized.storageKey);\n    this.#recordFailedOwner(normalized.ownerDigest);\n    return false;\n  }\n\n  #tryPersistTombstone(normalized: NormalizedCacheOption): boolean {\n    if (normalized.area === 'memory') return false;\n    try {\n      return this.#adapter.setItem(\n        normalized.area,\n        normalized.storageKey,\n        stringifySdPersistenceTombstoneEnvelope(normalized.identityDigest, normalized.serializer.format)\n      );\n    } catch {\n      return false;\n    }\n  }\n\n  #clearFailedOwner(ownerDigest: string): void {\n    this.#failedOwners.delete(ownerDigest);\n  }\n\n  #recordFailedOwner(ownerDigest: string): void {\n    this.#failedOwners.delete(ownerDigest);\n    this.#failedOwners.set(ownerDigest, true);\n    if (this.#failedOwners.size <= this.#maxFailedOwners) return;\n    const oldest = this.#failedOwners.keys().next().value;\n    if (oldest !== undefined) this.#failedOwners.delete(oldest);\n  }\n\n  #cloneEntry(entry: SdCacheStoredValue<unknown>, serializer: SdPersistenceSerializer): SdCacheStoredValue<unknown> {\n    return { data: serializer.clone(entry.data), createdOn: new Date(entry.createdOn) };\n  }\n\n  #cloneAs<T>(serializer: SdPersistenceSerializer, value: unknown): T {\n    const entry = serializer.parse<SdCacheStoredValue<T>>(serializer.stringify({ data: value, createdOn: new Date(0) }));\n    return entry.data;\n  }\n\n  #isRecord(value: unknown): value is Record<string, unknown> {\n    return typeof value === 'object' && value !== null && !Array.isArray(value);\n  }\n\n  #hasExactEntryKeys(value: unknown): value is Record<string, unknown> {\n    return (\n      this.#isRecord(value) &&\n      Reflect.ownKeys(value).length === 2 &&\n      Object.prototype.hasOwnProperty.call(value, 'data') &&\n      Object.prototype.hasOwnProperty.call(value, 'createdOn')\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}