{"version":3,"file":"propAccess-DdLF12Jq.cjs","names":[],"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 { flatClone } from './clone';\nimport type { KeyType, Path, SettablePath, SettableValue, Value } from './path';\nimport type { Constrain } from '@lib/constrain';\nimport { isObject } from '@lib/helpers';\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 ${JSON.stringify(path)} of ${JSON.stringify(object)}`);\n}\n\nexport function set<T, const P>(\n  object: T,\n  path: Constrain<P, SettablePath<T>>,\n  value: SettableValue<T, P>,\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));\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);\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);\n    return copy;\n  }\n\n  throw new Error(`Could not set ${JSON.stringify(path)} of ${JSON.stringify(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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"}