{"version":3,"file":"sdcorejs-angular-services-persistence.mjs","sources":["../../../projects/sdcorejs-angular/services/persistence/src/persistence.model.ts","../../../projects/sdcorejs-angular/services/persistence/src/graph-serializer.ts","../../../projects/sdcorejs-angular/services/persistence/src/storage-adapter.ts","../../../projects/sdcorejs-angular/services/persistence/src/persistence-key.ts","../../../projects/sdcorejs-angular/services/persistence/src/persistence-envelope.ts","../../../projects/sdcorejs-angular/services/persistence/sdcorejs-angular-services-persistence.ts"],"sourcesContent":["export const SD_GRAPH_FORMAT = 'sdcorejs.graph';\nexport const SD_GRAPH_VERSION = 1;\n\nexport type SdPersistenceErrorCode =\n  | 'INVALID_DOCUMENT'\n  | 'UNKNOWN_FORMAT'\n  | 'UNKNOWN_VERSION'\n  | 'INVALID_NODE'\n  | 'INVALID_REFERENCE'\n  | 'UNSUPPORTED_VALUE'\n  | 'LIMIT_EXCEEDED';\n\nexport interface SdGraphSerializerLimits {\n  maxDocumentCharacters: number;\n  maxDepth: number;\n  maxNodes: number;\n  maxEntries: number;\n  maxStringCharacters: number;\n  maxKeyCharacters: number;\n  maxBigIntDigits: number;\n}\n\nexport interface SdPersistenceSerializer {\n  readonly format: string;\n  stringify<T>(value: T): string;\n  parse<T = unknown>(serialized: string): T;\n  clone<T>(value: T): T;\n}\n\n/** Deterministic, versioned canonicalization used only for persistence identity. */\nexport interface SdPersistenceIdentityCanonicalizer {\n  readonly format: string;\n  canonicalize(value: unknown): string;\n}\n\nexport type SdGraphSpecialNumber = 'NaN' | 'Infinity' | '-Infinity' | '-0';\n\nexport type SdGraphValue =\n  | null\n  | boolean\n  | string\n  | number\n  | { $ref: number }\n  | { $type: 'undefined' }\n  | { $type: 'number'; value: SdGraphSpecialNumber }\n  | { $type: 'bigint'; value: string };\n\nexport interface SdGraphArrayNode {\n  type: 'array';\n  values: SdGraphValue[];\n}\n\nexport interface SdGraphObjectNode {\n  type: 'object';\n  prototype: 'object' | 'null';\n  entries: [string, SdGraphValue][];\n}\n\nexport interface SdGraphDateNode {\n  type: 'date';\n  value: string;\n}\n\nexport interface SdGraphMapNode {\n  type: 'map';\n  entries: [SdGraphValue, SdGraphValue][];\n}\n\nexport interface SdGraphSetNode {\n  type: 'set';\n  values: SdGraphValue[];\n}\n\nexport type SdGraphNode = SdGraphArrayNode | SdGraphObjectNode | SdGraphDateNode | SdGraphMapNode | SdGraphSetNode;\n\nexport interface SdGraphEnvelope {\n  format: typeof SD_GRAPH_FORMAT;\n  version: typeof SD_GRAPH_VERSION;\n  root: SdGraphValue;\n  nodes: SdGraphNode[];\n}\n","import {\n  SD_GRAPH_FORMAT,\n  SD_GRAPH_VERSION,\n  SdGraphEnvelope,\n  SdGraphNode,\n  SdGraphSerializerLimits,\n  SdGraphSpecialNumber,\n  SdGraphValue,\n  SdPersistenceErrorCode,\n  SdPersistenceSerializer,\n} from './persistence.model';\n\nconst DATE_GET_TIME = Date.prototype.getTime;\nconst DATE_TO_ISO_STRING = Date.prototype.toISOString;\nconst MAP_ENTRIES = Map.prototype.entries;\nconst MAP_SET = Map.prototype.set;\nconst SET_VALUES = Set.prototype.values;\nconst SET_ADD = Set.prototype.add;\n\nexport const SD_GRAPH_HARD_LIMITS: Readonly<SdGraphSerializerLimits> = Object.freeze({\n  maxDocumentCharacters: 4_000_000,\n  maxDepth: 128,\n  maxNodes: 50_000,\n  maxEntries: 200_000,\n  maxStringCharacters: 1_000_000,\n  maxKeyCharacters: 16_384,\n  maxBigIntDigits: 100_000,\n});\n\ninterface SdGraphTraversalBudget {\n  entries: number;\n}\n\nexport class SdPersistenceError extends Error {\n  override readonly name = 'SdPersistenceError';\n\n  constructor(\n    readonly code: SdPersistenceErrorCode,\n    message: string\n  ) {\n    super(`${code}: ${message}`);\n  }\n}\n\nexport class SdGraphSerializer implements SdPersistenceSerializer {\n  readonly format = `${SD_GRAPH_FORMAT}@${SD_GRAPH_VERSION}`;\n  readonly limits: Readonly<SdGraphSerializerLimits>;\n\n  constructor(limits: Partial<SdGraphSerializerLimits> = {}) {\n    const configured = { ...SD_GRAPH_HARD_LIMITS, ...limits };\n    for (const key of Object.keys(SD_GRAPH_HARD_LIMITS) as (keyof SdGraphSerializerLimits)[]) {\n      const value = configured[key];\n      if (!Number.isSafeInteger(value) || value < 1 || value > SD_GRAPH_HARD_LIMITS[key]) {\n        throw new SdPersistenceError('LIMIT_EXCEEDED', `Invalid ${key} limit`);\n      }\n    }\n    this.limits = Object.freeze(configured);\n  }\n\n  stringify<T>(value: T): string {\n    const nodes: SdGraphNode[] = [];\n    const references = new Map<object, number>();\n    const budget: SdGraphTraversalBudget = { entries: 0 };\n    const root = this.#encode(value, nodes, references, '$', 0, budget);\n    const envelope: SdGraphEnvelope = {\n      format: SD_GRAPH_FORMAT,\n      version: SD_GRAPH_VERSION,\n      root,\n      nodes,\n    };\n    const serialized = JSON.stringify(envelope);\n    this.#ensureDocumentLength(serialized.length);\n    return serialized;\n  }\n\n  parse<T = unknown>(serialized: string): T {\n    this.#ensureDocumentLength(serialized.length);\n    let document: unknown;\n    try {\n      document = JSON.parse(serialized) as unknown;\n    } catch {\n      throw new SdPersistenceError('INVALID_DOCUMENT', 'Serialized value is not valid JSON');\n    }\n\n    const envelope = this.#validateEnvelope(document);\n    this.#validateDepth(envelope);\n    const values: unknown[] = envelope.nodes.map((node, index) => this.#createNode(node, index));\n    envelope.nodes.forEach((node, index) => this.#populateNode(node, values[index], values));\n    return this.#decode(envelope.root, values, '$.root') as T;\n  }\n\n  clone<T>(value: T): T {\n    return this.parse<T>(this.stringify(value));\n  }\n\n  #encode(\n    value: unknown,\n    nodes: SdGraphNode[],\n    references: Map<object, number>,\n    path: string,\n    depth: number,\n    budget: SdGraphTraversalBudget\n  ): SdGraphValue {\n    this.#ensureDepth(depth, path);\n    if (value === null || typeof value === 'boolean') return value;\n    if (typeof value === 'string') {\n      this.#ensureStringLength(value, path);\n      return value;\n    }\n    if (value === undefined) return { $type: 'undefined' };\n    if (typeof value === 'number') {\n      if (Number.isNaN(value)) return { $type: 'number', value: 'NaN' };\n      if (value === Number.POSITIVE_INFINITY) return { $type: 'number', value: 'Infinity' };\n      if (value === Number.NEGATIVE_INFINITY) return { $type: 'number', value: '-Infinity' };\n      if (Object.is(value, -0)) return { $type: 'number', value: '-0' };\n      return value;\n    }\n    if (typeof value === 'bigint') {\n      const bigint = value.toString();\n      this.#ensureBigIntLength(bigint, path);\n      return { $type: 'bigint', value: bigint };\n    }\n    if (typeof value === 'function' || typeof value === 'symbol') {\n      throw new SdPersistenceError('UNSUPPORTED_VALUE', `Unsupported ${typeof value} at ${path}`);\n    }\n\n    const prototype = Object.getPrototypeOf(value) as object | null;\n    if (Array.isArray(value) && prototype !== Array.prototype) {\n      throw new SdPersistenceError('UNSUPPORTED_VALUE', `Unsupported array prototype at ${path}`);\n    }\n\n    const existingReference = references.get(value);\n    if (existingReference !== undefined) return { $ref: existingReference };\n\n    const reference = nodes.length;\n    references.set(value, reference);\n\n    if (Array.isArray(value)) {\n      this.#addNode(nodes, { type: 'array', values: [] }, path);\n      this.#consumeEntries(value.length, path, budget);\n      const node = nodes[reference];\n      if (node.type !== 'array') throw new SdPersistenceError('INVALID_NODE', `Invalid array node at ${path}`);\n      if (Object.getOwnPropertySymbols(value).length > 0) {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Symbol properties are unsupported at ${path}`);\n      }\n      const descriptors = Object.getOwnPropertyDescriptors(value);\n      for (const key of Object.keys(descriptors)) {\n        if (key === 'length') continue;\n        if (!this.#isArrayIndex(key, value.length)) {\n          throw new SdPersistenceError('UNSUPPORTED_VALUE', `Extra array property is unsupported at ${path}.${key}`);\n        }\n      }\n      for (let index = 0; index < value.length; index += 1) {\n        const descriptor = descriptors[String(index)];\n        if (!descriptor) {\n          throw new SdPersistenceError('UNSUPPORTED_VALUE', `Sparse array entry is unsupported at ${path}[${index}]`);\n        }\n        if (!('value' in descriptor)) {\n          throw new SdPersistenceError('UNSUPPORTED_VALUE', `Accessor property is unsupported at ${path}[${index}]`);\n        }\n        node.values.push(this.#encode(descriptor.value, nodes, references, `${path}[${index}]`, depth + 1, budget));\n      }\n      return { $ref: reference };\n    }\n\n    if (prototype === Date.prototype) {\n      this.#ensureNoOwnProperties(value, path, 'Date');\n      let time: number;\n      let iso: string;\n      try {\n        time = DATE_GET_TIME.call(value);\n        iso = DATE_TO_ISO_STRING.call(value);\n      } catch {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Invalid Date at ${path}`);\n      }\n      if (!Number.isFinite(time)) throw new SdPersistenceError('UNSUPPORTED_VALUE', `Invalid Date at ${path}`);\n      this.#addNode(nodes, { type: 'date', value: iso }, path);\n      return { $ref: reference };\n    }\n\n    if (prototype === Map.prototype) {\n      this.#ensureNoOwnProperties(value, path, 'Map');\n      let iterator: IterableIterator<[unknown, unknown]>;\n      try {\n        iterator = MAP_ENTRIES.call(value);\n      } catch {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Invalid Map at ${path}`);\n      }\n      const node: SdGraphNode = { type: 'map', entries: [] };\n      this.#addNode(nodes, node, path);\n      let index = 0;\n      for (const [key, item] of iterator) {\n        this.#consumeEntries(1, path, budget);\n        node.entries.push([\n          this.#encode(key, nodes, references, `${path}.mapKey[${index}]`, depth + 1, budget),\n          this.#encode(item, nodes, references, `${path}.mapValue[${index}]`, depth + 1, budget),\n        ]);\n        index += 1;\n      }\n      return { $ref: reference };\n    }\n\n    if (prototype === Set.prototype) {\n      this.#ensureNoOwnProperties(value, path, 'Set');\n      let iterator: IterableIterator<unknown>;\n      try {\n        iterator = SET_VALUES.call(value);\n      } catch {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Invalid Set at ${path}`);\n      }\n      const node: SdGraphNode = { type: 'set', values: [] };\n      this.#addNode(nodes, node, path);\n      let index = 0;\n      for (const item of iterator) {\n        this.#consumeEntries(1, path, budget);\n        node.values.push(this.#encode(item, nodes, references, `${path}.set[${index}]`, depth + 1, budget));\n        index += 1;\n      }\n      return { $ref: reference };\n    }\n\n    if (prototype !== Object.prototype && prototype !== null) {\n      throw new SdPersistenceError('UNSUPPORTED_VALUE', `Unsupported object prototype at ${path}`);\n    }\n    if (Object.getOwnPropertySymbols(value).length > 0) {\n      throw new SdPersistenceError('UNSUPPORTED_VALUE', `Symbol properties are unsupported at ${path}`);\n    }\n\n    const node: SdGraphNode = {\n      type: 'object',\n      prototype: prototype === null ? 'null' : 'object',\n      entries: [],\n    };\n    this.#addNode(nodes, node, path);\n    const descriptors = Object.getOwnPropertyDescriptors(value);\n    const keys = Object.keys(descriptors).sort();\n    this.#consumeEntries(keys.length, path, budget);\n    for (const key of keys) {\n      this.#ensureKeyLength(key, `${path}.${key}`);\n      const descriptor = descriptors[key];\n      if (!descriptor || !('value' in descriptor)) {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Accessor property is unsupported at ${path}.${key}`);\n      }\n      if (!descriptor.enumerable) {\n        throw new SdPersistenceError('UNSUPPORTED_VALUE', `Non-enumerable property is unsupported at ${path}.${key}`);\n      }\n      node.entries.push([key, this.#encode(descriptor.value, nodes, references, `${path}.${key}`, depth + 1, budget)]);\n    }\n    return { $ref: reference };\n  }\n\n  #validateEnvelope(value: unknown): SdGraphEnvelope {\n    if (!this.#isRecord(value) || !this.#hasExactKeys(value, ['format', 'version', 'root', 'nodes'])) {\n      throw new SdPersistenceError('INVALID_DOCUMENT', 'Graph envelope must have the exact schema');\n    }\n    if (value['format'] !== SD_GRAPH_FORMAT) throw new SdPersistenceError('UNKNOWN_FORMAT', 'Unknown persistence format');\n    if (value['version'] !== SD_GRAPH_VERSION) throw new SdPersistenceError('UNKNOWN_VERSION', 'Unsupported persistence version');\n    if (!Array.isArray(value['nodes'])) throw new SdPersistenceError('INVALID_DOCUMENT', 'Graph nodes must be an array');\n    if (value['nodes'].length > this.limits.maxNodes) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', 'Graph node limit exceeded at $.nodes');\n    }\n\n    const budget: SdGraphTraversalBudget = { entries: 0 };\n    const nodes = value['nodes'].map((node, index) => this.#validateNode(node, index, budget));\n    const root = this.#validateGraphValue(value['root'], '$.root');\n    return { format: SD_GRAPH_FORMAT, version: SD_GRAPH_VERSION, root, nodes };\n  }\n\n  #validateNode(value: unknown, index: number, budget: SdGraphTraversalBudget): SdGraphNode {\n    if (!this.#isRecord(value) || typeof value['type'] !== 'string') {\n      throw new SdPersistenceError('INVALID_NODE', `Invalid node at index ${index}`);\n    }\n    switch (value['type']) {\n      case 'array':\n      case 'set': {\n        if (!this.#hasExactKeys(value, ['type', 'values']) || !Array.isArray(value['values'])) {\n          throw new SdPersistenceError('INVALID_NODE', `Invalid ${value['type']} node at index ${index}`);\n        }\n        this.#consumeEntries(value['values'].length, `$.nodes[${index}]`, budget);\n        const values = value['values'].map((item, itemIndex) => this.#validateGraphValue(item, `$.nodes[${index}].values[${itemIndex}]`));\n        if (value['type'] === 'set') this.#rejectDuplicateValues(values, `set node at index ${index}`);\n        return { type: value['type'], values };\n      }\n      case 'object': {\n        if (\n          !this.#hasExactKeys(value, ['type', 'prototype', 'entries']) ||\n          (value['prototype'] !== 'object' && value['prototype'] !== 'null') ||\n          !Array.isArray(value['entries'])\n        ) {\n          throw new SdPersistenceError('INVALID_NODE', `Invalid object node at index ${index}`);\n        }\n        this.#consumeEntries(value['entries'].length, `$.nodes[${index}]`, budget);\n        const keys = new Set<string>();\n        const entries = value['entries'].map((entry, entryIndex): [string, SdGraphValue] => {\n          if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== 'string') {\n            throw new SdPersistenceError('INVALID_NODE', `Invalid object entry at index ${index}:${entryIndex}`);\n          }\n          this.#ensureKeyLength(entry[0], `$.nodes[${index}].entries[${entryIndex}]`);\n          if (keys.has(entry[0])) throw new SdPersistenceError('INVALID_NODE', `Duplicate object key at index ${index}:${entryIndex}`);\n          keys.add(entry[0]);\n          return [entry[0], this.#validateGraphValue(entry[1], `$.nodes[${index}].entries[${entryIndex}]`)];\n        });\n        return { type: 'object', prototype: value['prototype'], entries };\n      }\n      case 'date': {\n        if (!this.#hasExactKeys(value, ['type', 'value']) || typeof value['value'] !== 'string') {\n          throw new SdPersistenceError('INVALID_NODE', `Invalid date node at index ${index}`);\n        }\n        this.#ensureStringLength(value['value'], `$.nodes[${index}].value`);\n        let canonical = false;\n        try {\n          const date = new Date(value['value']);\n          canonical = Number.isFinite(DATE_GET_TIME.call(date)) && DATE_TO_ISO_STRING.call(date) === value['value'];\n        } catch {\n          canonical = false;\n        }\n        if (!canonical) throw new SdPersistenceError('INVALID_NODE', `Invalid date node at index ${index}`);\n        return { type: 'date', value: value['value'] };\n      }\n      case 'map': {\n        if (!this.#hasExactKeys(value, ['type', 'entries']) || !Array.isArray(value['entries'])) {\n          throw new SdPersistenceError('INVALID_NODE', `Invalid map node at index ${index}`);\n        }\n        this.#consumeEntries(value['entries'].length, `$.nodes[${index}]`, budget);\n        const seen = new Set<string>();\n        const entries = value['entries'].map((entry, entryIndex): [SdGraphValue, SdGraphValue] => {\n          if (!Array.isArray(entry) || entry.length !== 2) {\n            throw new SdPersistenceError('INVALID_NODE', `Invalid map entry at index ${index}:${entryIndex}`);\n          }\n          const key = this.#validateGraphValue(entry[0], `$.nodes[${index}].entries[${entryIndex}].key`);\n          const signature = this.#graphValueSignature(key);\n          if (seen.has(signature)) throw new SdPersistenceError('INVALID_NODE', `Duplicate map key at index ${index}:${entryIndex}`);\n          seen.add(signature);\n          return [key, this.#validateGraphValue(entry[1], `$.nodes[${index}].entries[${entryIndex}].value`)];\n        });\n        return { type: 'map', entries };\n      }\n      default:\n        throw new SdPersistenceError('INVALID_NODE', `Unknown node type at index ${index}`);\n    }\n  }\n\n  #validateGraphValue(value: unknown, path: string): SdGraphValue {\n    if (value === null || typeof value === 'boolean') return value;\n    if (typeof value === 'string') {\n      this.#ensureStringLength(value, path);\n      return value;\n    }\n    if (typeof value === 'number') {\n      if (!Number.isFinite(value)) throw new SdPersistenceError('INVALID_DOCUMENT', `Non-finite number at ${path}`);\n      return value;\n    }\n    if (!this.#isRecord(value)) throw new SdPersistenceError('INVALID_DOCUMENT', `Invalid graph value at ${path}`);\n    const hasReference = '$ref' in value;\n    const hasType = '$type' in value;\n    if (hasReference === hasType) throw new SdPersistenceError('INVALID_DOCUMENT', `Ambiguous graph value tag at ${path}`);\n    if (hasReference) {\n      if (!this.#hasExactKeys(value, ['$ref'])) throw new SdPersistenceError('INVALID_DOCUMENT', `Malformed reference tag at ${path}`);\n      if (!Number.isInteger(value['$ref']) || (value['$ref'] as number) < 0) {\n        throw new SdPersistenceError('INVALID_REFERENCE', `Invalid reference at ${path}`);\n      }\n      return { $ref: value['$ref'] as number };\n    }\n    if (value['$type'] === 'undefined' && this.#hasExactKeys(value, ['$type'])) return { $type: 'undefined' };\n    if (value['$type'] === 'number' && this.#hasExactKeys(value, ['$type', 'value']) && this.#isSpecialNumber(value['value'])) {\n      return { $type: 'number', value: value['value'] };\n    }\n    if (\n      value['$type'] === 'bigint' &&\n      this.#hasExactKeys(value, ['$type', 'value']) &&\n      typeof value['value'] === 'string' &&\n      /^-?\\d+$/.test(value['value'])\n    ) {\n      this.#ensureBigIntLength(value['value'], path);\n      return { $type: 'bigint', value: value['value'] };\n    }\n    throw new SdPersistenceError('INVALID_DOCUMENT', `Unknown graph value tag at ${path}`);\n  }\n\n  #validateDepth(envelope: SdGraphEnvelope): void {\n    const highestDepth = new Map<number, number>();\n    const visit = (value: SdGraphValue, depth: number, path: string, active: Set<number>): void => {\n      this.#ensureDepth(depth, path);\n      if (typeof value !== 'object' || value === null || !('$ref' in value)) return;\n      if (value.$ref >= envelope.nodes.length) {\n        throw new SdPersistenceError('INVALID_REFERENCE', `Reference out of bounds at ${path}`);\n      }\n      if (active.has(value.$ref)) return;\n      const previous = highestDepth.get(value.$ref);\n      if (previous !== undefined && previous >= depth) return;\n      highestDepth.set(value.$ref, depth);\n      active.add(value.$ref);\n      const node = envelope.nodes[value.$ref];\n      switch (node.type) {\n        case 'array':\n        case 'set':\n          node.values.forEach((item, index) => visit(item, depth + 1, `${path}[${index}]`, active));\n          break;\n        case 'object':\n          node.entries.forEach(([key, item]) => visit(item, depth + 1, `${path}.${key}`, active));\n          break;\n        case 'map':\n          node.entries.forEach(([key, item], index) => {\n            visit(key, depth + 1, `${path}.mapKey[${index}]`, active);\n            visit(item, depth + 1, `${path}.mapValue[${index}]`, active);\n          });\n          break;\n        case 'date':\n          break;\n      }\n      active.delete(value.$ref);\n    };\n    visit(envelope.root, 0, '$.root', new Set<number>());\n    envelope.nodes.forEach((_node, index) => visit({ $ref: index }, 0, `$.nodes[${index}]`, new Set<number>()));\n  }\n\n  #createNode(node: SdGraphNode, index: number): unknown {\n    switch (node.type) {\n      case 'array':\n        return [];\n      case 'object':\n        return node.prototype === 'null' ? Object.create(null) : {};\n      case 'date':\n        return new Date(node.value);\n      case 'map':\n        return new Map<unknown, unknown>();\n      case 'set':\n        return new Set<unknown>();\n      default:\n        throw new SdPersistenceError('INVALID_NODE', `Unknown node type at index ${index}`);\n    }\n  }\n\n  #populateNode(node: SdGraphNode, target: unknown, values: unknown[]): void {\n    switch (node.type) {\n      case 'array': {\n        const array = target as unknown[];\n        array.length = node.values.length;\n        node.values.forEach((value, index) => {\n          array[index] = this.#decode(value, values, `array[${index}]`);\n        });\n        break;\n      }\n      case 'object': {\n        const object = target as Record<string, unknown>;\n        for (const [key, value] of node.entries) {\n          Object.defineProperty(object, key, {\n            configurable: true,\n            enumerable: true,\n            value: this.#decode(value, values, `object.${key}`),\n            writable: true,\n          });\n        }\n        break;\n      }\n      case 'map': {\n        const map = target as Map<unknown, unknown>;\n        for (const [key, value] of node.entries) {\n          MAP_SET.call(map, this.#decode(key, values, 'map.key'), this.#decode(value, values, 'map.value'));\n        }\n        break;\n      }\n      case 'set': {\n        const set = target as Set<unknown>;\n        for (const value of node.values) SET_ADD.call(set, this.#decode(value, values, 'set.value'));\n        break;\n      }\n      case 'date':\n        break;\n    }\n  }\n\n  #decode(value: SdGraphValue, values: unknown[], path: string): unknown {\n    if (value === null || typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') return value;\n    if ('$ref' in value) {\n      if (value.$ref >= values.length) throw new SdPersistenceError('INVALID_REFERENCE', `Reference out of bounds at ${path}`);\n      return values[value.$ref];\n    }\n    if (value.$type === 'undefined') return undefined;\n    if (value.$type === 'bigint') return BigInt(value.value);\n    switch (value.value) {\n      case 'NaN':\n        return Number.NaN;\n      case 'Infinity':\n        return Number.POSITIVE_INFINITY;\n      case '-Infinity':\n        return Number.NEGATIVE_INFINITY;\n      case '-0':\n        return -0;\n    }\n  }\n\n  #addNode(nodes: SdGraphNode[], node: SdGraphNode, path: string): void {\n    if (nodes.length >= this.limits.maxNodes) throw new SdPersistenceError('LIMIT_EXCEEDED', `Graph node limit exceeded at ${path}`);\n    nodes.push(node);\n  }\n\n  #consumeEntries(count: number, path: string, budget: SdGraphTraversalBudget): void {\n    if (count > this.limits.maxEntries - budget.entries) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', `Graph entry limit exceeded at ${path}`);\n    }\n    budget.entries += count;\n  }\n\n  #ensureDocumentLength(length: number): void {\n    if (length > this.limits.maxDocumentCharacters) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', 'Serialized document character limit exceeded');\n    }\n  }\n\n  #ensureDepth(depth: number, path: string): void {\n    if (depth > this.limits.maxDepth) throw new SdPersistenceError('LIMIT_EXCEEDED', `Graph depth limit exceeded at ${path}`);\n  }\n\n  #ensureStringLength(value: string, path: string): void {\n    if (value.length > this.limits.maxStringCharacters) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', `String character limit exceeded at ${path}`);\n    }\n  }\n\n  #ensureKeyLength(value: string, path: string): void {\n    if (value.length > this.limits.maxKeyCharacters) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', `Object key character limit exceeded at ${path}`);\n    }\n  }\n\n  #ensureBigIntLength(value: string, path: string): void {\n    const digits = value.startsWith('-') ? value.length - 1 : value.length;\n    if (digits > this.limits.maxBigIntDigits) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', `BigInt digit limit exceeded at ${path}`);\n    }\n  }\n\n  #ensureNoOwnProperties(value: object, path: string, type: string): void {\n    if (Reflect.ownKeys(value).length > 0) {\n      throw new SdPersistenceError('UNSUPPORTED_VALUE', `Own properties on ${type} are unsupported at ${path}`);\n    }\n  }\n\n  #rejectDuplicateValues(values: SdGraphValue[], description: string): void {\n    const seen = new Set<string>();\n    values.forEach((value, index) => {\n      const signature = this.#graphValueSignature(value);\n      if (seen.has(signature)) throw new SdPersistenceError('INVALID_NODE', `Duplicate value in ${description}:${index}`);\n      seen.add(signature);\n    });\n  }\n\n  #graphValueSignature(value: SdGraphValue): string {\n    if (value === null) return 'null';\n    if (typeof value === 'string') return `string:${value}`;\n    if (typeof value === 'boolean') return `boolean:${value}`;\n    if (typeof value === 'number') return `number:${Object.is(value, -0) ? 0 : value}`;\n    if ('$ref' in value) return `ref:${value.$ref}`;\n    if (value.$type === 'number') return value.value === '-0' ? 'number:0' : `number:${value.value}`;\n    if (value.$type === 'bigint') return `bigint:${BigInt(value.value).toString()}`;\n    return `type:${value.$type}`;\n  }\n\n  #isArrayIndex(key: string, length: number): boolean {\n    const index = Number(key);\n    return Number.isInteger(index) && index >= 0 && index < length && index <= 4_294_967_294 && String(index) === key;\n  }\n\n  #isSpecialNumber(value: unknown): value is SdGraphSpecialNumber {\n    return value === 'NaN' || value === 'Infinity' || value === '-Infinity' || value === '-0';\n  }\n\n  #hasExactKeys(value: Record<string, unknown>, expected: readonly string[]): boolean {\n    const keys = Object.keys(value);\n    return keys.length === expected.length && expected.every(key => Object.prototype.hasOwnProperty.call(value, key));\n  }\n\n  #isRecord(value: unknown): value is Record<string, unknown> {\n    return typeof value === 'object' && value !== null && !Array.isArray(value);\n  }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, InjectionToken, PLATFORM_ID } from '@angular/core';\n\nexport type SdPersistenceStorageArea = 'local' | 'session';\n\nexport type SdPersistenceStorageRead = { status: 'found'; value: string } | { status: 'absent' } | { status: 'unavailable' };\n\nexport interface SdPersistenceStorageAdapter {\n  /** Optional tri-state read. Legacy adapters may continue to implement only `getItem`. */\n  readItem?(area: SdPersistenceStorageArea, key: string): SdPersistenceStorageRead;\n  getItem(area: SdPersistenceStorageArea, key: string): string | null;\n  setItem(area: SdPersistenceStorageArea, key: string, value: string): boolean;\n  removeItem(area: SdPersistenceStorageArea, key: string): boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SdBrowserStorageAdapter implements SdPersistenceStorageAdapter {\n  readonly #document = inject(DOCUMENT);\n  readonly #platformId = inject(PLATFORM_ID);\n\n  readItem(area: SdPersistenceStorageArea, key: string): SdPersistenceStorageRead {\n    try {\n      const storage = this.#getStorage(area);\n      if (!storage) return { status: 'unavailable' };\n      const value = storage.getItem(key);\n      return value === null ? { status: 'absent' } : { status: 'found', value };\n    } catch {\n      return { status: 'unavailable' };\n    }\n  }\n\n  getItem(area: SdPersistenceStorageArea, key: string): string | null {\n    const result = this.readItem(area, key);\n    return result.status === 'found' ? result.value : null;\n  }\n\n  setItem(area: SdPersistenceStorageArea, key: string, value: string): boolean {\n    try {\n      const storage = this.#getStorage(area);\n      if (!storage) return false;\n      storage.setItem(key, value);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  removeItem(area: SdPersistenceStorageArea, key: string): boolean {\n    try {\n      const storage = this.#getStorage(area);\n      if (!storage) return false;\n      storage.removeItem(key);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  #getStorage(area: SdPersistenceStorageArea): Storage | null {\n    if (!isPlatformBrowser(this.#platformId)) return null;\n    const browserWindow = this.#document.defaultView;\n    if (!browserWindow) return null;\n    return area === 'local' ? browserWindow.localStorage : browserWindow.sessionStorage;\n  }\n}\n\nexport function readSdPersistenceStorageItem(\n  adapter: SdPersistenceStorageAdapter,\n  area: SdPersistenceStorageArea,\n  key: string\n): SdPersistenceStorageRead {\n  try {\n    if (adapter.readItem) return adapter.readItem(area, key);\n    const value = adapter.getItem(area, key);\n    return value === null ? { status: 'absent' } : { status: 'found', value };\n  } catch {\n    return { status: 'unavailable' };\n  }\n}\n\nexport const SD_PERSISTENCE_STORAGE_ADAPTER = new InjectionToken<SdPersistenceStorageAdapter>('sd-persistence.storage-adapter', {\n  factory: () => inject(SdBrowserStorageAdapter),\n});\n","import { SdGraphSerializer } from './graph-serializer';\nimport { SdPersistenceIdentityCanonicalizer } from './persistence.model';\n\nexport interface SdPersistenceKeyField {\n  tag: string;\n  value: string;\n}\n\nexport class SdPersistenceIdentityError extends Error {\n  override readonly name = 'SdPersistenceIdentityError';\n\n  constructor(message: string) {\n    super(message);\n  }\n}\n\nexport function buildSdPersistenceKey(baseKey: string, fields: readonly SdPersistenceKeyField[]): string {\n  const parts = [{ tag: 'base', value: baseKey }, ...fields];\n  return `sdcorejs.persistence-key@1|${parts.map(part => `${encode(part.tag)}${encode(part.value)}`).join('|')}`;\n}\n\nexport class SdGraphIdentityCanonicalizer implements SdPersistenceIdentityCanonicalizer {\n  readonly format = 'sdcorejs.graph-identity@1';\n  readonly #serializer = new SdGraphSerializer();\n\n  canonicalize(value: unknown): string {\n    return this.#serializer.stringify(value);\n  }\n}\n\nexport function canonicalizeSdPersistenceValue(canonicalizer: SdPersistenceIdentityCanonicalizer, value: unknown, label: string): string {\n  try {\n    return canonicalizer.canonicalize(value);\n  } catch (error: unknown) {\n    const detail = error instanceof Error ? error.message : 'unknown serialization error';\n    throw new SdPersistenceIdentityError(`Cannot canonicalize ${label}: ${detail}`);\n  }\n}\n\nfunction encode(value: string): string {\n  return `${value.length}:${value}`;\n}\n\nexport function digestSdPersistenceKey(value: string): string {\n  const bytes = encodeUtf8(value);\n  const bitLength = bytes.length * 8;\n  const paddedLength = Math.ceil((bytes.length + 9) / 64) * 64;\n  const padded = new Uint8Array(paddedLength);\n  padded.set(bytes);\n  padded[bytes.length] = 0x80;\n  const high = Math.floor(bitLength / 0x1_0000_0000);\n  const low = bitLength >>> 0;\n  writeUint32(padded, paddedLength - 8, high);\n  writeUint32(padded, paddedLength - 4, low);\n\n  const hash = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);\n  const schedule = new Uint32Array(64);\n  for (let offset = 0; offset < padded.length; offset += 64) {\n    for (let index = 0; index < 16; index += 1) {\n      const position = offset + index * 4;\n      schedule[index] =\n        ((padded[position] ?? 0) << 24) |\n        ((padded[position + 1] ?? 0) << 16) |\n        ((padded[position + 2] ?? 0) << 8) |\n        (padded[position + 3] ?? 0);\n    }\n    for (let index = 16; index < 64; index += 1) {\n      const previous15 = schedule[index - 15] ?? 0;\n      const previous2 = schedule[index - 2] ?? 0;\n      const sigma0 = rotateRight(previous15, 7) ^ rotateRight(previous15, 18) ^ (previous15 >>> 3);\n      const sigma1 = rotateRight(previous2, 17) ^ rotateRight(previous2, 19) ^ (previous2 >>> 10);\n      schedule[index] = ((schedule[index - 16] ?? 0) + sigma0 + (schedule[index - 7] ?? 0) + sigma1) >>> 0;\n    }\n\n    let a = hash[0] ?? 0;\n    let b = hash[1] ?? 0;\n    let c = hash[2] ?? 0;\n    let d = hash[3] ?? 0;\n    let e = hash[4] ?? 0;\n    let f = hash[5] ?? 0;\n    let g = hash[6] ?? 0;\n    let h = hash[7] ?? 0;\n    for (let index = 0; index < 64; index += 1) {\n      const sum1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);\n      const choice = (e & f) ^ (~e & g);\n      const temp1 = (h + sum1 + choice + SHA256_CONSTANTS[index]! + schedule[index]!) >>> 0;\n      const sum0 = rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22);\n      const majority = (a & b) ^ (a & c) ^ (b & c);\n      const temp2 = (sum0 + majority) >>> 0;\n      h = g;\n      g = f;\n      f = e;\n      e = (d + temp1) >>> 0;\n      d = c;\n      c = b;\n      b = a;\n      a = (temp1 + temp2) >>> 0;\n    }\n    hash[0] = (hash[0]! + a) >>> 0;\n    hash[1] = (hash[1]! + b) >>> 0;\n    hash[2] = (hash[2]! + c) >>> 0;\n    hash[3] = (hash[3]! + d) >>> 0;\n    hash[4] = (hash[4]! + e) >>> 0;\n    hash[5] = (hash[5]! + f) >>> 0;\n    hash[6] = (hash[6]! + g) >>> 0;\n    hash[7] = (hash[7]! + h) >>> 0;\n  }\n\n  return Array.from(hash, word => word.toString(16).padStart(8, '0')).join('');\n}\n\nconst SHA256_CONSTANTS = new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be,\n  0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa,\n  0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85,\n  0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n  0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nfunction encodeUtf8(value: string): Uint8Array {\n  const bytes: number[] = [];\n  for (let index = 0; index < value.length; index += 1) {\n    const first = value.charCodeAt(index);\n    let codePoint = first;\n    if (first >= 0xd800 && first <= 0xdbff && index + 1 < value.length) {\n      const second = value.charCodeAt(index + 1);\n      if (second >= 0xdc00 && second <= 0xdfff) {\n        codePoint = 0x10000 + ((first - 0xd800) << 10) + (second - 0xdc00);\n        index += 1;\n      }\n    }\n    if (codePoint <= 0x7f) bytes.push(codePoint);\n    else if (codePoint <= 0x7ff) bytes.push(0xc0 | (codePoint >>> 6), 0x80 | (codePoint & 0x3f));\n    else if (codePoint <= 0xffff) {\n      bytes.push(0xe0 | (codePoint >>> 12), 0x80 | ((codePoint >>> 6) & 0x3f), 0x80 | (codePoint & 0x3f));\n    } else {\n      bytes.push(\n        0xf0 | (codePoint >>> 18),\n        0x80 | ((codePoint >>> 12) & 0x3f),\n        0x80 | ((codePoint >>> 6) & 0x3f),\n        0x80 | (codePoint & 0x3f)\n      );\n    }\n  }\n  return Uint8Array.from(bytes);\n}\n\nfunction rotateRight(value: number, shift: number): number {\n  return (value >>> shift) | (value << (32 - shift));\n}\n\nfunction writeUint32(target: Uint8Array, offset: number, value: number): void {\n  target[offset] = (value >>> 24) & 0xff;\n  target[offset + 1] = (value >>> 16) & 0xff;\n  target[offset + 2] = (value >>> 8) & 0xff;\n  target[offset + 3] = value & 0xff;\n}\n","import { SdPersistenceError } from './graph-serializer';\n\nexport const SD_PERSISTENCE_ENVELOPE_FORMAT = 'sdcorejs.persistence-envelope';\nexport const SD_PERSISTENCE_ENVELOPE_VERSION = 1;\n\nexport interface SdPersistenceEnvelopeLimits {\n  maxDocumentCharacters: number;\n  maxPayloadCharacters: number;\n  maxSerializerCharacters: number;\n  maxIdentityCharacters: number;\n}\n\nexport const SD_PERSISTENCE_ENVELOPE_HARD_LIMITS: Readonly<SdPersistenceEnvelopeLimits> = Object.freeze({\n  maxDocumentCharacters: 24_020_000,\n  maxPayloadCharacters: 4_000_000,\n  maxSerializerCharacters: 1_024,\n  maxIdentityCharacters: 1_024,\n});\n\nexport interface SdPersistenceValueEnvelope {\n  format: typeof SD_PERSISTENCE_ENVELOPE_FORMAT;\n  version: typeof SD_PERSISTENCE_ENVELOPE_VERSION;\n  kind: 'value';\n  identity: string;\n  serializer: string;\n  payload: string;\n}\n\nexport interface SdPersistenceTombstoneEnvelope {\n  format: typeof SD_PERSISTENCE_ENVELOPE_FORMAT;\n  version: typeof SD_PERSISTENCE_ENVELOPE_VERSION;\n  kind: 'tombstone';\n  identity: string;\n  serializer: string;\n}\n\nexport type SdPersistenceEnvelope = SdPersistenceValueEnvelope | SdPersistenceTombstoneEnvelope;\n\nexport function stringifySdPersistenceValueEnvelope(\n  identity: string,\n  serializer: string,\n  payload: string,\n  limits?: Partial<SdPersistenceEnvelopeLimits>\n): string {\n  const resolved = resolveLimits(limits);\n  ensureFieldLimits(identity, serializer, payload, resolved);\n  const envelope: SdPersistenceValueEnvelope = {\n    format: SD_PERSISTENCE_ENVELOPE_FORMAT,\n    version: SD_PERSISTENCE_ENVELOPE_VERSION,\n    kind: 'value',\n    identity,\n    serializer,\n    payload,\n  };\n  const serialized = JSON.stringify(envelope);\n  ensureDocumentLimit(serialized, resolved);\n  return serialized;\n}\n\nexport function stringifySdPersistenceTombstoneEnvelope(\n  identity: string,\n  serializer: string,\n  limits?: Partial<SdPersistenceEnvelopeLimits>\n): string {\n  const resolved = resolveLimits(limits);\n  ensureFieldLimits(identity, serializer, undefined, resolved);\n  const envelope: SdPersistenceTombstoneEnvelope = {\n    format: SD_PERSISTENCE_ENVELOPE_FORMAT,\n    version: SD_PERSISTENCE_ENVELOPE_VERSION,\n    kind: 'tombstone',\n    identity,\n    serializer,\n  };\n  const serialized = JSON.stringify(envelope);\n  ensureDocumentLimit(serialized, resolved);\n  return serialized;\n}\n\nexport function parseSdPersistenceEnvelope(\n  serialized: string,\n  expectedIdentity: string,\n  expectedSerializer: string,\n  limits?: Partial<SdPersistenceEnvelopeLimits>\n): SdPersistenceEnvelope | undefined {\n  const resolved = resolveLimits(limits);\n  ensureFieldLimits(expectedIdentity, expectedSerializer, undefined, resolved);\n  ensureDocumentLimit(serialized, resolved);\n  let value: unknown;\n  try {\n    value = JSON.parse(serialized) as unknown;\n  } catch {\n    return undefined;\n  }\n  if (!isRecord(value)) return undefined;\n  if (typeof value['identity'] === 'string' && value['identity'].length > resolved.maxIdentityCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope identity character limit exceeded');\n  }\n  if (typeof value['serializer'] === 'string' && value['serializer'].length > resolved.maxSerializerCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope serializer character limit exceeded');\n  }\n  if (typeof value['payload'] === 'string' && value['payload'].length > resolved.maxPayloadCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope payload character limit exceeded');\n  }\n  if (\n    value['format'] !== SD_PERSISTENCE_ENVELOPE_FORMAT ||\n    value['version'] !== SD_PERSISTENCE_ENVELOPE_VERSION ||\n    value['identity'] !== expectedIdentity ||\n    value['serializer'] !== expectedSerializer\n  ) {\n    return undefined;\n  }\n  if (value['kind'] === 'tombstone' && hasExactKeys(value, ['format', 'version', 'kind', 'identity', 'serializer'])) {\n    return {\n      format: SD_PERSISTENCE_ENVELOPE_FORMAT,\n      version: SD_PERSISTENCE_ENVELOPE_VERSION,\n      kind: 'tombstone',\n      identity: expectedIdentity,\n      serializer: expectedSerializer,\n    };\n  }\n  if (\n    value['kind'] === 'value' &&\n    typeof value['payload'] === 'string' &&\n    hasExactKeys(value, ['format', 'version', 'kind', 'identity', 'serializer', 'payload'])\n  ) {\n    return {\n      format: SD_PERSISTENCE_ENVELOPE_FORMAT,\n      version: SD_PERSISTENCE_ENVELOPE_VERSION,\n      kind: 'value',\n      identity: expectedIdentity,\n      serializer: expectedSerializer,\n      payload: value['payload'],\n    };\n  }\n  return undefined;\n}\n\nfunction resolveLimits(limits: Partial<SdPersistenceEnvelopeLimits> | undefined): Readonly<SdPersistenceEnvelopeLimits> {\n  const resolved = { ...SD_PERSISTENCE_ENVELOPE_HARD_LIMITS, ...limits };\n  for (const key of Object.keys(SD_PERSISTENCE_ENVELOPE_HARD_LIMITS) as (keyof SdPersistenceEnvelopeLimits)[]) {\n    const value = resolved[key];\n    if (!Number.isSafeInteger(value) || value < 1 || value > SD_PERSISTENCE_ENVELOPE_HARD_LIMITS[key]) {\n      throw new SdPersistenceError('LIMIT_EXCEEDED', `Invalid persistence envelope ${key} limit`);\n    }\n  }\n  return resolved;\n}\n\nfunction ensureFieldLimits(\n  identity: string,\n  serializer: string,\n  payload: string | undefined,\n  limits: Readonly<SdPersistenceEnvelopeLimits>\n): void {\n  if (identity.length > limits.maxIdentityCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope identity character limit exceeded');\n  }\n  if (serializer.length > limits.maxSerializerCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope serializer character limit exceeded');\n  }\n  if (payload !== undefined && payload.length > limits.maxPayloadCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope payload character limit exceeded');\n  }\n}\n\nfunction ensureDocumentLimit(serialized: string, limits: Readonly<SdPersistenceEnvelopeLimits>): void {\n  if (serialized.length > limits.maxDocumentCharacters) {\n    throw new SdPersistenceError('LIMIT_EXCEEDED', 'Persistence envelope document character limit exceeded');\n  }\n}\n\nfunction hasExactKeys(value: Record<string, unknown>, expected: readonly string[]): boolean {\n  const keys = Object.keys(value);\n  return keys.length === expected.length && expected.every(key => Object.prototype.hasOwnProperty.call(value, key));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}