{"version":3,"file":"sdcorejs-angular-components-audit-diff.mjs","sources":["../../../projects/sdcorejs-angular/components/audit-diff/src/audit-diff.engine.ts","../../../projects/sdcorejs-angular/components/audit-diff/src/audit-diff.component.ts","../../../projects/sdcorejs-angular/components/audit-diff/src/audit-diff.component.html","../../../projects/sdcorejs-angular/components/audit-diff/sdcorejs-angular-components-audit-diff.ts"],"sourcesContent":["export type SdAuditDiffKind = 'added' | 'removed' | 'changed' | 'unchanged';\nexport type SdAuditDiffSide = 'before' | 'after';\nexport type SdAuditDiffArrayKey = string | ((item: unknown) => unknown);\n\nexport interface SdAuditDiffFormatContext {\n  readonly path: string;\n  readonly configPath: string;\n  readonly side: SdAuditDiffSide;\n  readonly kind: SdAuditDiffKind;\n  readonly before: unknown;\n  readonly after: unknown;\n}\n\nexport interface SdAuditDiffField {\n  readonly path: string;\n  readonly label?: string;\n  readonly order?: number;\n  readonly hidden?: boolean;\n  readonly redacted?: boolean;\n  readonly arrayKey?: SdAuditDiffArrayKey;\n  readonly enumMap?: Readonly<Record<string, unknown>>;\n  readonly format?: (value: unknown, context: SdAuditDiffFormatContext) => unknown;\n}\n\nexport interface SdAuditDiffOptions {\n  readonly fields?: readonly SdAuditDiffField[];\n  readonly includeUnchanged?: boolean;\n  readonly redactedValue?: unknown;\n  readonly rootLabel?: string;\n}\n\nexport interface SdAuditDiffRow {\n  readonly id: string;\n  readonly path: string;\n  readonly configPath: string;\n  readonly label: string;\n  readonly kind: SdAuditDiffKind;\n  readonly before: unknown;\n  readonly after: unknown;\n  readonly beforePresent: boolean;\n  readonly afterPresent: boolean;\n  readonly redacted: boolean;\n}\n\ninterface WalkContext {\n  readonly options: SdAuditDiffOptions;\n  readonly fields: readonly SdAuditDiffField[];\n  readonly rows: SdAuditDiffRow[];\n  readonly activeBefore: WeakSet<object>;\n  readonly activeAfter: WeakSet<object>;\n}\n\ninterface StableArrayItem {\n  readonly key: unknown;\n  readonly value: unknown;\n}\n\nconst DEFAULT_REDACTED_VALUE = '••••••';\n\nexport function sdBuildAuditDiff(before: unknown, after: unknown, options: SdAuditDiffOptions = {}): SdAuditDiffRow[] {\n  const context: WalkContext = {\n    options,\n    fields: options.fields ?? [],\n    rows: [],\n    activeBefore: new WeakSet<object>(),\n    activeAfter: new WeakSet<object>(),\n  };\n  walkValue(context, before, after, true, true, '$', '$');\n  return context.rows.sort((left, right) => compareRows(left, right, context.fields));\n}\n\nfunction walkValue(\n  context: WalkContext,\n  before: unknown,\n  after: unknown,\n  beforePresent: boolean,\n  afterPresent: boolean,\n  path: string,\n  configPath: string\n): void {\n  if (isConfigured(context.fields, configPath, 'hidden')) return;\n  if (isConfigured(context.fields, configPath, 'redacted')) {\n    addAtomicRow(context, before, after, beforePresent, afterPresent, path, configPath, true);\n    return;\n  }\n\n  const field = findExactField(context.fields, configPath);\n  if (field?.format || field?.enumMap) {\n    addAtomicRow(context, before, after, beforePresent, afterPresent, path, configPath, false);\n    return;\n  }\n\n  const beforeArray = Array.isArray(before);\n  const afterArray = Array.isArray(after);\n  if (beforeArray || afterArray) {\n    if ((!beforePresent && afterArray) || (beforeArray && !afterPresent) || (beforeArray && afterArray)) {\n      const arrayKey = field?.arrayKey;\n      if (arrayKey && walkStableArray(context, beforeArray ? before : [], afterArray ? after : [], path, configPath, arrayKey)) return;\n    }\n    addAtomicRow(context, before, after, beforePresent, afterPresent, path, configPath, false);\n    return;\n  }\n\n  const beforeObject = isPlainObject(before);\n  const afterObject = isPlainObject(after);\n  const canRecurse = (beforeObject && afterObject) || (beforeObject && !afterPresent) || (afterObject && !beforePresent);\n  if (canRecurse) {\n    if ((beforeObject && context.activeBefore.has(before)) || (afterObject && context.activeAfter.has(after))) return;\n    if (beforeObject) context.activeBefore.add(before);\n    if (afterObject) context.activeAfter.add(after);\n    const beforeRecord = beforeObject ? before : {};\n    const afterRecord = afterObject ? after : {};\n    const keys = [...new Set([...Object.keys(beforeRecord), ...Object.keys(afterRecord)])].sort(compareText);\n    if (keys.length === 0) {\n      addAtomicRow(context, before, after, beforePresent, afterPresent, path, configPath, false);\n      if (beforeObject) context.activeBefore.delete(before);\n      if (afterObject) context.activeAfter.delete(after);\n      return;\n    }\n    for (const key of keys) {\n      const childBeforePresent = beforeObject && hasOwn(beforeRecord, key);\n      const childAfterPresent = afterObject && hasOwn(afterRecord, key);\n      walkValue(\n        context,\n        childBeforePresent ? beforeRecord[key] : undefined,\n        childAfterPresent ? afterRecord[key] : undefined,\n        childBeforePresent,\n        childAfterPresent,\n        path === '$' ? key : `${path}.${key}`,\n        configPath === '$' ? key : `${configPath}.${key}`\n      );\n    }\n    if (beforeObject) context.activeBefore.delete(before);\n    if (afterObject) context.activeAfter.delete(after);\n    return;\n  }\n\n  addAtomicRow(context, before, after, beforePresent, afterPresent, path, configPath, false);\n}\n\nfunction walkStableArray(\n  context: WalkContext,\n  before: readonly unknown[],\n  after: readonly unknown[],\n  path: string,\n  configPath: string,\n  keySelector: SdAuditDiffArrayKey\n): boolean {\n  const beforeItems = indexStableArray(before, keySelector);\n  const afterItems = indexStableArray(after, keySelector);\n  if (!beforeItems || !afterItems) return false;\n\n  const keys = [...new Set([...beforeItems.keys(), ...afterItems.keys()])].sort(compareText);\n  const keyName = typeof keySelector === 'string' ? keySelector : 'key';\n  for (const key of keys) {\n    const beforeItem = beforeItems.get(key);\n    const afterItem = afterItems.get(key);\n    const itemPath = `${path}[${keyName}=${encodeURIComponent(key)}]`;\n    const itemConfigPath = `${configPath}[]`;\n    if (!beforeItem || !afterItem) {\n      walkValue(context, beforeItem?.value, afterItem?.value, Boolean(beforeItem), Boolean(afterItem), itemPath, itemConfigPath);\n      continue;\n    }\n    walkValue(context, beforeItem.value, afterItem.value, true, true, itemPath, itemConfigPath);\n  }\n  return true;\n}\n\nfunction indexStableArray(items: readonly unknown[], keySelector: SdAuditDiffArrayKey): Map<string, StableArrayItem> | null {\n  const result = new Map<string, StableArrayItem>();\n  for (const item of items) {\n    let key: unknown;\n    try {\n      key = typeof keySelector === 'function' ? keySelector(item) : isObject(item) ? item[keySelector] : undefined;\n    } catch {\n      return null;\n    }\n    const serialized = serializeStableKey(key);\n    if (serialized === null || result.has(serialized)) return null;\n    result.set(serialized, { key, value: item });\n  }\n  return result;\n}\n\nfunction serializeStableKey(key: unknown): string | null {\n  if (key === null) return 'null:null';\n  switch (typeof key) {\n    case 'string':\n    case 'number':\n    case 'bigint':\n    case 'boolean':\n      return `${typeof key}:${String(key)}`;\n    default:\n      return null;\n  }\n}\n\nfunction addAtomicRow(\n  context: WalkContext,\n  before: unknown,\n  after: unknown,\n  beforePresent: boolean,\n  afterPresent: boolean,\n  path: string,\n  configPath: string,\n  redacted: boolean\n): void {\n  const kind = classifyChange(before, after, beforePresent, afterPresent);\n  if (kind === 'unchanged' && !context.options.includeUnchanged) return;\n\n  const field = findExactField(context.fields, configPath);\n  const redactedValue = context.options.redactedValue ?? DEFAULT_REDACTED_VALUE;\n  const normalizedBefore = redacted\n    ? beforePresent\n      ? redactedValue\n      : undefined\n    : normalizeValue(before, beforePresent, 'before', kind, path, configPath, field, after);\n  const normalizedAfter = redacted\n    ? afterPresent\n      ? redactedValue\n      : undefined\n    : normalizeValue(after, afterPresent, 'after', kind, path, configPath, field, before);\n\n  context.rows.push({\n    id: path,\n    path,\n    configPath,\n    label: field?.label ?? (path === '$' ? (context.options.rootLabel ?? 'Value') : path),\n    kind,\n    before: normalizedBefore,\n    after: normalizedAfter,\n    beforePresent,\n    afterPresent,\n    redacted,\n  });\n}\n\nfunction normalizeValue(\n  value: unknown,\n  present: boolean,\n  side: SdAuditDiffSide,\n  kind: SdAuditDiffKind,\n  path: string,\n  configPath: string,\n  field: SdAuditDiffField | undefined,\n  otherValue: unknown\n): unknown {\n  if (!present) return undefined;\n  const mapped = field?.enumMap && hasOwn(field.enumMap, String(value)) ? field.enumMap[String(value)] : value;\n  if (!field?.format) return mapped;\n  try {\n    return field.format(mapped, {\n      path,\n      configPath,\n      side,\n      kind,\n      before: side === 'before' ? value : otherValue,\n      after: side === 'after' ? value : otherValue,\n    });\n  } catch {\n    return mapped;\n  }\n}\n\nfunction classifyChange(before: unknown, after: unknown, beforePresent: boolean, afterPresent: boolean): SdAuditDiffKind {\n  if (!beforePresent && afterPresent) return 'added';\n  if (beforePresent && !afterPresent) return 'removed';\n  return deepEqual(before, after) ? 'unchanged' : 'changed';\n}\n\nfunction deepEqual(left: unknown, right: unknown, seen = new WeakMap<object, WeakSet<object>>()): boolean {\n  if (Object.is(left, right)) return true;\n  if (left instanceof Date && right instanceof Date) return left.getTime() === right.getTime();\n  if (!isObject(left) || !isObject(right)) return false;\n  let rightSet = seen.get(left);\n  if (rightSet?.has(right)) return true;\n  if (!rightSet) {\n    rightSet = new WeakSet<object>();\n    seen.set(left, rightSet);\n  }\n  rightSet.add(right);\n  if (Array.isArray(left) && Array.isArray(right)) {\n    if (left.length !== right.length) return false;\n    return left.every((value, index) => deepEqual(value, right[index], seen));\n  }\n  if (!isPlainObject(left) || !isPlainObject(right)) return false;\n  const leftKeys = Object.keys(left).sort(compareText);\n  const rightKeys = Object.keys(right).sort(compareText);\n  if (leftKeys.length !== rightKeys.length || leftKeys.some((key, index) => key !== rightKeys[index])) return false;\n  return leftKeys.every(key => deepEqual(left[key], right[key], seen));\n}\n\nfunction compareRows(left: SdAuditDiffRow, right: SdAuditDiffRow, fields: readonly SdAuditDiffField[]): number {\n  const leftOrder = explicitOrder(left.configPath, fields);\n  const rightOrder = explicitOrder(right.configPath, fields);\n  if (leftOrder !== rightOrder) return leftOrder - rightOrder;\n  return compareText(left.path, right.path);\n}\n\nfunction explicitOrder(path: string, fields: readonly SdAuditDiffField[]): number {\n  const field = fields\n    .filter(candidate => Number.isFinite(candidate.order) && isPathOrDescendant(path, candidate.path))\n    .sort((left, right) => right.path.length - left.path.length)[0];\n  return field?.order ?? Number.POSITIVE_INFINITY;\n}\n\nfunction findExactField(fields: readonly SdAuditDiffField[], path: string): SdAuditDiffField | undefined {\n  return fields.find(field => field.path === path);\n}\n\nfunction isConfigured(fields: readonly SdAuditDiffField[], path: string, property: 'hidden' | 'redacted'): boolean {\n  return fields.some(field => Boolean(field[property]) && isPathOrDescendant(path, field.path));\n}\n\nfunction isPathOrDescendant(path: string, ancestor: string): boolean {\n  return path === ancestor || path.startsWith(`${ancestor}.`) || path.startsWith(`${ancestor}[]`);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (!isObject(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction hasOwn(object: object, key: PropertyKey): boolean {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction compareText(left: string, right: string): number {\n  return left < right ? -1 : left > right ? 1 : 0;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, inject, input } from '@angular/core';\nimport { I18nService } from '@sdcorejs/angular/i18n';\nimport { SdAuditDiffOptions, SdAuditDiffRow, SdAuditDiffSide, sdBuildAuditDiff } from './audit-diff.engine';\n\nexport type SdAuditDiffMode = 'table' | 'detail-list';\n\nexport interface SdAuditDiffValueTemplateContext {\n  readonly $implicit: unknown;\n  readonly row: SdAuditDiffRow;\n  readonly side: SdAuditDiffSide;\n}\n\n@Directive({\n  selector: 'ng-template[sdAuditDiffValue]',\n  standalone: true,\n})\nexport class SdAuditDiffValueTemplateDirective {\n  readonly template = inject<TemplateRef<SdAuditDiffValueTemplateContext>>(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _directive: SdAuditDiffValueTemplateDirective,\n    _context: unknown\n  ): _context is SdAuditDiffValueTemplateContext {\n    return true;\n  }\n}\n\n@Component({\n  selector: 'sd-audit-diff',\n  standalone: true,\n  imports: [NgTemplateOutlet],\n  templateUrl: './audit-diff.component.html',\n  styleUrl: './audit-diff.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SdAuditDiff {\n  readonly before = input<unknown>(undefined);\n  readonly after = input<unknown>(undefined);\n  readonly options = input<SdAuditDiffOptions>({});\n  readonly mode = input<SdAuditDiffMode>('table');\n  readonly ariaLabel = input<string | undefined>(undefined);\n\n  readonly #i18n = inject(I18nService);\n  readonly rows = computed(() => {\n    const options = this.options();\n    return sdBuildAuditDiff(this.before(), this.after(), {\n      ...options,\n      rootLabel: options.rootLabel ?? this.text('value.label'),\n    });\n  });\n  protected readonly valueTemplate = contentChild(SdAuditDiffValueTemplateDirective);\n\n  protected text(key: string): string {\n    return this.#i18n.t(`core.component.audit-diff.${key}`);\n  }\n\n  protected valueContext(row: SdAuditDiffRow, side: SdAuditDiffSide): SdAuditDiffValueTemplateContext {\n    return { $implicit: row[side], row, side };\n  }\n\n  protected displayValue(row: SdAuditDiffRow, side: SdAuditDiffSide): string {\n    const present = side === 'before' ? row.beforePresent : row.afterPresent;\n    if (!present) return this.text('value.not-set');\n    const value = row[side];\n    if (value === undefined) return this.text('value.undefined');\n    if (value === null) return this.text('value.null');\n    if (value instanceof Date) return value.toISOString();\n    if (typeof value === 'boolean') return this.text(`value.${value ? 'true' : 'false'}`);\n    if (typeof value === 'string') return value;\n    if (typeof value === 'number' || typeof value === 'bigint') return String(value);\n    return safeStringify(value);\n  }\n}\n\nfunction safeStringify(value: unknown): string {\n  const seen = new WeakSet<object>();\n  try {\n    const result = JSON.stringify(value, (_key, current: unknown) => {\n      if (typeof current !== 'object' || current === null) return current;\n      if (seen.has(current)) return '[Circular]';\n      seen.add(current);\n      return current;\n    });\n    return result ?? String(value);\n  } catch {\n    return String(value);\n  }\n}\n","@let currentRows = rows();\n@let customValue = valueTemplate();\n\n@if (currentRows.length === 0) {\n  <p class=\"sd-audit-diff__empty\" data-audit-empty role=\"status\">{{ text('empty') }}</p>\n} @else if (mode() === 'table') {\n  <div class=\"sd-audit-diff__table-scroll\">\n    <table class=\"sd-audit-diff__table\" [attr.aria-label]=\"ariaLabel() || text('label')\">\n      <thead>\n        <tr>\n          <th scope=\"col\">{{ text('field') }}</th>\n          <th scope=\"col\">{{ text('before') }}</th>\n          <th scope=\"col\">{{ text('after') }}</th>\n        </tr>\n      </thead>\n      <tbody>\n        @for (row of currentRows; track row.id) {\n          <tr data-audit-row [attr.data-change-kind]=\"row.kind\">\n            <th scope=\"row\">\n              <span class=\"sd-audit-diff__field\">{{ row.label }}</span>\n              <span class=\"sd-audit-diff__kind\">{{ text('kind.' + row.kind) }}</span>\n            </th>\n            <td data-audit-before>\n              @if (customValue) {\n                <ng-container\n                  [ngTemplateOutlet]=\"customValue.template\"\n                  [ngTemplateOutletContext]=\"valueContext(row, 'before')\"></ng-container>\n              } @else {\n                {{ displayValue(row, 'before') }}\n              }\n            </td>\n            <td data-audit-after>\n              @if (customValue) {\n                <ng-container\n                  [ngTemplateOutlet]=\"customValue.template\"\n                  [ngTemplateOutletContext]=\"valueContext(row, 'after')\"></ng-container>\n              } @else {\n                {{ displayValue(row, 'after') }}\n              }\n            </td>\n          </tr>\n        }\n      </tbody>\n    </table>\n  </div>\n} @else {\n  <dl class=\"sd-audit-diff__details\" [attr.aria-label]=\"ariaLabel() || text('label')\">\n    @for (row of currentRows; track row.id) {\n      <div class=\"sd-audit-diff__detail\" data-audit-row [attr.data-change-kind]=\"row.kind\">\n        <dt>\n          <span class=\"sd-audit-diff__field\">{{ row.label }}</span>\n          <span class=\"sd-audit-diff__kind\">{{ text('kind.' + row.kind) }}</span>\n        </dt>\n        <dd data-audit-before>\n          <span class=\"sd-audit-diff__side-label\">{{ text('before') }}</span>\n          @if (customValue) {\n            <ng-container [ngTemplateOutlet]=\"customValue.template\" [ngTemplateOutletContext]=\"valueContext(row, 'before')\"></ng-container>\n          } @else {\n            <span>{{ displayValue(row, 'before') }}</span>\n          }\n        </dd>\n        <dd data-audit-after>\n          <span class=\"sd-audit-diff__side-label\">{{ text('after') }}</span>\n          @if (customValue) {\n            <ng-container [ngTemplateOutlet]=\"customValue.template\" [ngTemplateOutletContext]=\"valueContext(row, 'after')\"></ng-container>\n          } @else {\n            <span>{{ displayValue(row, 'after') }}</span>\n          }\n        </dd>\n      </div>\n    }\n  </dl>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}