{"version":3,"file":"index.cjs","sources":["../../../src/utils.ts","../../../src/copier.ts","../../../src/options.ts","../../../src/index.ts"],"sourcesContent":["export interface Cache {\n  has: (value: any) => boolean;\n  set: (key: any, value: any) => void;\n  get: (key: any) => any;\n}\n\n/**\n * Error thrown when the copier traverses deeper than the configured `maxDepth`.\n *\n * @note\n * Extends `RangeError` for backwards compatibility, since exceeding the maximum depth\n * previously surfaced as a native `RangeError` from stack exhaustion.\n */\nexport class MaxDepthExceededError extends RangeError {\n  readonly maxDepth: number;\n\n  constructor(maxDepth: number) {\n    super(`Maximum copy depth of ${String(maxDepth)} exceeded; the value copied is nested too deeply.`);\n\n    this.maxDepth = maxDepth;\n    this.name = 'MaxDepthExceededError';\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toStringFunction = Function.prototype.toString;\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toStringObject = Object.prototype.toString;\n\n/**\n * Get an empty version of the object with the same prototype it has.\n */\nexport function getCleanClone(prototype: any): any {\n  if (!prototype) {\n    return Object.create(null);\n  }\n\n  const Constructor = prototype.constructor;\n\n  if (Constructor === Object) {\n    return prototype === Object.prototype ? {} : Object.create(prototype as object | null);\n  }\n\n  if (Constructor && ~toStringFunction.call(Constructor).indexOf('[native code]')) {\n    try {\n      return new Constructor();\n    } catch {\n      // Ignore\n    }\n  }\n\n  return Object.create(prototype as object | null);\n}\n\n/**\n * Get the tag of the value passed, so that the correct copier can be used.\n */\nexport function getTag(value: any): string {\n  const stringTag = value[Symbol.toStringTag];\n\n  if (stringTag) {\n    return stringTag;\n  }\n\n  const type = toStringObject.call(value);\n\n  return type.substring(8, type.length - 1);\n}\n","import { getCleanClone } from './utils.js';\nimport type { Cache } from './utils.ts';\n\nexport type InternalCopier<Value> = (value: Value, state: State) => Value;\n\nexport interface State {\n  /**\n   * The constructor of the value currently being copied, derived from its `prototype`.\n   * Used to construct the clone for values that are not plain objects, such as subclasses\n   * of `Array` or custom classes.\n   *\n   * @note\n   * This is `undefined` for primitives and for values already present in the `cache`. It is\n   * also reassigned for every value copied, so it must be read before any recursive\n   * `copier` call is made, not after.\n   */\n  Constructor: any;\n  /**\n   * The cache of values already copied, mapping each original to its clone. Copiers should\n   * populate it with the clone _before_ copying that value's contents, so that circular\n   * references resolve to the clone rather than recursing infinitely.\n   */\n  cache: Cache;\n  /**\n   * The copier used for nested values. Call it as `state.copier(value, state)` to deeply\n   * copy the contents of the value being copied.\n   */\n  copier: InternalCopier<any>;\n  /**\n   * The number of nested objects currently being copied, used to bound traversal of\n   * deeply-nested values before the call stack is exhausted.\n   *\n   * @note\n   * This is maintained by the copier itself; custom methods should not modify it.\n   */\n  depth: number;\n  /**\n   * The prototype of the value currently being copied, used to create a clone that\n   * maintains the original's prototype chain.\n   *\n   * @note\n   * This is `undefined` for primitives and for values already present in the `cache`. It is\n   * also reassigned for every value copied, so it must be read before any recursive\n   * `copier` call is made, not after.\n   */\n  prototype: any;\n}\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { propertyIsEnumerable } = Object.prototype;\n\n/**\n * The shared `%TypedArray%.prototype.slice`, which every typed array inherits.\n *\n * @note\n * This is used instead of the `slice` found on the value itself because subclasses can\n * override it with one that does not copy. `Buffer` is the notable case: its `slice`\n * returns a view over the same memory, so copying through it would alias the original.\n */\nconst sliceTypedArray = Object.getPrototypeOf(Int8Array.prototype).slice as (\n  this: ArrayBufferView,\n  start: number,\n) => ArrayBufferView;\n\nfunction copyOwnDescriptor<Value extends object>(\n  original: Value,\n  clone: Value,\n  property: string | symbol,\n  state: State,\n): void {\n  const ownDescriptor = Object.getOwnPropertyDescriptor(original, property) || {\n    configurable: true,\n    enumerable: true,\n    value: original[property as keyof Value],\n    writable: true,\n  };\n  const descriptor =\n    ownDescriptor.get || ownDescriptor.set\n      ? ownDescriptor\n      : {\n          configurable: ownDescriptor.configurable,\n          enumerable: ownDescriptor.enumerable,\n          value: state.copier(ownDescriptor.value, state),\n          writable: ownDescriptor.writable,\n        };\n\n  try {\n    Object.defineProperty(clone, property, descriptor);\n  } catch {\n    // The above can fail on node in extreme edge cases, so fall back to the loose assignment.\n    clone[property as keyof Value] = descriptor.get ? descriptor.get() : descriptor.value;\n  }\n}\n\n/**\n * Strictly copy all properties contained on the object.\n */\nfunction copyOwnPropertiesStrict<Value extends object>(value: Value, clone: Value, state: State): Value {\n  for (const name of Object.getOwnPropertyNames(value)) {\n    copyOwnDescriptor(value, clone, name, state);\n  }\n\n  for (const symbol of Object.getOwnPropertySymbols(value)) {\n    copyOwnDescriptor(value, clone, symbol, state);\n  }\n\n  return clone;\n}\n\n/**\n * Deeply copy the indexed values in the array.\n */\nexport function copyArrayLoose(array: any[], state: State) {\n  const clone = new state.Constructor();\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(array, clone);\n\n  for (let index = 0; index < array.length; ++index) {\n    clone[index] = state.copier(array[index], state);\n  }\n\n  return clone;\n}\n\n/**\n * Deeply copy the indexed values in the array, as well as any custom properties.\n */\nexport function copyArrayStrict<Value extends any[]>(array: Value, state: State) {\n  const clone = new state.Constructor() as Value;\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(array, clone);\n\n  return copyOwnPropertiesStrict(array, clone, state);\n}\n\n/**\n * Copy the contents of the ArrayBuffer, or of the typed array viewing one.\n */\nexport function copyArrayBuffer<Value extends ArrayBufferLike | ArrayBufferView>(\n  arrayBuffer: Value,\n  _state: State,\n): Value {\n  return ArrayBuffer.isView(arrayBuffer)\n    ? (sliceTypedArray.call(arrayBuffer, 0) as Value)\n    : (arrayBuffer.slice(0) as Value);\n}\n\n/**\n * Create a new Blob with the contents of the original.\n */\nexport function copyBlob<Value extends Blob>(blob: Value, _state: State): Value {\n  return blob.slice(0, blob.size, blob.type) as Value;\n}\n\n/**\n * Create a new DataView with the contents of the original.\n */\nexport function copyDataView<Value extends DataView>(dataView: Value, state: State): Value {\n  return new state.Constructor(copyArrayBuffer(dataView.buffer, state));\n}\n\n/**\n * Create a new Date based on the time of the original.\n */\nexport function copyDate<Value extends Date>(date: Value, state: State): Value {\n  return new state.Constructor(date.getTime());\n}\n\n/**\n * Deeply copy the keys and values of the original.\n */\nexport function copyMapLoose<Value extends Map<any, any>>(map: Value, state: State): Value {\n  const clone = new state.Constructor() as Value;\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(map, clone);\n\n  for (const [key, value] of map) {\n    clone.set(key, state.copier(value, state));\n  }\n\n  return clone;\n}\n\n/**\n * Deeply copy the keys and values of the original, as well as any custom properties.\n */\nexport function copyMapStrict<Value extends Map<any, any>>(map: Value, state: State) {\n  return copyOwnPropertiesStrict(map, copyMapLoose(map, state), state);\n}\n\n/**\n * Deeply copy the properties (keys and symbols) and values of the original.\n */\nexport function copyObjectLoose<Value extends Record<string, any>>(object: Value, state: State): Value {\n  const clone = getCleanClone(state.prototype);\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(object, clone);\n\n  for (const key of Object.keys(object)) {\n    clone[key] = state.copier(object[key], state);\n  }\n\n  for (const symbol of Object.getOwnPropertySymbols(object)) {\n    if (propertyIsEnumerable.call(object, symbol)) {\n      clone[symbol] = state.copier((object as any)[symbol], state);\n    }\n  }\n\n  return clone;\n}\n\n/**\n * Deeply copy the properties (keys and symbols) and values of the original, as well\n * as any hidden or non-enumerable properties.\n */\nexport function copyObjectStrict<Value extends Record<string, any>>(object: Value, state: State): Value {\n  const clone = getCleanClone(state.prototype);\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(object, clone);\n\n  return copyOwnPropertiesStrict(object, clone, state);\n}\n\n/**\n * Create a new primitive wrapper from the value of the original.\n */\nexport function copyPrimitiveWrapper<\n  // Specifically use the object constructor types\n  // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\n  Value extends Boolean | Number | String,\n>(primitiveObject: Value, state: State): Value {\n  return new state.Constructor(primitiveObject.valueOf());\n}\n\n/**\n * Create a new RegExp based on the value and flags of the original.\n */\nexport function copyRegExp<Value extends RegExp>(regExp: Value, state: State): Value {\n  const clone = new state.Constructor(regExp.source, regExp.flags) as Value;\n\n  clone.lastIndex = regExp.lastIndex;\n\n  return clone;\n}\n\n/**\n * Return the original value (an identity function).\n *\n * @note\n * THis is used for objects that cannot be copied, such as WeakMap.\n */\nexport function copySelf<Value>(value: Value, _state: State): Value {\n  return value;\n}\n\n/**\n * Deeply copy the values of the original.\n */\nexport function copySetLoose<Value extends Set<any>>(set: Value, state: State): Value {\n  const clone = new state.Constructor() as Value;\n\n  // set in the cache immediately to be able to reuse the object recursively\n  state.cache.set(set, clone);\n\n  for (const value of set) {\n    clone.add(state.copier(value, state));\n  }\n\n  return clone;\n}\n\n/**\n * Deeply copy the values of the original, as well as any custom properties.\n */\nexport function copySetStrict<Value extends Set<any>>(set: Value, state: State): Value {\n  return copyOwnPropertiesStrict(set, copySetLoose(set, state), state);\n}\n","import {\n  copyArrayBuffer,\n  copyArrayLoose,\n  copyArrayStrict,\n  copyBlob,\n  copyDataView,\n  copyDate,\n  copyMapLoose,\n  copyMapStrict,\n  copyObjectLoose,\n  copyObjectStrict,\n  copyPrimitiveWrapper,\n  copyRegExp,\n  copySelf,\n  copySetLoose,\n  copySetStrict,\n} from './copier.js';\nimport type { InternalCopier } from './copier.ts';\nimport type { Cache } from './utils.ts';\n\nexport interface CopierMethods {\n  array?: InternalCopier<any[]>;\n  arrayBuffer?: InternalCopier<ArrayBuffer>;\n  asyncGenerator?: InternalCopier<AsyncGenerator>;\n  blob?: InternalCopier<Blob>;\n  dataView?: InternalCopier<DataView>;\n  date?: InternalCopier<Date>;\n  error?: InternalCopier<Error>;\n  generator?: InternalCopier<Generator>;\n  map?: InternalCopier<Map<any, any>>;\n  object?: InternalCopier<Record<string, any>>;\n  regExp?: InternalCopier<RegExp>;\n  set?: InternalCopier<Set<any>>;\n}\n\ninterface Copiers {\n  [key: string]: InternalCopier<any> | undefined;\n\n  Arguments: InternalCopier<Record<string, any>>;\n  Array: InternalCopier<any[]>;\n  ArrayBuffer: InternalCopier<ArrayBuffer>;\n  AsyncGenerator: InternalCopier<AsyncGenerator>;\n  BigInt64Array: InternalCopier<ArrayBuffer>;\n  BigUint64Array: InternalCopier<ArrayBuffer>;\n  Blob: InternalCopier<Blob>;\n  // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\n  Boolean: InternalCopier<Boolean>;\n  DataView: InternalCopier<DataView>;\n  Date: InternalCopier<Date>;\n  Error: InternalCopier<Error>;\n  Float32Array: InternalCopier<ArrayBuffer>;\n  Float64Array: InternalCopier<ArrayBuffer>;\n  Generator: InternalCopier<Generator>;\n  Int8Array: InternalCopier<ArrayBuffer>;\n  Int16Array: InternalCopier<ArrayBuffer>;\n  Int32Array: InternalCopier<ArrayBuffer>;\n  Map: InternalCopier<Map<any, any>>;\n  // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\n  Number: InternalCopier<Number>;\n  Object: InternalCopier<Record<string, any>>;\n  Promise: InternalCopier<Promise<any>>;\n  RegExp: InternalCopier<RegExp>;\n  Set: InternalCopier<Set<any>>;\n  // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types\n  String: InternalCopier<String>;\n  WeakMap: InternalCopier<WeakMap<any, any>>;\n  WeakSet: InternalCopier<WeakSet<any>>;\n  Uint8Array: InternalCopier<ArrayBuffer>;\n  Uint8ClampedArray: InternalCopier<ArrayBuffer>;\n  Uint16Array: InternalCopier<ArrayBuffer>;\n  Uint32Array: InternalCopier<ArrayBuffer>;\n}\n\nexport interface CreateCopierOptions {\n  /**\n   * Creates the cache used to track values already copied, which is what allows circular\n   * references to resolve to their clone instead of recursing infinitely. A new cache is\n   * created for each top-level copy. Since it only needs to satisfy the `has` / `get` /\n   * `set` contract, a bounded implementation such as an LRU cache can be used to trade\n   * circular reference handling for a smaller memory footprint.\n   *\n   * @default () => new WeakMap()\n   */\n  createCache?: () => Cache;\n  /**\n   * The maximum number of nested objects to traverse before throwing a\n   * `MaxDepthExceededError`. Pass `Infinity` to traverse without a limit.\n   *\n   * @default 1000\n   */\n  maxDepth?: number;\n  /**\n   * Overrides of the copiers used for specific object types, allowing custom copy\n   * semantics for those types. Any type not overridden uses its default copier. Each\n   * method receives the value to copy and the current `State`, and is responsible for\n   * populating `state.cache` and recursing via `state.copier` if it wants circular\n   * reference handling and deep copies respectively.\n   */\n  methods?: CopierMethods;\n  /**\n   * Copies all own properties with their original property descriptors, including\n   * non-enumerable properties, symbols, and non-index properties on arrays.\n   *\n   * @note\n   * This is significantly slower than the default \"loose\" copy, so it should only be used\n   * when the exact shape of the original must be replicated.\n   *\n   * @default false\n   */\n  strict?: boolean;\n}\n\nexport interface RequiredCreateCopierOptions extends Omit<Required<CreateCopierOptions>, 'methods'> {\n  copiers: Copiers;\n  methods: Required<CopierMethods>;\n}\n\n/**\n * The maximum depth traversed when none is provided.\n *\n * @note\n * This is deliberately below the depth at which the native call stack is exhausted\n * (~1875 for strict copies in node), so that untrusted, deeply-nested values fail with a\n * catchable, descriptive error instead of a raw `RangeError`.\n */\nexport const DEFAULT_MAX_DEPTH = 1000;\n\nexport function createDefaultCache(): Cache {\n  return new WeakMap();\n}\n\nexport function getOptions({\n  createCache: createCacheOverride,\n  maxDepth,\n  methods: methodsOverride,\n  strict,\n}: CreateCopierOptions): RequiredCreateCopierOptions {\n  const defaultMethods = {\n    array: strict ? copyArrayStrict : copyArrayLoose,\n    arrayBuffer: copyArrayBuffer,\n    asyncGenerator: copySelf,\n    blob: copyBlob,\n    dataView: copyDataView,\n    date: copyDate,\n    error: copySelf,\n    generator: copySelf,\n    map: strict ? copyMapStrict : copyMapLoose,\n    object: strict ? copyObjectStrict : copyObjectLoose,\n    regExp: copyRegExp,\n    set: strict ? copySetStrict : copySetLoose,\n  };\n\n  const methods = methodsOverride ? Object.assign(defaultMethods, methodsOverride) : defaultMethods;\n  const copiers = getTagSpecificCopiers(methods);\n  const createCache = createCacheOverride || createDefaultCache;\n\n  // Extra safety check to ensure that object and array copiers are always provided,\n  // avoiding runtime errors.\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  if (!copiers.Object || !copiers.Array) {\n    throw new Error('An object and array copier must be provided.');\n  }\n\n  return {\n    createCache,\n    copiers,\n    maxDepth: maxDepth == null ? DEFAULT_MAX_DEPTH : maxDepth,\n    methods,\n    strict: Boolean(strict),\n  };\n}\n\n/**\n * Get the copiers used for each specific object tag.\n */\nexport function getTagSpecificCopiers(methods: Required<CopierMethods>): Copiers {\n  // A `null` prototype is used so that a value carrying a custom `Symbol.toStringTag`\n  // cannot resolve to an inherited `Object.prototype` member as its copier. Without it,\n  // a tag such as `toString` or `valueOf` finds a function on the prototype chain and\n  // that function is invoked in place of a real copier.\n  return Object.assign(Object.create(null) as Copiers, {\n    Arguments: methods.object,\n    Array: methods.array,\n    ArrayBuffer: methods.arrayBuffer,\n    AsyncGenerator: methods.asyncGenerator,\n    BigInt64Array: methods.arrayBuffer,\n    BigUint64Array: methods.arrayBuffer,\n    Blob: methods.blob,\n    Boolean: copyPrimitiveWrapper,\n    DataView: methods.dataView,\n    Date: methods.date,\n    Error: methods.error,\n    Float32Array: methods.arrayBuffer,\n    Float64Array: methods.arrayBuffer,\n    Generator: methods.generator,\n    Int8Array: methods.arrayBuffer,\n    Int16Array: methods.arrayBuffer,\n    Int32Array: methods.arrayBuffer,\n    Map: methods.map,\n    Number: copyPrimitiveWrapper,\n    Object: methods.object,\n    Promise: copySelf,\n    RegExp: methods.regExp,\n    Set: methods.set,\n    String: copyPrimitiveWrapper,\n    WeakMap: copySelf,\n    WeakSet: copySelf,\n    Uint8Array: methods.arrayBuffer,\n    Uint8ClampedArray: methods.arrayBuffer,\n    Uint16Array: methods.arrayBuffer,\n    Uint32Array: methods.arrayBuffer,\n  });\n}\n","import type { State } from './copier.ts';\nimport { getOptions } from './options.js';\nimport type { CreateCopierOptions } from './options.ts';\nimport { getTag, MaxDepthExceededError } from './utils.js';\n\nexport type { State } from './copier.ts';\nexport type { CreateCopierOptions } from './options.ts';\nexport { MaxDepthExceededError } from './utils.js';\n\n/**\n * Create a custom copier based on custom options for any of the following:\n *   - `createCache` method to create a cache for copied objects\n *   - custom copier `methods` for specific object types\n *   - `strict` mode to copy all properties with their descriptors\n */\nexport function createCopier(options: CreateCopierOptions = {}) {\n  const { createCache, copiers, maxDepth } = getOptions(options);\n  const { Array: copyArray, Object: copyObject } = copiers;\n\n  function copier(value: any, state: State): any {\n    state.prototype = state.Constructor = undefined;\n\n    if (!value || typeof value !== 'object') {\n      return value;\n    }\n\n    if (state.cache.has(value)) {\n      return state.cache.get(value);\n    }\n\n    // Bound the traversal of nested objects, so that values nested more deeply than the\n    // call stack can handle fail with a descriptive error instead of a raw `RangeError`.\n    if (++state.depth > maxDepth) {\n      throw new MaxDepthExceededError(maxDepth);\n    }\n\n    state.prototype = Object.getPrototypeOf(value);\n    // Using logical AND for speed, since optional chaining transforms to\n    // a local variable usage.\n    // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n    state.Constructor = state.prototype && state.prototype.constructor;\n\n    let clone: any;\n\n    // plain objects\n    if (!state.Constructor || state.Constructor === Object) {\n      clone = copyObject(value as Record<string, any>, state);\n    } else if (Array.isArray(value)) {\n      // arrays\n      clone = copyArray(value, state);\n    } else {\n      const tagSpecificCopier = copiers[getTag(value)];\n\n      if (tagSpecificCopier) {\n        clone = tagSpecificCopier(value, state);\n      } else {\n        clone = typeof value.then === 'function' ? value : copyObject(value as Record<string, any>, state);\n      }\n    }\n\n    --state.depth;\n\n    return clone;\n  }\n\n  return function copy<Value>(value: Value): Value {\n    return copier(value, {\n      Constructor: undefined,\n      cache: createCache(),\n      copier,\n      depth: 0,\n      prototype: undefined,\n    });\n  };\n}\n\n/**\n * Copy an value deeply as much as possible, where strict recreation of object properties\n * are maintained. All properties (including non-enumerable ones) are copied with their\n * original property descriptors on both objects and arrays.\n */\nexport const copyStrict = createCopier({ strict: true });\n\n/**\n * Copy an value deeply as much as possible.\n */\nexport const copy = createCopier();\n"],"names":[],"mappings":"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"}