{"version":3,"file":"propAccess-udIdjqwY.cjs","names":["a","b"],"sources":["../src/lib/equals.ts","../src/lib/helpers.ts","../src/lib/clone.ts","../src/lib/propAccess.ts"],"sourcesContent":["export interface EqualityOptions {\n  /** Treat undefined values as absent\n   * @default false\n   */\n  undefinedEqualsAbsent?: boolean;\n}\n\nexport function strictEqual(a: any, b: any): boolean {\n  return a === b;\n}\n\nexport function shallowEqual(a: any, b: any, options?: EqualityOptions): boolean {\n  return internalEqual(a, b, strictEqual, options);\n}\n\nexport function deepEqual(a: any, b: any, options?: EqualityOptions): boolean {\n  return internalEqual(a, b, (a, b) => deepEqual(a, b, options), options);\n}\n\nconst internalEqual = (\n  a: any,\n  b: any,\n  comp: (a: any, b: any) => boolean,\n  { undefinedEqualsAbsent = false }: EqualityOptions = {},\n) => {\n  if (a === b) {\n    return true;\n  }\n\n  if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {\n    // eslint-disable-next-line no-self-compare\n    return a !== a && b !== b;\n  }\n\n  if (a.constructor !== b.constructor) {\n    return false;\n  }\n\n  if (a.constructor === Object || Array.isArray(a)) {\n    let entries1 = Object.entries(a);\n    let entries2 = Object.entries(b);\n\n    if (undefinedEqualsAbsent) {\n      entries1 = entries1.filter(([_, value]) => value !== undefined);\n      entries2 = entries2.filter(([_, value]) => value !== undefined);\n    }\n\n    return (\n      entries1.length === entries2.length &&\n      entries1.every(([key, value]) => key in b && comp(value, b[key]))\n    );\n  }\n\n  if (a instanceof Date) {\n    return a.getTime() === b.getTime();\n  }\n\n  if (a instanceof RegExp) {\n    return a.source === b.source && a.flags === b.flags;\n  }\n\n  if (a instanceof Map) {\n    let entries1 = [...a.entries()];\n    let entries2 = [...b.entries()];\n\n    if (undefinedEqualsAbsent) {\n      entries1 = entries1.filter(([_, value]) => value !== undefined);\n      entries2 = entries2.filter(([_, value]) => value !== undefined);\n    }\n\n    return (\n      entries1.length === entries2.length &&\n      entries1.every(([key, value]) => b.has(key) && comp(value, b.get(key)))\n    );\n  }\n\n  if (a instanceof Set) {\n    return a.size === b.size && [...a.values()].every((value) => b.has(value));\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(a)) {\n    if (a.byteLength !== b.byteLength) {\n      return false;\n    }\n\n    const a_ = new Int8Array(a.buffer);\n    const b_ = new Int8Array(b.buffer);\n    return a_.every((value, i) => value === b_[i]);\n  }\n\n  return false;\n};\n","export function isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (typeof value !== 'object' || value === null) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      Object.getPrototypeOf(prototype) === null) &&\n    !(Symbol.toStringTag in value) &&\n    !(Symbol.iterator in value)\n  );\n}\n","import { isObject } from '@lib/helpers';\n\nexport function flatClone<T>(object: T): T {\n  if (object instanceof Map) {\n    return new Map(object) as any;\n  }\n\n  if (object instanceof Set) {\n    return new Set(object) as any;\n  }\n\n  if (Array.isArray(object)) {\n    return [...object] as any;\n  }\n\n  if (isObject(object)) {\n    return { ...object };\n  }\n\n  return object;\n}\n","import type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\nimport { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\n\nexport function castArrayPath(path: string | KeyType[]): KeyType[] {\n  if (Array.isArray(path)) {\n    return path;\n  }\n\n  if (path === '') {\n    return [];\n  }\n\n  return (path as string).split('.');\n}\n\nexport function get<T, const P>(object: T, path: Constrain<P, Path<T>>): Value<T, P> {\n  const _path = castArrayPath(path as any);\n  const [first, ...rest] = _path;\n\n  if (first === undefined || !object) {\n    return object as Value<T, P>;\n  }\n\n  if (object instanceof Map) {\n    return get(object.get(first), rest);\n  }\n\n  if (object instanceof Set) {\n    return get(Array.from(object)[Number(first)], rest);\n  }\n\n  if (isObject(object)) {\n    return get(object[first as keyof T], rest as any) as Value<T, P>;\n  }\n\n  throw new Error(`Could not get ${path} of ${object}`);\n}\n\nexport function set<T, const P>(\n  object: T,\n  path: Constrain<P, SettablePath<T>>,\n  value: SettableValue<T, P>,\n  rootPath: string | readonly KeyType[] = path,\n): T {\n  const _path = castArrayPath(path as any);\n  const [first, ...rest] = _path;\n\n  if (first === undefined) {\n    return value as T;\n  }\n\n  if (object === undefined) {\n    if (typeof first === 'number' || (typeof first === 'string' && /^\\d+$/.test(first))) {\n      object = [] as T;\n    } else {\n      object = {} as T;\n    }\n  }\n\n  if (object instanceof Map) {\n    const copy = flatClone(object);\n    const child = copy.get(first);\n    copy.set(first, set(child, rest as any, value, rootPath));\n    return copy;\n  }\n\n  if (object instanceof Set) {\n    const copy = [...object];\n    const child = copy[Number(first)];\n    copy[Number(first)] = set(child, rest as any, value, rootPath);\n    return new Set(copy) as any;\n  }\n\n  if (isObject(object)) {\n    const copy = flatClone(object ?? ({} as T));\n    copy[first as keyof T] = set(copy[first as keyof T], rest as any, value as any, rootPath);\n    return copy;\n  }\n\n  throw new Error(`Could not set ${path} of ${object}`);\n}\n\nexport function remove<T, const P>(object: T, path: Constrain<P, Path<T, true>>): T {\n  const _path = castArrayPath(path as any);\n\n  if (_path.length === 0) {\n    return undefined as any;\n  }\n\n  const parentPath = _path.slice(0, -1);\n  const key = _path[_path.length - 1];\n\n  const parent = flatClone(get(object, parentPath as any));\n\n  if (parent instanceof Map) {\n    parent.delete(key);\n  } else if (parent instanceof Set) {\n    const value = Array.from(parent)[Number(key)];\n    parent.delete(value);\n  } else if (Array.isArray(parent)) {\n    parent.splice(Number(key), 1);\n  } else {\n    delete parent[key as keyof typeof parent];\n  }\n\n  return set(object, parentPath as any, parent);\n}\n\nexport function join(a: string, b: string): string {\n  return [a, b].filter(Boolean).join('.');\n}\n"],"mappings":"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"}