{"version":3,"file":"sdcorejs-angular-services-storage.mjs","sources":["../../../projects/sdcorejs-angular/services/storage/src/storage.model.ts","../../../projects/sdcorejs-angular/services/storage/src/storage.service.ts","../../../projects/sdcorejs-angular/services/storage/sdcorejs-angular-services-storage.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { SdPersistenceIdentityCanonicalizer, SdPersistenceSerializer } from '@sdcorejs/angular/services/persistence';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface SdStorageOption<T = unknown> {\n  type?: 'local' | 'session';\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 SdStorage<T = unknown> {\n  get: () => T | undefined;\n  set: (data: T) => void;\n  setSilent: (data: T) => void;\n  has: () => boolean;\n  remove: () => void;\n  destroy: () => void;\n  subject: BehaviorSubject<T | undefined>;\n  observer: Observable<T | undefined>;\n}\n\nexport interface SdStorageWithDefault<T> extends Omit<SdStorage<T>, 'get' | 'subject' | 'observer'> {\n  get: () => T;\n  subject: BehaviorSubject<T>;\n  observer: Observable<T>;\n}\n\nexport interface ISdStorageConfiguration {\n  key?: (key: string) => string;\n  namespace?: string;\n  version?: string | number;\n  serializer?: SdPersistenceSerializer;\n  identityCanonicalizer?: SdPersistenceIdentityCanonicalizer;\n}\n\nexport const SD_STORAGE_CONFIG = new InjectionToken<ISdStorageConfiguration>('storage.configuration');\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport {\n  SD_PERSISTENCE_STORAGE_ADAPTER,\n  SdGraphIdentityCanonicalizer,\n  SdGraphSerializer,\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_STORAGE_CONFIG, SdStorage, SdStorageOption, SdStorageWithDefault } from './storage.model';\n\ninterface StorageEntry {\n  data: unknown;\n  createdOn: Date;\n}\n\ntype StorageEntryRead = { status: 'found'; entry: StorageEntry } | { status: 'absent' } | { status: 'unavailable' };\n\ninterface StorageHandleFacade {\n  emit: (present: boolean, value: unknown) => void;\n  complete: () => void;\n}\n\ninterface StorageState {\n  entry?: StorageEntry;\n  hydrated: boolean;\n  handles: Set<StorageHandleFacade>;\n  disposed: boolean;\n}\n\ninterface NormalizedStorageOption {\n  area: SdPersistenceStorageArea;\n  storageKey: string;\n  legacyStorageKey?: string;\n  ownerDigest: string;\n  identityDigest: string;\n  serializer: SdPersistenceSerializer;\n}\n\ninterface StorageHandleOperations<T> {\n  get: () => T | undefined;\n  set: (data: T) => void;\n  setSilent: (data: T) => void;\n  has: () => boolean;\n  remove: () => void;\n  destroy: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SdStorageService {\n  readonly #configuration = inject(SD_STORAGE_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, StorageState>();\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.entry = undefined;\n        for (const handle of state.handles) handle.complete();\n        state.handles.clear();\n      }\n      this.#states.clear();\n      this.#failedOwners.clear();\n    });\n  }\n\n  create<T>(key: string | object, option: SdStorageOption<T> & { default: T }): SdStorageWithDefault<T>;\n  create<T = unknown>(key: string | object, option?: SdStorageOption<unknown>): SdStorage<T>;\n  create<T = unknown>(key: string | object, option: SdStorageOption<T> = {}): SdStorage<T> | SdStorageWithDefault<T> {\n    if (this.#destroyed) throw new Error('Storage 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: NormalizedStorageOption): StorageState {\n    const existing = this.#states.get(normalized.ownerDigest);\n    if (existing) return existing;\n    const state: StorageState = {\n      hydrated: false,\n      handles: new Set<StorageHandleFacade>(),\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: StorageState, normalized: NormalizedStorageOption): SdStorage<T> {\n    const read = (): T | undefined => this.#readOptional<T>(state, normalized);\n    const subject = new BehaviorSubject<T | undefined>(read());\n    const facade: StorageHandleFacade = {\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, read);\n    return { ...operations, subject, observer: subject.asObservable() };\n  }\n\n  #createDefaultHandle<T>(state: StorageState, normalized: NormalizedStorageOption, defaultSnapshot: T): SdStorageWithDefault<T> {\n    const read = (): T => this.#readWithDefault(state, normalized, defaultSnapshot);\n    const subject = new BehaviorSubject<T>(read());\n    const facade: StorageHandleFacade = {\n      emit: (present, value) => {\n        const next = present ? this.#cloneAs<T>(normalized.serializer, value) : this.#cloneAs<T>(normalized.serializer, defaultSnapshot);\n        subject.next(this.#cloneAs<T>(normalized.serializer, next));\n      },\n      complete: () => subject.complete(),\n    };\n    const operations = this.#attachHandle(state, normalized, facade, read);\n    return { ...operations, get: read, subject, observer: subject.asObservable() };\n  }\n\n  #attachHandle<T>(\n    state: StorageState,\n    normalized: NormalizedStorageOption,\n    facade: StorageHandleFacade,\n    read: () => T | undefined\n  ): StorageHandleOperations<T> {\n    state.handles.add(facade);\n    let active = true;\n    const assertActive = (): void => {\n      if (!active || state.disposed || this.#destroyed) throw new Error('Storage handle has been destroyed');\n    };\n    const get = (): T | undefined => {\n      assertActive();\n      return read();\n    };\n    const write = (data: T, emit: boolean): void => {\n      assertActive();\n      const entry: StorageEntry = { data: normalized.serializer.clone(data), createdOn: new Date() };\n      state.entry = entry;\n      state.hydrated = true;\n      this.#writePersistent(normalized, entry);\n      if (emit) this.#broadcast(state);\n    };\n    const set = (data: T): void => write(data, true);\n    const setSilent = (data: T): void => write(data, false);\n    const has = (): boolean => {\n      assertActive();\n      return this.#ensureEntry(state, normalized) !== undefined;\n    };\n    const remove = (): void => {\n      assertActive();\n      state.entry = undefined;\n      state.hydrated = true;\n      this.#writeTombstone(normalized);\n      this.#broadcast(state);\n    };\n    const destroy = (): 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.entry = undefined;\n      this.#states.delete(normalized.ownerDigest);\n    };\n    return { get, set, setSilent, has, remove, destroy };\n  }\n\n  #normalize<T>(key: string | object, option: SdStorageOption<T>): NormalizedStorageOption {\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, 'storage 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 ?? 'local';\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, 'storage area') },\n      { tag: 'namespace', value: this.#optionalIdentity(identityCanonicalizer, namespace !== undefined, namespace, 'storage namespace') },\n      { tag: 'version', value: this.#optionalIdentity(identityCanonicalizer, version !== undefined, version, 'storage version') },\n      { tag: 'args', value: this.#optionalIdentity(identityCanonicalizer, hasArgs, option.args, 'storage args') },\n      { tag: 'default', value: this.#optionalIdentity(identityCanonicalizer, hasDefault, option.default, 'storage 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.storage@1:${identityDigest}`);\n    const ownerDigest = digestSdPersistenceKey(buildSdPersistenceKey(storageKey, [{ tag: 'area', value: area }]));\n    return {\n      area,\n      storageKey,\n      legacyStorageKey,\n      ownerDigest,\n      identityDigest,\n      serializer,\n    };\n  }\n\n  #convertKey(baseKey: string): string {\n    try {\n      return this.#configuration?.key?.(baseKey) ?? baseKey;\n    } catch {\n      return baseKey;\n    }\n  }\n\n  #legacyStorageKey(key: string | object): string | undefined {\n    try {\n      return this.#convertKey(typeof key === 'string' ? key : Utilities.hash(key));\n    } catch {\n      return undefined;\n    }\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: StorageState, normalized: NormalizedStorageOption): T | undefined {\n    const entry = this.#ensureEntry(state, normalized);\n    return entry ? this.#cloneAs<T>(normalized.serializer, entry.data) : undefined;\n  }\n\n  #readWithDefault<T>(state: StorageState, normalized: NormalizedStorageOption, defaultSnapshot: T): T {\n    const entry = this.#ensureEntry(state, normalized);\n    return entry ? this.#cloneAs<T>(normalized.serializer, entry.data) : this.#cloneAs<T>(normalized.serializer, defaultSnapshot);\n  }\n\n  #ensureEntry(state: StorageState, normalized: NormalizedStorageOption): StorageEntry | undefined {\n    if (!state.hydrated) {\n      this.#hydrateState(state, normalized);\n    }\n    return state.entry;\n  }\n\n  #hydrateState(state: StorageState, normalized: NormalizedStorageOption): 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  #broadcast(state: StorageState): 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: NormalizedStorageOption): StorageEntryRead {\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): StorageEntry | undefined {\n    try {\n      return this.#validateEntry(serializer.parse<unknown>(payload));\n    } catch {\n      return undefined;\n    }\n  }\n\n  #parseLegacy(raw: string): StorageEntry | 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): StorageEntry | 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: NormalizedStorageOption, entry: StorageEntry): boolean {\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.#safeRemove(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  #safeRemove(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: NormalizedStorageOption): boolean {\n    if (this.#tryPersistTombstone(normalized)) {\n      this.#clearFailedOwner(normalized.ownerDigest);\n      return true;\n    }\n    this.#safeRemove(normalized.area, normalized.storageKey);\n    this.#recordFailedOwner(normalized.ownerDigest);\n    return false;\n  }\n\n  #tryPersistTombstone(normalized: NormalizedStorageOption): boolean {\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  #cloneAs<T>(serializer: SdPersistenceSerializer, value: unknown): T {\n    const entry = serializer.parse<{ data: T; createdOn: Date }>(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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"}